Re: [PATCH v6 04/16] target-i386: Add x86_set_hyperv.

Marcelo Tosatti
2012-10-09T16:34:36Z

On Mon, Sep 24, 2012 at 10:32:06AM -0400, Don Slutz wrote:
> This is used to set the cpu object's hypervisor level to the default for Microsoft's Hypervisor.
>
> Signed-off-by: Don Slutz <Don@CloudSwitch.com>
> ---
> target-i386/cpu.c | 9 +++++++++
> target-i386/cpu.h | 2 ++
> 2 files changed, 11 insertions(+), 0 deletions(-)
>
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index 451de12..48bdaf9 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c
> @@ -1193,6 +1193,12 @@ static void x86_cpuid_set_hv_level(Object *obj, Visitor *v, void *opaque,
> }
>
> #if !defined(CONFIG_USER_ONLY)
> +static void x86_set_hyperv(Object *obj, Error **errp)
> +{
> + object_property_set_int(obj, CPUID_HV_LEVEL_HYPERV,
> + "hypervisor-level", errp);
> +}
> +
> static void x86_get_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
> const char *name, Error **errp)
> {
> @@ -1215,6 +1221,7 @@ static void x86_set_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
> return;
> }
> hyperv_set_spinlock_retries(value);
> + x86_set_hyperv(obj, errp);
> }
>
> static void x86_get_hv_relaxed(Object *obj, Visitor *v, void *opaque,
> @@ -1235,6 +1242,7 @@ static void x86_set_hv_relaxed(Object *obj, Visitor *v, void *opaque,
> return;
> }
> hyperv_enable_relaxed_timing(value);
> + x86_set_hyperv(obj, errp);
> }
>
> static void x86_get_hv_vapic(Object *obj, Visitor *v, void *opaque,
> @@ -1255,6 +1263,7 @@ static void x86_set_hv_vapic(Object *obj, Visitor *v, void *opaque,
> return;
> }
> hyperv_enable_vapic_recommended(value);
> + x86_set_hyperv(obj, errp);
> }
> #endif
>
> diff --git a/target-i386/cpu.h b/target-i386/cpu.h
> index 1899f69..3152a4e 100644
> --- a/target-i386/cpu.h
> +++ b/target-i386/cpu.h
> @@ -488,6 +488,8 @@
>
> #define CPUID_VENDOR_VIA "CentaurHauls"
>
> +#define CPUID_HV_LEVEL_HYPERV 0x40000005
> +

Where this comes from?

http://msdn.microsoft.com/en-us/library/windows/hardware/ff542428%28v=vs.85%29.aspx

has under "Leaf 0x40000000" (at very top of table):

EAX

The maximum input value for hypervisor CPUID information. For Microsoft
hypervisors, this value will be at least 0x40000005. The vendor ID
signature should be used only for reporting and diagnostic purposes.

Is that the same 0x40000005 as in this patch?