Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1505128

[PATCH v5 5/9] x86, paravirt: Add interface to support kvm/xen vcpu preempted check

From Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>
Newsgroups linux.kernel
Subject [PATCH v5 5/9] x86, paravirt: Add interface to support kvm/xen vcpu preempted check
Date 2016-10-20 19:40 +0200
Message-ID <suptU-2bV-35@gated-at.bofh.it> (permalink)
References <suptT-2bV-1@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


This is to fix some lock holder preemption issues. Some other locks
implementation do a spin loop before acquiring the lock itself.
Currently kernel has an interface of bool vcpu_is_preempted(int cpu). It
takes the cpu as parameter and return true if the cpu is preempted.
Then kernel can break the spin loops upon on the retval of
vcpu_is_preempted.

As kernel has used this interface, So lets support it.

To deal with kernel and kvm/xen, add vcpu_is_preempted into struct
pv_lock_ops.

Then kvm or xen could provide their own implementation to support
vcpu_is_preempted.

Signed-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>
---
 arch/x86/include/asm/paravirt_types.h | 2 ++
 arch/x86/include/asm/spinlock.h       | 8 ++++++++
 arch/x86/kernel/paravirt-spinlocks.c  | 6 ++++++
 3 files changed, 16 insertions(+)

diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
index 0f400c0..38c3bb7 100644
--- a/arch/x86/include/asm/paravirt_types.h
+++ b/arch/x86/include/asm/paravirt_types.h
@@ -310,6 +310,8 @@ struct pv_lock_ops {
 
 	void (*wait)(u8 *ptr, u8 val);
 	void (*kick)(int cpu);
+
+	bool (*vcpu_is_preempted)(int cpu);
 };
 
 /* This contains all the paravirt structures: we get a convenient
diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h
index 921bea7..0526f59 100644
--- a/arch/x86/include/asm/spinlock.h
+++ b/arch/x86/include/asm/spinlock.h
@@ -26,6 +26,14 @@
 extern struct static_key paravirt_ticketlocks_enabled;
 static __always_inline bool static_key_false(struct static_key *key);
 
+#ifdef CONFIG_PARAVIRT_SPINLOCKS
+#define vcpu_is_preempted vcpu_is_preempted
+static inline bool vcpu_is_preempted(int cpu)
+{
+	return pv_lock_ops.vcpu_is_preempted(cpu);
+}
+#endif
+
 #include <asm/qspinlock.h>
 
 /*
diff --git a/arch/x86/kernel/paravirt-spinlocks.c b/arch/x86/kernel/paravirt-spinlocks.c
index 2c55a00..2f204dd 100644
--- a/arch/x86/kernel/paravirt-spinlocks.c
+++ b/arch/x86/kernel/paravirt-spinlocks.c
@@ -21,12 +21,18 @@ bool pv_is_native_spin_unlock(void)
 		__raw_callee_save___native_queued_spin_unlock;
 }
 
+static bool native_vcpu_is_preempted(int cpu)
+{
+	return 0;
+}
+
 struct pv_lock_ops pv_lock_ops = {
 #ifdef CONFIG_SMP
 	.queued_spin_lock_slowpath = native_queued_spin_lock_slowpath,
 	.queued_spin_unlock = PV_CALLEE_SAVE(__native_queued_spin_unlock),
 	.wait = paravirt_nop,
 	.kick = paravirt_nop,
+	.vcpu_is_preempted = native_vcpu_is_preempted,
 #endif /* SMP */
 };
 EXPORT_SYMBOL(pv_lock_ops);
-- 
2.4.11

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v5 0/9] implement vcpu preempted check Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-20 19:40 +0200
  [PATCH v5 2/9] locking/osq: Drop the overload of osq_lock() Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-20 19:40 +0200
  [PATCH v5 8/9] s390/spinlock: Provide vcpu_is_preempted Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-20 19:40 +0200
  [PATCH v5 3/9] kernel/locking: Drop the overload of {mutex,rwsem}_spin_on_owner Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-20 19:40 +0200
  [PATCH v5 1/9] kernel/sched: introduce vcpu preempted check interface Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-20 19:40 +0200
  [PATCH v5 7/9] x86, xen: support vcpu preempted check Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-20 19:40 +0200
    Re: [PATCH v5 7/9] x86, xen: support vcpu preempted check Juergen Gross <jgross@suse.com> - 2016-10-21 07:10 +0200
  [PATCH v5 5/9] x86, paravirt: Add interface to support kvm/xen vcpu preempted check Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-20 19:40 +0200
  [PATCH v5 9/9] Documentation: virtual: kvm: Support vcpu preempted check Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-20 19:40 +0200
    Re: [PATCH v5 9/9] Documentation: virtual: kvm: Support vcpu  preempted check Boqun Feng <boqun.feng@gmail.com> - 2016-10-21 03:30 +0200
    RE: [PATCH v5 9/9] Documentation: virtual: kvm: Support vcpu  preempted check David Laight <David.Laight@ACULAB.COM> - 2016-10-21 13:40 +0200
      Re: [PATCH v5 9/9] Documentation: virtual: kvm: Support vcpu  preempted check "rkrcmar@redhat.com" <rkrcmar@redhat.com> - 2016-10-21 20:50 +0200
        Re: [PATCH v5 9/9] Documentation: virtual: kvm: Support vcpu preempted  check xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-24 04:50 +0200
        Re: [PATCH v5 9/9] Documentation: virtual: kvm: Support vcpu  preempted check Paolo Bonzini <pbonzini@redhat.com> - 2016-10-24 16:50 +0200
          Re: [PATCH v5 9/9] Documentation: virtual: kvm: Support vcpu  preempted check "rkrcmar@redhat.com" <rkrcmar@redhat.com> - 2016-10-24 17:10 +0200
      Re: [PATCH v5 9/9] Documentation: virtual: kvm: Support vcpu preempted  check xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-24 04:50 +0200
    Re: [PATCH v5 9/9] Documentation: virtual: kvm: Support vcpu preempted  check xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-24 10:20 +0200
  [PATCH v5 4/9] powerpc/spinlock: support vcpu preempted check Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-20 19:40 +0200
  [PATCH v5 6/9] x86, kvm: support vcpu preempted check Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-20 19:40 +0200
    Re: [PATCH v5 6/9] x86, kvm: support vcpu preempted check xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-10-24 10:10 +0200
  Re: [PATCH v5 0/9] implement vcpu preempted check Peter Zijlstra <peterz@infradead.org> - 2016-10-21 07:50 +0200

csiph-web