From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:58134) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QHEBm-0004XX-R5 for qemu-devel@nongnu.org; Tue, 03 May 2011 07:54:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QHEBl-0005j4-N9 for qemu-devel@nongnu.org; Tue, 03 May 2011 07:54:50 -0400 Received: from cantor.suse.de ([195.135.220.2]:42272 helo=mx1.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QHEBl-0005ic-BD for qemu-devel@nongnu.org; Tue, 03 May 2011 07:54:49 -0400 From: Alexander Graf Date: Tue, 3 May 2011 13:54:45 +0200 Message-Id: <1304423686-18909-1-git-send-email-agraf@suse.de> Subject: [Qemu-devel] [PATCH] kvm: ppc: detect old headers List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU-devel Developers Cc: Scott Wood 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. This fixes compilation errors with KVM enabled on older kernel headers (like 2.6.32). Signed-off-by: Alexander Graf --- configure | 18 ++++++++++++++++++ target-ppc/kvm.c | 16 +++++++++++++++- 2 files changed, 33 insertions(+), 1 deletions(-) diff --git a/configure b/configure index fbf5d5f..adfbb40 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 < + 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 @@ -3257,6 +3272,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 5a1b6cb..ccf4668 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -94,19 +94,33 @@ static int kvm_arch_sync_sregs(CPUState *cenv) int ret; if (cenv->excp_model == POWERPC_EXCP_BOOKE) { + /* 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 :) */ return 0; } else { if (!cap_segstate) { - return 0; + fprintf(stderr, "kvm error: missing PVR setting capability\n"); + return -ENOSYS; } } +#if !defined(CONFIG_KVM_PPC_PVR) + if (1) { + fprintf(stderr, "kvm error: missing PVR setting capability\n"); + return -ENOSYS; + } +#endif + ret = kvm_vcpu_ioctl(cenv, KVM_GET_SREGS, &sregs); if (ret) { return ret; } +#ifdef CONFIG_KVM_PPC_PVR sregs.pvr = cenv->spr[SPR_PVR]; +#endif return kvm_vcpu_ioctl(cenv, KVM_SET_SREGS, &sregs); } -- 1.6.0.2