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


Groups > linux.kernel > #1432047

[PATCH 2/3] powerpc/spinlock: support vcpu preempted check

From Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>
Newsgroups linux.kernel
Subject [PATCH 2/3] powerpc/spinlock: support vcpu preempted check
Date 2016-06-27 15:50 +0200
Message-ID <rOF5f-Uh-13@gated-at.bofh.it> (permalink)
References <rOF5f-Uh-5@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


This is to fix some holder preemption issues. Spinning at one
vcpu which is preempted is meaningless.

Kernel need such interfaces, So lets support it.

We also should suooprt both the shared and dedicated mode.
So add lppaca_dedicated_proc macro in lppaca.h

Suggested-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>
---
 arch/powerpc/include/asm/lppaca.h   |  6 ++++++
 arch/powerpc/include/asm/spinlock.h | 15 +++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/arch/powerpc/include/asm/lppaca.h b/arch/powerpc/include/asm/lppaca.h
index d0a2a2f..0a263d3 100644
--- a/arch/powerpc/include/asm/lppaca.h
+++ b/arch/powerpc/include/asm/lppaca.h
@@ -111,12 +111,18 @@ extern struct lppaca lppaca[];
  * we will have to transition to something better.
  */
 #define LPPACA_OLD_SHARED_PROC		2
+#define LPPACA_OLD_DEDICATED_PROC      (1 << 6)
 
 static inline bool lppaca_shared_proc(struct lppaca *l)
 {
 	return !!(l->__old_status & LPPACA_OLD_SHARED_PROC);
 }
 
+static inline bool lppaca_dedicated_proc(struct lppaca *l)
+{
+	return !!(l->__old_status & LPPACA_OLD_DEDICATED_PROC);
+}
+
 /*
  * SLB shadow buffer structure as defined in the PAPR.  The save_area
  * contains adjacent ESID and VSID pairs for each shadowed SLB.  The
diff --git a/arch/powerpc/include/asm/spinlock.h b/arch/powerpc/include/asm/spinlock.h
index 523673d..ae938ee 100644
--- a/arch/powerpc/include/asm/spinlock.h
+++ b/arch/powerpc/include/asm/spinlock.h
@@ -52,6 +52,21 @@
 #define SYNC_IO
 #endif
 
+/* For fixing some spinning issues in a guest.
+ * kernel would check if vcpu is preempted during a spin loop.
+ * we support that.
+ */
+#define arch_vcpu_is_preempted arch_vcpu_is_preempted
+static inline bool arch_vcpu_is_preempted(int cpu)
+{
+	struct lppaca *lp = &lppaca_of(cpu);
+
+	if (unlikely(!(lppaca_shared_proc(lp) ||
+			lppaca_dedicated_proc(lp))))
+		return false;
+	return !!(be32_to_cpu(lp->yield_count) & 1);
+}
+
 static __always_inline int arch_spin_value_unlocked(arch_spinlock_t lock)
 {
 	return lock.slock == 0;
-- 
2.4.11

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


Thread

[PATCH 0/3] implement vcpu preempted check Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-06-27 15:50 +0200
  [PATCH 2/3] powerpc/spinlock: support vcpu preempted check Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-06-27 15:50 +0200
    Re: [PATCH 2/3] powerpc/spinlock: support vcpu preempted check Peter Zijlstra <peterz@infradead.org> - 2016-06-27 16:20 +0200
      Re: [PATCH 2/3] powerpc/spinlock: support vcpu preempted check xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-06-28 05:30 +0200
    Re: [PATCH 2/3] powerpc/spinlock: support vcpu preempted check Boqun Feng <boqun.feng@gmail.com> - 2016-06-27 17:00 +0200
      Re: [PATCH 2/3] powerpc/spinlock: support vcpu preempted check xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-06-28 05:50 +0200
        Re: [PATCH 2/3] powerpc/spinlock: support vcpu preempted check Boqun Feng <boqun.feng@gmail.com> - 2016-06-28 07:10 +0200
          Re: [PATCH 2/3] powerpc/spinlock: support vcpu preempted check xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-06-28 07:40 +0200
  [PATCH 1/3] kernel/sched: introduce vcpu preempted check interface Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-06-27 15:50 +0200
    Re: [PATCH 1/3] kernel/sched: introduce vcpu preempted check  interface Peter Zijlstra <peterz@infradead.org> - 2016-06-27 16:10 +0200
      Re: [PATCH 1/3] kernel/sched: introduce vcpu preempted check  interface Peter Zijlstra <peterz@infradead.org> - 2016-06-27 16:10 +0200
        Re: [PATCH 1/3] kernel/sched: introduce vcpu preempted check interface xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-06-28 05:20 +0200
      Re: [PATCH 1/3] kernel/sched: introduce vcpu preempted check  interface Heiko Carstens <heiko.carstens@de.ibm.com> - 2016-06-28 09:10 +0200
        Re: [PATCH 1/3] kernel/sched: introduce vcpu preempted check interface xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-06-28 11:50 +0200
    Re: [PATCH 1/3] kernel/sched: introduce vcpu preempted check  interface Boqun Feng <boqun.feng@gmail.com> - 2016-06-27 16:10 +0200
      Re: [PATCH 1/3] kernel/sched: introduce vcpu preempted check interface xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-06-28 05:20 +0200

csiph-web