public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Arkadiusz Miskiewicz <arekm@pld-linux.org>
To: "Randy.Dunlap" <rddunlap@osdl.org>
Cc: Marcelo Tosatti <marcelo.tosatti@cyclades.com>,
	linux-kernel@vger.kernel.org, andersen@codepoet.org
Subject: Re: 2.4.25pre6 and qlogic pcmcia driver
Date: Wed, 21 Jan 2004 02:32:43 +0100	[thread overview]
Message-ID: <200401210232.44118.arekm@pld-linux.org> (raw)
In-Reply-To: <20040120101121.5ce95f97.rddunlap@osdl.org>

Dnia wto 20. stycznia 2004 19:11, Randy.Dunlap napisał:
> On Tue, 20 Jan 2004 14:01:54 -0200 (BRST) Marcelo Tosatti <marcelo.tosatti@cyclades.com> 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>
+
 /*
  * 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 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
	
-- 
Arkadiusz Miśkiewicz    CS at FoE, Wroclaw University of Technology
arekm.pld-linux.org AM2-6BONE, 1024/3DB19BBD, arekm(at)ircnet, PLD/Linux

      reply	other threads:[~2004-01-21  1:33 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200401180355.01190.arekm@pld-linux.org>
2004-01-20 16:01 ` 2.4.25pre6 and qlogic pcmcia driver Marcelo Tosatti
2004-01-20 18:11   ` Randy.Dunlap
2004-01-21  1:32     ` Arkadiusz Miskiewicz [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200401210232.44118.arekm@pld-linux.org \
    --to=arekm@pld-linux.org \
    --cc=andersen@codepoet.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcelo.tosatti@cyclades.com \
    --cc=rddunlap@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox