Patchwork enable architectural PMU cpuid leaf for kvm

login
register
mail settings
Submitter Gleb Natapov
Date Dec. 15, 2011, 10:44 a.m.
Message ID <20111215104405.GD21664@redhat.com>
Download mbox | patch
Permalink /patch/131560/
State New
Headers show

Comments

Gleb Natapov - Dec. 15, 2011, 10:44 a.m.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
--
			Gleb.
Anthony Liguori - Dec. 15, 2011, 3:09 p.m.
On 12/15/2011 04:44 AM, Gleb Natapov wrote:
>
> Signed-off-by: Gleb Natapov<gleb@redhat.com>

This should go in via uq/master.

Regards,

Anthony Liguori

> diff --git a/target-i386/cpuid.c b/target-i386/cpuid.c
> index 0b3af90..91a104b 100644
> --- a/target-i386/cpuid.c
> +++ b/target-i386/cpuid.c
> @@ -1180,10 +1180,19 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
>           break;
>       case 0xA:
>           /* Architectural Performance Monitoring Leaf */
> -        *eax = 0;
> -        *ebx = 0;
> -        *ecx = 0;
> -        *edx = 0;
> +        if (kvm_enabled()) {
> +            KVMState *s = env->kvm_state;
> +
> +            *eax = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EAX);
> +            *ebx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EBX);
> +            *ecx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_ECX);
> +            *edx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EDX);
> +        } else {
> +            *eax = 0;
> +            *ebx = 0;
> +            *ecx = 0;
> +            *edx = 0;
> +        }
>           break;
>       case 0xD:
>           /* Processor Extended State */
> --
> 			Gleb.
>
>
Gleb Natapov - Dec. 15, 2011, 3:13 p.m.
On Thu, Dec 15, 2011 at 09:09:32AM -0600, Anthony Liguori wrote:
> On 12/15/2011 04:44 AM, Gleb Natapov wrote:
> >
> >Signed-off-by: Gleb Natapov<gleb@redhat.com>
> 
> This should go in via uq/master.
uq/master maintainers can you take it?

> 
> Regards,
> 
> Anthony Liguori
> 
> >diff --git a/target-i386/cpuid.c b/target-i386/cpuid.c
> >index 0b3af90..91a104b 100644
> >--- a/target-i386/cpuid.c
> >+++ b/target-i386/cpuid.c
> >@@ -1180,10 +1180,19 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
> >          break;
> >      case 0xA:
> >          /* Architectural Performance Monitoring Leaf */
> >-        *eax = 0;
> >-        *ebx = 0;
> >-        *ecx = 0;
> >-        *edx = 0;
> >+        if (kvm_enabled()) {
> >+            KVMState *s = env->kvm_state;
> >+
> >+            *eax = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EAX);
> >+            *ebx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EBX);
> >+            *ecx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_ECX);
> >+            *edx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EDX);
> >+        } else {
> >+            *eax = 0;
> >+            *ebx = 0;
> >+            *ecx = 0;
> >+            *edx = 0;
> >+        }
> >          break;
> >      case 0xD:
> >          /* Processor Extended State */
> >--
> >			Gleb.
> >
> >

--
			Gleb.

Patch

diff --git a/target-i386/cpuid.c b/target-i386/cpuid.c
index 0b3af90..91a104b 100644
--- a/target-i386/cpuid.c
+++ b/target-i386/cpuid.c
@@ -1180,10 +1180,19 @@  void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
         break;
     case 0xA:
         /* Architectural Performance Monitoring Leaf */
-        *eax = 0;
-        *ebx = 0;
-        *ecx = 0;
-        *edx = 0;
+        if (kvm_enabled()) {
+            KVMState *s = env->kvm_state;
+
+            *eax = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EAX);
+            *ebx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EBX);
+            *ecx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_ECX);
+            *edx = kvm_arch_get_supported_cpuid(s, 0xA, count, R_EDX);
+        } else {
+            *eax = 0;
+            *ebx = 0;
+            *ecx = 0;
+            *edx = 0;
+        }
         break;
     case 0xD:
         /* Processor Extended State */