All of lore.kernel.org
 help / color / mirror / Atom feed
From: Frederic Weisbecker <fweisbec@gmail.com>
To: Kevin Hilman <khilman@linaro.org>
Cc: Gleb Natapov <gleb@redhat.com>,
	Scott Wood <scottwood@freescale.com>,
	linaro-kernel@lists.linaro.org,
	Marcelo Tosatti <mtosatti@redhat.com>,
	"open list:KERNEL VIRTUAL MA..." <kvm@vger.kernel.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] KVM: allow host header to be included even for !CONFIG_KVM
Date: Fri, 17 May 2013 16:34:54 +0200	[thread overview]
Message-ID: <20130517143445.GA23086@somewhere> (raw)
In-Reply-To: <871u95u28p.fsf@linaro.org>

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>

  reply	other threads:[~2013-05-17 14:34 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
2013-05-17 17:00                             ` Kevin Hilman

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=20130517143445.GA23086@somewhere \
    --to=fweisbec@gmail.com \
    --cc=gleb@redhat.com \
    --cc=khilman@linaro.org \
    --cc=kvm@vger.kernel.org \
    --cc=linaro-kernel@lists.linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=scottwood@freescale.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.