}
        }
 
-       if (!try_module_get(policy->governor->owner))
-               return -EINVAL;
+       if (event == CPUFREQ_GOV_POLICY_INIT)
+               if (!try_module_get(policy->governor->owner))
+                       return -EINVAL;
 
        pr_debug("__cpufreq_governor for CPU %u, event %u\n",
                                                policy->cpu, event);
        if ((!policy->governor_enabled && (event == CPUFREQ_GOV_STOP)) ||
            (policy->governor_enabled && (event == CPUFREQ_GOV_START))) {
                mutex_unlock(&cpufreq_governor_lock);
+               if (event == CPUFREQ_GOV_POLICY_INIT)
+                       module_put(policy->governor->owner);
                return -EBUSY;
        }
 
                mutex_unlock(&cpufreq_governor_lock);
        }
 
-       /* we keep one module reference alive for
-                       each CPU governed by this CPU */
-       if ((event != CPUFREQ_GOV_START) || ret)
-               module_put(policy->governor->owner);
-       if ((event == CPUFREQ_GOV_STOP) && !ret)
+       if (((event == CPUFREQ_GOV_POLICY_INIT) && ret) ||
+                       ((event == CPUFREQ_GOV_POLICY_EXIT) && !ret))
                module_put(policy->governor->owner);
 
        return ret;