From d979114499983e408dc372a3074d9c2dcb9939cb Mon Sep 17 00:00:00 2001 Message-Id: In-Reply-To: <94968b7fa9b14e71f004474d7ce77e189e6a2bf3.1349175436.git.minovotn@redhat.com> References: <94968b7fa9b14e71f004474d7ce77e189e6a2bf3.1349175436.git.minovotn@redhat.com> From: Eduardo Habkost Date: Fri, 28 Sep 2012 16:50:20 +0200 Subject: [PATCH 15/34] kvm: expose tsc deadline timer feature to guest RH-Author: Eduardo Habkost Message-id: <1348851023-31907-16-git-send-email-ehabkost@redhat.com> Patchwork-id: 42519 O-Subject: [RHEL6 qemu-kvm PATCH 15/18] kvm: expose tsc deadline timer feature to guest Bugzilla: 767944 RH-Acked-by: Alex Williamson RH-Acked-by: Paolo Bonzini RH-Acked-by: Igor Mammedov RH-Acked-by: Orit Wasserman RH-Acked-by: Eduardo Habkost From: "ddugger@redhat.com" Bugzilla: 767944 Upstream status: commit a75b3e0f641a68b7cdd4bbe4ed1b60f963bf2b62 Upstream commit description: commit a75b3e0f641a68b7cdd4bbe4ed1b60f963bf2b62 Author: Liu, Jinsong Date: Tue Jul 3 02:35:10 2012 +0800 kvm: expose tsc deadline timer feature to guest This patch exposes tsc deadline timer feature to guest if 1). in-kernel irqchip is used, and 2). kvm has emulated tsc deadline timer, and 3). user authorize the feature exposing via -cpu or +/- tsc-deadline Signed-off-by: Liu, Jinsong Reviewed-by: Eduardo Habkost Acked-by: Jan Kiszka Signed-off-by: Marcelo Tosatti In qemu-kvm upstream, cpuid expose via target-i386/kvm.c --> kvm_arch_init_vcpu(), while for RHEL6.4 rebase, cpuid expose via qemu-kvm-x86.c --> kvm_arch_init_vcpu(). This patch backport tsc deadline timer cpuid exposing logic to qemu-kvm-x86.c. [ehabkost: edited commit message to include pointer to upstream commit] Signed-off-by: Liu, Jinsong Signed-off-by: Don Dugger Signed-off-by: Eduardo Habkost --- kvm/include/linux/kvm.h | 1 + qemu-kvm-x86.c | 5 +++++ 2 files changed, 6 insertions(+) Signed-off-by: Michal Novotny --- kvm/include/linux/kvm.h | 1 + qemu-kvm-x86.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/kvm/include/linux/kvm.h b/kvm/include/linux/kvm.h index f566e7b..4484c47 100644 --- a/kvm/include/linux/kvm.h +++ b/kvm/include/linux/kvm.h @@ -530,6 +530,7 @@ struct kvm_enable_cap { #ifdef __KVM_HAVE_XCRS #define KVM_CAP_XCRS 56 #endif +#define KVM_CAP_TSC_DEADLINE_TIMER 72 #define KVM_CAP_KVMCLOCK_CTRL 76 #ifdef KVM_CAP_IRQ_ROUTING diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c index 59d32f1..edacf95 100644 --- a/qemu-kvm-x86.c +++ b/qemu-kvm-x86.c @@ -1409,9 +1409,14 @@ int kvm_arch_init_vcpu(CPUState *cenv) /* prevent the hypervisor bit from being cleared by the kernel */ i = cenv->cpuid_ext_features & CPUID_EXT_HYPERVISOR; + j = cenv->cpuid_ext_features & CPUID_EXT_TSC_DEADLINE_TIMER; kvm_trim_features(&cenv->cpuid_ext_features, kvm_arch_get_supported_cpuid(cenv->kvm_state, 1, 0, R_ECX)); cenv->cpuid_ext_features |= i; + if (j && kvm_irqchip_in_kernel() && + kvm_check_extension(cenv->kvm_state, KVM_CAP_TSC_DEADLINE_TIMER)) { + cenv->cpuid_ext_features |= CPUID_EXT_TSC_DEADLINE_TIMER; + } kvm_trim_features(&cenv->cpuid_ext2_features, kvm_arch_get_supported_cpuid(cenv->kvm_state, 0x80000001, 0, R_EDX)); -- 1.7.11.4