Messages in this thread | | | Date | Sun, 12 Dec 2010 11:28:10 +0200 | From | Avi Kivity <> | Subject | Re: [PATCH] Fix preempt imbalance in kvm_timer_init() |
| |
On 12/09/2010 08:42 PM, Thomas Meyer wrote: > Signed-off-by: Thomas Meyer<thomas@m3y3r.de> > --- > arch/x86/kvm/x86.c | 5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index cdac9e5..2609c3d 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -4561,7 +4561,7 @@ static struct notifier_block kvmclock_cpu_notifier_block = { > > static void kvm_timer_init(void) > { > - int cpu; > + int cpu = get_cpu(); > > max_tsc_khz = tsc_khz; > register_hotcpu_notifier(&kvmclock_cpu_notifier_block);
This eventually takes a mutex (in cpu_maps_update_begin()), so it can't be called with preemption disabled.
> @@ -4569,13 +4569,14 @@ static void kvm_timer_init(void) > #ifdef CONFIG_CPU_FREQ > struct cpufreq_policy policy; > memset(&policy, 0, sizeof(policy)); > - cpufreq_get_policy(&policy, get_cpu()); > + cpufreq_get_policy(&policy, cpu); > if (policy.cpuinfo.max_freq) > max_tsc_khz = policy.cpuinfo.max_freq; > #endif > cpufreq_register_notifier(&kvmclock_cpufreq_notifier_block, > CPUFREQ_TRANSITION_NOTIFIER); > } > + put_cpu(); > pr_debug("kvm: max_tsc_khz = %ld\n", max_tsc_khz); > for_each_online_cpu(cpu) > smp_call_function_single(cpu, tsc_khz_changed, NULL, 1);
-- error compiling committee.c: too many arguments to function
| |