From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: [PATCH 35/35] kvm: x86: Only read/write MSR_KVM_ASYNC_PF_EN if supported Date: Thu, 6 Jan 2011 15:56:41 -0200 Message-ID: <60de41359ad45b27921fe9d9b5059051cb37796f.1294336601.git.mtosatti@redhat.com> References: Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, Jan Kiszka , Marcelo Tosatti To: Anthony Liguori Return-path: Received: from mx1.redhat.com ([209.132.183.28]:25730 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752186Ab1AFSDc (ORCPT ); Thu, 6 Jan 2011 13:03:32 -0500 In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: From: Jan Kiszka If the kernel does not support KVM_CAP_ASYNC_PF, it also does not know about the related MSR. So skip it during state synchronization in that case. Fixes annoying kernel warnings. Signed-off-by: Jan Kiszka Signed-off-by: Marcelo Tosatti --- target-i386/kvm.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/target-i386/kvm.c b/target-i386/kvm.c index 79a1da8..af79526 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -64,6 +64,9 @@ const KVMCapabilityInfo kvm_arch_required_capabilities[] = { static bool has_msr_star; static bool has_msr_hsave_pa; +#if defined(CONFIG_KVM_PARA) && defined(KVM_CAP_ASYNC_PF) +static bool has_msr_async_pf_en; +#endif static int lm_capable_kernel; static struct kvm_cpuid2 *try_get_cpuid(int max) @@ -165,6 +168,7 @@ static int get_para_features(void) features |= (1 << para_features[i].feature); } } + has_msr_async_pf_en = features & (1 << KVM_FEATURE_ASYNC_PF); return features; } #endif @@ -917,7 +921,9 @@ static int kvm_put_msrs(CPUState *env, int level) env->system_time_msr); kvm_msr_entry_set(&msrs[n++], MSR_KVM_WALL_CLOCK, env->wall_clock_msr); #if defined(CONFIG_KVM_PARA) && defined(KVM_CAP_ASYNC_PF) - kvm_msr_entry_set(&msrs[n++], MSR_KVM_ASYNC_PF_EN, env->async_pf_en_msr); + if (has_msr_async_pf_en) { + kvm_msr_entry_set(&msrs[n++], MSR_KVM_ASYNC_PF_EN, env->async_pf_en_msr); + } #endif } #ifdef KVM_CAP_MCE @@ -1149,7 +1155,9 @@ static int kvm_get_msrs(CPUState *env) msrs[n++].index = MSR_KVM_SYSTEM_TIME; msrs[n++].index = MSR_KVM_WALL_CLOCK; #if defined(CONFIG_KVM_PARA) && defined(KVM_CAP_ASYNC_PF) - msrs[n++].index = MSR_KVM_ASYNC_PF_EN; + if (has_msr_async_pf_en) { + msrs[n++].index = MSR_KVM_ASYNC_PF_EN; + } #endif #ifdef KVM_CAP_MCE -- 1.7.2.3 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=32910 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PauBH-0003wJ-Kz for qemu-devel@nongnu.org; Thu, 06 Jan 2011 13:03:32 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PauBC-0006ch-ER for qemu-devel@nongnu.org; Thu, 06 Jan 2011 13:03:23 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53024) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PauBC-0006c7-5n for qemu-devel@nongnu.org; Thu, 06 Jan 2011 13:03:18 -0500 From: Marcelo Tosatti Date: Thu, 6 Jan 2011 15:56:41 -0200 Message-Id: <60de41359ad45b27921fe9d9b5059051cb37796f.1294336601.git.mtosatti@redhat.com> In-Reply-To: References: Subject: [Qemu-devel] [PATCH 35/35] kvm: x86: Only read/write MSR_KVM_ASYNC_PF_EN if supported List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Jan Kiszka , Marcelo Tosatti , qemu-devel@nongnu.org, kvm@vger.kernel.org From: Jan Kiszka If the kernel does not support KVM_CAP_ASYNC_PF, it also does not know about the related MSR. So skip it during state synchronization in that case. Fixes annoying kernel warnings. Signed-off-by: Jan Kiszka Signed-off-by: Marcelo Tosatti --- target-i386/kvm.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/target-i386/kvm.c b/target-i386/kvm.c index 79a1da8..af79526 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -64,6 +64,9 @@ const KVMCapabilityInfo kvm_arch_required_capabilities[] = { static bool has_msr_star; static bool has_msr_hsave_pa; +#if defined(CONFIG_KVM_PARA) && defined(KVM_CAP_ASYNC_PF) +static bool has_msr_async_pf_en; +#endif static int lm_capable_kernel; static struct kvm_cpuid2 *try_get_cpuid(int max) @@ -165,6 +168,7 @@ static int get_para_features(void) features |= (1 << para_features[i].feature); } } + has_msr_async_pf_en = features & (1 << KVM_FEATURE_ASYNC_PF); return features; } #endif @@ -917,7 +921,9 @@ static int kvm_put_msrs(CPUState *env, int level) env->system_time_msr); kvm_msr_entry_set(&msrs[n++], MSR_KVM_WALL_CLOCK, env->wall_clock_msr); #if defined(CONFIG_KVM_PARA) && defined(KVM_CAP_ASYNC_PF) - kvm_msr_entry_set(&msrs[n++], MSR_KVM_ASYNC_PF_EN, env->async_pf_en_msr); + if (has_msr_async_pf_en) { + kvm_msr_entry_set(&msrs[n++], MSR_KVM_ASYNC_PF_EN, env->async_pf_en_msr); + } #endif } #ifdef KVM_CAP_MCE @@ -1149,7 +1155,9 @@ static int kvm_get_msrs(CPUState *env) msrs[n++].index = MSR_KVM_SYSTEM_TIME; msrs[n++].index = MSR_KVM_WALL_CLOCK; #if defined(CONFIG_KVM_PARA) && defined(KVM_CAP_ASYNC_PF) - msrs[n++].index = MSR_KVM_ASYNC_PF_EN; + if (has_msr_async_pf_en) { + msrs[n++].index = MSR_KVM_ASYNC_PF_EN; + } #endif #ifdef KVM_CAP_MCE -- 1.7.2.3