From 22454cb99fc39f2629ad06a7eccb3df312f8830e Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Wed, 28 May 2008 23:06:47 +0200 Subject: pnp: add acpi:* modalias entries Along with the non-modalias conformant "pnp:*" aliases, we add "acpi:*" entries to PNP drivers, to allow module autoloading by ACPI PNP device entries, which export proper modalias information, without any specific userspace modprobe mangling. Cc: Adam Belay Cc: Thomas Renninger Signed-off-by: Kay Sievers Signed-off-by: Greg Kroah-Hartman --- scripts/mod/file2alias.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'scripts') diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 37d5c363fbc..1fcaf3284a6 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -340,11 +340,18 @@ static int do_acpi_entry(const char *filename, } /* looks like: "pnp:dD" */ -static int do_pnp_entry(const char *filename, - struct pnp_device_id *id, char *alias) +static void do_pnp_device_entry(void *symval, unsigned long size, + struct module *mod) { - sprintf(alias, "pnp:d%s*", id->id); - return 1; + const unsigned long id_size = sizeof(struct pnp_device_id); + const struct pnp_device_id *id = symval; + + device_id_check(mod->name, "pnp", size, id_size, symval); + + buf_printf(&mod->dev_table_buf, + "MODULE_ALIAS(\"pnp:d%s*\");\n", id->id); + buf_printf(&mod->dev_table_buf, + "MODULE_ALIAS(\"acpi*:%s:*\");\n", id->id); } /* looks like: "pnp:dD" for every device of the card */ @@ -388,9 +395,12 @@ static void do_pnp_card_entries(void *symval, unsigned long size, } /* add an individual alias for every device entry */ - if (!dup) + if (!dup) { buf_printf(&mod->dev_table_buf, "MODULE_ALIAS(\"pnp:d%s*\");\n", id); + buf_printf(&mod->dev_table_buf, + "MODULE_ALIAS(\"acpi*:%s:*\");\n", id); + } } } } @@ -701,9 +711,7 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, sizeof(struct acpi_device_id), "acpi", do_acpi_entry, mod); else if (sym_is(symname, "__mod_pnp_device_table")) - do_table(symval, sym->st_size, - sizeof(struct pnp_device_id), "pnp", - do_pnp_entry, mod); + do_pnp_device_entry(symval, sym->st_size, mod); else if (sym_is(symname, "__mod_pnp_card_device_table")) do_pnp_card_entries(symval, sym->st_size, mod); else if (sym_is(symname, "__mod_pcmcia_device_table")) -- cgit v1.2.3-70-g09d2 From d35cb360c29956510b2fe1a953bd4968536f7216 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 21 Jul 2008 14:21:38 -0700 Subject: markers: fix duplicate modpost entry When a kernel was rebuilt, the previous Module.markers was not cleared. It caused markers with different format strings to appear as duplicates when a markers was changed. This problem is present since scripts/mod/modpost.c started to generate Module.markers, commit b2e3e658b344c6bcfb8fb694100ab2f2b5b2edb0 It therefore applies to 2.6.25, 2.6.26 and linux-next. I merely merged the patches from Roland, Wenji and Takashi here. Credits to Roland McGrath Wenji Huang and Takashi Nishiie for providing the individual fixes. - Changelog : - Integrated Takashi's Makefile modification to clear Module.markers upon make clean. Signed-off-by: Mathieu Desnoyers Cc: Roland McGrath Cc: Wenji Huang Cc: Takashi Nishiie Cc: [2.6.25.x, 2.6.26.x] Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- Makefile | 3 ++- scripts/Makefile.modpost | 1 + scripts/mod/modpost.c | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/Makefile b/Makefile index 6192922de9c..4bcd1cf90cb 100644 --- a/Makefile +++ b/Makefile @@ -1148,7 +1148,8 @@ clean: archclean $(clean-dirs) @find . $(RCS_FIND_IGNORE) \ \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ - -o -name '*.symtypes' -o -name 'modules.order' \) \ + -o -name '*.symtypes' -o -name 'modules.order' \ + -o -name 'Module.markers' \) \ -type f -print | xargs rm -f # mrproper - Delete all generated files, including .config diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 17092d6c7db..9ee9783aea5 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -101,6 +101,7 @@ quiet_cmd_kernel-mod = MODPOST $@ cmd_kernel-mod = $(modpost) $@ vmlinux.o: FORCE + @rm -fr $(kernelmarkersfile) $(call cmd,kernel-mod) # Declare generated files as targets for modpost diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index a07f91aac92..8f038e6d5f9 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1992,7 +1992,8 @@ static void read_markers(const char *fname) mod->skip = 1; } - add_marker(mod, marker, fmt); + if (!mod->skip) + add_marker(mod, marker, fmt); } return; fail: -- cgit v1.2.3-70-g09d2