]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
x86: Add Hygon Dhyana support.
authorCarlos O'Donell <carlos@redhat.com>
Wed, 12 Dec 2018 14:24:17 +0000 (09:24 -0500)
committerCarlos O'Donell <carlos@redhat.com>
Thu, 13 Dec 2018 14:25:20 +0000 (09:25 -0500)
This patch fix Hygon Dhyana processor CPU Vendor ID detection
problem in glibc sysdep module, current glibc codes doesn't
recognize Dhyana CPU Vendor ID("HygonGenuine") and set kind to
arch_kind_other, which result to incorrect zero value for
__cache_sysconf() syscall. As Hygon Dhyana share most
architecture feature as AMD Family 17h, this patch add Hygon CPU
Vendor ID check and setup kind to arch_kind_amd and reuse AMD
code path, which lead to correct return value in
__cache_sysconf() syscall. we run the glibc test suite for both
Hygon Dhyana and AMD EPYC and found no failure case.

Background:
Chengdu Haiguang IC Design Co., Ltd (Hygon) is a Joint Venture
between AMD and Haiguang Information Technology Co.,Ltd., aims at
providing high performance x86 processor for China server market.
Its first generation processor codename is Dhyana, which
originates from AMD technology and shares most of the
architecture with AMD's family 17h, but with different CPU Vendor
ID("HygonGenuine")/Family series number(Family 18h).

Related Hygon kernel patch can be found on
http://lkml.kernel.org/r/5ce86123a7b9dad925ac583d88d2f921040e859b.1538583282.git.puwen@hygon.cn

Signed-off-by: fanjinke <fanjinke@hygon.cn>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
ChangeLog
sysdeps/x86/cpu-features.c

index cd35115edeabc78226690be6965a9454518d6b96..e457d581e90131bb5abc9a847ed1f30d32e9ed0e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-12-13  fanjinke  <fanjinke@hygon.cn>
+
+       * sysdeps/x86/cpu-features.c (init_cpu_features): Check for
+       "HygonGenuine".
+
 2018-12-13  Andreas Schwab  <schwab@suse.de>
 
        [BZ #23861]
index 5f9eefd408235278ca7f1e9ba26ae6c1ef9f2ab5..af7ac4bb4e50bd307b4187eaa70e767d35d794f3 100644 (file)
@@ -425,8 +425,9 @@ init_cpu_features (struct cpu_features *cpu_features)
        cpu_features->feature[index_arch_Prefer_No_AVX512]
          |= bit_arch_Prefer_No_AVX512;
     }
-  /* This spells out "AuthenticAMD".  */
-  else if (ebx == 0x68747541 && ecx == 0x444d4163 && edx == 0x69746e65)
+  /* This spells out "AuthenticAMD" or "HygonGenuine".  */
+  else if ((ebx == 0x68747541 && ecx == 0x444d4163 && edx == 0x69746e65)
+          || (ebx == 0x6f677948 && ecx == 0x656e6975 && edx == 0x6e65476e))
     {
       unsigned int extended_model;