x86: Populate COMMON_CPUID_INDEX_80000001 for Intel CPUs [BZ #23459]
Reviewed-by: Carlos O'Donell <carlos@redhat.com> [BZ #23459] * sysdeps/x86/cpu-features.c (get_extended_indices): New function. (init_cpu_features): Call get_extended_indices for both Intel and AMD CPUs. * sysdeps/x86/cpu-features.h (COMMON_CPUID_INDEX_80000001): Remove "for AMD" comment.
This commit is contained in:
parent
65d87ade1e
commit
be525a69a6
|
@ -42,6 +42,20 @@ extern void TUNABLE_CALLBACK (set_x86_shstk) (tunable_val_t *)
|
||||||
# include <cet-tunables.h>
|
# include <cet-tunables.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
get_extended_indices (struct cpu_features *cpu_features)
|
||||||
|
{
|
||||||
|
unsigned int eax, ebx, ecx, edx;
|
||||||
|
__cpuid (0x80000000, eax, ebx, ecx, edx);
|
||||||
|
if (eax >= 0x80000001)
|
||||||
|
__cpuid (0x80000001,
|
||||||
|
cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].eax,
|
||||||
|
cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].ebx,
|
||||||
|
cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].ecx,
|
||||||
|
cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].edx);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
get_common_indeces (struct cpu_features *cpu_features,
|
get_common_indeces (struct cpu_features *cpu_features,
|
||||||
unsigned int *family, unsigned int *model,
|
unsigned int *family, unsigned int *model,
|
||||||
|
@ -224,6 +238,8 @@ init_cpu_features (struct cpu_features *cpu_features)
|
||||||
get_common_indeces (cpu_features, &family, &model, &extended_model,
|
get_common_indeces (cpu_features, &family, &model, &extended_model,
|
||||||
&stepping);
|
&stepping);
|
||||||
|
|
||||||
|
get_extended_indices (cpu_features);
|
||||||
|
|
||||||
if (family == 0x06)
|
if (family == 0x06)
|
||||||
{
|
{
|
||||||
model += extended_model;
|
model += extended_model;
|
||||||
|
@ -338,16 +354,9 @@ init_cpu_features (struct cpu_features *cpu_features)
|
||||||
get_common_indeces (cpu_features, &family, &model, &extended_model,
|
get_common_indeces (cpu_features, &family, &model, &extended_model,
|
||||||
&stepping);
|
&stepping);
|
||||||
|
|
||||||
ecx = cpu_features->cpuid[COMMON_CPUID_INDEX_1].ecx;
|
get_extended_indices (cpu_features);
|
||||||
|
|
||||||
unsigned int eax;
|
ecx = cpu_features->cpuid[COMMON_CPUID_INDEX_1].ecx;
|
||||||
__cpuid (0x80000000, eax, ebx, ecx, edx);
|
|
||||||
if (eax >= 0x80000001)
|
|
||||||
__cpuid (0x80000001,
|
|
||||||
cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].eax,
|
|
||||||
cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].ebx,
|
|
||||||
cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].ecx,
|
|
||||||
cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].edx);
|
|
||||||
|
|
||||||
if (HAS_ARCH_FEATURE (AVX_Usable))
|
if (HAS_ARCH_FEATURE (AVX_Usable))
|
||||||
{
|
{
|
||||||
|
|
|
@ -108,7 +108,7 @@ enum
|
||||||
{
|
{
|
||||||
COMMON_CPUID_INDEX_1 = 0,
|
COMMON_CPUID_INDEX_1 = 0,
|
||||||
COMMON_CPUID_INDEX_7,
|
COMMON_CPUID_INDEX_7,
|
||||||
COMMON_CPUID_INDEX_80000001, /* for AMD */
|
COMMON_CPUID_INDEX_80000001,
|
||||||
/* Keep the following line at the end. */
|
/* Keep the following line at the end. */
|
||||||
COMMON_CPUID_INDEX_MAX
|
COMMON_CPUID_INDEX_MAX
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue