From: Alexander Graf <agraf@suse.de>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH] kvm: ppc: detect old headers
Date: Sun, 17 Apr 2011 10:49:53 +0200 [thread overview]
Message-ID: <1303030193-3732-1-git-send-email-agraf@suse.de> (raw)
When compiling Qemu with older kernel headers, the PVR setting
mechanism isn't available yet. Unfortunately, back then I didn't add
a capability we could check against, so all we can do is add a configure
test to see if we support PVR setting. For BookE, we don't care yet.
While at it, also memset the sregs to zero, so we have sane state in
case we add fields later.
This fixes compilation errors with KVM enabled on older kernel headers
(like 2.6.32).
Signed-off-by: Alexander Graf <agraf@suse.de>
---
configure | 18 ++++++++++++++++++
target-ppc/kvm.c | 24 +++++++++++++++++++++---
2 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index da2da04..7b90e1e 100755
--- a/configure
+++ b/configure
@@ -1772,6 +1772,21 @@ recent kvm-kmod from http://sourceforge.net/projects/kvm."
fi
##########################################
+# test for ppc kvm pvr setting
+
+if test "$kvm" = "yes" && test "$cpu" = "ppc" -o "$cpu" = "ppc64"; then
+ cat > $TMPC <<EOF
+ #include <asm/kvm.h>
+ int main(void) { struct kvm_sregs s; s.pvr = 0; return 0; }
+EOF
+ if compile_prog "$kvm_cflags" "" ; then
+ kvm_ppc_pvr=yes
+ else
+ kvm_ppc_pvr=no
+ fi
+fi
+
+##########################################
# test for vhost net
if test "$vhost_net" != "no"; then
@@ -3241,6 +3256,9 @@ case "$target_arch2" in
if test $vhost_net = "yes" ; then
echo "CONFIG_VHOST_NET=y" >> $config_target_mak
fi
+ if test $kvm_ppc_pvr = "yes" ; then
+ echo "CONFIG_KVM_PPC_PVR=y" >> $config_target_mak
+ fi
fi
esac
if test "$target_bigendian" = "yes" ; then
diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index 2cfb24b..93d91df 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -80,10 +80,28 @@ int kvm_arch_init(KVMState *s)
int kvm_arch_init_vcpu(CPUState *cenv)
{
int ret = 0;
- struct kvm_sregs sregs;
- sregs.pvr = cenv->spr[SPR_PVR];
- ret = kvm_vcpu_ioctl(cenv, KVM_SET_SREGS, &sregs);
+ if ((cenv->mmu_model == POWERPC_MMU_BOOKE) ||
+ (cenv->mmu_model == POWERPC_MMU_BOOKE_FSL)) {
+ /* What we're really trying to say is "if we're on BookE, we use
+ the native PVR for now". This is the only sane way to check
+ it though, so we potentially confuse users that they can run
+ BookE guests on BookS. Let's hope nobody dares enough :) */
+ } else {
+#ifdef CONFIG_KVM_PPC_PVR
+ struct kvm_sregs sregs;
+
+ memset(&sregs, 0, sizeof(sregs));
+ sregs.pvr = cenv->spr[SPR_PVR];
+ ret = kvm_vcpu_ioctl(cenv, KVM_SET_SREGS, &sregs);
+#else
+ ret = -ENOSYS;
+#endif
+
+ if (ret) {
+ fprintf(stderr, "kvm error: missing PVR setting capability\n");
+ }
+ }
idle_timer = qemu_new_timer_ns(vm_clock, kvm_kick_env, cenv);
--
1.6.0.2
next reply other threads:[~2011-04-17 8:50 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-17 8:49 Alexander Graf [this message]
-- strict thread matches above, loose matches on Subject: below --
2011-05-03 11:54 [Qemu-devel] [PATCH] kvm: ppc: detect old headers Alexander Graf
2011-05-03 12:14 ` Jan Kiszka
2011-05-03 12:28 ` Alexander Graf
2011-05-03 12:31 ` Jan Kiszka
2011-05-03 12:33 ` Alexander Graf
2011-05-03 13:02 ` Jan Kiszka
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=1303030193-3732-1-git-send-email-agraf@suse.de \
--to=agraf@suse.de \
--cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).