@@ -388,6 +388,15 @@ static void free_policy_dbs_info(struct policy_dbs_info *policy_dbs,
388388 gov -> free (policy_dbs );
389389}
390390
391+ static void cpufreq_dbs_data_release (struct kobject * kobj )
392+ {
393+ struct dbs_data * dbs_data = to_dbs_data (to_gov_attr_set (kobj ));
394+ struct dbs_governor * gov = dbs_data -> gov ;
395+
396+ gov -> exit (dbs_data );
397+ kfree (dbs_data );
398+ }
399+
391400int cpufreq_dbs_governor_init (struct cpufreq_policy * policy )
392401{
393402 struct dbs_governor * gov = dbs_governor_of (policy );
@@ -425,6 +434,7 @@ int cpufreq_dbs_governor_init(struct cpufreq_policy *policy)
425434 goto free_policy_dbs_info ;
426435 }
427436
437+ dbs_data -> gov = gov ;
428438 gov_attr_set_init (& dbs_data -> attr_set , & policy_dbs -> list );
429439
430440 ret = gov -> init (dbs_data );
@@ -447,6 +457,7 @@ int cpufreq_dbs_governor_init(struct cpufreq_policy *policy)
447457 policy -> governor_data = policy_dbs ;
448458
449459 gov -> kobj_type .sysfs_ops = & governor_sysfs_ops ;
460+ gov -> kobj_type .release = cpufreq_dbs_data_release ;
450461 ret = kobject_init_and_add (& dbs_data -> attr_set .kobj , & gov -> kobj_type ,
451462 get_governor_parent_kobj (policy ),
452463 "%s" , gov -> gov .name );
@@ -488,13 +499,8 @@ void cpufreq_dbs_governor_exit(struct cpufreq_policy *policy)
488499
489500 policy -> governor_data = NULL ;
490501
491- if (!count ) {
492- if (!have_governor_per_policy ())
493- gov -> gdbs_data = NULL ;
494-
495- gov -> exit (dbs_data );
496- kfree (dbs_data );
497- }
502+ if (!count && !have_governor_per_policy ())
503+ gov -> gdbs_data = NULL ;
498504
499505 free_policy_dbs_info (policy_dbs , gov );
500506
0 commit comments