Il 09/10/2013 11:03, Raghavendra K T ha scritto: > We use jump label to enable pv-spinlock. With the changes in > (442e0973e927 Merge branch 'x86/jumplabel'), the jump label behaviour has changed > that would result in evntual hang of the VM since we would end up in a situation > where slowpath locks would halt the vcpus but we will not be able to wakeup the > vcpu by lock releaser using unlock kick. > > Similar problem in Xen and more detailed description is available in > a945928ea270 (xen: Do not enable spinlocks before jump_label_init() has executed) > > This patch splits kvm_spinlock_init to separate jump label changes with pvops > patching and also make jump label enabling after jump_label_init(). > > Signed-off-by: Raghavendra K T <raghavendra.kt@xxxxxxxxxxxxxxxxxx> > --- > Thanks to Andrew Theurer who reported weird behaviour of pvspinlock > in 3.12-rc that led to my git bisection and investigation and Konrad > for his jump label findings for Xen. > > arch/x86/kernel/kvm.c | 17 ++++++++++++++--- > 1 file changed, 14 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c > index 697b93a..a0e2a8a 100644 > --- a/arch/x86/kernel/kvm.c > +++ b/arch/x86/kernel/kvm.c > @@ -775,11 +775,22 @@ void __init kvm_spinlock_init(void) > if (!kvm_para_has_feature(KVM_FEATURE_PV_UNHALT)) > return; > > - printk(KERN_INFO "KVM setup paravirtual spinlock\n"); > + pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(kvm_lock_spinning); > + pv_lock_ops.unlock_kick = kvm_unlock_kick; > +} > + > +static __init int kvm_spinlock_init_jump(void) > +{ > + if (!kvm_para_available()) > + return 0; > + if (!kvm_para_has_feature(KVM_FEATURE_PV_UNHALT)) > + return 0; > > static_key_slow_inc(¶virt_ticketlocks_enabled); > + printk(KERN_INFO "KVM setup paravirtual spinlock\n"); > > - pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(kvm_lock_spinning); > - pv_lock_ops.unlock_kick = kvm_unlock_kick; > + return 0; > } > +early_initcall(kvm_spinlock_init_jump); > + > #endif /* CONFIG_PARAVIRT_SPINLOCKS */ > Reviewed-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html