From: Paolo Bonzini <pbonzini@redhat.com>
To: Waiman Long <Waiman.Long@hp.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
Arnd Bergmann <arnd@arndb.de>,
Peter Zijlstra <peterz@infradead.org>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>,
Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>,
virtualization@lists.linux-foundation.org,
Andi Kleen <andi@firstfloor.org>,
Michel Lespinasse <walken@google.com>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
linux-arch@vger.kernel.org, x86@kernel.org,
Scott J Norton <scott.norton@hp.com>,
xen-devel@lists.xenproject.org,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Alexander Fyodorov <halcy@yandex.ru>,
Rik van Riel <riel@redhat.com>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Daniel J Blueman <daniel@numascale.com>,
Oleg Nesterov <oleg@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>,
Chris Wright <chrisw@sous-sol.org>,
George Spelvin <linux@horizon.com>,
Alok Kataria <akataria@vmware.com>,
Aswin Chandramouleeswaran <aswin@hp.com>,
Chegu Vinod <chegu_vinod@hp.com>,
Linus Torvalds <torvalds@linux-foundation.org>li
Subject: Re: [PATCH RFC v5 8/8] pvqspinlock, x86: Enable KVM to use qspinlock's PV support
Date: Thu, 27 Feb 2014 10:31:51 +0100 [thread overview]
Message-ID: <530F0607.1020705@redhat.com> (raw)
In-Reply-To: <1393427668-60228-9-git-send-email-Waiman.Long@hp.com>
Il 26/02/2014 16:14, Waiman Long ha scritto:
> This patch enables KVM to use the queue spinlock's PV support code
> when the PARAVIRT_SPINLOCKS kernel config option is set. However,
> PV support for Xen is not ready yet and so the queue spinlock will
> still have to be disabled when PARAVIRT_SPINLOCKS config option is
> on with Xen.
>
> Signed-off-by: Waiman Long <Waiman.Long@hp.com>
> ---
> arch/x86/kernel/kvm.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++
> kernel/Kconfig.locks | 2 +-
> 2 files changed, 55 insertions(+), 1 deletions(-)
>
> diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
> index f318e78..3ddc436 100644
> --- a/arch/x86/kernel/kvm.c
> +++ b/arch/x86/kernel/kvm.c
> @@ -568,6 +568,7 @@ static void kvm_kick_cpu(int cpu)
> kvm_hypercall2(KVM_HC_KICK_CPU, flags, apicid);
> }
>
> +#ifndef CONFIG_QUEUE_SPINLOCK
> enum kvm_contention_stat {
> TAKEN_SLOW,
> TAKEN_SLOW_PICKUP,
> @@ -795,6 +796,55 @@ static void kvm_unlock_kick(struct arch_spinlock *lock, __ticket_t ticket)
> }
> }
> }
> +#else /* !CONFIG_QUEUE_SPINLOCK */
> +
> +#ifdef CONFIG_KVM_DEBUG_FS
> +static struct dentry *d_spin_debug;
> +static struct dentry *d_kvm_debug;
> +static u32 lh_kick_stats; /* Lock holder kick count */
> +static u32 qh_kick_stats; /* Queue head kick count */
> +static u32 nn_kick_stats; /* Next node kick count */
> +
> +static int __init kvm_spinlock_debugfs(void)
> +{
> + d_kvm_debug = debugfs_create_dir("kvm-guest", NULL);
> + if (!d_kvm_debug) {
> + printk(KERN_WARNING
> + "Could not create 'kvm' debugfs directory\n");
> + return -ENOMEM;
> + }
> + d_spin_debug = debugfs_create_dir("spinlocks", d_kvm_debug);
> +
> + debugfs_create_u32("lh_kick_stats", 0644, d_spin_debug, &lh_kick_stats);
> + debugfs_create_u32("qh_kick_stats", 0644, d_spin_debug, &qh_kick_stats);
> + debugfs_create_u32("nn_kick_stats", 0644, d_spin_debug, &nn_kick_stats);
> +
> + return 0;
> +}
> +
> +static inline void inc_kick_stats(enum pv_kick_type type)
> +{
> + if (type == PV_KICK_LOCK_HOLDER)
> + add_smp(&lh_kick_stats, 1);
> + else if (type == PV_KICK_QUEUE_HEAD)
> + add_smp(&qh_kick_stats, 1);
> + else
> + add_smp(&nn_kick_stats, 1);
> +}
> +fs_initcall(kvm_spinlock_debugfs);
> +
> +#else /* CONFIG_KVM_DEBUG_FS */
> +static inline void inc_kick_stats(enum pv_kick_type type)
> +{
> +}
> +#endif /* CONFIG_KVM_DEBUG_FS */
> +
> +static void kvm_kick_cpu_type(int cpu, enum pv_kick_type type)
> +{
> + kvm_kick_cpu(cpu);
> + inc_kick_stats(type);
> +}
> +#endif /* !CONFIG_QUEUE_SPINLOCK */
>
> /*
> * Setup pv_lock_ops to exploit KVM_FEATURE_PV_UNHALT if present.
> @@ -807,8 +857,12 @@ void __init kvm_spinlock_init(void)
> if (!kvm_para_has_feature(KVM_FEATURE_PV_UNHALT))
> return;
>
> +#ifdef CONFIG_QUEUE_SPINLOCK
> + pv_lock_ops.kick_cpu = kvm_kick_cpu_type;
> +#else
> pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(kvm_lock_spinning);
> pv_lock_ops.unlock_kick = kvm_unlock_kick;
> +#endif
> }
>
> static __init int kvm_spinlock_init_jump(void)
> diff --git a/kernel/Kconfig.locks b/kernel/Kconfig.locks
> index f185584..a70fdeb 100644
> --- a/kernel/Kconfig.locks
> +++ b/kernel/Kconfig.locks
> @@ -229,4 +229,4 @@ config ARCH_USE_QUEUE_SPINLOCK
>
> config QUEUE_SPINLOCK
> def_bool y if ARCH_USE_QUEUE_SPINLOCK
> - depends on SMP && !PARAVIRT_SPINLOCKS
> + depends on SMP && (!PARAVIRT_SPINLOCKS || !XEN)
>
Should this rather be
def_bool y if ARCH_USE_QUEUE_SPINLOCK && (!PARAVIRT_SPINLOCKS || !XEN)
?
PARAVIRT_SPINLOCKS + XEN + QUEUE_SPINLOCK + PARAVIRT_UNFAIR_LOCKS is a
valid combination, but it's impossible to choose PARAVIRT_UNFAIR_LOCKS
if QUEUE_SPINLOCK is unavailable.
Paolo
next prev parent reply other threads:[~2014-02-27 9:31 UTC|newest]
Thread overview: 115+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-26 15:14 [PATCH v5 0/8] qspinlock: a 4-byte queue spinlock with PV support Waiman Long
2014-02-26 15:14 ` [PATCH v5 1/8] qspinlock: Introducing a 4-byte queue spinlock implementation Waiman Long
2014-02-26 15:14 ` Waiman Long
2014-02-26 16:22 ` Peter Zijlstra
2014-02-27 20:25 ` Waiman Long
2014-02-27 20:25 ` Waiman Long
2014-02-26 16:22 ` Peter Zijlstra
2014-02-26 16:24 ` Peter Zijlstra
2014-02-27 20:25 ` Waiman Long
2014-02-27 20:25 ` Waiman Long
2014-02-26 16:24 ` Peter Zijlstra
2014-02-26 15:14 ` [PATCH v5 2/8] qspinlock, x86: Enable x86-64 to use queue spinlock Waiman Long
2014-02-26 15:14 ` Waiman Long
2014-02-26 15:14 ` [PATCH v5 3/8] qspinlock, x86: Add x86 specific optimization for 2 contending tasks Waiman Long
2014-02-26 15:14 ` Waiman Long
2014-02-26 16:20 ` Peter Zijlstra
2014-02-26 16:20 ` Peter Zijlstra
2014-02-27 20:42 ` Waiman Long
2014-02-27 20:42 ` Waiman Long
2014-02-28 9:29 ` Peter Zijlstra
2014-02-28 16:25 ` Linus Torvalds
2014-02-28 17:37 ` Peter Zijlstra
2014-02-28 17:37 ` Peter Zijlstra
2014-02-28 16:25 ` Linus Torvalds
2014-02-28 16:38 ` Waiman Long
2014-02-28 16:38 ` Waiman Long
2014-02-28 17:56 ` Peter Zijlstra
2014-02-28 17:56 ` Peter Zijlstra
2014-03-03 17:43 ` Peter Zijlstra
2014-03-04 15:27 ` Waiman Long
2014-03-04 15:27 ` Waiman Long
2014-03-04 16:58 ` Peter Zijlstra
2014-03-04 18:09 ` Peter Zijlstra
2014-03-04 18:09 ` Peter Zijlstra
2014-03-04 16:58 ` Peter Zijlstra
2014-03-04 17:48 ` Waiman Long
2014-03-04 17:48 ` Waiman Long
2014-03-04 22:40 ` Peter Zijlstra
2014-03-05 20:59 ` Peter Zijlstra
2014-03-05 20:59 ` Peter Zijlstra
2014-03-04 22:40 ` Peter Zijlstra
2014-03-03 17:43 ` Peter Zijlstra
2014-02-28 9:29 ` Peter Zijlstra
2014-02-26 15:14 ` [PATCH RFC v5 4/8] pvqspinlock, x86: Allow unfair spinlock in a real PV environment Waiman Long
2014-02-26 17:07 ` Konrad Rzeszutek Wilk
2014-02-28 17:06 ` Waiman Long
2014-03-03 10:55 ` Paolo Bonzini
2014-03-04 15:15 ` Waiman Long
2014-03-04 15:15 ` Waiman Long
2014-03-04 15:23 ` Paolo Bonzini
2014-03-04 15:23 ` Paolo Bonzini
2014-03-04 15:39 ` David Vrabel
2014-03-04 15:39 ` David Vrabel
2014-03-04 17:50 ` Raghavendra K T
2014-03-04 17:50 ` Raghavendra K T
2014-03-03 10:55 ` Paolo Bonzini
2014-02-28 17:06 ` Waiman Long
2014-02-26 17:07 ` Konrad Rzeszutek Wilk
2014-02-27 12:28 ` David Vrabel
2014-02-27 19:40 ` Waiman Long
2014-02-27 19:40 ` Waiman Long
2014-02-27 12:28 ` David Vrabel
2014-02-26 15:14 ` Waiman Long
2014-02-26 15:14 ` [PATCH RFC v5 5/8] pvqspinlock, x86: Enable unfair queue spinlock in a KVM guest Waiman Long
2014-02-26 17:08 ` Konrad Rzeszutek Wilk
2014-02-28 17:08 ` Waiman Long
2014-02-28 17:08 ` Waiman Long
2014-02-26 17:08 ` Konrad Rzeszutek Wilk
2014-02-27 9:41 ` Paolo Bonzini
2014-02-27 9:41 ` Paolo Bonzini
2014-02-27 19:05 ` Waiman Long
2014-02-27 19:05 ` Waiman Long
2014-02-27 10:40 ` Raghavendra K T
2014-02-27 19:12 ` Waiman Long
2014-02-27 19:12 ` Waiman Long
2014-02-27 10:40 ` Raghavendra K T
2014-02-26 15:14 ` Waiman Long
2014-02-26 15:14 ` [PATCH RFC v5 6/8] pvqspinlock, x86: Rename paravirt_ticketlocks_enabled Waiman Long
2014-02-26 15:14 ` Waiman Long
2014-02-26 15:14 ` [PATCH RFC v5 7/8] pvqspinlock, x86: Add qspinlock para-virtualization support Waiman Long
2014-02-26 15:14 ` Waiman Long
2014-02-26 17:54 ` Konrad Rzeszutek Wilk
2014-02-26 17:54 ` Konrad Rzeszutek Wilk
2014-02-27 12:11 ` David Vrabel
2014-02-27 13:11 ` Paolo Bonzini
2014-02-27 14:18 ` David Vrabel
2014-02-27 14:45 ` Paolo Bonzini
2014-02-27 15:22 ` Raghavendra K T
2014-02-27 15:22 ` Raghavendra K T
2014-02-27 15:50 ` Paolo Bonzini
2014-02-27 15:50 ` Paolo Bonzini
2014-03-03 11:06 ` David Vrabel
2014-03-03 11:06 ` [Xen-devel] " David Vrabel
2014-02-27 20:50 ` Waiman Long
2014-02-27 20:50 ` Waiman Long
2014-02-27 19:42 ` Waiman Long
2014-02-27 19:42 ` Waiman Long
2014-02-27 14:45 ` Paolo Bonzini
2014-02-27 14:18 ` David Vrabel
2014-02-27 13:11 ` Paolo Bonzini
2014-02-27 12:11 ` David Vrabel
2014-02-26 15:14 ` [PATCH RFC v5 8/8] pvqspinlock, x86: Enable KVM to use qspinlock's PV support Waiman Long
2014-02-27 9:31 ` Paolo Bonzini [this message]
2014-02-27 18:36 ` Waiman Long
2014-02-27 18:36 ` Waiman Long
2014-02-27 9:31 ` Paolo Bonzini
2014-02-26 15:14 ` Waiman Long
2014-02-26 17:00 ` [PATCH v5 0/8] qspinlock: a 4-byte queue spinlock with " Konrad Rzeszutek Wilk
2014-02-26 17:00 ` Konrad Rzeszutek Wilk
2014-02-28 16:56 ` Waiman Long
2014-02-28 16:56 ` Waiman Long
2014-02-26 22:26 ` Paul E. McKenney
2014-02-26 22:26 ` Paul E. McKenney
-- strict thread matches above, loose matches on Subject: below --
2014-02-27 4:32 Waiman Long
2014-02-27 4:32 ` [PATCH RFC v5 8/8] pvqspinlock, x86: Enable KVM to use qspinlock's " Waiman Long
2014-02-27 4:32 ` Waiman Long
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=530F0607.1020705@redhat.com \
--to=pbonzini@redhat.com \
--cc=Waiman.Long@hp.com \
--cc=akataria@vmware.com \
--cc=andi@firstfloor.org \
--cc=arnd@arndb.de \
--cc=aswin@hp.com \
--cc=boris.ostrovsky@oracle.com \
--cc=chegu_vinod@hp.com \
--cc=chrisw@sous-sol.org \
--cc=daniel@numascale.com \
--cc=halcy@yandex.ru \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=konrad.wilk@oracle.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux@horizon.com \
--cc=mingo@redhat.com \
--cc=oleg@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=raghavendra.kt@linux.vnet.ibm.com \
--cc=riel@redhat.com \
--cc=rostedt@goodmis.org \
--cc=scott.norton@hp.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=virtualization@lists.linux-foundation.org \
--cc=walken@google.com \
--cc=x86@kernel.org \
--cc=xen-devel@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: 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.