Add stepping to the kern.hwpmc.cpuid string on x86.

It follows the equivalent Linux change to be able to differentiate
skylakex and cascadelakex, sharing the same model but not stepping.

This fixes skylakex handling broken by r363144.

MFC after:	6 days
This commit is contained in:
Alexander Motin 2020-07-14 18:11:05 +00:00
parent 083c262899
commit 1791cad0a9
3 changed files with 11 additions and 10 deletions

View File

@ -169,7 +169,7 @@ pmu_events_map_get(const char *cpuid)
{
regex_t re;
regmatch_t pmatch[1];
size_t s, len;
size_t s;
char buf[64];
int match;
const struct pmu_events_map *pme;
@ -193,8 +193,8 @@ pmu_events_map_get(const char *cpuid)
match = regexec(&re, buf, 1, pmatch, 0);
regfree(&re);
if (match == 0) {
len = pmatch[0].rm_eo - pmatch[0].rm_so;
if(len == strlen(buf))
if (pmatch[0].rm_so == 0 && (buf[pmatch[0].rm_eo] == 0
|| buf[pmatch[0].rm_eo] == '-'))
return (pme);
}
}

View File

@ -1073,7 +1073,7 @@ pmc_amd_initialize(void)
enum pmc_cputype cputype;
struct pmc_mdep *pmc_mdep;
enum pmc_class class;
int model;
int model, stepping;
char *name;
/*
@ -1086,12 +1086,13 @@ 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",
CPUID_TO_FAMILY(cpu_id), model);
snprintf(pmc_cpuid, sizeof(pmc_cpuid), "AuthenticAMD-%d-%02X-%X",
CPUID_TO_FAMILY(cpu_id), model, stepping);
if (CPUID_TO_FAMILY(cpu_id) == 0x18)
snprintf(pmc_cpuid, sizeof(pmc_cpuid), "HygonGenuine-%d-%02X",
CPUID_TO_FAMILY(cpu_id), model);
snprintf(pmc_cpuid, sizeof(pmc_cpuid), "HygonGenuine-%d-%02X-%X",
CPUID_TO_FAMILY(cpu_id), model, stepping);
switch (cpu_id & 0xF00) {
#if defined(__i386__)

View File

@ -94,8 +94,8 @@ pmc_intel_initialize(void)
model = ((cpu_id & 0xF0000) >> 12) | ((cpu_id & 0xF0) >> 4);
stepping = cpu_id & 0xF;
snprintf(pmc_cpuid, sizeof(pmc_cpuid), "GenuineIntel-%d-%02X",
(cpu_id & 0xF00) >> 8, model);
snprintf(pmc_cpuid, sizeof(pmc_cpuid), "GenuineIntel-%d-%02X-%X",
(cpu_id & 0xF00) >> 8, model, stepping);
switch (cpu_id & 0xF00) {
case 0x600: /* Pentium Pro, Celeron, Pentium II & III */
switch (model) {