* [PATCH] KVM: allow host header to be included even for !CONFIG_KVM @ 2013-03-15 0:13 Kevin Hilman 2013-03-18 21:04 ` Marcelo Tosatti 2013-03-20 23:58 ` Scott Wood 0 siblings, 2 replies; 21+ messages in thread From: Kevin Hilman @ 2013-03-15 0:13 UTC (permalink / raw) To: Frederic Weisbecker Cc: linaro-kernel, Marcelo Tosatti, Gleb Natapov, open list:KERNEL VIRTUAL MA..., open list The new context tracking subsystem unconditionally includes kvm_host.h headers for the guest enter/exit macros. This causes a compile failure when KVM is not enabled. Fix by adding an IS_ENABLED(CONFIG_KVM) check to kvm_host so it can be included/compiled even when KVM is not enabled. Cc: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Kevin Hilman <khilman@linaro.org> --- Applies on v3.9-rc2 include/linux/kvm_host.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index cad77fe..a942863 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1,6 +1,8 @@ #ifndef __KVM_HOST_H #define __KVM_HOST_H +#if IS_ENABLED(CONFIG_KVM) + /* * This work is licensed under the terms of the GNU GPL, version 2. See * the COPYING file in the top-level directory. @@ -1055,5 +1057,8 @@ static inline bool kvm_vcpu_eligible_for_directed_yield(struct kvm_vcpu *vcpu) } #endif /* CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT */ +#else +static inline void __guest_enter(void) { return; } +static inline void __guest_exit(void) { return; } +#endif /* IS_ENABLED(CONFIG_KVM) */ #endif - -- 1.8.1.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-15 0:13 [PATCH] KVM: allow host header to be included even for !CONFIG_KVM Kevin Hilman @ 2013-03-18 21:04 ` Marcelo Tosatti 2013-03-20 23:58 ` Scott Wood 1 sibling, 0 replies; 21+ messages in thread From: Marcelo Tosatti @ 2013-03-18 21:04 UTC (permalink / raw) To: Kevin Hilman Cc: Frederic Weisbecker, linaro-kernel, Gleb Natapov, open list:KERNEL VIRTUAL MA..., open list On Thu, Mar 14, 2013 at 05:13:46PM -0700, Kevin Hilman wrote: > The new context tracking subsystem unconditionally includes kvm_host.h > headers for the guest enter/exit macros. This causes a compile > failure when KVM is not enabled. > > Fix by adding an IS_ENABLED(CONFIG_KVM) check to kvm_host so it can > be included/compiled even when KVM is not enabled. > > Cc: Frederic Weisbecker <fweisbec@gmail.com> > Signed-off-by: Kevin Hilman <khilman@linaro.org> > --- > Applies on v3.9-rc2 > > include/linux/kvm_host.h | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) Applied and queued for v3.9, thanks. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-15 0:13 [PATCH] KVM: allow host header to be included even for !CONFIG_KVM Kevin Hilman 2013-03-18 21:04 ` Marcelo Tosatti @ 2013-03-20 23:58 ` Scott Wood 2013-03-21 7:29 ` Gleb Natapov 1 sibling, 1 reply; 21+ messages in thread From: Scott Wood @ 2013-03-20 23:58 UTC (permalink / raw) To: Kevin Hilman Cc: Frederic Weisbecker, linaro-kernel, Marcelo Tosatti, Gleb Natapov, open list:KERNEL VIRTUAL MA..., open list On 03/14/2013 07:13:46 PM, Kevin Hilman wrote: > The new context tracking subsystem unconditionally includes kvm_host.h > headers for the guest enter/exit macros. This causes a compile > failure when KVM is not enabled. > > Fix by adding an IS_ENABLED(CONFIG_KVM) check to kvm_host so it can > be included/compiled even when KVM is not enabled. > > Cc: Frederic Weisbecker <fweisbec@gmail.com> > Signed-off-by: Kevin Hilman <khilman@linaro.org> > --- > Applies on v3.9-rc2 > > include/linux/kvm_host.h | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) This broke the PPC non-KVM build, which was relying on stub functions in kvm_ppc.h, which relies on "struct vcpu" in kvm_host.h. Why can't the entirety kvm_host.h be included regardless of CONFIG_KVM, just like most other feature-specific headers? Why can't the if/else just go around the functions that you want to stub out for non-KVM builds? -Scott ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-20 23:58 ` Scott Wood @ 2013-03-21 7:29 ` Gleb Natapov 2013-03-21 14:27 ` Kevin Hilman 0 siblings, 1 reply; 21+ messages in thread From: Gleb Natapov @ 2013-03-21 7:29 UTC (permalink / raw) To: Scott Wood Cc: Kevin Hilman, Frederic Weisbecker, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On Wed, Mar 20, 2013 at 06:58:41PM -0500, Scott Wood wrote: > On 03/14/2013 07:13:46 PM, Kevin Hilman wrote: > >The new context tracking subsystem unconditionally includes kvm_host.h > >headers for the guest enter/exit macros. This causes a compile > >failure when KVM is not enabled. > > > >Fix by adding an IS_ENABLED(CONFIG_KVM) check to kvm_host so it can > >be included/compiled even when KVM is not enabled. > > > >Cc: Frederic Weisbecker <fweisbec@gmail.com> > >Signed-off-by: Kevin Hilman <khilman@linaro.org> > >--- > >Applies on v3.9-rc2 > > > > include/linux/kvm_host.h | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > This broke the PPC non-KVM build, which was relying on stub > functions in kvm_ppc.h, which relies on "struct vcpu" in kvm_host.h. > > Why can't the entirety kvm_host.h be included regardless of > CONFIG_KVM, just like most other feature-specific headers? Why > can't the if/else just go around the functions that you want to stub > out for non-KVM builds? > Kevin, What compilation failure this patch fixes? I presume something ARM related. -- Gleb. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-21 7:29 ` Gleb Natapov @ 2013-03-21 14:27 ` Kevin Hilman 2013-03-21 18:42 ` Scott Wood 0 siblings, 1 reply; 21+ messages in thread From: Kevin Hilman @ 2013-03-21 14:27 UTC (permalink / raw) To: Gleb Natapov Cc: Scott Wood, Frederic Weisbecker, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list Gleb Natapov <gleb@redhat.com> writes: > On Wed, Mar 20, 2013 at 06:58:41PM -0500, Scott Wood wrote: >> On 03/14/2013 07:13:46 PM, Kevin Hilman wrote: >> >The new context tracking subsystem unconditionally includes kvm_host.h >> >headers for the guest enter/exit macros. This causes a compile >> >failure when KVM is not enabled. >> > >> >Fix by adding an IS_ENABLED(CONFIG_KVM) check to kvm_host so it can >> >be included/compiled even when KVM is not enabled. >> > >> >Cc: Frederic Weisbecker <fweisbec@gmail.com> >> >Signed-off-by: Kevin Hilman <khilman@linaro.org> >> >--- >> >Applies on v3.9-rc2 >> > >> > include/linux/kvm_host.h | 7 ++++++- >> > 1 file changed, 6 insertions(+), 1 deletion(-) >> >> This broke the PPC non-KVM build, which was relying on stub >> functions in kvm_ppc.h, which relies on "struct vcpu" in kvm_host.h. >> >> Why can't the entirety kvm_host.h be included regardless of >> CONFIG_KVM, just like most other feature-specific headers? Why >> can't the if/else just go around the functions that you want to stub >> out for non-KVM builds? >> > Kevin, > > What compilation failure this patch fixes? I presume something ARM > related. Not specficially ARM related, but more context tracking related since kernel/context_tracking.c pulls in kvm_host.h, which attempts to pull in <asm/kvm*.h> which may not exist on some platforms. At least for ARM, KVM support was added in v3.9 so this patch can probably be dropped since the non-KVM builds on ARM now work. But any platform without the <asm/kvm*.h> will still be broken when trying to build the context tracker. Kevin ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-21 14:27 ` Kevin Hilman @ 2013-03-21 18:42 ` Scott Wood 2013-03-21 19:16 ` Gleb Natapov 0 siblings, 1 reply; 21+ messages in thread From: Scott Wood @ 2013-03-21 18:42 UTC (permalink / raw) To: Kevin Hilman Cc: Gleb Natapov, Frederic Weisbecker, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On 03/21/2013 09:27:14 AM, Kevin Hilman wrote: > Gleb Natapov <gleb@redhat.com> writes: > > > On Wed, Mar 20, 2013 at 06:58:41PM -0500, Scott Wood wrote: > >> On 03/14/2013 07:13:46 PM, Kevin Hilman wrote: > >> >The new context tracking subsystem unconditionally includes > kvm_host.h > >> >headers for the guest enter/exit macros. This causes a compile > >> >failure when KVM is not enabled. > >> > > >> >Fix by adding an IS_ENABLED(CONFIG_KVM) check to kvm_host so it > can > >> >be included/compiled even when KVM is not enabled. > >> > > >> >Cc: Frederic Weisbecker <fweisbec@gmail.com> > >> >Signed-off-by: Kevin Hilman <khilman@linaro.org> > >> >--- > >> >Applies on v3.9-rc2 > >> > > >> > include/linux/kvm_host.h | 7 ++++++- > >> > 1 file changed, 6 insertions(+), 1 deletion(-) > >> > >> This broke the PPC non-KVM build, which was relying on stub > >> functions in kvm_ppc.h, which relies on "struct vcpu" in > kvm_host.h. > >> > >> Why can't the entirety kvm_host.h be included regardless of > >> CONFIG_KVM, just like most other feature-specific headers? Why > >> can't the if/else just go around the functions that you want to > stub > >> out for non-KVM builds? > >> > > Kevin, > > > > What compilation failure this patch fixes? I presume something ARM > > related. > > Not specficially ARM related, but more context tracking related since > kernel/context_tracking.c pulls in kvm_host.h, which attempts to pull > in > <asm/kvm*.h> which may not exist on some platforms. > > At least for ARM, KVM support was added in v3.9 so this patch can > probably be dropped since the non-KVM builds on ARM now work. But any > platform without the <asm/kvm*.h> will still be broken when trying to > build the context tracker. Maybe other platforms should get empty asm/kvm*.h files. Is there anything from those files that the linux/kvm*.h headers need to build? -Scott ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-21 18:42 ` Scott Wood @ 2013-03-21 19:16 ` Gleb Natapov 2013-03-21 19:33 ` Scott Wood 0 siblings, 1 reply; 21+ messages in thread From: Gleb Natapov @ 2013-03-21 19:16 UTC (permalink / raw) To: Scott Wood Cc: Kevin Hilman, Frederic Weisbecker, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On Thu, Mar 21, 2013 at 01:42:34PM -0500, Scott Wood wrote: > On 03/21/2013 09:27:14 AM, Kevin Hilman wrote: > >Gleb Natapov <gleb@redhat.com> writes: > > > >> On Wed, Mar 20, 2013 at 06:58:41PM -0500, Scott Wood wrote: > >>> On 03/14/2013 07:13:46 PM, Kevin Hilman wrote: > >>> >The new context tracking subsystem unconditionally includes > >kvm_host.h > >>> >headers for the guest enter/exit macros. This causes a compile > >>> >failure when KVM is not enabled. > >>> > > >>> >Fix by adding an IS_ENABLED(CONFIG_KVM) check to kvm_host so > >it can > >>> >be included/compiled even when KVM is not enabled. > >>> > > >>> >Cc: Frederic Weisbecker <fweisbec@gmail.com> > >>> >Signed-off-by: Kevin Hilman <khilman@linaro.org> > >>> >--- > >>> >Applies on v3.9-rc2 > >>> > > >>> > include/linux/kvm_host.h | 7 ++++++- > >>> > 1 file changed, 6 insertions(+), 1 deletion(-) > >>> > >>> This broke the PPC non-KVM build, which was relying on stub > >>> functions in kvm_ppc.h, which relies on "struct vcpu" in > >kvm_host.h. > >>> > >>> Why can't the entirety kvm_host.h be included regardless of > >>> CONFIG_KVM, just like most other feature-specific headers? Why > >>> can't the if/else just go around the functions that you want to > >stub > >>> out for non-KVM builds? > >>> > >> Kevin, > >> > >> What compilation failure this patch fixes? I presume something ARM > >> related. > > > >Not specficially ARM related, but more context tracking related since > >kernel/context_tracking.c pulls in kvm_host.h, which attempts to > >pull in > ><asm/kvm*.h> which may not exist on some platforms. > > > >At least for ARM, KVM support was added in v3.9 so this patch can > >probably be dropped since the non-KVM builds on ARM now work. But any > >platform without the <asm/kvm*.h> will still be broken when trying to > >build the context tracker. > > Maybe other platforms should get empty asm/kvm*.h files. Is there > anything from those files that the linux/kvm*.h headers need to > build? > arch things. kvm_vcpu_arch, kvm_arch_memory_slot, kvm_arch etc. -- Gleb. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-21 19:16 ` Gleb Natapov @ 2013-03-21 19:33 ` Scott Wood 2013-03-21 21:17 ` Gleb Natapov 0 siblings, 1 reply; 21+ messages in thread From: Scott Wood @ 2013-03-21 19:33 UTC (permalink / raw) To: Gleb Natapov Cc: Kevin Hilman, Frederic Weisbecker, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On 03/21/2013 02:16:00 PM, Gleb Natapov wrote: > On Thu, Mar 21, 2013 at 01:42:34PM -0500, Scott Wood wrote: > > On 03/21/2013 09:27:14 AM, Kevin Hilman wrote: > > >Gleb Natapov <gleb@redhat.com> writes: > > > > > >> On Wed, Mar 20, 2013 at 06:58:41PM -0500, Scott Wood wrote: > > >>> Why can't the entirety kvm_host.h be included regardless of > > >>> CONFIG_KVM, just like most other feature-specific headers? Why > > >>> can't the if/else just go around the functions that you want to > > >stub > > >>> out for non-KVM builds? > > >>> > > >> Kevin, > > >> > > >> What compilation failure this patch fixes? I presume something > ARM > > >> related. > > > > > >Not specficially ARM related, but more context tracking related > since > > >kernel/context_tracking.c pulls in kvm_host.h, which attempts to > > >pull in > > ><asm/kvm*.h> which may not exist on some platforms. > > > > > >At least for ARM, KVM support was added in v3.9 so this patch can > > >probably be dropped since the non-KVM builds on ARM now work. But > any > > >platform without the <asm/kvm*.h> will still be broken when trying > to > > >build the context tracker. > > > > Maybe other platforms should get empty asm/kvm*.h files. Is there > > anything from those files that the linux/kvm*.h headers need to > > build? > > > arch things. kvm_vcpu_arch, kvm_arch_memory_slot, kvm_arch etc. Could define them as empty structs. -Scott ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-21 19:33 ` Scott Wood @ 2013-03-21 21:17 ` Gleb Natapov 2013-03-22 0:02 ` Kevin Hilman 2013-03-24 13:44 ` Frederic Weisbecker 0 siblings, 2 replies; 21+ messages in thread From: Gleb Natapov @ 2013-03-21 21:17 UTC (permalink / raw) To: Scott Wood Cc: Kevin Hilman, Frederic Weisbecker, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On Thu, Mar 21, 2013 at 02:33:13PM -0500, Scott Wood wrote: > On 03/21/2013 02:16:00 PM, Gleb Natapov wrote: > >On Thu, Mar 21, 2013 at 01:42:34PM -0500, Scott Wood wrote: > >> On 03/21/2013 09:27:14 AM, Kevin Hilman wrote: > >> >Gleb Natapov <gleb@redhat.com> writes: > >> > > >> >> On Wed, Mar 20, 2013 at 06:58:41PM -0500, Scott Wood wrote: > >> >>> Why can't the entirety kvm_host.h be included regardless of > >> >>> CONFIG_KVM, just like most other feature-specific headers? Why > >> >>> can't the if/else just go around the functions that you want to > >> >stub > >> >>> out for non-KVM builds? > >> >>> > >> >> Kevin, > >> >> > >> >> What compilation failure this patch fixes? I presume > >something ARM > >> >> related. > >> > > >> >Not specficially ARM related, but more context tracking related > >since > >> >kernel/context_tracking.c pulls in kvm_host.h, which attempts to > >> >pull in > >> ><asm/kvm*.h> which may not exist on some platforms. > >> > > >> >At least for ARM, KVM support was added in v3.9 so this patch can > >> >probably be dropped since the non-KVM builds on ARM now work. > >But any > >> >platform without the <asm/kvm*.h> will still be broken when > >trying to > >> >build the context tracker. > >> > >> Maybe other platforms should get empty asm/kvm*.h files. Is there > >> anything from those files that the linux/kvm*.h headers need to > >> build? > >> > >arch things. kvm_vcpu_arch, kvm_arch_memory_slot, kvm_arch etc. > > Could define them as empty structs. > Isn't is simpler for kernel/context_tracking.c to define empty __guest_enter()/__guest_exit() if !CONFIG_KVM. -- Gleb. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-21 21:17 ` Gleb Natapov @ 2013-03-22 0:02 ` Kevin Hilman 2013-03-24 10:21 ` Gleb Natapov 2013-03-24 13:44 ` Frederic Weisbecker 1 sibling, 1 reply; 21+ messages in thread From: Kevin Hilman @ 2013-03-22 0:02 UTC (permalink / raw) To: Gleb Natapov Cc: Scott Wood, Frederic Weisbecker, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list Gleb Natapov <gleb@redhat.com> writes: > On Thu, Mar 21, 2013 at 02:33:13PM -0500, Scott Wood wrote: >> On 03/21/2013 02:16:00 PM, Gleb Natapov wrote: >> >On Thu, Mar 21, 2013 at 01:42:34PM -0500, Scott Wood wrote: >> >> On 03/21/2013 09:27:14 AM, Kevin Hilman wrote: >> >> >Gleb Natapov <gleb@redhat.com> writes: >> >> > >> >> >> On Wed, Mar 20, 2013 at 06:58:41PM -0500, Scott Wood wrote: >> >> >>> Why can't the entirety kvm_host.h be included regardless of >> >> >>> CONFIG_KVM, just like most other feature-specific headers? Why >> >> >>> can't the if/else just go around the functions that you want to >> >> >stub >> >> >>> out for non-KVM builds? >> >> >>> >> >> >> Kevin, >> >> >> >> >> >> What compilation failure this patch fixes? I presume >> >something ARM >> >> >> related. >> >> > >> >> >Not specficially ARM related, but more context tracking related >> >since >> >> >kernel/context_tracking.c pulls in kvm_host.h, which attempts to >> >> >pull in >> >> ><asm/kvm*.h> which may not exist on some platforms. >> >> > >> >> >At least for ARM, KVM support was added in v3.9 so this patch can >> >> >probably be dropped since the non-KVM builds on ARM now work. >> >But any >> >> >platform without the <asm/kvm*.h> will still be broken when >> >trying to >> >> >build the context tracker. >> >> >> >> Maybe other platforms should get empty asm/kvm*.h files. Is there >> >> anything from those files that the linux/kvm*.h headers need to >> >> build? >> >> >> >arch things. kvm_vcpu_arch, kvm_arch_memory_slot, kvm_arch etc. >> >> Could define them as empty structs. >> > Isn't is simpler for kernel/context_tracking.c to define empty > __guest_enter()/__guest_exit() if !CONFIG_KVM. I proposed something like that in an earlier version but Frederic asked me to propose a fix to the KVM headers instead. Just in case fixing the context tracking subsystem is preferred, the patch below fixes the problem also. Kevin >From f22995a262144d0d61705fa72134694d911283eb Mon Sep 17 00:00:00 2001 From: Kevin Hilman <khilman@linaro.org> Date: Thu, 21 Mar 2013 16:57:14 -0700 Subject: [PATCH] context_tracking: fix !CONFIG_KVM compile: add stub guest enter/exit When KVM is not enabled, or not available on a platform, the KVM headers should not be included. Instead, just define stub __guest_[enter|exit] functions. Cc: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Kevin Hilman <khilman@linaro.org> --- kernel/context_tracking.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c index 65349f0..64b0f80 100644 --- a/kernel/context_tracking.c +++ b/kernel/context_tracking.c @@ -15,12 +15,18 @@ */ #include <linux/context_tracking.h> -#include <linux/kvm_host.h> #include <linux/rcupdate.h> #include <linux/sched.h> #include <linux/hardirq.h> #include <linux/export.h> +#if IS_ENABLED(CONFIG_KVM) +#include <linux/kvm_host.h> +#else +#define __guest_enter() +#define __guest_exit() +#endif + DEFINE_PER_CPU(struct context_tracking, context_tracking) = { #ifdef CONFIG_CONTEXT_TRACKING_FORCE .active = true, -- 1.8.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-22 0:02 ` Kevin Hilman @ 2013-03-24 10:21 ` Gleb Natapov 0 siblings, 0 replies; 21+ messages in thread From: Gleb Natapov @ 2013-03-24 10:21 UTC (permalink / raw) To: Kevin Hilman Cc: Scott Wood, Frederic Weisbecker, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On Thu, Mar 21, 2013 at 05:02:15PM -0700, Kevin Hilman wrote: > Gleb Natapov <gleb@redhat.com> writes: > > > On Thu, Mar 21, 2013 at 02:33:13PM -0500, Scott Wood wrote: > >> On 03/21/2013 02:16:00 PM, Gleb Natapov wrote: > >> >On Thu, Mar 21, 2013 at 01:42:34PM -0500, Scott Wood wrote: > >> >> On 03/21/2013 09:27:14 AM, Kevin Hilman wrote: > >> >> >Gleb Natapov <gleb@redhat.com> writes: > >> >> > > >> >> >> On Wed, Mar 20, 2013 at 06:58:41PM -0500, Scott Wood wrote: > >> >> >>> Why can't the entirety kvm_host.h be included regardless of > >> >> >>> CONFIG_KVM, just like most other feature-specific headers? Why > >> >> >>> can't the if/else just go around the functions that you want to > >> >> >stub > >> >> >>> out for non-KVM builds? > >> >> >>> > >> >> >> Kevin, > >> >> >> > >> >> >> What compilation failure this patch fixes? I presume > >> >something ARM > >> >> >> related. > >> >> > > >> >> >Not specficially ARM related, but more context tracking related > >> >since > >> >> >kernel/context_tracking.c pulls in kvm_host.h, which attempts to > >> >> >pull in > >> >> ><asm/kvm*.h> which may not exist on some platforms. > >> >> > > >> >> >At least for ARM, KVM support was added in v3.9 so this patch can > >> >> >probably be dropped since the non-KVM builds on ARM now work. > >> >But any > >> >> >platform without the <asm/kvm*.h> will still be broken when > >> >trying to > >> >> >build the context tracker. > >> >> > >> >> Maybe other platforms should get empty asm/kvm*.h files. Is there > >> >> anything from those files that the linux/kvm*.h headers need to > >> >> build? > >> >> > >> >arch things. kvm_vcpu_arch, kvm_arch_memory_slot, kvm_arch etc. > >> > >> Could define them as empty structs. > >> > > Isn't is simpler for kernel/context_tracking.c to define empty > > __guest_enter()/__guest_exit() if !CONFIG_KVM. > > I proposed something like that in an earlier version but Frederic asked > me to propose a fix to the KVM headers instead. > > Just in case fixing the context tracking subsystem is preferred, > the patch below fixes the problem also. > The patch that broke PPC build was reverted. Frederic can you get the patch below? > Kevin > > >From f22995a262144d0d61705fa72134694d911283eb Mon Sep 17 00:00:00 2001 > From: Kevin Hilman <khilman@linaro.org> > Date: Thu, 21 Mar 2013 16:57:14 -0700 > Subject: [PATCH] context_tracking: fix !CONFIG_KVM compile: add stub guest > enter/exit > > When KVM is not enabled, or not available on a platform, the KVM > headers should not be included. Instead, just define stub > __guest_[enter|exit] functions. > > Cc: Frederic Weisbecker <fweisbec@gmail.com> > Signed-off-by: Kevin Hilman <khilman@linaro.org> > --- > kernel/context_tracking.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c > index 65349f0..64b0f80 100644 > --- a/kernel/context_tracking.c > +++ b/kernel/context_tracking.c > @@ -15,12 +15,18 @@ > */ > > #include <linux/context_tracking.h> > -#include <linux/kvm_host.h> > #include <linux/rcupdate.h> > #include <linux/sched.h> > #include <linux/hardirq.h> > #include <linux/export.h> > > +#if IS_ENABLED(CONFIG_KVM) > +#include <linux/kvm_host.h> > +#else > +#define __guest_enter() > +#define __guest_exit() > +#endif > + > DEFINE_PER_CPU(struct context_tracking, context_tracking) = { > #ifdef CONFIG_CONTEXT_TRACKING_FORCE > .active = true, > -- > 1.8.2 -- Gleb. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-21 21:17 ` Gleb Natapov 2013-03-22 0:02 ` Kevin Hilman @ 2013-03-24 13:44 ` Frederic Weisbecker 2013-03-24 14:01 ` Gleb Natapov 1 sibling, 1 reply; 21+ messages in thread From: Frederic Weisbecker @ 2013-03-24 13:44 UTC (permalink / raw) To: Gleb Natapov Cc: Scott Wood, Kevin Hilman, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list 2013/3/21 Gleb Natapov <gleb@redhat.com>: > Isn't is simpler for kernel/context_tracking.c to define empty > __guest_enter()/__guest_exit() if !CONFIG_KVM. That doesn't look right. Off-cases are usually handled from the headers, right? So that we avoid iffdeffery ugliness in core code. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-24 13:44 ` Frederic Weisbecker @ 2013-03-24 14:01 ` Gleb Natapov 2013-03-25 21:14 ` Kevin Hilman 0 siblings, 1 reply; 21+ messages in thread From: Gleb Natapov @ 2013-03-24 14:01 UTC (permalink / raw) To: Frederic Weisbecker Cc: Scott Wood, Kevin Hilman, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On Sun, Mar 24, 2013 at 02:44:26PM +0100, Frederic Weisbecker wrote: > 2013/3/21 Gleb Natapov <gleb@redhat.com>: > > Isn't is simpler for kernel/context_tracking.c to define empty > > __guest_enter()/__guest_exit() if !CONFIG_KVM. > > That doesn't look right. Off-cases are usually handled from the > headers, right? So that we avoid iffdeffery ugliness in core code. Lets put it in linux/context_tracking.h header then. -- Gleb. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-24 14:01 ` Gleb Natapov @ 2013-03-25 21:14 ` Kevin Hilman 2013-04-02 11:56 ` Gleb Natapov 2013-05-15 22:52 ` Frederic Weisbecker 0 siblings, 2 replies; 21+ messages in thread From: Kevin Hilman @ 2013-03-25 21:14 UTC (permalink / raw) To: Gleb Natapov Cc: Frederic Weisbecker, Scott Wood, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list Gleb Natapov <gleb@redhat.com> writes: > On Sun, Mar 24, 2013 at 02:44:26PM +0100, Frederic Weisbecker wrote: >> 2013/3/21 Gleb Natapov <gleb@redhat.com>: >> > Isn't is simpler for kernel/context_tracking.c to define empty >> > __guest_enter()/__guest_exit() if !CONFIG_KVM. >> >> That doesn't look right. Off-cases are usually handled from the >> headers, right? So that we avoid iffdeffery ugliness in core code. > Lets put it in linux/context_tracking.h header then. Here's a version to do that. Kevin >From d9d909394479dd7ff90b7bddb95a564945406719 Mon Sep 17 00:00:00 2001 From: Kevin Hilman <khilman@linaro.org> Date: Mon, 25 Mar 2013 14:12:41 -0700 Subject: [PATCH v2] ontext_tracking: fix !CONFIG_KVM compile: add stub guest enter/exit When KVM is not enabled, or not available on a platform, the KVM headers should not be included. Instead, just define stub __guest_[enter|exit] functions. Cc: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Kevin Hilman <khilman@linaro.org> --- include/linux/context_tracking.h | 7 +++++++ kernel/context_tracking.c | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h index 365f4a6..9d0f242 100644 --- a/include/linux/context_tracking.h +++ b/include/linux/context_tracking.h @@ -3,6 +3,13 @@ #include <linux/sched.h> #include <linux/percpu.h> +#if IS_ENABLED(CONFIG_KVM) +#include <linux/kvm_host.h> +#else +#define __guest_enter() +#define __guest_exit() +#endif + #include <asm/ptrace.h> struct context_tracking { diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c index 65349f0..85bdde1 100644 --- a/kernel/context_tracking.c +++ b/kernel/context_tracking.c @@ -15,7 +15,6 @@ */ #include <linux/context_tracking.h> -#include <linux/kvm_host.h> #include <linux/rcupdate.h> #include <linux/sched.h> #include <linux/hardirq.h> -- 1.8.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-25 21:14 ` Kevin Hilman @ 2013-04-02 11:56 ` Gleb Natapov 2013-05-02 21:58 ` Alexander Graf 2013-05-15 22:52 ` Frederic Weisbecker 1 sibling, 1 reply; 21+ messages in thread From: Gleb Natapov @ 2013-04-02 11:56 UTC (permalink / raw) To: Kevin Hilman Cc: Frederic Weisbecker, Scott Wood, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On Mon, Mar 25, 2013 at 02:14:20PM -0700, Kevin Hilman wrote: > Gleb Natapov <gleb@redhat.com> writes: > > > On Sun, Mar 24, 2013 at 02:44:26PM +0100, Frederic Weisbecker wrote: > >> 2013/3/21 Gleb Natapov <gleb@redhat.com>: > >> > Isn't is simpler for kernel/context_tracking.c to define empty > >> > __guest_enter()/__guest_exit() if !CONFIG_KVM. > >> > >> That doesn't look right. Off-cases are usually handled from the > >> headers, right? So that we avoid iffdeffery ugliness in core code. > > Lets put it in linux/context_tracking.h header then. > > Here's a version to do that. > Frederic, are you OK with this version? > Kevin > > >From d9d909394479dd7ff90b7bddb95a564945406719 Mon Sep 17 00:00:00 2001 > From: Kevin Hilman <khilman@linaro.org> > Date: Mon, 25 Mar 2013 14:12:41 -0700 > Subject: [PATCH v2] ontext_tracking: fix !CONFIG_KVM compile: add stub guest > enter/exit > > When KVM is not enabled, or not available on a platform, the KVM > headers should not be included. Instead, just define stub > __guest_[enter|exit] functions. > > Cc: Frederic Weisbecker <fweisbec@gmail.com> > Signed-off-by: Kevin Hilman <khilman@linaro.org> > --- > include/linux/context_tracking.h | 7 +++++++ > kernel/context_tracking.c | 1 - > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h > index 365f4a6..9d0f242 100644 > --- a/include/linux/context_tracking.h > +++ b/include/linux/context_tracking.h > @@ -3,6 +3,13 @@ > > #include <linux/sched.h> > #include <linux/percpu.h> > +#if IS_ENABLED(CONFIG_KVM) > +#include <linux/kvm_host.h> > +#else > +#define __guest_enter() > +#define __guest_exit() > +#endif > + > #include <asm/ptrace.h> > > struct context_tracking { > diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c > index 65349f0..85bdde1 100644 > --- a/kernel/context_tracking.c > +++ b/kernel/context_tracking.c > @@ -15,7 +15,6 @@ > */ > > #include <linux/context_tracking.h> > -#include <linux/kvm_host.h> > #include <linux/rcupdate.h> > #include <linux/sched.h> > #include <linux/hardirq.h> > -- > 1.8.2 -- Gleb. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-04-02 11:56 ` Gleb Natapov @ 2013-05-02 21:58 ` Alexander Graf 0 siblings, 0 replies; 21+ messages in thread From: Alexander Graf @ 2013-05-02 21:58 UTC (permalink / raw) To: Gleb Natapov Cc: Kevin Hilman, Frederic Weisbecker, Scott Wood, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On 02.04.2013, at 13:56, Gleb Natapov wrote: > On Mon, Mar 25, 2013 at 02:14:20PM -0700, Kevin Hilman wrote: >> Gleb Natapov <gleb@redhat.com> writes: >> >>> On Sun, Mar 24, 2013 at 02:44:26PM +0100, Frederic Weisbecker wrote: >>>> 2013/3/21 Gleb Natapov <gleb@redhat.com>: >>>>> Isn't is simpler for kernel/context_tracking.c to define empty >>>>> __guest_enter()/__guest_exit() if !CONFIG_KVM. >>>> >>>> That doesn't look right. Off-cases are usually handled from the >>>> headers, right? So that we avoid iffdeffery ugliness in core code. >>> Lets put it in linux/context_tracking.h header then. >> >> Here's a version to do that. >> > Frederic, are you OK with this version? Did anything happen on this? The tree is still broken... Alex ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-03-25 21:14 ` Kevin Hilman 2013-04-02 11:56 ` Gleb Natapov @ 2013-05-15 22:52 ` Frederic Weisbecker 2013-05-17 1:04 ` Frederic Weisbecker 1 sibling, 1 reply; 21+ messages in thread From: Frederic Weisbecker @ 2013-05-15 22:52 UTC (permalink / raw) To: Kevin Hilman Cc: Gleb Natapov, Scott Wood, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On Mon, Mar 25, 2013 at 02:14:20PM -0700, Kevin Hilman wrote: > Gleb Natapov <gleb@redhat.com> writes: > > > On Sun, Mar 24, 2013 at 02:44:26PM +0100, Frederic Weisbecker wrote: > >> 2013/3/21 Gleb Natapov <gleb@redhat.com>: > >> > Isn't is simpler for kernel/context_tracking.c to define empty > >> > __guest_enter()/__guest_exit() if !CONFIG_KVM. > >> > >> That doesn't look right. Off-cases are usually handled from the > >> headers, right? So that we avoid iffdeffery ugliness in core code. > > Lets put it in linux/context_tracking.h header then. > > Here's a version to do that. > > Kevin > > From d9d909394479dd7ff90b7bddb95a564945406719 Mon Sep 17 00:00:00 2001 > From: Kevin Hilman <khilman@linaro.org> > Date: Mon, 25 Mar 2013 14:12:41 -0700 > Subject: [PATCH v2] ontext_tracking: fix !CONFIG_KVM compile: add stub guest > enter/exit Sorry for my very delayed response... > > When KVM is not enabled, or not available on a platform, the KVM > headers should not be included. Instead, just define stub > __guest_[enter|exit] functions. May be it would be cleaner to move guest_enter/exit definitions altogether in linux/context_tracking.h After all that's where the implementation mostly belong to. Let me see if I can get that in shape. Thanks. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-05-15 22:52 ` Frederic Weisbecker @ 2013-05-17 1:04 ` Frederic Weisbecker 2013-05-17 14:09 ` Kevin Hilman 0 siblings, 1 reply; 21+ messages in thread From: Frederic Weisbecker @ 2013-05-17 1:04 UTC (permalink / raw) To: Kevin Hilman Cc: Gleb Natapov, Scott Wood, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On Thu, May 16, 2013 at 12:52:03AM +0200, Frederic Weisbecker wrote: > On Mon, Mar 25, 2013 at 02:14:20PM -0700, Kevin Hilman wrote: > > Gleb Natapov <gleb@redhat.com> writes: > > > > > On Sun, Mar 24, 2013 at 02:44:26PM +0100, Frederic Weisbecker wrote: > > >> 2013/3/21 Gleb Natapov <gleb@redhat.com>: > > >> > Isn't is simpler for kernel/context_tracking.c to define empty > > >> > __guest_enter()/__guest_exit() if !CONFIG_KVM. > > >> > > >> That doesn't look right. Off-cases are usually handled from the > > >> headers, right? So that we avoid iffdeffery ugliness in core code. > > > Lets put it in linux/context_tracking.h header then. > > > > Here's a version to do that. > > > > Kevin > > > > From d9d909394479dd7ff90b7bddb95a564945406719 Mon Sep 17 00:00:00 2001 > > From: Kevin Hilman <khilman@linaro.org> > > Date: Mon, 25 Mar 2013 14:12:41 -0700 > > Subject: [PATCH v2] ontext_tracking: fix !CONFIG_KVM compile: add stub guest > > enter/exit > > Sorry for my very delayed response... > > > > > When KVM is not enabled, or not available on a platform, the KVM > > headers should not be included. Instead, just define stub > > __guest_[enter|exit] functions. > > May be it would be cleaner to move guest_enter/exit definitions altogether > in linux/context_tracking.h > > After all that's where the implementation mostly belong to. > > Let me see if I can get that in shape. Does the following work for you? --- commit b1633c075527653a99df6fd54d2611cf8c8047f5 Author: Frederic Weisbecker <fweisbec@gmail.com> Date: Thu May 16 01:21:38 2013 +0200 kvm: Move guest entry/exit APIs to context_tracking Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h index 365f4a6..fc09d7b 100644 --- a/include/linux/context_tracking.h +++ b/include/linux/context_tracking.h @@ -3,6 +3,7 @@ #include <linux/sched.h> #include <linux/percpu.h> +#include <linux/vtime.h> #include <asm/ptrace.h> struct context_tracking { @@ -19,6 +20,26 @@ struct context_tracking { } state; }; +static inline void __guest_enter(void) +{ + /* + * This is running in ioctl context so we can avoid + * the call to vtime_account() with its unnecessary idle check. + */ + vtime_account_system(current); + current->flags |= PF_VCPU; +} + +static inline void __guest_exit(void) +{ + /* + * This is running in ioctl context so we can avoid + * the call to vtime_account() with its unnecessary idle check. + */ + vtime_account_system(current); + current->flags &= ~PF_VCPU; +} + #ifdef CONFIG_CONTEXT_TRACKING DECLARE_PER_CPU(struct context_tracking, context_tracking); @@ -35,6 +56,9 @@ static inline bool context_tracking_active(void) extern void user_enter(void); extern void user_exit(void); +extern void guest_enter(void); +extern void guest_exit(void); + static inline enum ctx_state exception_enter(void) { enum ctx_state prev_ctx; @@ -57,6 +81,17 @@ extern void context_tracking_task_switch(struct task_struct *prev, static inline bool context_tracking_in_user(void) { return false; } static inline void user_enter(void) { } static inline void user_exit(void) { } + +static inline void guest_enter(void) +{ + __guest_enter(); +} + +static inline void guest_exit(void) +{ + __guest_exit(); +} + static inline enum ctx_state exception_enter(void) { return 0; } static inline void exception_exit(enum ctx_state prev_ctx) { } static inline void context_tracking_task_switch(struct task_struct *prev, diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index f0eea07..8db53cf 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -23,6 +23,7 @@ #include <linux/ratelimit.h> #include <linux/err.h> #include <linux/irqflags.h> +#include <linux/context_tracking.h> #include <asm/signal.h> #include <linux/kvm.h> @@ -760,42 +761,6 @@ static inline int kvm_iommu_unmap_guest(struct kvm *kvm) } #endif -static inline void __guest_enter(void) -{ - /* - * This is running in ioctl context so we can avoid - * the call to vtime_account() with its unnecessary idle check. - */ - vtime_account_system(current); - current->flags |= PF_VCPU; -} - -static inline void __guest_exit(void) -{ - /* - * This is running in ioctl context so we can avoid - * the call to vtime_account() with its unnecessary idle check. - */ - vtime_account_system(current); - current->flags &= ~PF_VCPU; -} - -#ifdef CONFIG_CONTEXT_TRACKING -extern void guest_enter(void); -extern void guest_exit(void); - -#else /* !CONFIG_CONTEXT_TRACKING */ -static inline void guest_enter(void) -{ - __guest_enter(); -} - -static inline void guest_exit(void) -{ - __guest_exit(); -} -#endif /* !CONFIG_CONTEXT_TRACKING */ - static inline void kvm_guest_enter(void) { unsigned long flags; ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-05-17 1:04 ` Frederic Weisbecker @ 2013-05-17 14:09 ` Kevin Hilman 2013-05-17 14:34 ` Frederic Weisbecker 0 siblings, 1 reply; 21+ messages in thread From: Kevin Hilman @ 2013-05-17 14:09 UTC (permalink / raw) To: Frederic Weisbecker Cc: Gleb Natapov, Scott Wood, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list Frederic Weisbecker <fweisbec@gmail.com> writes: > On Thu, May 16, 2013 at 12:52:03AM +0200, Frederic Weisbecker wrote: >> On Mon, Mar 25, 2013 at 02:14:20PM -0700, Kevin Hilman wrote: >> > Gleb Natapov <gleb@redhat.com> writes: >> > >> > > On Sun, Mar 24, 2013 at 02:44:26PM +0100, Frederic Weisbecker wrote: >> > >> 2013/3/21 Gleb Natapov <gleb@redhat.com>: >> > >> > Isn't is simpler for kernel/context_tracking.c to define empty >> > >> > __guest_enter()/__guest_exit() if !CONFIG_KVM. >> > >> >> > >> That doesn't look right. Off-cases are usually handled from the >> > >> headers, right? So that we avoid iffdeffery ugliness in core code. >> > > Lets put it in linux/context_tracking.h header then. >> > >> > Here's a version to do that. >> > >> > Kevin >> > >> > From d9d909394479dd7ff90b7bddb95a564945406719 Mon Sep 17 00:00:00 2001 >> > From: Kevin Hilman <khilman@linaro.org> >> > Date: Mon, 25 Mar 2013 14:12:41 -0700 >> > Subject: [PATCH v2] ontext_tracking: fix !CONFIG_KVM compile: add stub guest >> > enter/exit >> >> Sorry for my very delayed response... >> >> > >> > When KVM is not enabled, or not available on a platform, the KVM >> > headers should not be included. Instead, just define stub >> > __guest_[enter|exit] functions. >> >> May be it would be cleaner to move guest_enter/exit definitions altogether >> in linux/context_tracking.h >> >> After all that's where the implementation mostly belong to. >> >> Let me see if I can get that in shape. > > Does the following work for you? Nope. Since it still includs kvm_host.h on non-KVM builds, there is potential for problems. For example, on ARM (v3.10-rc1 + this patch) has this build error: CC kernel/context_tracking.o In file included from /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_host.h:41:0, from /work/kernel/linaro/nohz/include/linux/kvm_host.h:34, from /work/kernel/linaro/nohz/kernel/context_tracking.c:18: /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_vgic.h:38:6: warning: "CONFIG_KVM_ARM_MAX_VCPUS" is not defined [-Wundef] In file included from /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_host.h:41:0, from /work/kernel/linaro/nohz/include/linux/kvm_host.h:34, from /work/kernel/linaro/nohz/kernel/context_tracking.c:18: /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_vgic.h:59:11: error: 'CONFIG_KVM_ARM_MAX_VCPUS' undeclared here (not in a function) Kevin ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-05-17 14:09 ` Kevin Hilman @ 2013-05-17 14:34 ` Frederic Weisbecker 2013-05-17 17:00 ` Kevin Hilman 0 siblings, 1 reply; 21+ messages in thread From: Frederic Weisbecker @ 2013-05-17 14:34 UTC (permalink / raw) To: Kevin Hilman Cc: Gleb Natapov, Scott Wood, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list On Fri, May 17, 2013 at 07:09:42AM -0700, Kevin Hilman wrote: > Frederic Weisbecker <fweisbec@gmail.com> writes: > > > On Thu, May 16, 2013 at 12:52:03AM +0200, Frederic Weisbecker wrote: > >> On Mon, Mar 25, 2013 at 02:14:20PM -0700, Kevin Hilman wrote: > >> > Gleb Natapov <gleb@redhat.com> writes: > >> > > >> > > On Sun, Mar 24, 2013 at 02:44:26PM +0100, Frederic Weisbecker wrote: > >> > >> 2013/3/21 Gleb Natapov <gleb@redhat.com>: > >> > >> > Isn't is simpler for kernel/context_tracking.c to define empty > >> > >> > __guest_enter()/__guest_exit() if !CONFIG_KVM. > >> > >> > >> > >> That doesn't look right. Off-cases are usually handled from the > >> > >> headers, right? So that we avoid iffdeffery ugliness in core code. > >> > > Lets put it in linux/context_tracking.h header then. > >> > > >> > Here's a version to do that. > >> > > >> > Kevin > >> > > >> > From d9d909394479dd7ff90b7bddb95a564945406719 Mon Sep 17 00:00:00 2001 > >> > From: Kevin Hilman <khilman@linaro.org> > >> > Date: Mon, 25 Mar 2013 14:12:41 -0700 > >> > Subject: [PATCH v2] ontext_tracking: fix !CONFIG_KVM compile: add stub guest > >> > enter/exit > >> > >> Sorry for my very delayed response... > >> > >> > > >> > When KVM is not enabled, or not available on a platform, the KVM > >> > headers should not be included. Instead, just define stub > >> > __guest_[enter|exit] functions. > >> > >> May be it would be cleaner to move guest_enter/exit definitions altogether > >> in linux/context_tracking.h > >> > >> After all that's where the implementation mostly belong to. > >> > >> Let me see if I can get that in shape. > > > > Does the following work for you? > > Nope. > > Since it still includs kvm_host.h on non-KVM builds, there is potential > for problems. For example, on ARM (v3.10-rc1 + this patch) has this > build error: > > CC kernel/context_tracking.o > In file included from /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_host.h:41:0, > from /work/kernel/linaro/nohz/include/linux/kvm_host.h:34, > from /work/kernel/linaro/nohz/kernel/context_tracking.c:18: > /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_vgic.h:38:6: warning: "CONFIG_KVM_ARM_MAX_VCPUS" is not defined [-Wundef] > In file included from /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_host.h:41:0, > from /work/kernel/linaro/nohz/include/linux/kvm_host.h:34, > from /work/kernel/linaro/nohz/kernel/context_tracking.c:18: > /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_vgic.h:59:11: error: 'CONFIG_KVM_ARM_MAX_VCPUS' undeclared here (not in a function) Sorry I forgot to remove the include to kvm_host.h in context_tracking.c, here's the fixed patch: diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h index 365f4a6..fc09d7b 100644 --- a/include/linux/context_tracking.h +++ b/include/linux/context_tracking.h @@ -3,6 +3,7 @@ #include <linux/sched.h> #include <linux/percpu.h> +#include <linux/vtime.h> #include <asm/ptrace.h> struct context_tracking { @@ -19,6 +20,26 @@ struct context_tracking { } state; }; +static inline void __guest_enter(void) +{ + /* + * This is running in ioctl context so we can avoid + * the call to vtime_account() with its unnecessary idle check. + */ + vtime_account_system(current); + current->flags |= PF_VCPU; +} + +static inline void __guest_exit(void) +{ + /* + * This is running in ioctl context so we can avoid + * the call to vtime_account() with its unnecessary idle check. + */ + vtime_account_system(current); + current->flags &= ~PF_VCPU; +} + #ifdef CONFIG_CONTEXT_TRACKING DECLARE_PER_CPU(struct context_tracking, context_tracking); @@ -35,6 +56,9 @@ static inline bool context_tracking_active(void) extern void user_enter(void); extern void user_exit(void); +extern void guest_enter(void); +extern void guest_exit(void); + static inline enum ctx_state exception_enter(void) { enum ctx_state prev_ctx; @@ -57,6 +81,17 @@ extern void context_tracking_task_switch(struct task_struct *prev, static inline bool context_tracking_in_user(void) { return false; } static inline void user_enter(void) { } static inline void user_exit(void) { } + +static inline void guest_enter(void) +{ + __guest_enter(); +} + +static inline void guest_exit(void) +{ + __guest_exit(); +} + static inline enum ctx_state exception_enter(void) { return 0; } static inline void exception_exit(enum ctx_state prev_ctx) { } static inline void context_tracking_task_switch(struct task_struct *prev, diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index f0eea07..8db53cf 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -23,6 +23,7 @@ #include <linux/ratelimit.h> #include <linux/err.h> #include <linux/irqflags.h> +#include <linux/context_tracking.h> #include <asm/signal.h> #include <linux/kvm.h> @@ -760,42 +761,6 @@ static inline int kvm_iommu_unmap_guest(struct kvm *kvm) } #endif -static inline void __guest_enter(void) -{ - /* - * This is running in ioctl context so we can avoid - * the call to vtime_account() with its unnecessary idle check. - */ - vtime_account_system(current); - current->flags |= PF_VCPU; -} - -static inline void __guest_exit(void) -{ - /* - * This is running in ioctl context so we can avoid - * the call to vtime_account() with its unnecessary idle check. - */ - vtime_account_system(current); - current->flags &= ~PF_VCPU; -} - -#ifdef CONFIG_CONTEXT_TRACKING -extern void guest_enter(void); -extern void guest_exit(void); - -#else /* !CONFIG_CONTEXT_TRACKING */ -static inline void guest_enter(void) -{ - __guest_enter(); -} - -static inline void guest_exit(void) -{ - __guest_exit(); -} -#endif /* !CONFIG_CONTEXT_TRACKING */ - static inline void kvm_guest_enter(void) { unsigned long flags; diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c index 65349f0..85bdde1 100644 --- a/kernel/context_tracking.c +++ b/kernel/context_tracking.c @@ -15,7 +15,6 @@ */ #include <linux/context_tracking.h> -#include <linux/kvm_host.h> #include <linux/rcupdate.h> #include <linux/sched.h> #include <linux/hardirq.h> ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM 2013-05-17 14:34 ` Frederic Weisbecker @ 2013-05-17 17:00 ` Kevin Hilman 0 siblings, 0 replies; 21+ messages in thread From: Kevin Hilman @ 2013-05-17 17:00 UTC (permalink / raw) To: Frederic Weisbecker Cc: Gleb Natapov, Scott Wood, linaro-kernel, Marcelo Tosatti, open list:KERNEL VIRTUAL MA..., open list Frederic Weisbecker <fweisbec@gmail.com> writes: > On Fri, May 17, 2013 at 07:09:42AM -0700, Kevin Hilman wrote: >> Frederic Weisbecker <fweisbec@gmail.com> writes: >> >> > On Thu, May 16, 2013 at 12:52:03AM +0200, Frederic Weisbecker wrote: >> >> On Mon, Mar 25, 2013 at 02:14:20PM -0700, Kevin Hilman wrote: >> >> > Gleb Natapov <gleb@redhat.com> writes: >> >> > >> >> > > On Sun, Mar 24, 2013 at 02:44:26PM +0100, Frederic Weisbecker wrote: >> >> > >> 2013/3/21 Gleb Natapov <gleb@redhat.com>: >> >> > >> > Isn't is simpler for kernel/context_tracking.c to define empty >> >> > >> > __guest_enter()/__guest_exit() if !CONFIG_KVM. >> >> > >> >> >> > >> That doesn't look right. Off-cases are usually handled from the >> >> > >> headers, right? So that we avoid iffdeffery ugliness in core code. >> >> > > Lets put it in linux/context_tracking.h header then. >> >> > >> >> > Here's a version to do that. >> >> > >> >> > Kevin >> >> > >> >> > From d9d909394479dd7ff90b7bddb95a564945406719 Mon Sep 17 00:00:00 2001 >> >> > From: Kevin Hilman <khilman@linaro.org> >> >> > Date: Mon, 25 Mar 2013 14:12:41 -0700 >> >> > Subject: [PATCH v2] ontext_tracking: fix !CONFIG_KVM compile: add stub guest >> >> > enter/exit >> >> >> >> Sorry for my very delayed response... >> >> >> >> > >> >> > When KVM is not enabled, or not available on a platform, the KVM >> >> > headers should not be included. Instead, just define stub >> >> > __guest_[enter|exit] functions. >> >> >> >> May be it would be cleaner to move guest_enter/exit definitions altogether >> >> in linux/context_tracking.h >> >> >> >> After all that's where the implementation mostly belong to. >> >> >> >> Let me see if I can get that in shape. >> > >> > Does the following work for you? >> >> Nope. >> >> Since it still includs kvm_host.h on non-KVM builds, there is potential >> for problems. For example, on ARM (v3.10-rc1 + this patch) has this >> build error: >> >> CC kernel/context_tracking.o >> In file included from /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_host.h:41:0, >> from /work/kernel/linaro/nohz/include/linux/kvm_host.h:34, >> from /work/kernel/linaro/nohz/kernel/context_tracking.c:18: >> /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_vgic.h:38:6: warning: "CONFIG_KVM_ARM_MAX_VCPUS" is not defined [-Wundef] >> In file included from /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_host.h:41:0, >> from /work/kernel/linaro/nohz/include/linux/kvm_host.h:34, >> from /work/kernel/linaro/nohz/kernel/context_tracking.c:18: >> /work/kernel/linaro/nohz/arch/arm/include/asm/kvm_vgic.h:59:11: error: 'CONFIG_KVM_ARM_MAX_VCPUS' undeclared here (not in a function) > > Sorry I forgot to remove the include to kvm_host.h in context_tracking.c, > here's the fixed patch: Yup, that one builds just fine. Reviewed-and-Tested-by: Kevin Hilman <khilman@linaro.org> Kevin ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2013-05-17 17:00 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-03-15 0:13 [PATCH] KVM: allow host header to be included even for !CONFIG_KVM Kevin Hilman 2013-03-18 21:04 ` Marcelo Tosatti 2013-03-20 23:58 ` Scott Wood 2013-03-21 7:29 ` Gleb Natapov 2013-03-21 14:27 ` Kevin Hilman 2013-03-21 18:42 ` Scott Wood 2013-03-21 19:16 ` Gleb Natapov 2013-03-21 19:33 ` Scott Wood 2013-03-21 21:17 ` Gleb Natapov 2013-03-22 0:02 ` Kevin Hilman 2013-03-24 10:21 ` Gleb Natapov 2013-03-24 13:44 ` Frederic Weisbecker 2013-03-24 14:01 ` Gleb Natapov 2013-03-25 21:14 ` Kevin Hilman 2013-04-02 11:56 ` Gleb Natapov 2013-05-02 21:58 ` Alexander Graf 2013-05-15 22:52 ` Frederic Weisbecker 2013-05-17 1:04 ` Frederic Weisbecker 2013-05-17 14:09 ` Kevin Hilman 2013-05-17 14:34 ` Frederic Weisbecker 2013-05-17 17:00 ` Kevin Hilman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox