[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2 1/4] x86/vpmu: Move vpmu_do_cpuid() handling into {pv, hvm}_cpuid()



On 12/05/2016 01:24 PM, Andrew Cooper wrote:
> @@ -3516,6 +3516,17 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, 
> unsigned int *ebx,
>              if ( !(hvm_pae_enabled(v) || hvm_long_mode_enabled(v)) )
>                  *edx &= ~cpufeat_mask(X86_FEATURE_PSE36);
>          }
> +
> +        if ( vpmu_enabled(v) &&
> +             vpmu_is_set(vcpu_vpmu(v), VPMU_CPU_HAS_DS) )
> +        {
> +            *edx |= cpufeat_mask(X86_FEATURE_DS);
> +            if ( cpu_has(&current_cpu_data, X86_FEATURE_DTES64) )
> +                *ecx |= cpufeat_mask(X86_FEATURE_DTES64);
> +            if ( cpu_has(&current_cpu_data, X86_FEATURE_DSCPL) )
> +                *ecx |= cpufeat_mask(X86_FEATURE_DSCPL);
> +        }
> +
>          break;
>  
>      case 0x7:
> @@ -3646,6 +3657,18 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, 
> unsigned int *ebx,
>          }
>          break;
>  
> +    case 0x0000000a: /* Architectural Performance Monitor Features (Intel) */
> +        if ( boot_cpu_data.x86_vendor != X86_VENDOR_INTEL || 
> !vpmu_enabled(v) )
> +        {
> +            *eax = *ebx = *ecx = *edx = 0;
> +            break;
> +        }
> +
> +        /* Report at most version 3 since that's all we currently emulate */
> +        if ( (*eax & 0xff) > 3 )
> +            *eax = (*eax & ~0xff) | 3;
> +        break;


Both this and Debug Store checks are the same for both HVM and PV. Can
they be factored out? (and then perhaps version update can gain back
PMU_VERSION_MASK macro)

-boris


> @@ -1192,6 +1192,16 @@ void pv_cpuid(struct cpu_user_regs *regs)
>              }
>          }
>  
> +        if ( vpmu_enabled(curr) &&
> +             vpmu_is_set(vcpu_vpmu(curr), VPMU_CPU_HAS_DS) )
> +        {
> +            d |= cpufeat_mask(X86_FEATURE_DS);
> +            if ( cpu_has(&current_cpu_data, X86_FEATURE_DTES64) )
> +                c |= cpufeat_mask(X86_FEATURE_DTES64);
> +            if ( cpu_has(&current_cpu_data, X86_FEATURE_DSCPL) )
> +                c |= cpufeat_mask(X86_FEATURE_DSCPL);
> +        }
> +
>          c |= cpufeat_mask(X86_FEATURE_HYPERVISOR);
>          break;
>  
> @@ -1224,6 +1234,16 @@ void pv_cpuid(struct cpu_user_regs *regs)
>          a = 0;
>          break;
>  
> +    case 0x0000000a: /* Architectural Performance Monitor Features (Intel) */
> +        if ( boot_cpu_data.x86_vendor != X86_VENDOR_INTEL ||
> +             !vpmu_enabled(curr) )
> +            goto unsupported;
> +
> +        /* Report at most version 3 since that's all we currently emulate. */
> +        if ( (a & 0xff) > 3 )
> +            a = (a & ~0xff) | 3;
> +        break;
> +
>



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.