| From e0fc17a936334c08b2729fff87168c03fdecf5b6 Mon Sep 17 00:00:00 2001 |
| From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |
| Date: Fri, 4 Apr 2014 14:48:04 -0400 |
| Subject: xen/spinlock: Don't enable them unconditionally. |
| |
| From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |
| |
| commit e0fc17a936334c08b2729fff87168c03fdecf5b6 upstream. |
| |
| The git commit a945928ea2709bc0e8e8165d33aed855a0110279 |
| ('xen: Do not enable spinlocks before jump_label_init() has executed') |
| was added to deal with the jump machinery. Earlier the code |
| that turned on the jump label was only called by Xen specific |
| functions. But now that it had been moved to the initcall machinery |
| it gets called on Xen, KVM, and baremetal - ouch!. And the detection |
| machinery to only call it on Xen wasn't remembered in the heat |
| of merge window excitement. |
| |
| This means that the slowpath is enabled on baremetal while it should |
| not be. |
| |
| Reported-by: Waiman Long <waiman.long@hp.com> |
| Acked-by: Steven Rostedt <rostedt@goodmis.org> |
| CC: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |
| Signed-off-by: David Vrabel <david.vrabel@citrix.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/xen/spinlock.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/arch/x86/xen/spinlock.c |
| +++ b/arch/x86/xen/spinlock.c |
| @@ -274,7 +274,7 @@ void __init xen_init_spinlocks(void) |
| printk(KERN_DEBUG "xen: PV spinlocks disabled\n"); |
| return; |
| } |
| - |
| + printk(KERN_DEBUG "xen: PV spinlocks enabled\n"); |
| pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning); |
| pv_lock_ops.unlock_kick = xen_unlock_kick; |
| } |
| @@ -290,6 +290,9 @@ static __init int xen_init_spinlocks_jum |
| if (!xen_pvspin) |
| return 0; |
| |
| + if (!xen_domain()) |
| + return 0; |
| + |
| static_key_slow_inc(¶virt_ticketlocks_enabled); |
| return 0; |
| } |