Fix preempt imbalance in kvm_timer_init()
PATCH 1/1 Fix preempt imbalance in kvm_timer_init()
Signed-off-by Thomas Meyer <[email protected]>
--- arch/x86/kvm/x86.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
arch/x86/kvm/x86.c +3 -2
@@ -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);
@@ -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 );
Signature · 1 line
1.7.3.3
Quoted 10 lines · Thomas Meyer
Signed-off-by Thomas Meyer<[email protected]>--- arch/x86/kvm/x86.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)arch/x86/kvm/x86.c +0
-0
arch/x86/kvm/x86.c static struct notifier_block kvmclock_cpu_notifier_block = { · line 4567
Quoted 8 lines
arch/x86/kvm/x86.c +1
-1@@ -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.
Quoted 16 lines
arch/x86/kvm/x86.c +2
-1@@ -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 );
Signature · 1 line
error compiling committee.c: too many arguments to function