lkml.org 
[lkml]   [2001]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] link failur in Linux 2.4.9-ac16 around apm.o and sysrq.o
    junio@siamese.dhis.twinsun.com wrote:
    >
    > >>>>> "JNH" == junio <junio@siamese.dhis.twinsun.com> writes:
    >
    > JNH> 2.4.9-ac16 fails to link with CONFIG_APM=y and
    > JNH> CONFIG_MAGIC_SYSRQ=n. This is because apm.c unconditionally
    > JNH> makes calls to functions (__sysrq_lock_table and friends)
    > JNH> defined in sysrq.c.
    >
    > JNH> I can think of a couple of different approaches to work this
    > JNH> around, but is there an established proper way to resolve this
    > JNH> kind of dependency in the kernel code?
    >
    > The approaches I listed as (1) and (3) in my previous message
    > are non solutions, since it will result in a kernel where apm.o
    > makes calls into sysrq functions, whose proper operations would
    > depend on sysrq.o to have been properly initialized by other
    > parts of the kernel, which still think CONFIG_MAGIC_SYSRQ is not
    > defined.
    >
    > The below should be a better fix.
    >
    > --- 2.4.9-ac16.sffix/arch/i386/kernel/apm.c Thu Sep 27 12:46:43 2001
    > +++ 2.4.9-ac16.sffix/arch/i386/kernel/apm.c Thu Sep 27 22:41:53 2001
    > @@ -201,7 +201,9 @@
    > #include <asm/uaccess.h>
    > #include <asm/desc.h>
    >
    > +#ifdef CONFIG_MAGIC_SYSRQ
    > #include <linux/sysrq.h>
    > +#endif
    >
    > extern unsigned long get_cmos_time(void);
    > extern void machine_real_restart(unsigned char *, int);
    > @@ -697,12 +699,16 @@
    > struct kbd_struct *kbd, struct tty_struct *tty) {
    > apm_power_off();
    > }
    > +#ifdef CONFIG_MAGIC_SYSRQ
    > struct sysrq_key_op sysrq_poweroff_op = {
    > handler: handle_poweroff,
    > help_msg: "Off",
    > action_msg: "Power Off\n"
    > };
    > -
    > +#else
    > +# define register_sysrq_key(ig,no) /*re*/
    > +# define unregister_sysrq_key(ig,no) /*re*/
    > +#endif
    >
    > #ifdef CONFIG_APM_DO_ENABLE
    > static int apm_enable_power_management(int enable)

    Yes, that looks like a decent temporary workaround for apm.c.

    What should be done (IMO of course) is that
    linux/include/linux/sysrq.h should provide empty/null definitions
    of [un]register_sysrq_key()... and it did do that until
    2.4.9-ac15, but those #defines are( were) untyped, and they
    should be typed (i.e., return 0), just as the versions
    of them that are present when CONFIG_MAGIC_SYSRQ is #defined.

    ~Randy
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:03    [W:0.028 / U:0.272 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site