All of lore.kernel.org
 help / color / mirror / Atom feed
From: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
To: Jeremy Fitzhardinge <jeremy@goop.org>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	"H. Peter Anvin" <hpa@zytor.com>, Avi Kivity <avi@redhat.com>,
	X86 <x86@kernel.org>, Gleb Natapov <gleb@redhat.com>,
	Ingo Molnar <mingo@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>
Cc: Xen Devel <xen-devel@lists.xensource.com>,
	KVM <kvm@vger.kernel.org>,
	linux-doc@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>,
	Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>,
	Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>,
	Virtualization <virtualization@lists.linux-foundation.org>,
	Andi Kleen <andi@firstfloor.org>,
	Stephan Diestelhorst <stephan.diestelhorst@amd.com>,
	Attilio Rao <attilio.rao@citrix.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: [PATCH RFC V8 7/17] x86/pvticketlock: Use callee-save for lock_spinning
Date: Wed, 02 May 2012 15:37:42 +0530	[thread overview]
Message-ID: <20120502100742.13206.30771.sendpatchset@codeblue.in.ibm.com> (raw)
In-Reply-To: <20120502100610.13206.40.sendpatchset@codeblue.in.ibm.com>

From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>

Although the lock_spinning calls in the spinlock code are on the
uncommon path, their presence can cause the compiler to generate many
more register save/restores in the function pre/postamble, which is in
the fast path.  To avoid this, convert it to using the pvops callee-save
calling convention, which defers all the save/restores until the actual
function is called, keeping the fastpath clean.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tested-by: Attilio Rao <attilio.rao@citrix.com> 
Signed-off-by: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
---
 arch/x86/include/asm/paravirt.h       |    2 +-
 arch/x86/include/asm/paravirt_types.h |    2 +-
 arch/x86/kernel/paravirt-spinlocks.c  |    2 +-
 arch/x86/xen/spinlock.c               |    3 ++-
 4 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
index 4bcd146..9769096 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
@@ -754,7 +754,7 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx,
 static __always_inline void __ticket_lock_spinning(struct arch_spinlock *lock,
 							__ticket_t ticket)
 {
-	PVOP_VCALL2(pv_lock_ops.lock_spinning, lock, ticket);
+	PVOP_VCALLEE2(pv_lock_ops.lock_spinning, lock, ticket);
 }
 
 static __always_inline void ____ticket_unlock_kick(struct arch_spinlock *lock,
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
index 005e24d..5e0c138 100644
--- a/arch/x86/include/asm/paravirt_types.h
+++ b/arch/x86/include/asm/paravirt_types.h
@@ -330,7 +330,7 @@ struct arch_spinlock;
 #include <asm/spinlock_types.h>
 
 struct pv_lock_ops {
-	void (*lock_spinning)(struct arch_spinlock *lock, __ticket_t ticket);
+	struct paravirt_callee_save lock_spinning;
 	void (*unlock_kick)(struct arch_spinlock *lock, __ticket_t ticket);
 };
 
diff --git a/arch/x86/kernel/paravirt-spinlocks.c b/arch/x86/kernel/paravirt-spinlocks.c
index c2e010e..4251c1d 100644
--- a/arch/x86/kernel/paravirt-spinlocks.c
+++ b/arch/x86/kernel/paravirt-spinlocks.c
@@ -9,7 +9,7 @@
 
 struct pv_lock_ops pv_lock_ops = {
 #ifdef CONFIG_SMP
-	.lock_spinning = paravirt_nop,
+	.lock_spinning = __PV_IS_CALLEE_SAVE(paravirt_nop),
 	.unlock_kick = paravirt_nop,
 #endif
 };
diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
index c4886dc..c47a8d1 100644
--- a/arch/x86/xen/spinlock.c
+++ b/arch/x86/xen/spinlock.c
@@ -171,6 +171,7 @@ out:
 	local_irq_restore(flags);
 	spin_time_accum_blocked(start);
 }
+PV_CALLEE_SAVE_REGS_THUNK(xen_lock_spinning);
 
 static void xen_unlock_kick(struct arch_spinlock *lock, __ticket_t next)
 {
@@ -230,7 +231,7 @@ void __init xen_init_spinlocks(void)
 		return;
 	}
 
-	pv_lock_ops.lock_spinning = xen_lock_spinning;
+	pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning);
 	pv_lock_ops.unlock_kick = xen_unlock_kick;
 }

WARNING: multiple messages have this Message-ID (diff)
From: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
To: Jeremy Fitzhardinge <jeremy@goop.org>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	"H. Peter Anvin" <hpa@zytor.com>, Avi Kivity <avi@redhat.com>,
	X86 <x86@kernel.org>, Gleb Natapov <gleb@redhat.com>,
	Ingo Molnar <mingo@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>
Cc: Attilio Rao <attilio.rao@citrix.com>,
	Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>,
	linux-doc@vger.kernel.org,
	Virtualization <virtualization@lists.linux-foundation.org>,
	Xen Devel <xen-devel@lists.xensource.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	KVM <kvm@vger.kernel.org>, Andi Kleen <andi@firstfloor.org>,
	Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	Stephan Diestelhorst <stephan.diestelhorst@amd.com>,
	LKML <linux-kernel@vger.kernel.org>
Subject: [PATCH RFC V8 7/17]  x86/pvticketlock: Use callee-save for lock_spinning
Date: Wed, 02 May 2012 15:37:42 +0530	[thread overview]
Message-ID: <20120502100742.13206.30771.sendpatchset@codeblue.in.ibm.com> (raw)
In-Reply-To: <20120502100610.13206.40.sendpatchset@codeblue.in.ibm.com>

From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>

Although the lock_spinning calls in the spinlock code are on the
uncommon path, their presence can cause the compiler to generate many
more register save/restores in the function pre/postamble, which is in
the fast path.  To avoid this, convert it to using the pvops callee-save
calling convention, which defers all the save/restores until the actual
function is called, keeping the fastpath clean.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tested-by: Attilio Rao <attilio.rao@citrix.com> 
Signed-off-by: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
---
 arch/x86/include/asm/paravirt.h       |    2 +-
 arch/x86/include/asm/paravirt_types.h |    2 +-
 arch/x86/kernel/paravirt-spinlocks.c  |    2 +-
 arch/x86/xen/spinlock.c               |    3 ++-
 4 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
index 4bcd146..9769096 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
@@ -754,7 +754,7 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx,
 static __always_inline void __ticket_lock_spinning(struct arch_spinlock *lock,
 							__ticket_t ticket)
 {
-	PVOP_VCALL2(pv_lock_ops.lock_spinning, lock, ticket);
+	PVOP_VCALLEE2(pv_lock_ops.lock_spinning, lock, ticket);
 }
 
 static __always_inline void ____ticket_unlock_kick(struct arch_spinlock *lock,
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
index 005e24d..5e0c138 100644
--- a/arch/x86/include/asm/paravirt_types.h
+++ b/arch/x86/include/asm/paravirt_types.h
@@ -330,7 +330,7 @@ struct arch_spinlock;
 #include <asm/spinlock_types.h>
 
 struct pv_lock_ops {
-	void (*lock_spinning)(struct arch_spinlock *lock, __ticket_t ticket);
+	struct paravirt_callee_save lock_spinning;
 	void (*unlock_kick)(struct arch_spinlock *lock, __ticket_t ticket);
 };
 
diff --git a/arch/x86/kernel/paravirt-spinlocks.c b/arch/x86/kernel/paravirt-spinlocks.c
index c2e010e..4251c1d 100644
--- a/arch/x86/kernel/paravirt-spinlocks.c
+++ b/arch/x86/kernel/paravirt-spinlocks.c
@@ -9,7 +9,7 @@
 
 struct pv_lock_ops pv_lock_ops = {
 #ifdef CONFIG_SMP
-	.lock_spinning = paravirt_nop,
+	.lock_spinning = __PV_IS_CALLEE_SAVE(paravirt_nop),
 	.unlock_kick = paravirt_nop,
 #endif
 };
diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
index c4886dc..c47a8d1 100644
--- a/arch/x86/xen/spinlock.c
+++ b/arch/x86/xen/spinlock.c
@@ -171,6 +171,7 @@ out:
 	local_irq_restore(flags);
 	spin_time_accum_blocked(start);
 }
+PV_CALLEE_SAVE_REGS_THUNK(xen_lock_spinning);
 
 static void xen_unlock_kick(struct arch_spinlock *lock, __ticket_t next)
 {
@@ -230,7 +231,7 @@ void __init xen_init_spinlocks(void)
 		return;
 	}
 
-	pv_lock_ops.lock_spinning = xen_lock_spinning;
+	pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning);
 	pv_lock_ops.unlock_kick = xen_unlock_kick;
 }
 


  parent reply	other threads:[~2012-05-02 10:07 UTC|newest]

Thread overview: 139+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-02 10:06 [PATCH RFC V8 0/17] Paravirtualized ticket spinlocks Raghavendra K T
2012-05-02 10:06 ` Raghavendra K T
2012-05-02 10:06 ` [PATCH RFC V8 1/17] x86/spinlock: Replace pv spinlocks with pv ticketlocks Raghavendra K T
2012-05-02 10:06 ` Raghavendra K T
2012-05-02 10:06 ` [PATCH RFC V8 2/17] x86/ticketlock: Don't inline _spin_unlock when using paravirt spinlocks Raghavendra K T
2012-05-02 10:06 ` Raghavendra K T
2012-05-02 10:06 ` [PATCH RFC V8 3/17] x86/ticketlock: Collapse a layer of functions Raghavendra K T
2012-05-02 10:06   ` Raghavendra K T
2012-05-02 10:07 ` [PATCH RFC V8 4/17] xen: Defer spinlock setup until boot CPU setup Raghavendra K T
2012-05-02 10:07   ` Raghavendra K T
2012-05-02 10:07 ` [PATCH RFC V8 5/17] xen/pvticketlock: Xen implementation for PV ticket locks Raghavendra K T
2012-05-02 10:07   ` Raghavendra K T
2012-05-02 10:07 ` [PATCH RFC V8 6/17] xen/pvticketlocks: Add xen_nopvspin parameter to disable xen pv ticketlocks Raghavendra K T
2012-05-02 10:07 ` Raghavendra K T
2012-05-02 10:07 ` Raghavendra K T [this message]
2012-05-02 10:07   ` [PATCH RFC V8 7/17] x86/pvticketlock: Use callee-save for lock_spinning Raghavendra K T
2012-05-02 10:07 ` [PATCH RFC V8 8/17] x86/pvticketlock: When paravirtualizing ticket locks, increment by 2 Raghavendra K T
2012-05-02 10:07 ` Raghavendra K T
2012-05-02 10:08 ` [PATCH RFC V8 9/17] Split out rate limiting from jump_label.h Raghavendra K T
2012-05-02 10:08   ` Raghavendra K T
2012-05-02 10:08 ` [PATCH RFC V8 10/17] x86/ticketlock: Add slowpath logic Raghavendra K T
2012-05-02 10:08   ` Raghavendra K T
2012-05-02 10:08 ` [PATCH RFC V8 11/17] xen/pvticketlock: Allow interrupts to be enabled while blocking Raghavendra K T
2012-05-02 10:08 ` Raghavendra K T
2012-05-02 10:08 ` [PATCH RFC V8 12/17] xen: Enable PV ticketlocks on HVM Xen Raghavendra K T
2012-05-02 10:08   ` Raghavendra K T
2012-05-02 10:08 ` [PATCH RFC V8 13/17] kvm hypervisor : Add a hypercall to KVM hypervisor to support pv-ticketlocks Raghavendra K T
2012-05-02 10:08   ` Raghavendra K T
2012-05-02 10:09 ` [PATCH RFC V8 14/17] kvm : Fold pv_unhalt flag into GET_MP_STATE ioctl to aid migration Raghavendra K T
2012-05-02 10:09   ` Raghavendra K T
2012-05-02 10:09 ` [PATCH RFC V8 15/17] kvm guest : Add configuration support to enable debug information for KVM Guests Raghavendra K T
2012-05-02 10:09   ` Raghavendra K T
2012-05-02 10:09 ` [PATCH RFC V8 16/17] kvm : Paravirtual ticketlocks support for linux guests running on KVM hypervisor Raghavendra K T
2012-05-02 10:09 ` Raghavendra K T
2012-05-02 10:09 ` [PATCH RFC V8 17/17] Documentation/kvm : Add documentation on Hypercalls and features used for PV spinlock Raghavendra K T
2012-05-02 10:09   ` Raghavendra K T
2012-05-30 11:54   ` Jan Kiszka
2012-05-30 11:54   ` Jan Kiszka
2012-05-30 13:44     ` Raghavendra K T
2012-05-30 13:44       ` Raghavendra K T
2012-05-07  8:29 ` [PATCH RFC V8 0/17] Paravirtualized ticket spinlocks Ingo Molnar
2012-05-07  8:29 ` Ingo Molnar
2012-05-07  8:29   ` Ingo Molnar
2012-05-07  8:32   ` Avi Kivity
2012-05-07  8:32     ` Avi Kivity
2012-05-07 10:58     ` Raghavendra K T
2012-05-07 10:58       ` Raghavendra K T
2012-05-07 12:06       ` Avi Kivity
2012-05-07 12:06         ` Avi Kivity
2012-05-07 13:20         ` Raghavendra K T
2012-05-07 13:20         ` Raghavendra K T
2012-05-07 13:20           ` Raghavendra K T
2012-05-07 13:20           ` Raghavendra K T
2012-05-07 13:22           ` Avi Kivity
2012-05-07 13:22             ` Avi Kivity
2012-05-07 13:38             ` Raghavendra K T
2012-05-07 13:38             ` Raghavendra K T
2012-05-07 13:38               ` Raghavendra K T
2012-05-07 13:38               ` Raghavendra K T
2012-05-07 13:46               ` Srivatsa Vaddagiri
2012-05-07 13:46               ` Srivatsa Vaddagiri
2012-05-07 13:46                 ` Srivatsa Vaddagiri
2012-05-07 13:46                 ` Srivatsa Vaddagiri
2012-05-07 13:49                 ` Avi Kivity
2012-05-07 13:49                   ` Avi Kivity
2012-05-07 13:53                   ` Raghavendra K T
2012-05-07 13:53                     ` Raghavendra K T
2012-05-07 13:53                     ` Raghavendra K T
2012-05-07 13:58                     ` Avi Kivity
2012-05-07 13:58                       ` Avi Kivity
2012-05-07 14:47                       ` Raghavendra K T
2012-05-07 14:47                         ` Raghavendra K T
2012-05-07 14:52                         ` Avi Kivity
2012-05-07 14:52                           ` Avi Kivity
2012-05-07 14:54                           ` Avi Kivity
2012-05-07 14:54                             ` Avi Kivity
2012-05-07 17:25                           ` Ingo Molnar
2012-05-07 17:25                           ` Ingo Molnar
2012-05-07 17:25                             ` Ingo Molnar
2012-05-07 17:25                             ` Ingo Molnar
2012-05-07 20:42                             ` Thomas Gleixner
2012-05-07 20:42                             ` Thomas Gleixner
2012-05-07 20:42                               ` Thomas Gleixner
2012-05-07 20:42                               ` Thomas Gleixner
2012-05-08  6:46                               ` Nikunj A Dadhania
2012-05-08  6:46                                 ` Nikunj A Dadhania
2012-05-08  6:46                                 ` Nikunj A Dadhania
2012-05-08  6:46                               ` Nikunj A Dadhania
2012-05-15 11:26                             ` [Xen-devel] " Jan Beulich
2012-05-15 11:26                               ` Jan Beulich
2012-05-15 11:26                               ` Jan Beulich
2012-05-08  5:25                           ` Raghavendra K T
2012-05-08  5:25                           ` Raghavendra K T
2012-05-08  5:25                             ` Raghavendra K T
2012-05-08  5:25                             ` Raghavendra K T
2012-05-13 18:45                           ` Raghavendra K T
2012-05-13 18:45                             ` Raghavendra K T
2012-05-13 18:45                             ` Raghavendra K T
2012-05-14  4:57                             ` Nikunj A Dadhania
2012-05-14  4:57                             ` Nikunj A Dadhania
2012-05-14  4:57                               ` Nikunj A Dadhania
2012-05-14  4:57                               ` Nikunj A Dadhania
2012-05-14  9:01                               ` Raghavendra K T
2012-05-14  9:01                               ` Raghavendra K T
2012-05-14  9:01                                 ` Raghavendra K T
2012-05-14  9:01                                 ` Raghavendra K T
2012-05-14  7:38                             ` Jeremy Fitzhardinge
2012-05-14  7:38                               ` Jeremy Fitzhardinge
2012-05-14  8:11                               ` Raghavendra K T
2012-05-14  8:11                                 ` Raghavendra K T
2012-05-16  3:19                             ` Raghavendra K T
2012-05-16  3:19                               ` Raghavendra K T
2012-05-16  3:19                               ` Raghavendra K T
2012-05-30 11:26                               ` Raghavendra K T
2012-05-30 11:26                               ` Raghavendra K T
2012-05-30 11:26                                 ` Raghavendra K T
2012-05-30 11:26                                 ` Raghavendra K T
2012-06-14 12:21                                 ` Raghavendra K T
2012-06-14 12:21                                 ` Raghavendra K T
2012-06-14 12:21                                   ` Raghavendra K T
2012-06-14 12:21                                   ` Raghavendra K T
2012-05-07 13:53                   ` Raghavendra K T
2012-05-07 13:55                   ` Srivatsa Vaddagiri
2012-05-07 13:55                   ` Srivatsa Vaddagiri
2012-05-07 13:55                     ` Srivatsa Vaddagiri
2012-05-07 23:15                   ` Jeremy Fitzhardinge
2012-05-07 23:15                     ` Jeremy Fitzhardinge
2012-05-08  1:13                     ` Raghavendra K T
2012-05-08  1:13                     ` Raghavendra K T
2012-05-08  9:08                     ` Avi Kivity
2012-05-08  9:08                       ` Avi Kivity
2012-05-07 13:56                 ` Raghavendra K T
2012-05-07 13:56                 ` Raghavendra K T
2012-05-07 13:56                   ` Raghavendra K T
2012-05-07 13:56                   ` Raghavendra K T
2012-05-13 17:59         ` Raghavendra K T
2012-05-13 17:59         ` Raghavendra K T
2012-05-13 17:59           ` Raghavendra K T
2012-05-13 17:59           ` Raghavendra K T

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=20120502100742.13206.30771.sendpatchset@codeblue.in.ibm.com \
    --to=raghavendra.kt@linux.vnet.ibm.com \
    --cc=andi@firstfloor.org \
    --cc=attilio.rao@citrix.com \
    --cc=avi@redhat.com \
    --cc=gleb@redhat.com \
    --cc=gregkh@suse.de \
    --cc=hpa@zytor.com \
    --cc=jeremy@goop.org \
    --cc=konrad.wilk@oracle.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=stephan.diestelhorst@amd.com \
    --cc=torvalds@linux-foundation.org \
    --cc=vatsa@linux.vnet.ibm.com \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=x86@kernel.org \
    --cc=xen-devel@lists.xensource.com \
    /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: link
Be 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.