From: Rusty Russell Gets rid of inter_module from mtd drivers. Signed-off-by: Andrew Morton --- 25-akpm/drivers/mtd/chips/cfi_cmdset_0001.c | 18 ++++-------------- 25-akpm/drivers/mtd/chips/cfi_cmdset_0002.c | 20 +------------------- 25-akpm/drivers/mtd/chips/cfi_cmdset_0020.c | 24 +----------------------- 25-akpm/drivers/mtd/chips/gen_probe.c | 8 ++++---- 25-akpm/drivers/mtd/devices/Makefile | 7 ------- 25-akpm/drivers/mtd/devices/doc2000.c | 15 +++------------ 25-akpm/drivers/mtd/devices/doc2001.c | 15 +++------------ 25-akpm/drivers/mtd/devices/doc2001plus.c | 13 +++---------- 25-akpm/drivers/mtd/devices/docprobe.c | 4 ++-- 25-akpm/include/linux/mtd/cfi.h | 1 - 10 files changed, 21 insertions(+), 104 deletions(-) diff -puN drivers/mtd/chips/cfi_cmdset_0001.c~remove-inter-module-mtd drivers/mtd/chips/cfi_cmdset_0001.c --- 25/drivers/mtd/chips/cfi_cmdset_0001.c~remove-inter-module-mtd Fri Apr 8 17:18:32 2005 +++ 25-akpm/drivers/mtd/chips/cfi_cmdset_0001.c Fri Apr 8 17:19:28 2005 @@ -298,13 +298,6 @@ read_pri_intelext(struct map_info *map, return extp; } -/* This routine is made available to other mtd code via - * inter_module_register. It must only be accessed through - * inter_module_get which will bump the use count of this module. The - * addresses passed back in cfi are valid as long as the use count of - * this module is non-zero, i.e. between inter_module_get and - * inter_module_put. Keith Owens 29 Oct 2000. - */ struct mtd_info *cfi_cmdset_0001(struct map_info *map, int primary) { struct cfi_private *cfi = map->fldrv_priv; @@ -2302,22 +2295,19 @@ static void cfi_intelext_destroy(struct kfree(mtd->eraseregions); } -static char im_name_1[]="cfi_cmdset_0001"; -static char im_name_3[]="cfi_cmdset_0003"; - static int __init cfi_intelext_init(void) { - inter_module_register(im_name_1, THIS_MODULE, &cfi_cmdset_0001); - inter_module_register(im_name_3, THIS_MODULE, &cfi_cmdset_0001); return 0; } static void __exit cfi_intelext_exit(void) { - inter_module_unregister(im_name_1); - inter_module_unregister(im_name_3); } +struct mtd_info *cfi_cmdset_0003(struct map_info *map, int primary) __attribute__((alias("cfi_cmdset_0001"))); +EXPORT_SYMBOL(cfi_cmdset_0001); +EXPORT_SYMBOL(cfi_cmdset_0003); + module_init(cfi_intelext_init); module_exit(cfi_intelext_exit); diff -puN drivers/mtd/chips/cfi_cmdset_0002.c~remove-inter-module-mtd drivers/mtd/chips/cfi_cmdset_0002.c --- 25/drivers/mtd/chips/cfi_cmdset_0002.c~remove-inter-module-mtd Fri Apr 8 17:18:32 2005 +++ 25-akpm/drivers/mtd/chips/cfi_cmdset_0002.c Fri Apr 8 17:18:32 2005 @@ -1491,25 +1491,7 @@ static void cfi_amdstd_destroy(struct mt kfree(mtd->eraseregions); } -static char im_name[]="cfi_cmdset_0002"; - - -static int __init cfi_amdstd_init(void) -{ - inter_module_register(im_name, THIS_MODULE, &cfi_cmdset_0002); - return 0; -} - - -static void __exit cfi_amdstd_exit(void) -{ - inter_module_unregister(im_name); -} - - -module_init(cfi_amdstd_init); -module_exit(cfi_amdstd_exit); - +EXPORT_SYMBOL(cfi_cmdset_0002); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Crossnet Co. et al."); MODULE_DESCRIPTION("MTD chip driver for AMD/Fujitsu flash chips"); diff -puN drivers/mtd/chips/cfi_cmdset_0020.c~remove-inter-module-mtd drivers/mtd/chips/cfi_cmdset_0020.c --- 25/drivers/mtd/chips/cfi_cmdset_0020.c~remove-inter-module-mtd Fri Apr 8 17:18:32 2005 +++ 25-akpm/drivers/mtd/chips/cfi_cmdset_0020.c Fri Apr 8 17:18:32 2005 @@ -106,13 +106,6 @@ static void cfi_tell_features(struct cfi } #endif -/* This routine is made available to other mtd code via - * inter_module_register. It must only be accessed through - * inter_module_get which will bump the use count of this module. The - * addresses passed back in cfi are valid as long as the use count of - * this module is non-zero, i.e. between inter_module_get and - * inter_module_put. Keith Owens 29 Oct 2000. - */ struct mtd_info *cfi_cmdset_0020(struct map_info *map, int primary) { struct cfi_private *cfi = map->fldrv_priv; @@ -152,6 +145,7 @@ struct mtd_info *cfi_cmdset_0020(struct return cfi_staa_setup(map); } +EXPORT_SYMBOL(cfi_cmdset_0020); static struct mtd_info *cfi_staa_setup(struct map_info *map) { @@ -1399,20 +1393,4 @@ static void cfi_staa_destroy(struct mtd_ kfree(cfi); } -static char im_name[]="cfi_cmdset_0020"; - -static int __init cfi_staa_init(void) -{ - inter_module_register(im_name, THIS_MODULE, &cfi_cmdset_0020); - return 0; -} - -static void __exit cfi_staa_exit(void) -{ - inter_module_unregister(im_name); -} - -module_init(cfi_staa_init); -module_exit(cfi_staa_exit); - MODULE_LICENSE("GPL"); diff -puN drivers/mtd/chips/gen_probe.c~remove-inter-module-mtd drivers/mtd/chips/gen_probe.c --- 25/drivers/mtd/chips/gen_probe.c~remove-inter-module-mtd Fri Apr 8 17:18:32 2005 +++ 25-akpm/drivers/mtd/chips/gen_probe.c Fri Apr 8 17:18:32 2005 @@ -194,20 +194,20 @@ static inline struct mtd_info *cfi_cmdse { struct cfi_private *cfi = map->fldrv_priv; __u16 type = primary?cfi->cfiq->P_ID:cfi->cfiq->A_ID; -#if defined(CONFIG_MODULES) && defined(HAVE_INTER_MODULE) +#ifdef CONFIG_MODULES char probename[32]; cfi_cmdset_fn_t *probe_function; sprintf(probename, "cfi_cmdset_%4.4X", type); - - probe_function = inter_module_get_request(probename, probename); + probe_function = try_then_request_module(__symbol_get(probename), + probename); if (probe_function) { struct mtd_info *mtd; mtd = (*probe_function)(map, primary); /* If it was happy, it'll have increased its own use count */ - inter_module_put(probename); + __symbol_put(probename); return mtd; } #endif diff -puN drivers/mtd/devices/doc2000.c~remove-inter-module-mtd drivers/mtd/devices/doc2000.c --- 25/drivers/mtd/devices/doc2000.c~remove-inter-module-mtd Fri Apr 8 17:18:32 2005 +++ 25-akpm/drivers/mtd/devices/doc2000.c Fri Apr 8 17:18:32 2005 @@ -516,16 +516,7 @@ static int DoC2k_is_alias(struct DiskOnC return retval; } -static const char im_name[] = "DoC2k_init"; - -/* This routine is made available to other mtd code via - * inter_module_register. It must only be accessed through - * inter_module_get which will bump the use count of this module. The - * addresses passed back in mtd are valid as long as the use count of - * this module is non-zero, i.e. between inter_module_get and - * inter_module_put. Keith Owens 29 Oct 2000. - */ -static void DoC2k_init(struct mtd_info *mtd) +void DoC2k_init(struct mtd_info *mtd) { struct DiskOnChip *this = mtd->priv; struct DiskOnChip *old = NULL; @@ -1278,7 +1269,6 @@ static int doc_erase(struct mtd_info *mt static int __init init_doc2000(void) { - inter_module_register(im_name, THIS_MODULE, &DoC2k_init); return 0; } @@ -1297,9 +1287,10 @@ static void __exit cleanup_doc2000(void) kfree(this->chips); kfree(mtd); } - inter_module_unregister(im_name); } +EXPORT_SYMBOL(DoC2k_init); + module_exit(cleanup_doc2000); module_init(init_doc2000); diff -puN drivers/mtd/devices/doc2001.c~remove-inter-module-mtd drivers/mtd/devices/doc2001.c --- 25/drivers/mtd/devices/doc2001.c~remove-inter-module-mtd Fri Apr 8 17:18:32 2005 +++ 25-akpm/drivers/mtd/devices/doc2001.c Fri Apr 8 17:18:32 2005 @@ -324,16 +324,7 @@ static int DoCMil_is_alias(struct DiskOn return retval; } -static const char im_name[] = "DoCMil_init"; - -/* This routine is made available to other mtd code via - * inter_module_register. It must only be accessed through - * inter_module_get which will bump the use count of this module. The - * addresses passed back in mtd are valid as long as the use count of - * this module is non-zero, i.e. between inter_module_get and - * inter_module_put. Keith Owens 29 Oct 2000. - */ -static void DoCMil_init(struct mtd_info *mtd) +void DoCMil_init(struct mtd_info *mtd) { struct DiskOnChip *this = mtd->priv; struct DiskOnChip *old = NULL; @@ -858,7 +849,6 @@ int doc_erase (struct mtd_info *mtd, str static int __init init_doc2001(void) { - inter_module_register(im_name, THIS_MODULE, &DoCMil_init); return 0; } @@ -877,12 +867,13 @@ static void __exit cleanup_doc2001(void) kfree(this->chips); kfree(mtd); } - inter_module_unregister(im_name); } module_exit(cleanup_doc2001); module_init(init_doc2001); +EXPORT_SYMBOL(DoCMil_init); + MODULE_LICENSE("GPL"); MODULE_AUTHOR("David Woodhouse et al."); MODULE_DESCRIPTION("Alternative driver for DiskOnChip Millennium"); diff -puN drivers/mtd/devices/doc2001plus.c~remove-inter-module-mtd drivers/mtd/devices/doc2001plus.c --- 25/drivers/mtd/devices/doc2001plus.c~remove-inter-module-mtd Fri Apr 8 17:18:32 2005 +++ 25-akpm/drivers/mtd/devices/doc2001plus.c Fri Apr 8 17:18:32 2005 @@ -447,16 +447,10 @@ static int DoCMilPlus_is_alias(struct Di return retval; } -static const char im_name[] = "DoCMilPlus_init"; - /* This routine is made available to other mtd code via - * inter_module_register. It must only be accessed through - * inter_module_get which will bump the use count of this module. The - * addresses passed back in mtd are valid as long as the use count of - * this module is non-zero, i.e. between inter_module_get and - * inter_module_put. Keith Owens 29 Oct 2000. + * EXPORT_SYMBOL(). */ -static void DoCMilPlus_init(struct mtd_info *mtd) +void DoCMilPlus_init(struct mtd_info *mtd) { struct DiskOnChip *this = mtd->priv; struct DiskOnChip *old = NULL; @@ -524,6 +518,7 @@ static void DoCMilPlus_init(struct mtd_i return; } } +EXPORT_SYMBOL(DoCMilPlus_init); #if 0 static int doc_dumpblk(struct mtd_info *mtd, loff_t from) @@ -1124,7 +1119,6 @@ int doc_erase(struct mtd_info *mtd, stru static int __init init_doc2001plus(void) { - inter_module_register(im_name, THIS_MODULE, &DoCMilPlus_init); return 0; } @@ -1143,7 +1137,6 @@ static void __exit cleanup_doc2001plus(v kfree(this->chips); kfree(mtd); } - inter_module_unregister(im_name); } module_exit(cleanup_doc2001plus); diff -puN drivers/mtd/devices/docprobe.c~remove-inter-module-mtd drivers/mtd/devices/docprobe.c --- 25/drivers/mtd/devices/docprobe.c~remove-inter-module-mtd Fri Apr 8 17:18:32 2005 +++ 25-akpm/drivers/mtd/devices/docprobe.c Fri Apr 8 17:18:32 2005 @@ -308,11 +308,11 @@ static void __init DoC_Probe(unsigned lo } if (im_funcname) - initroutine = inter_module_get_request(im_funcname, im_modname); + initroutine = try_then_request_module(__symbol_get(im_funcname), im_modname); if (initroutine) { (*initroutine)(mtd); - inter_module_put(im_funcname); + __symbol_put(im_funcname); return; } printk(KERN_NOTICE "Cannot find driver for DiskOnChip %s at 0x%lX\n", name, physadr); diff -puN drivers/mtd/devices/Makefile~remove-inter-module-mtd drivers/mtd/devices/Makefile --- 25/drivers/mtd/devices/Makefile~remove-inter-module-mtd Fri Apr 8 17:18:32 2005 +++ 25-akpm/drivers/mtd/devices/Makefile Fri Apr 8 17:18:32 2005 @@ -3,13 +3,6 @@ # # $Id: Makefile.common,v 1.7 2004/12/22 17:51:15 joern Exp $ -# *** BIG UGLY NOTE *** -# -# The removal of get_module_symbol() and replacement with -# inter_module_register() et al has introduced a link order dependency -# here where previously there was none. We now have to ensure that -# doc200[01].o are linked before docprobe.o - obj-$(CONFIG_MTD_DOC2000) += doc2000.o obj-$(CONFIG_MTD_DOC2001) += doc2001.o obj-$(CONFIG_MTD_DOC2001PLUS) += doc2001plus.o diff -puN include/linux/mtd/cfi.h~remove-inter-module-mtd include/linux/mtd/cfi.h --- 25/include/linux/mtd/cfi.h~remove-inter-module-mtd Fri Apr 8 17:18:32 2005 +++ 25-akpm/include/linux/mtd/cfi.h Fri Apr 8 17:18:32 2005 @@ -235,7 +235,6 @@ struct cfi_private { int mfr, id; int numchips; unsigned long chipshift; /* Because they're of the same type */ - const char *im_name; /* inter_module name for cmdset_setup */ struct flchip chips[0]; /* per-chip data structure for each chip */ }; _