@ -126,6 +126,8 @@ EXPORT_SYMBOL_GPL(kobject_get_path);
*/
void kobject_init ( struct kobject * kobj )
{
if ( ! kobj )
return ;
kref_init ( & kobj - > kref ) ;
INIT_LIST_HEAD ( & kobj - > entry ) ;
init_waitqueue_head ( & kobj - > poll ) ;
@ -366,6 +368,8 @@ out:
void kobject_del ( struct kobject * kobj )
{
if ( ! kobj )
return ;
sysfs_remove_dir ( kobj ) ;
unlink ( kobj ) ;
}
@ -377,6 +381,8 @@ void kobject_del(struct kobject * kobj)
void kobject_unregister ( struct kobject * kobj )
{
if ( ! kobj )
return ;
pr_debug ( " kobject %s: unregistering \n " , kobject_name ( kobj ) ) ;
kobject_uevent ( kobj , KOBJ_REMOVE ) ;
kobject_del ( kobj ) ;
@ -523,6 +529,8 @@ int kset_add(struct kset * k)
int kset_register ( struct kset * k )
{
if ( ! k )
return - EINVAL ;
kset_init ( k ) ;
return kset_add ( k ) ;
}
@ -535,6 +543,8 @@ int kset_register(struct kset * k)
void kset_unregister ( struct kset * k )
{
if ( ! k )
return ;
kobject_unregister ( & k - > kobj ) ;
}
@ -586,6 +596,9 @@ int subsystem_register(struct subsystem * s)
{
int error ;
if ( ! s )
return - EINVAL ;
subsystem_init ( s ) ;
pr_debug ( " subsystem %s: registering \n " , s - > kset . kobj . name ) ;
@ -598,6 +611,8 @@ int subsystem_register(struct subsystem * s)
void subsystem_unregister ( struct subsystem * s )
{
if ( ! s )
return ;
pr_debug ( " subsystem %s: unregistering \n " , s - > kset . kobj . name ) ;
kset_unregister ( & s - > kset ) ;
}
@ -612,6 +627,10 @@ void subsystem_unregister(struct subsystem * s)
int subsys_create_file ( struct subsystem * s , struct subsys_attribute * a )
{
int error = 0 ;
if ( ! s | | ! a )
return - EINVAL ;
if ( subsys_get ( s ) ) {
error = sysfs_create_file ( & s - > kset . kobj , & a - > attr ) ;
subsys_put ( s ) ;