};
 ATTRIBUTE_GROUPS(sugov);
 
+static void sugov_tunables_free(struct kobject *kobj)
+{
+       struct gov_attr_set *attr_set = container_of(kobj, struct gov_attr_set, kobj);
+
+       kfree(to_sugov_tunables(attr_set));
+}
+
 static struct kobj_type sugov_tunables_ktype = {
        .default_groups = sugov_groups,
        .sysfs_ops = &governor_sysfs_ops,
+       .release = &sugov_tunables_free,
 };
 
 /********************** cpufreq governor interface *********************/
        return tunables;
 }
 
-static void sugov_tunables_free(struct sugov_tunables *tunables)
+static void sugov_clear_global_tunables(void)
 {
        if (!have_governor_per_policy())
                global_tunables = NULL;
-
-       kfree(tunables);
 }
 
 static int sugov_init(struct cpufreq_policy *policy)
 fail:
        kobject_put(&tunables->attr_set.kobj);
        policy->governor_data = NULL;
-       sugov_tunables_free(tunables);
+       sugov_clear_global_tunables();
 
 stop_kthread:
        sugov_kthread_stop(sg_policy);
        count = gov_attr_set_put(&tunables->attr_set, &sg_policy->tunables_hook);
        policy->governor_data = NULL;
        if (!count)
-               sugov_tunables_free(tunables);
+               sugov_clear_global_tunables();
 
        mutex_unlock(&global_tunables_lock);