Author: freqlabs
Date: Tue Jul 14 22:25:06 2020
New Revision: 363206
URL: https://svnweb.freebsd.org/changeset/base/363206

Log:
  hwpmc: Always set pmc_cpuid to something
  
  pmc_cpuid was uninitialized for most AMD processor families.  We can still
  populate this string for unimplemented families.
  
  Also added a CPUID_TO_STEPPING macro and converted existing code to use it.
  
  Reviewed by:  mav
  MFC after:    2 weeks
  Sponsored by: iXsystems, Inc.
  Differential Revision:        https://reviews.freebsd.org/D25673

Modified:
  head/sys/dev/coretemp/coretemp.c
  head/sys/dev/hwpmc/hwpmc_amd.c
  head/sys/dev/hwpmc/hwpmc_intel.c
  head/sys/x86/include/specialreg.h

Modified: head/sys/dev/coretemp/coretemp.c
==============================================================================
--- head/sys/dev/coretemp/coretemp.c    Tue Jul 14 21:56:59 2020        
(r363205)
+++ head/sys/dev/coretemp/coretemp.c    Tue Jul 14 22:25:06 2020        
(r363206)
@@ -166,7 +166,7 @@ coretemp_attach(device_t dev)
        sc->sc_dev = dev;
        pdev = device_get_parent(dev);
        cpu_model = CPUID_TO_MODEL(cpu_id);
-       cpu_stepping = cpu_id & CPUID_STEPPING;
+       cpu_stepping = CPUID_TO_STEPPING(cpu_id);
 
        /*
         * Some CPUs, namely the PIII, don't have thermal sensors, but

Modified: head/sys/dev/hwpmc/hwpmc_amd.c
==============================================================================
--- head/sys/dev/hwpmc/hwpmc_amd.c      Tue Jul 14 21:56:59 2020        
(r363205)
+++ head/sys/dev/hwpmc/hwpmc_amd.c      Tue Jul 14 22:25:06 2020        
(r363206)
@@ -1073,7 +1073,7 @@ pmc_amd_initialize(void)
        enum pmc_cputype cputype;
        struct pmc_mdep *pmc_mdep;
        enum pmc_class class;
-       int model, stepping;
+       int family, model, stepping;
        char *name;
 
        /*
@@ -1085,14 +1085,16 @@ pmc_amd_initialize(void)
         */
 
        name = NULL;
-       model = ((cpu_id & 0xF0000) >> 12) | ((cpu_id & 0xF0) >> 4);
-       stepping = cpu_id & 0xF;
-       if (CPUID_TO_FAMILY(cpu_id) == 0x17)
-               snprintf(pmc_cpuid, sizeof(pmc_cpuid), 
"AuthenticAMD-%d-%02X-%X",
-                                CPUID_TO_FAMILY(cpu_id), model, stepping);
-       if (CPUID_TO_FAMILY(cpu_id) == 0x18)
+       family = CPUID_TO_FAMILY(cpu_id);
+       model = CPUID_TO_MODEL(cpu_id);
+       stepping = CPUID_TO_STEPPING(cpu_id);
+
+       if (family == 0x18)
                snprintf(pmc_cpuid, sizeof(pmc_cpuid), 
"HygonGenuine-%d-%02X-%X",
-                                CPUID_TO_FAMILY(cpu_id), model, stepping);
+                   family, model, stepping);
+       else
+               snprintf(pmc_cpuid, sizeof(pmc_cpuid), 
"AuthenticAMD-%d-%02X-%X",
+                   family, model, stepping);
 
        switch (cpu_id & 0xF00) {
 #if    defined(__i386__)

Modified: head/sys/dev/hwpmc/hwpmc_intel.c
==============================================================================
--- head/sys/dev/hwpmc/hwpmc_intel.c    Tue Jul 14 21:56:59 2020        
(r363205)
+++ head/sys/dev/hwpmc/hwpmc_intel.c    Tue Jul 14 22:25:06 2020        
(r363206)
@@ -80,7 +80,7 @@ pmc_intel_initialize(void)
 {
        struct pmc_mdep *pmc_mdep;
        enum pmc_cputype cputype;
-       int error, model, nclasses, ncpus, stepping, verov;
+       int error, family, model, nclasses, ncpus, stepping, verov;
 
        KASSERT(cpu_vendor_id == CPU_VENDOR_INTEL,
            ("[intel,%d] Initializing non-intel processor", __LINE__));
@@ -91,11 +91,13 @@ pmc_intel_initialize(void)
        nclasses = 2;
        error = 0;
        verov = 0;
-       model = ((cpu_id & 0xF0000) >> 12) | ((cpu_id & 0xF0) >> 4);
-       stepping = cpu_id & 0xF;
+       family = CPUID_TO_FAMILY(cpu_id);
+       model = CPUID_TO_MODEL(cpu_id);
+       stepping = CPUID_TO_STEPPING(cpu_id);
 
        snprintf(pmc_cpuid, sizeof(pmc_cpuid), "GenuineIntel-%d-%02X-%X",
-                        (cpu_id & 0xF00) >> 8, model, stepping);
+           family, model, stepping);
+
        switch (cpu_id & 0xF00) {
        case 0x600:             /* Pentium Pro, Celeron, Pentium II & III */
                switch (model) {

Modified: head/sys/x86/include/specialreg.h
==============================================================================
--- head/sys/x86/include/specialreg.h   Tue Jul 14 21:56:59 2020        
(r363205)
+++ head/sys/x86/include/specialreg.h   Tue Jul 14 22:25:06 2020        
(r363206)
@@ -280,6 +280,7 @@
     ((((id) & CPUID_FAMILY) >> 8) + \
     (((id) & CPUID_EXT_FAMILY) >> 20))
 #endif
+#define CPUID_TO_STEPPING(id) ((id) & CPUID_STEPPING)
 
 /*
  * CPUID instruction 1 ebx info
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to