diff mbox

x86: Populate COMMON_CPUID_INDEX_80000001 for Intel CPUs [BZ #23459]

Message ID CAMe9rOpHD_HqMEL-37dXmgEUYJ0=o1mQREuFd1FPVdcKAbN-bw@mail.gmail.com
State New, archived
Headers show

Commit Message

H.J. Lu July 26, 2018, 8:32 p.m. UTC
On Thu, Jul 26, 2018 at 1:05 PM, Carlos O'Donell <carlos@redhat.com> wrote:
> On 07/26/2018 02:07 PM, H.J. Lu wrote:
>>       [BZ #23459]
>>       * sysdeps/x86/cpu-features.c (get_extended_indeces): New
>>       function.
>>       (init_cpu_features): Call get_extended_indeces for both Intel
>>       and AMD CPUs.
>> ---
>
> OK for 2.28 after you fix the indexes v.s indices issue.
>
> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
>

This is the patch I am checking in.

Thanks.

Comments

Carlos O'Donell July 26, 2018, 8:37 p.m. UTC | #1
On 07/26/2018 04:32 PM, H.J. Lu wrote:
> On Thu, Jul 26, 2018 at 1:05 PM, Carlos O'Donell <carlos@redhat.com> wrote:
>> On 07/26/2018 02:07 PM, H.J. Lu wrote:
>>>       [BZ #23459]
>>>       * sysdeps/x86/cpu-features.c (get_extended_indeces): New
>>>       function.
>>>       (init_cpu_features): Call get_extended_indeces for both Intel
>>>       and AMD CPUs.
>>> ---
>>
>> OK for 2.28 after you fix the indexes v.s indices issue.
>>
>> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
>>
> 
> This is the patch I am checking in.

There are *many* incorrect spellings of indices too which you might
fix later ;-)

c.
H.J. Lu July 27, 2018, 1:43 p.m. UTC | #2
On Thu, Jul 26, 2018 at 1:37 PM, Carlos O'Donell <carlos@redhat.com> wrote:
> On 07/26/2018 04:32 PM, H.J. Lu wrote:
>> On Thu, Jul 26, 2018 at 1:05 PM, Carlos O'Donell <carlos@redhat.com> wrote:
>>> On 07/26/2018 02:07 PM, H.J. Lu wrote:
>>>>       [BZ #23459]
>>>>       * sysdeps/x86/cpu-features.c (get_extended_indeces): New
>>>>       function.
>>>>       (init_cpu_features): Call get_extended_indeces for both Intel
>>>>       and AMD CPUs.
>>>> ---
>>>
>>> OK for 2.28 after you fix the indexes v.s indices issue.
>>>
>>> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
>>>
>>
>> This is the patch I am checking in.
>
> There are *many* incorrect spellings of indices too which you might
> fix later ;-)
>

I'd like to backport these 2 patches to all affected branches.
Carlos O'Donell July 27, 2018, 7:14 p.m. UTC | #3
On 07/27/2018 09:43 AM, H.J. Lu wrote:
> On Thu, Jul 26, 2018 at 1:37 PM, Carlos O'Donell <carlos@redhat.com> wrote:
>> On 07/26/2018 04:32 PM, H.J. Lu wrote:
>>> On Thu, Jul 26, 2018 at 1:05 PM, Carlos O'Donell <carlos@redhat.com> wrote:
>>>> On 07/26/2018 02:07 PM, H.J. Lu wrote:
>>>>>       [BZ #23459]
>>>>>       * sysdeps/x86/cpu-features.c (get_extended_indeces): New
>>>>>       function.
>>>>>       (init_cpu_features): Call get_extended_indeces for both Intel
>>>>>       and AMD CPUs.
>>>>> ---
>>>>
>>>> OK for 2.28 after you fix the indexes v.s indices issue.
>>>>
>>>> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
>>>>
>>>
>>> This is the patch I am checking in.
>>
>> There are *many* incorrect spellings of indices too which you might
>> fix later ;-)
>>
> 
> I'd like to backport these 2 patches to all affected branches.

You can do that right away. Commits to stable can be backported to any
open stable branch so long as they don't have ABI/API implications.
Even if they changed the selected IFUNC it would still be OK.

You are free to cherry-pick as required. Please post your cherry-picks
to libc-stable and note that you're committing them to branch X, Y, and Z,
this way distros know what you're doing.

Cheers,
Carlos.
diff mbox

Patch

From be525a69a6630abc83144c0a96474f2e26da7443 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Thu, 26 Jul 2018 10:49:19 -0700
Subject: [PATCH] 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.
---
 sysdeps/x86/cpu-features.c | 27 ++++++++++++++++++---------
 sysdeps/x86/cpu-features.h |  2 +-
 2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
index 8108256c42..ea0b64fdb9 100644
--- a/sysdeps/x86/cpu-features.c
+++ b/sysdeps/x86/cpu-features.c
@@ -42,6 +42,20 @@  extern void TUNABLE_CALLBACK (set_x86_shstk) (tunable_val_t *)
 # include <cet-tunables.h>
 #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
 get_common_indeces (struct cpu_features *cpu_features,
 		    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,
 			  &stepping);
 
+      get_extended_indices (cpu_features);
+
       if (family == 0x06)
 	{
 	  model += extended_model;
@@ -338,16 +354,9 @@  init_cpu_features (struct cpu_features *cpu_features)
       get_common_indeces (cpu_features, &family, &model, &extended_model,
 			  &stepping);
 
-      ecx = cpu_features->cpuid[COMMON_CPUID_INDEX_1].ecx;
+      get_extended_indices (cpu_features);
 
-      unsigned int eax;
-      __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);
+      ecx = cpu_features->cpuid[COMMON_CPUID_INDEX_1].ecx;
 
       if (HAS_ARCH_FEATURE (AVX_Usable))
 	{
diff --git a/sysdeps/x86/cpu-features.h b/sysdeps/x86/cpu-features.h
index 3807a9d611..347a4b118d 100644
--- a/sysdeps/x86/cpu-features.h
+++ b/sysdeps/x86/cpu-features.h
@@ -108,7 +108,7 @@  enum
   {
     COMMON_CPUID_INDEX_1 = 0,
     COMMON_CPUID_INDEX_7,
-    COMMON_CPUID_INDEX_80000001,	/* for AMD */
+    COMMON_CPUID_INDEX_80000001,
     /* Keep the following line at the end.  */
     COMMON_CPUID_INDEX_MAX
   };
-- 
2.17.1