On 02-03-20, 09:39, Paolo Bonzini wrote: > On 02/03/20 09:12, Viresh Kumar wrote: > > On 02-03-20, 08:55, Paolo Bonzini wrote: > >> On 02/03/20 08:15, Wanpeng Li wrote: > >>> From: Wanpeng Li <wanpengli@xxxxxxxxxxx> > >>> > >>> cpufreq policy which is get by cpufreq_cpu_get() can be NULL if it is failure, > >>> this patch takes care of it. > >>> > >>> Fixes: aaec7c03de (KVM: x86: avoid useless copy of cpufreq policy) > >>> Reported-by: Naresh Kamboju <naresh.kamboju@xxxxxxxxxx> > >>> Cc: Naresh Kamboju <naresh.kamboju@xxxxxxxxxx> > >>> Signed-off-by: Wanpeng Li <wanpengli@xxxxxxxxxxx> > >> > >> My bad, I checked kobject_put but didn't check that kobj is first in > >> struct cpufreq_policy. > >> > >> I think we should do this in cpufreq_cpu_put or, even better, move the > >> kobject struct first in struct cpufreq_policy. Rafael, Viresh, any > >> objection? > >> > >> Paolo > >> > >>> policy = cpufreq_cpu_get(cpu); > >>> - if (policy && policy->cpuinfo.max_freq) > >>> - max_tsc_khz = policy->cpuinfo.max_freq; > >>> + if (policy) { > >>> + if (policy->cpuinfo.max_freq) > >>> + max_tsc_khz = policy->cpuinfo.max_freq; > >>> + cpufreq_cpu_put(policy); > >>> + } > > > > I think this change makes sense and I am not sure why should we even > > try to support cpufreq_cpu_put(NULL). > > For the same reason why we support kfree(NULL) and kobject_put(NULL)? These two helpers are used widely within kernel and many a times the resource is taken by one routine and dropped by another, and so someone needed to check if it can call the resource-free helper safely or not. IMO, that's not the case with cpufreq_cpu_put(). It is used mostly by the cpufreq core only and not too often by external entities. And even in that case we don't need to call cpufreq_cpu_put() from a different routine than the one which called cpufreq_cpu_get(). Like in your case. And so there is no need of an extra check to be made. I don't think we need to support cpufreq_cpu_put(NULL), but if Rafael wants it to be supported, I won't object to it. -- viresh