From: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> To: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, virtualization@lists.linux-foundation.org, linux-s390@vger.kernel.org, xen-devel-request@lists.xenproject.org, kvm@vger.kernel.org Cc: benh@kernel.crashing.org, paulus@samba.org, mpe@ellerman.id.au, mingo@redhat.com, peterz@infradead.org, paulmck@linux.vnet.ibm.com, will.deacon@arm.com, kernellwp@gmail.com, jgross@suse.com, pbonzini@redhat.com, bsingharora@gmail.com, boqun.feng@gmail.com, borntraeger@de.ibm.com, Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> Subject: [PATCH v4 4/5] powerpc/spinlock: support vcpu preempted check Date: Wed, 19 Oct 2016 06:20:15 -0400 [thread overview] Message-ID: <1476872416-42752-5-git-send-email-xinhui.pan@linux.vnet.ibm.com> (raw) In-Reply-To: <1476872416-42752-1-git-send-email-xinhui.pan@linux.vnet.ibm.com> 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. Only pSeries need support it. And the fact is powerNV are built into same kernel image with pSeries. So we need return false if we are runnig as powerNV. The another fact is that lppaca->yiled_count keeps zero on powerNV. So we can just skip the machine type check. Suggested-by: Boqun Feng <boqun.feng@gmail.com> Suggested-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> --- arch/powerpc/include/asm/spinlock.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/powerpc/include/asm/spinlock.h b/arch/powerpc/include/asm/spinlock.h index abb6b0f..af4285b 100644 --- a/arch/powerpc/include/asm/spinlock.h +++ b/arch/powerpc/include/asm/spinlock.h @@ -52,6 +52,14 @@ #define SYNC_IO #endif +#ifdef CONFIG_PPC_PSERIES +#define vcpu_is_preempted vcpu_is_preempted +static inline bool vcpu_is_preempted(int cpu) +{ + return !!(be32_to_cpu(lppaca_of(cpu).yield_count) & 1); +} +#endif + #if defined(CONFIG_PPC_SPLPAR) /* We only yield to the hypervisor if we are in shared processor mode */ #define SHARED_PROCESSOR (lppaca_shared_proc(local_paca->lppaca_ptr)) -- 2.4.11
WARNING: multiple messages have this Message-ID (diff)
From: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> To: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, virtualization@lists.linux-foundation.org, linux-s390@vger.kernel.org, xen-devel-request@lists.xenproject.org, kvm@vger.kernel.org Cc: kernellwp@gmail.com, jgross@suse.com, Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>, peterz@infradead.org, benh@kernel.crashing.org, will.deacon@arm.com, mingo@redhat.com, paulus@samba.org, mpe@ellerman.id.au, pbonzini@redhat.com, paulmck@linux.vnet.ibm.com, boqun.feng@gmail.com Subject: [PATCH v4 4/5] powerpc/spinlock: support vcpu preempted check Date: Wed, 19 Oct 2016 06:20:15 -0400 [thread overview] Message-ID: <1476872416-42752-5-git-send-email-xinhui.pan@linux.vnet.ibm.com> (raw) In-Reply-To: <1476872416-42752-1-git-send-email-xinhui.pan@linux.vnet.ibm.com> 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. Only pSeries need support it. And the fact is powerNV are built into same kernel image with pSeries. So we need return false if we are runnig as powerNV. The another fact is that lppaca->yiled_count keeps zero on powerNV. So we can just skip the machine type check. Suggested-by: Boqun Feng <boqun.feng@gmail.com> Suggested-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> --- arch/powerpc/include/asm/spinlock.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/powerpc/include/asm/spinlock.h b/arch/powerpc/include/asm/spinlock.h index abb6b0f..af4285b 100644 --- a/arch/powerpc/include/asm/spinlock.h +++ b/arch/powerpc/include/asm/spinlock.h @@ -52,6 +52,14 @@ #define SYNC_IO #endif +#ifdef CONFIG_PPC_PSERIES +#define vcpu_is_preempted vcpu_is_preempted +static inline bool vcpu_is_preempted(int cpu) +{ + return !!(be32_to_cpu(lppaca_of(cpu).yield_count) & 1); +} +#endif + #if defined(CONFIG_PPC_SPLPAR) /* We only yield to the hypervisor if we are in shared processor mode */ #define SHARED_PROCESSOR (lppaca_shared_proc(local_paca->lppaca_ptr)) -- 2.4.11
next prev parent reply other threads:[~2016-10-19 6:23 UTC|newest] Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-10-19 10:20 [PATCH v4 0/5] implement vcpu preempted check Pan Xinhui 2016-10-19 6:47 ` Christian Borntraeger 2016-10-19 6:47 ` Christian Borntraeger 2016-10-19 16:57 ` Pan Xinhui 2016-10-19 16:57 ` Pan Xinhui 2016-10-19 10:20 ` [PATCH v4 1/5] kernel/sched: introduce vcpu preempted check interface Pan Xinhui 2016-10-19 10:20 ` Pan Xinhui 2016-10-19 10:20 ` [PATCH v4 2/5] locking/osq: Drop the overload of osq_lock() Pan Xinhui 2016-10-19 10:20 ` Pan Xinhui 2016-10-19 10:20 ` [PATCH v4 3/5] kernel/locking: Drop the overload of {mutex,rwsem}_spin_on_owner Pan Xinhui 2016-10-19 10:20 ` [PATCH v4 3/5] kernel/locking: Drop the overload of {mutex, rwsem}_spin_on_owner Pan Xinhui 2016-10-19 10:20 ` Pan Xinhui 2016-10-19 10:20 ` Pan Xinhui [this message] 2016-10-19 10:20 ` [PATCH v4 4/5] powerpc/spinlock: support vcpu preempted check Pan Xinhui 2016-10-19 10:20 ` [PATCH v4 5/5] x86, kvm: " Pan Xinhui 2016-10-19 10:20 ` Pan Xinhui 2016-10-19 17:24 ` Radim Krčmář 2016-10-19 17:24 ` Radim Krčmář 2016-10-19 18:45 ` Pan Xinhui 2016-10-19 18:45 ` Pan Xinhui 2016-10-24 14:39 ` Paolo Bonzini 2016-10-24 15:14 ` Radim Krčmář 2016-10-24 15:14 ` Radim Krčmář 2016-10-24 15:18 ` Paolo Bonzini 2016-10-25 1:25 ` Pan Xinhui 2016-10-25 1:25 ` Pan Xinhui 2016-10-24 15:18 ` Paolo Bonzini 2016-10-24 14:39 ` Paolo Bonzini 2016-10-19 15:58 ` [PATCH v4 0/5] implement " Juergen Gross 2016-10-19 15:58 ` Juergen Gross 2016-10-19 15:58 ` Juergen Gross 2016-10-19 15:58 ` Juergen Gross 2016-10-19 17:08 ` Pan Xinhui 2016-10-19 17:08 ` Pan Xinhui 2016-10-19 17:08 ` Pan Xinhui
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1476872416-42752-5-git-send-email-xinhui.pan@linux.vnet.ibm.com \ --to=xinhui.pan@linux.vnet.ibm.com \ --cc=benh@kernel.crashing.org \ --cc=boqun.feng@gmail.com \ --cc=borntraeger@de.ibm.com \ --cc=bsingharora@gmail.com \ --cc=jgross@suse.com \ --cc=kernellwp@gmail.com \ --cc=kvm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-s390@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=mingo@redhat.com \ --cc=mpe@ellerman.id.au \ --cc=paulmck@linux.vnet.ibm.com \ --cc=paulus@samba.org \ --cc=pbonzini@redhat.com \ --cc=peterz@infradead.org \ --cc=virtualization@lists.linux-foundation.org \ --cc=will.deacon@arm.com \ --cc=xen-devel-request@lists.xenproject.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.