2.4.25pre6 and qlogic pcmcia driver
Subsystems (3)
A message that is not in the archive (sent off-list or not yet received): [email protected]
Same here, 2.4.24 does not show this behaviour.
I can't find the guilty modification in 2.4.25-pre.
Quoted 23 lines · Arkadiusz Miskiewicz
Hi,
I was compiling 2.4.25pre6 (_but_ with bunch of different patches) with almost everything modular and got this:
ake[1]: Wej?cie do katalogu `/home/users/misiek/rpm/BUILD/linux-2.4.24/drivers/scsi/pcmcia'
gcc -D__KERNEL__ -I/home/users/misiek/rpm/BUILD/linux-2.4.24/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=athlon -DMODULE -nostdinc -iwithprefix include -DKBUILD_BASENAME=qlogic_stub -c -o qlogic_stub.oqlogic_stub.cgcc -D__KERNEL__ -I/home/users/misiek/rpm/BUILD/linux-2.4.24/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=athlon -DMODULE -nostdinc -iwithprefix include -DKBUILD_BASENAME=qlogicfas -DPCMCIA -D__NO_VERSION__ -c -o qlogicfas.o../qlogicfas.c../qlogicfas.c: In function `qlogicfas_detect':../qlogicfas.c:650: warning: passing arg 1 of `scsi_unregister' from incompatible pointer type
ld -melf_i386-r -o qlogic_cs.o qlogic_stub.o qlogicfas.oqlogicfas.o(.text+0xe50): In function `init_module':
: multiple definition of `init_module'qlogic_stub.o(.text+0x860): first defined here
ld: Warning: size of symbol `init_module' changed from 86 in qlogic_stub.o to 75 in qlogicfas.oqlogicfas.o(.text+0xea0): In function `cleanup_module':
: multiple definition of `cleanup_module'qlogic_stub.o(.text+0x8c0): first defined here
ld: Warning: size of symbol `cleanup_module' changed from 47 in qlogic_stub.o to 27 in qlogicfas.o
make[1]: *** [qlogic_cs.o] B??d 1
qlogic_csmodule is going to be build usingdrivers/scsi/pcmcia/qlogic_stub.canddrivers/scsi/qlogicfas.c.
On Tue, 20 Jan 2004 14:01:54 -0200 (BRST) Marcelo Tosatti <[email protected]> wrote:
| | | Same here, 2.4.24 does not show this behaviour. | | I can't find the guilty modification in 2.4.25-pre.
Same problem with aha152x pcmcia being built as a module.
I also don't see any changes that would be causing this...
It's clear that this problem should be detected, since scsi/qlogicfas.c and scsi/pcmcia/qlogic_stub.c both #include <linux/init.h>, so both of them define the module init and cleanup functions. I don't see how this worked in the past, unless it was due to some tools that missed detecting the duplicated functions.
| On Sun, 18 Jan 2004, Arkadiusz Miskiewicz wrote: | | > Hi, | > | > I was compiling 2.4.25pre6 (_but_ with bunch of different patches) with | > almost everything modular and got this: | > | > ake[1]: Wej?cie do katalogu `/home/users/misiek/rpm/BUILD/linux-2.4.24/drivers/scsi/pcmcia' | > gcc -D__KERNEL__ -I/home/users/misiek/rpm/BUILD/linux-2.4.24/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=athlon -DMODULE -nostdinc -iwithprefix include -DKBUILD_BASENAME=qlogic_stub -c -o qlogic_stub.o qlogic_stub.c | > gcc -D__KERNEL__ -I/home/users/misiek/rpm/BUILD/linux-2.4.24/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=athlon -DMODULE -nostdinc -iwithprefix include -DKBUILD_BASENAME=qlogicfas -DPCMCIA -D__NO_VERSION__ -c -o qlogicfas.o ../qlogicfas.c | > ../qlogicfas.c: In function `qlogicfas_detect': | > ../qlogicfas.c:650: warning: passing arg 1 of `scsi_unregister' from incompatible pointer type | > ld -m elf_i386 -r -o qlogic_cs.o qlogic_stub.o qlogicfas.o | > qlogicfas.o(.text+0xe50): In function `init_module': | > : multiple definition of `init_module' | > qlogic_stub.o(.text+0x860): first defined here | > ld: Warning: size of symbol `init_module' changed from 86 in qlogic_stub.o to 75 in qlogicfas.o | > qlogicfas.o(.text+0xea0): In function `cleanup_module': | > : multiple definition of `cleanup_module' | > qlogic_stub.o(.text+0x8c0): first defined here | > ld: Warning: size of symbol `cleanup_module' changed from 47 in qlogic_stub.o to 27 in qlogicfas.o | > make[1]: *** [qlogic_cs.o] B??d 1 | > | > qlogic_cs module is going to be build using drivers/scsi/pcmcia/qlogic_stub.c | > and drivers/scsi/qlogicfas.c. | -
--
~Randy
kernel-janitors project: http://janitor.kernelnewbies.org/
Quoted 7 lines · Randy.Dunlap
On Tue, 20 Jan 2004 14:01:54 -0200 (BRST) Marcelo Tosatti <[email protected]> wrote:
| Same here, 2.4.24 does not show this behaviour. | | I can't find the guilty modification in 2.4.25-pre.Same problem with aha152x pcmcia being built as a module.
Quoted 8 lines
I also don't see any changes that would be causing this...
It's clear that this problem should be detected, since
scsi/qlogicfas.candscsi/pcmcia/qlogic_stub.cboth #include <linux/init.h>, so both of them define the module init and cleanup functions. I don't see how this worked in the past, unless it was due to some tools that missed detecting the duplicated functions.
This change causes whole problem:
include/linux/spinlock.h 2004-01-16 12:20:45.000000000 +0000 renamed from include/linux/spinlock.h 2002-11-28 23:53:15.000000000 +0000 +2 -0
@@ -3,6 +3,8 @@ #include <linux/config.h> +#include <asm/system.h> + /* * These are the generic versions of the spinlocks and read-write * locks..
The difference between 2.4.23 after preprocessing is:
static Scsi_Host_Template driver_template = { detect: qlogicfas_detect, release: qlogicfas_release, info: qlogicfas_info, co
mmand: qlogicfas_command, queuecommand: qlogicfas_queuecommand, abort: qlogicfas_abort, reset: qlogicfas_reset, bios_param:qlogicfas_biosparam, can_queue: 0, this_id: -1, sg_tablesize: 0xff, cmd_per_lun: 1, use_clustering: 0 }; # 1 "scsi_module.c" 1
# 35 "scsi_module.c"
static int __attribute__ ((__section__ (".text.init"))) init_this_scsi_driver(void)
{
driver_template.module = (&__this_module);
scsi_register_module(1, &driver_template);
if (driver_template.present)
return 0;
scsi_unregister_module(1, &driver_template);
return -19;
}static void __attribute__ ((unused, __section__(".text.exit"))) exit_this_scsi_driver(void)
{
scsi_unregister_module(1, &driver_template);
}static initcall_t __initcall_init_this_scsi_driver __attribute__ ((unused,__section__ (".initcall.init"))) = init_this_scsi_ driver;;
static exitcall_t __exitcall_exit_this_scsi_driver __attribute__ ((unused,__section__ (".exitcall.exit"))) = exit_this_scsi_ driver;;
and on 2.4.25pre6:
static Scsi_Host_Template driver_template = { detect: qlogicfas_detect, release: qlogicfas_release, info: qlogicfas_info, co
mmand: qlogicfas_command, queuecommand: qlogicfas_queuecommand, abort: qlogicfas_abort, reset: qlogicfas_reset, bios_param:qlogicfas_biosparam, can_queue: 0, this_id: -1, sg_tablesize: 0xff, cmd_per_lun: 1, use_clustering: 0 }; # 1 "scsi_module.c" 1
# 35 "scsi_module.c"
static int init_this_scsi_driver(void)
{
driver_template.module = (&__this_module);
scsi_register_module(1, &driver_template);
if (driver_template.present)
return 0;
scsi_unregister_module(1, &driver_template);
return -19;
}static void exit_this_scsi_driver(void)
{
scsi_unregister_module(1, &driver_template);
}int init_module(void) __attribute__((alias("init_this_scsi_driver"))); static __inline__ __attribute__((always_inline)) __at tribute__((always_inline)) __init_module_func_t __init_module_inline(void) { return init_this_scsi_driver; }; void cleanup_module(void) __attribute__((alias("exit_this_scsi_driver"))); static __inline__ __attribute__((always_inline)) __attribute__((always_inline)) __cleanup_module_func_t __cleanup_module_inline(void) { return exit_this_scsi_driver; }; # 723 "qlogicfas.c" 2
The problem is because in 2.4.25pre6 we have
MODULE defined anddrivers/scsi/qlogicfas.c -> #include <linux/module.h>include/linux/moduleh -> #include <linux/spinlock.h>include/linux/spinlock.h -> #include <asm/system.h>include/asm/system.h -> #include <linux/init.h>
as MODULE is defined then wrong functions are taken (we want these for undefined MODULE to be taken later) then back in drivers/scsi/qlogicfas.c
#ifdef PCMCIA
#undef MODULE
#endif
and again #include <linux/init.h> this time with MODULE undefined
Signature · 2 lines
Arkadiusz Miśkiewicz CS at FoE, Wroclaw University of Technology arekm.pld-linux.org AM2-6BONE, 1024/3DB19BBD, arekm(at)ircnet, PLD/Linux
(moved to linux-scsi)
On Wed, 21 Jan 2004 02:32:43 +0100 Arkadiusz Miskiewicz <[email protected]> wrote:
| Dnia wto 20. stycznia 2004 19:11, Randy.Dunlap napisa³: | > On Tue, 20 Jan 2004 14:01:54 -0200 (BRST) Marcelo Tosatti <[email protected]> wrote: | > | Same here, 2.4.24 does not show this behaviour. | > | | > | I can't find the guilty modification in 2.4.25-pre. | > | > Same problem with aha152x pcmcia being built as a module. | > | > I also don't see any changes that would be causing this... | > | > It's clear that this problem should be detected, since | > scsi/qlogicfas.c and scsi/pcmcia/qlogic_stub.c both | > #include <linux/init.h>, so both of them define the module | > init and cleanup functions. I don't see how this worked | > in the past, unless it was due to some tools that missed | > detecting the duplicated functions. | This change causes whole problem: | | diff -Naur -p -X /home/marcelo/lib/dontdiff linux-2.4.24/include/linux/spinlock.h linux-2.4.25-pre6/include/linux/spinlock.h | --- linux-2.4.24/include/linux/spinlock.h 2002-11-28 23:53:15.000000000 +0000 | +++ linux-2.4.25-pre6/include/linux/spinlock.h 2004-01-16 12:20:45.000000000 +0000 | @@ -3,6 +3,8 @@ | | #include <linux/config.h> | | +#include <asm/system.h> | +
[snip]
| The problem is because in 2.4.25pre6 we have | MODULE defined and | drivers/scsi/qlogicfas.c -> #include <linux/module.h> | include/linux/moduleh -> #include <linux/spinlock.h> | include/linux/spinlock.h -> #include <asm/system.h> | include/asm/system.h -> #include <linux/init.h> | as MODULE is defined then wrong functions are taken (we want these for undefined MODULE to be taken later) | then back in drivers/scsi/qlogicfas.c | | #ifdef PCMCIA | #undef MODULE | #endif | | and again #include <linux/init.h> this time with MODULE undefined
Thanks for finding/isolating that one... wow.
Is reverting that change to include/linux/spinlock.h a possibility?
If not, here's a patch that fixes 3 SCSI PCMCIA modules so that they will build in 2.4.25-pre6. Not tested....
Is it OK Not to include scsi_module.c for these PCMCIA modules? That's where the problem comes, and they don't use those functions AFAICT.
Comments?
--
~Randy
kernel-janitors project: http://janitor.kernelnewbies.org/
description: repair scsi/pcmcia modules so that they can build
by only including scsi_module.c for non-PCMCIA builds; qlogicfas: fix parameter type to scsi_unregister();
patch_name: scsi_pcmcia_modules.patchproduct_versions: linux-2425-pre6
maintainer: Doug Ledford et al ([email protected])
Juergen Fischer <[email protected]> (aha152x)
diffstat:=
drivers/scsi/aha152x.c | 10 ++++++---- drivers/scsi/fdomain.c | 2 ++ drivers/scsi/qlogicfas.c | 12 +++++++----- 3 files changed, 15 insertions(+), 9 deletions(-)
drivers/scsi/qlogicfas.c renamed from drivers/scsi/qlogicfas.c~pcmc_module +7 -5
@@ -111,10 +111,6 @@#include <linux/module.h> -#ifdef PCMCIA -#undef MODULE -#endif -#include <linux/blk.h> /* to get disk capacity */ #include <linux/kernel.h> #include <linux/string.h>
@@ -131,6 +127,10 @@#include "qlogicfas.h" #include <linux/stat.h> +#ifdef PCMCIA +#undef MODULE +#endif +/*----------------------------------------------------------------*/ /* driver state info, local to driver */ static int qbase;/* Port */
@@ -647,7 +647,7 @@ host->proc_name = "qlogicfas"; if(request_irq(qlirq, do_ql_ihandl, SA_SHIRQ, "qlogicfas", hreg) < 0)#endif { -scsi_unregister (host); +scsi_unregister (hreg); goto err_release_mem; }#endif
@@ -717,7 +717,9 @@ const char *qlogicfas_info(struct Scsi_H }MODULE_LICENSE ("GPL" ); +#ifndef PCMCIA /* Eventually this will go into an include file, but this will be later */ static Scsi_Host_Template driver_template =QLOGICFAS ;#include "scsi_module.c" +#endif
drivers/scsi/aha152x.c renamed from drivers/scsi/aha152x.c~pcmc_module +6 -4
@@ -222,10 +222,6 @@#include <linux/module.h> -#if defined(PCMCIA ) -#undef MODULE -#endif -#include <linux/sched.h> #include <asm/irq.h> #include <asm/io.h>
@@ -254,6 +250,10 @@#include <scsi/scsicam.h> +#if defined(PCMCIA ) +#undef MODULE +#endif +/* DEFINES */ /* For PCMCIA cards, always use AUTOCONF */
@@ -3951,7 +3951,9 @@ int aha152x_proc_info(char *buffer, charreturn thislength < length ? thislength : length; } +#ifndef PCMCIA /* Eventually this will go into an include file, but this will be later */ static Scsi_Host_Template driver_template =AHA152X ;#include "scsi_module.c" +#endif
drivers/scsi/fdomain.c renamed from drivers/scsi/fdomain.c~pcmc_module +2 -0
@@ -2046,7 +2046,9 @@ int fdomain_16x0_release(struct Scsi_HosMODULE_LICENSE ("GPL" ); +#ifndef PCMCIA /* Eventually this will go into an include file, but this will be later */ static Scsi_Host_Template driver_template =FDOMAIN_16X0 ;#include "scsi_module.c" +#endif
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Randy, others,
I will apply your untested fixes, however I wonder if it might be better to just undo the spinlock.h addition of "#include <asm/system.h>".
Would be good to have someone with the cards to test it.
Quoted 166 lines · Randy.Dunlap
(moved to linux-scsi)
On Wed, 21 Jan 2004 02:32:43 +0100 Arkadiusz Miskiewicz <[email protected]> wrote:
| Dnia wto 20. stycznia 2004 19:11, Randy.Dunlap napisa³: | > On Tue, 20 Jan 2004 14:01:54 -0200 (BRST) Marcelo Tosatti <[email protected]> wrote: | > | Same here, 2.4.24 does not show this behaviour. | > | | > | I can't find the guilty modification in 2.4.25-pre. | > | > Same problem with aha152x pcmcia being built as a module. | > | > I also don't see any changes that would be causing this... | > | > It's clear that this problem should be detected, since | > scsi/qlogicfas.c and scsi/pcmcia/qlogic_stub.c both | > #include <linux/init.h>, so both of them define the module | > init and cleanup functions. I don't see how this worked | > in the past, unless it was due to some tools that missed | > detecting the duplicated functions. | This change causes whole problem: | | diff -Naur -p -X /home/marcelo/lib/dontdiff linux-2.4.24/include/linux/spinlock.h linux-2.4.25-pre6/include/linux/spinlock.h | --- linux-2.4.24/include/linux/spinlock.h 2002-11-28 23:53:15.000000000 +0000 | +++ linux-2.4.25-pre6/include/linux/spinlock.h 2004-01-16 12:20:45.000000000 +0000 | @@ -3,6 +3,8 @@ | | #include <linux/config.h> | | +#include <asm/system.h> | +[snip]
| The problem is because in 2.4.25pre6 we have | MODULE defined and | drivers/scsi/qlogicfas.c -> #include <linux/module.h> | include/linux/moduleh -> #include <linux/spinlock.h> | include/linux/spinlock.h -> #include <asm/system.h> | include/asm/system.h -> #include <linux/init.h> | as MODULE is defined then wrong functions are taken (we want these for undefined MODULE to be taken later) | then back in drivers/scsi/qlogicfas.c | | #ifdef PCMCIA | #undef MODULE | #endif | | and again #include <linux/init.h> this time with MODULE undefinedThanks for finding/isolating that one... wow.
Is reverting that change to
include/linux/spinlock.ha possibility?If not, here's a patch that fixes 3 SCSI PCMCIA modules so that they will build in 2.4.25-pre6. Not tested....
Is it OK Not to include
scsi_module.cfor these PCMCIA modules? That's where the problem comes, and they don't use those functions AFAICT.Comments?
--
~Randy
kernel-janitors project: http://janitor.kernelnewbies.org/description: repair scsi/pcmcia modules so that they can build
by only including scsi_module.c for non-PCMCIA builds; qlogicfas: fix parameter type to scsi_unregister();
patch_name: scsi_pcmcia_modules.patchproduct_versions: linux-2425-pre6
maintainer: Doug Ledford et al ([email protected])
Juergen Fischer <[email protected]> (aha152x)diffstat:=
drivers/scsi/aha152x.c | 10 ++++++---- drivers/scsi/fdomain.c | 2 ++ drivers/scsi/qlogicfas.c | 12 +++++++----- 3 files changed, 15 insertions(+), 9 deletions(-)diff -Naurp
./drivers/scsi/qlogicfas.c~pcmc_module./drivers/scsi/qlogicfas.cdrivers/scsi/qlogicfas.c renamed from drivers/scsi/qlogicfas.c~pcmc_module +7
-5@@ -111,10 +111,6 @@#include <linux/module.h> -#ifdef PCMCIA -#undef MODULE -#endif -#include <linux/blk.h> /* to get disk capacity */ #include <linux/kernel.h> #include <linux/string.h> @@ -131,6 +127,10 @@#include "qlogicfas.h" #include <linux/stat.h> +#ifdef PCMCIA +#undef MODULE +#endif +/*----------------------------------------------------------------*/ /* driver state info, local to driver */ static int qbase;/* Port */ @@ -647,7 +647,7 @@ host->proc_name = "qlogicfas"; if(request_irq(qlirq, do_ql_ihandl, SA_SHIRQ, "qlogicfas", hreg) < 0)#endif { -scsi_unregister (host); +scsi_unregister (hreg); goto err_release_mem; }#endif @@ -717,7 +717,9 @@ const char *qlogicfas_info(struct Scsi_H }MODULE_LICENSE ("GPL" ); +#ifndef PCMCIA /* Eventually this will go into an include file, but this will be later */ static Scsi_Host_Template driver_template =QLOGICFAS ;#include "scsi_module.c" +#endif diff -Naurp
./drivers/scsi/aha152x.c~pcmc_module./drivers/scsi/aha152x.cdrivers/scsi/aha152x.c renamed from drivers/scsi/aha152x.c~pcmc_module +6
-4@@ -222,10 +222,6 @@#include <linux/module.h> -#if defined(PCMCIA ) -#undef MODULE -#endif -#include <linux/sched.h> #include <asm/irq.h> #include <asm/io.h> @@ -254,6 +250,10 @@#include <scsi/scsicam.h> +#if defined(PCMCIA ) +#undef MODULE +#endif +/* DEFINES */ /* For PCMCIA cards, always use AUTOCONF */ @@ -3951,7 +3951,9 @@ int aha152x_proc_info(char *buffer, charreturn thislength < length ? thislength : length; } +#ifndef PCMCIA /* Eventually this will go into an include file, but this will be later */ static Scsi_Host_Template driver_template =AHA152X ;#include "scsi_module.c" +#endif diff -Naurp
./drivers/scsi/fdomain.c~pcmc_module./drivers/scsi/fdomain.c
drivers/scsi/fdomain.c int fdomain_16x0_release(struct Scsi_Hos · line 2054
Quoted 9 lines
drivers/scsi/fdomain.c renamed from drivers/scsi/fdomain.c~pcmc_module +2
-0@@ -2046,7 +2046,9 @@ int fdomain_16x0_release(struct Scsi_HosMODULE_LICENSE ("GPL" ); +#ifndef PCMCIA /* Eventually this will go into an include file, but this will be later */ static Scsi_Host_Template driver_template =FDOMAIN_16X0 ;#include "scsi_module.c" +#endif
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html