aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/module.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/module.c')
-rw-r--r--kernel/module.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/kernel/module.c b/kernel/module.c
index d9eae45d0145..dbce132b354c 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -824,9 +824,34 @@ static inline void module_unload_init(struct module *mod)
824} 824}
825#endif /* CONFIG_MODULE_UNLOAD */ 825#endif /* CONFIG_MODULE_UNLOAD */
826 826
827static ssize_t show_initstate(struct module_attribute *mattr,
828 struct module *mod, char *buffer)
829{
830 const char *state = "unknown";
831
832 switch (mod->state) {
833 case MODULE_STATE_LIVE:
834 state = "live";
835 break;
836 case MODULE_STATE_COMING:
837 state = "coming";
838 break;
839 case MODULE_STATE_GOING:
840 state = "going";
841 break;
842 }
843 return sprintf(buffer, "%s\n", state);
844}
845
846static struct module_attribute initstate = {
847 .attr = { .name = "initstate", .mode = 0444, .owner = THIS_MODULE },
848 .show = show_initstate,
849};
850
827static struct module_attribute *modinfo_attrs[] = { 851static struct module_attribute *modinfo_attrs[] = {
828 &modinfo_version, 852 &modinfo_version,
829 &modinfo_srcversion, 853 &modinfo_srcversion,
854 &initstate,
830#ifdef CONFIG_MODULE_UNLOAD 855#ifdef CONFIG_MODULE_UNLOAD
831 &refcnt, 856 &refcnt,
832#endif 857#endif
@@ -1107,8 +1132,10 @@ static int mod_sysfs_setup(struct module *mod,
1107 goto out; 1132 goto out;
1108 1133
1109 mod->drivers_dir = kobject_add_dir(&mod->mkobj.kobj, "drivers"); 1134 mod->drivers_dir = kobject_add_dir(&mod->mkobj.kobj, "drivers");
1110 if (!mod->drivers_dir) 1135 if (!mod->drivers_dir) {
1136 err = -ENOMEM;
1111 goto out_unreg; 1137 goto out_unreg;
1138 }
1112 1139
1113 err = module_param_sysfs_setup(mod, kparam, num_params); 1140 err = module_param_sysfs_setup(mod, kparam, num_params);
1114 if (err) 1141 if (err)