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

Re: [Xen-devel] [PATCH v2 04/23] x86: Don't use potentially incorrect CPUID values for topology information



On 07/01/18 20:28, Anthony Liguori wrote:
> From: Jan H. Schönherr <jschoenh@xxxxxxxxx>
>
> Intel says for CPUID leaf 0Bh:
>
>   "Software must not use EBX[15:0] to enumerate processor
>    topology of the system. This value in this field
>    (EBX[15:0]) is only intended for display/diagnostic
>    purposes. The actual number of logical processors
>    available to BIOS/OS/Applications may be different from
>    the value of EBX[15:0], depending on software and platform
>    hardware configurations."
>
> And yet, we're using them to derive the number cores in a package
> and the number of siblings in a core.
>
> Derive the number of siblings and cores from EAX instead, which is
> intended for that.
>
> Signed-off-by: Jan H. Schönherr <jschoenh@xxxxxxxxx>

Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, although I'll
fix the 1 to 1u on commit.

> ---
>  xen/arch/x86/cpu/common.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c
> index e9588b3..22f392f 100644
> --- a/xen/arch/x86/cpu/common.c
> +++ b/xen/arch/x86/cpu/common.c
> @@ -479,8 +479,8 @@ void detect_extended_topology(struct cpuinfo_x86 *c)
>       initial_apicid = edx;
>  
>       /* Populate HT related information from sub-leaf level 0 */
> -     core_level_siblings = c->x86_num_siblings = LEVEL_MAX_SIBLINGS(ebx);
>       core_plus_mask_width = ht_mask_width = BITS_SHIFT_NEXT_LEVEL(eax);
> +     core_level_siblings = c->x86_num_siblings = 1 << ht_mask_width;
>  
>       sub_index = 1;
>       do {
> @@ -488,8 +488,8 @@ void detect_extended_topology(struct cpuinfo_x86 *c)
>  
>               /* Check for the Core type in the implemented sub leaves */
>               if ( LEAFB_SUBTYPE(ecx) == CORE_TYPE ) {
> -                     core_level_siblings = LEVEL_MAX_SIBLINGS(ebx);
>                       core_plus_mask_width = BITS_SHIFT_NEXT_LEVEL(eax);
> +                     core_level_siblings = 1 << core_plus_mask_width;
>                       break;
>               }
>  


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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