From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753513AbcFOLS5 (ORCPT ); Wed, 15 Jun 2016 07:18:57 -0400 Received: from mx2.suse.de ([195.135.220.15]:49553 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753093AbcFOLSz (ORCPT ); Wed, 15 Jun 2016 07:18:55 -0400 Subject: Re: [PATCH v5 2/6] virt, sched: add generic vcpu pinning support To: linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org References: <1459952266-3687-1-git-send-email-jgross@suse.com> <1459952266-3687-3-git-send-email-jgross@suse.com> Cc: boris.ostrovsky@oracle.com, david.vrabel@citrix.com, mingo@redhat.com, peterz@infradead.org, Douglas_Warzecha@dell.com, pali.rohar@gmail.com, jdelvare@suse.com, linux@roeck-us.net, tglx@linutronix.de, hpa@zytor.com, jeremy@goop.org, chrisw@sous-sol.org, akataria@vmware.com, rusty@rustcorp.com.au, virtualization@lists.linux-foundation.org, x86@kernel.org From: Juergen Gross Message-ID: <57613997.9090205@suse.com> Date: Wed, 15 Jun 2016 13:18:47 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 MIME-Version: 1.0 In-Reply-To: <1459952266-3687-3-git-send-email-jgross@suse.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/04/16 16:17, Juergen Gross wrote: > Add generic virtualization support for pinning the current vcpu to a > specified physical cpu. As this operation isn't performance critical > (a very limited set of operations like BIOS calls and SMIs is expected > to need this) just add a hypervisor specific indirection. > > Signed-off-by: Juergen Gross Could please some maintainer comment on this patch? Juergen > --- > V4: move this patch some places up in the series > WARN_ONCE in case platform doesn't support pinning as requested by > Peter Zijlstra > > V3: use getc_cpu()/put_cpu() as suggested by David Vrabel > > V2: adapt to using workqueues > add include/linux/hypervisor.h to hide architecture specific stuff > from generic kernel code > > In case paravirt maintainers don't want to be responsible for > include/linux/hypervisor.h I could take it. > --- > MAINTAINERS | 1 + > arch/x86/include/asm/hypervisor.h | 4 ++++ > arch/x86/kernel/cpu/hypervisor.c | 11 +++++++++++ > include/linux/hypervisor.h | 17 +++++++++++++++++ > kernel/smp.c | 1 + > kernel/up.c | 1 + > 6 files changed, 35 insertions(+) > create mode 100644 include/linux/hypervisor.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index 40eb1db..d3bde4f 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -8330,6 +8330,7 @@ S: Supported > F: Documentation/virtual/paravirt_ops.txt > F: arch/*/kernel/paravirt* > F: arch/*/include/asm/paravirt.h > +F: include/linux/hypervisor.h > > PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES > M: Tim Waugh > diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h > index 055ea99..67942b6 100644 > --- a/arch/x86/include/asm/hypervisor.h > +++ b/arch/x86/include/asm/hypervisor.h > @@ -43,6 +43,9 @@ struct hypervisor_x86 { > > /* X2APIC detection (run once per boot) */ > bool (*x2apic_available)(void); > + > + /* pin current vcpu to specified physical cpu (run rarely) */ > + void (*pin_vcpu)(int); > }; > > extern const struct hypervisor_x86 *x86_hyper; > @@ -56,6 +59,7 @@ extern const struct hypervisor_x86 x86_hyper_kvm; > extern void init_hypervisor(struct cpuinfo_x86 *c); > extern void init_hypervisor_platform(void); > extern bool hypervisor_x2apic_available(void); > +extern void hypervisor_pin_vcpu(int cpu); > #else > static inline void init_hypervisor(struct cpuinfo_x86 *c) { } > static inline void init_hypervisor_platform(void) { } > diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c > index 73d391a..ff108f8 100644 > --- a/arch/x86/kernel/cpu/hypervisor.c > +++ b/arch/x86/kernel/cpu/hypervisor.c > @@ -85,3 +85,14 @@ bool __init hypervisor_x2apic_available(void) > x86_hyper->x2apic_available && > x86_hyper->x2apic_available(); > } > + > +void hypervisor_pin_vcpu(int cpu) > +{ > + if (!x86_hyper) > + return; > + > + if (x86_hyper->pin_vcpu) > + x86_hyper->pin_vcpu(cpu); > + else > + WARN_ONCE(1, "vcpu pinning requested but not supported!\n"); > +} > diff --git a/include/linux/hypervisor.h b/include/linux/hypervisor.h > new file mode 100644 > index 0000000..3fa5ef2 > --- /dev/null > +++ b/include/linux/hypervisor.h > @@ -0,0 +1,17 @@ > +#ifndef __LINUX_HYPEVISOR_H > +#define __LINUX_HYPEVISOR_H > + > +/* > + * Generic Hypervisor support > + * Juergen Gross > + */ > + > +#ifdef CONFIG_HYPERVISOR_GUEST > +#include > +#else > +static inline void hypervisor_pin_vcpu(int cpu) > +{ > +} > +#endif > + > +#endif /* __LINUX_HYPEVISOR_H */ > diff --git a/kernel/smp.c b/kernel/smp.c > index 7416544..9388064 100644 > --- a/kernel/smp.c > +++ b/kernel/smp.c > @@ -14,6 +14,7 @@ > #include > #include > #include > +#include > > #include "smpboot.h" > > diff --git a/kernel/up.c b/kernel/up.c > index 1760bf3..3ccee2b 100644 > --- a/kernel/up.c > +++ b/kernel/up.c > @@ -6,6 +6,7 @@ > #include > #include > #include > +#include > > int smp_call_function_single(int cpu, void (*func) (void *info), void *info, > int wait) >