--- linux/include/linux/module.h 2004-11-15 12:49:39.000000000 +0100 +++ linux_2_6_8_1/include/linux/module.h 2004-06-28 23:04:16.000000000 +0200 @@ -44,20 +44,6 @@ char name[MODULE_NAME_LEN]; }; -struct module; - -struct module_attribute { - struct attribute attr; - ssize_t (*show)(struct module *, char *); - ssize_t (*store)(struct module *, const char *, size_t count); -}; - -struct module_kobject -{ - struct kobject kobj; - struct module *mod; -}; - /* These are either module local, or the kernel's dummy ones. */ extern int init_module(void); extern void cleanup_module(void); @@ -73,8 +59,6 @@ struct exception_table_entry *finish); void sort_main_extable(void); -extern struct subsystem module_subsys; - #ifdef MODULE #define ___module_cat(a,b) __mod_ ## a ## b #define __module_cat(a,b) ___module_cat(a,b) @@ -157,9 +141,11 @@ customizations, eg "rh3" or "rusty1". Using this automatically adds a checksum of the .c files and the - local headers in "srcversion". + local headers to the end. Use MODULE_VERSION("") if you want just + this. Macro includes room for this. */ -#define MODULE_VERSION(_version) MODULE_INFO(version, _version) +#define MODULE_VERSION(_version) \ + MODULE_INFO(version, _version "\0xxxxxxxxxxxxxxxxxxxxxxxx") /* Given an address, look for it in the exception tables */ const struct exception_table_entry *search_exception_tables(unsigned long add); @@ -222,6 +208,23 @@ MODULE_STATE_GOING, }; +/* sysfs stuff */ +struct module_attribute +{ + struct attribute attr; + struct kernel_param *param; +}; + +struct module_kobject +{ + /* Everyone should have one of these. */ + struct kobject kobj; + + /* We always have refcnt, we may have others from module_param(). */ + unsigned int num_attributes; + struct module_attribute attr[0]; +}; + /* Similar stuff for section attributes. */ #define MODULE_SECT_NAME_LEN 32 struct module_sect_attr @@ -237,7 +240,6 @@ struct module_sect_attr attrs[0]; }; -struct param_kobject; struct module { @@ -251,7 +253,6 @@ /* Sysfs stuff. */ struct module_kobject *mkobj; - struct param_kobject *params_kobject; /* Exported symbols */ const struct kernel_symbol *syms; @@ -303,6 +304,9 @@ /* Destruction function. */ void (*exit)(void); + + /* Fake kernel param for refcnt. */ + struct kernel_param refcnt_param; #endif #ifdef CONFIG_KALLSYMS @@ -441,11 +445,6 @@ int unregister_module_notifier(struct notifier_block * nb); extern void print_modules(void); - -struct device_driver; -void module_add_driver(struct module *, struct device_driver *); -void module_remove_driver(struct device_driver *); - #else /* !CONFIG_MODULES... */ #define EXPORT_SYMBOL(sym) #define EXPORT_SYMBOL_GPL(sym) @@ -535,18 +534,6 @@ static inline void print_modules(void) { } - -struct device_driver; -struct module; - -static inline void module_add_driver(struct module *module, struct device_driver *driver) -{ -} - -static inline void module_remove_driver(struct device_driver *driver) -{ -} - #endif /* CONFIG_MODULES */ #define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x) @@ -558,27 +545,45 @@ char type[64-sizeof(void *)]; void *addr; }; - -static inline void __deprecated MODULE_PARM_(void) { } #ifdef MODULE /* DEPRECATED: Do not use. */ #define MODULE_PARM(var,type) \ struct obsolete_modparm __parm_##var __attribute__((section("__obsparm"))) = \ -{ __stringify(var), type, &MODULE_PARM_ }; +{ __stringify(var), type }; + +static inline void __deprecated MOD_INC_USE_COUNT(struct module *module) +{ + __unsafe(module); + +#if defined(CONFIG_MODULE_UNLOAD) && defined(MODULE) + local_inc(&module->ref[get_cpu()].count); + put_cpu(); +#else + (void)try_module_get(module); +#endif +} + +static inline void __deprecated MOD_DEC_USE_COUNT(struct module *module) +{ + module_put(module); +} + +#define MOD_INC_USE_COUNT MOD_INC_USE_COUNT(THIS_MODULE) +#define MOD_DEC_USE_COUNT MOD_DEC_USE_COUNT(THIS_MODULE) #else -#define MODULE_PARM(var,type) static void __attribute__((__unused__)) *__parm_##var = &MODULE_PARM_; +#define MODULE_PARM(var,type) +#define MOD_INC_USE_COUNT do { } while (0) +#define MOD_DEC_USE_COUNT do { } while (0) #endif #define __MODULE_STRING(x) __stringify(x) /* Use symbol_get and symbol_put instead. You'll thank me. */ #define HAVE_INTER_MODULE -extern void __deprecated inter_module_register(const char *, - struct module *, const void *); -extern void __deprecated inter_module_unregister(const char *); -extern const void * __deprecated inter_module_get(const char *); -extern const void * __deprecated inter_module_get_request(const char *, - const char *); -extern void __deprecated inter_module_put(const char *); +extern void inter_module_register(const char *, struct module *, const void *); +extern void inter_module_unregister(const char *); +extern const void *inter_module_get(const char *); +extern const void *inter_module_get_request(const char *, const char *); +extern void inter_module_put(const char *); #endif /* _LINUX_MODULE_H */