V2 vpmu: Add a cpuid function
PATCH 1/1 V2 vpmu: Add a cpuid function
This patch hasn't changed from version 1.
Add a new function - do_cpuid - to the vpmu struct arch_vpmu_ops. This permits the vpmu to set specific bits in the cpuid for the hvm guest.
Signed-off-by Dietmar Hahn <[email protected]>
xen/arch/x86/hvm/vmx/vmx.c | 2 ++ xen/arch/x86/hvm/vmx/vpmu_core2.c | 7 +++++++ xen/arch/x86/hvm/vpmu.c | 10 ++++++++++ xen/include/asm-x86/hvm/vpmu.h | 5 +++++ 4 files changed, 24 insertions(+), 0 deletions(-)
# HG changeset patch
# User Dietmar Hahn <[email protected]> # Date 1331040247 -3600
# Node ID 313da9e9c1cc230a827d9239f7b8deb9f35c2aeb # Parent 33659563f5897b3dabc93284252f8570ed825e63
xen/arch/x86/hvm/vmx/vmx.c +2 -0
@@ -1613,6 +1613,8 @@ static void vmx_cpuid_intercept(break ; } +vpmu_do_cpuid (input, eax, ebx, ecx, edx); +HVMTRACE_5D (CPUID , input, *eax, *ebx, *ecx, *edx); }
xen/arch/x86/hvm/vmx/vpmu_core2.c +7 -0
@@ -547,6 +547,12 @@ static int core2_vpmu_do_rdmsr(unsignedreturn 1 ; } +static void core2_vpmu_do_cpuid (unsigned int input, +unsigned int *eax,unsigned int *ebx, +unsigned int *ecx,unsigned int *edx) +{ +} +static int core2_vpmu_do_interrupt (struct cpu_user_regs *regs) {struct vcpu *v = current;
@@ -608,6 +614,7 @@ struct arch_vpmu_ops core2_vpmu_ops = { .do_wrmsr = core2_vpmu_do_wrmsr, .do_rdmsr = core2_vpmu_do_rdmsr, .do_interrupt = core2_vpmu_do_interrupt, + .do_cpuid = core2_vpmu_do_cpuid, .arch_vpmu_destroy = core2_vpmu_destroy, .arch_vpmu_save = core2_vpmu_save, .arch_vpmu_load = core2_vpmu_load
xen/arch/x86/hvm/vpmu.c +10 -0
@@ -62,6 +62,16 @@ int vpmu_do_interrupt(struct cpu_user_rereturn 0 ; } +void vpmu_do_cpuid (unsigned int input, +unsigned int *eax,unsigned int *ebx, +unsigned int *ecx,unsigned int *edx) +{ +struct vpmu_struct *vpmu =vcpu_vpmu (current); + +if ( vpmu->arch_vpmu_ops && vpmu->arch_vpmu_ops->do_cpuid) + vpmu->arch_vpmu_ops->do_cpuid (input, eax, ebx, ecx, edx); +} +void vpmu_save (struct vcpu *v) {struct vpmu_struct *vpmu =vcpu_vpmu (v);
xen/include/asm-x86/hvm/vpmu.h +5 -0
@@ -40,6 +40,9 @@ struct arch_vpmu_ops {int (*do_wrmsr)(unsigned int msr,uint64_t msr_content);int (*do_rdmsr)(unsigned int msr,uint64_t *msr_content);int (*do_interrupt)(struct cpu_user_regs *regs); +void (*do_cpuid)(unsigned int input, +unsigned int *eax,unsigned int *ebx, +unsigned int *ecx,unsigned int *edx);void (*arch_vpmu_destroy)(struct vcpu *v);void (*arch_vpmu_save)(struct vcpu *v);void (*arch_vpmu_load)(struct vcpu *v);
@@ -67,6 +70,8 @@ struct vpmu_struct {int vpmu_do_wrmsr (unsigned int msr,uint64_t msr_content);int vpmu_do_rdmsr (unsigned int msr,uint64_t *msr_content);int vpmu_do_interrupt (struct cpu_user_regs *regs); +void vpmu_do_cpuid (unsigned int input,unsigned int *eax,unsigned int *ebx, +unsigned int *ecx,unsigned int *edx);void vpmu_initialise (struct vcpu *v);void vpmu_destroy (struct vcpu *v);void vpmu_save (struct vcpu *v);
Signature · 1 line
Company details: http://ts.fujitsu.com/imprint.html