Page MenuHomeFreeBSD

D60102.1794738639.diff
No OneTemporary

Authored By
Unknown
Size
2 KB
Referenced Files
None
Subscribers
None

D60102.1794738639.diff

diff --git a/lib/libpmc/libpmc.c b/lib/libpmc/libpmc.c
--- a/lib/libpmc/libpmc.c
+++ b/lib/libpmc/libpmc.c
@@ -1834,6 +1834,12 @@
PMC_MDEP_INIT(e500);
break;
#endif
+ case PMC_CPU_AMD_ZEN:
+ /*
+ * Won't use these static aliases; see instead
+ * pmu_amd_alias_table[] in libpmc_pmu_util.c.
+ */
+ break;
default:
/*
* Some kind of CPU this version of the library knows nothing
diff --git a/lib/libpmc/pmc.3 b/lib/libpmc/pmc.3
--- a/lib/libpmc/pmc.3
+++ b/lib/libpmc/pmc.3
@@ -21,7 +21,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd June 23, 2023
+.Dd September 28, 2026
.Dt PMC 3
.Os
.Sh NAME
@@ -131,8 +131,12 @@
.Pp
.Bl -tag -width "Li PMC_CPU_ARMV7_CORTEX_A15" -compact
.It Li PMC_CPU_AMD_K8
-.Tn "AMD Athlon64"
-CPUs.
+Legacy
+.Tn "AMD"
+CPUs (families 0Fh-16h).
+.It Li PMC_CPU_AMD_ZEN
+.Tn "AMD Zen"
+CPUs (families 17h+).
.It Li PMC_CPU_ARMV7_CORTEX_A5
.Tn ARMv7
.Tn Cortex A5
diff --git a/sys/dev/hwpmc/hwpmc_amd.c b/sys/dev/hwpmc/hwpmc_amd.c
--- a/sys/dev/hwpmc/hwpmc_amd.c
+++ b/sys/dev/hwpmc/hwpmc_amd.c
@@ -1034,18 +1034,18 @@
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",
- family, model, stepping);
- else
- snprintf(pmc_cpuid, sizeof(pmc_cpuid), "AuthenticAMD-%d-%02X-%X",
- family, model, stepping);
-
- switch (cpu_id & 0xF00) {
- case 0xF00: /* Athlon64/Opteron processor */
+ if (family >= 0x0f && family <= 0x16) {
+ /* Legacy CPU. */
cputype = PMC_CPU_AMD_K8;
- break;
- default:
+ } else if (family >= 0x17) {
+ cputype = PMC_CPU_AMD_ZEN;
+ if (family == 0x18)
+ snprintf(pmc_cpuid, sizeof(pmc_cpuid),
+ "HygonGenuine-%d-%02X-%X", family, model, stepping);
+ else
+ snprintf(pmc_cpuid, sizeof(pmc_cpuid),
+ "AuthenticAMD-%d-%02X-%X", family, model, stepping);
+ } else {
printf("pmc: Unknown AMD CPU %x %d-%d.\n", cpu_id, family,
model);
return (NULL);
@@ -1231,7 +1231,11 @@
pcd->pcd_ri = pmc_mdep->pmd_npmc;
pcd->pcd_width = 48;
- pcd->pcd_allocate_pmc = amd_allocate_pmc;
+ if (cputype == PMC_CPU_AMD_K8)
+ pcd->pcd_allocate_pmc = amd_allocate_legacy_pmc;
+ else
+ pcd->pcd_allocate_pmc = amd_allocate_pmc;
+
pcd->pcd_config_pmc = amd_config_pmc;
pcd->pcd_describe = amd_describe;
pcd->pcd_get_config = amd_get_config;
diff --git a/sys/sys/pmc.h b/sys/sys/pmc.h
--- a/sys/sys/pmc.h
+++ b/sys/sys/pmc.h
@@ -81,7 +81,8 @@
* Please keep the pmc(3) manual page in sync with this list.
*/
#define __PMC_CPUS() \
- __PMC_CPU(AMD_K8, 0x01, "AMD K8") \
+ __PMC_CPU(AMD_K8, 0x01, "AMD K8 (legacy AMD)") \
+ __PMC_CPU(AMD_ZEN, 0x02, "AMD Zen") \
__PMC_CPU(INTEL_CORE, 0x87, "Intel Core Solo/Duo") \
__PMC_CPU(INTEL_CORE2, 0x88, "Intel Core2") \
__PMC_CPU(INTEL_CORE2EXTREME, 0x89, "Intel Core2 Extreme") \

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 15, 10:30 AM (2 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41741694
Default Alt Text
D60102.1794738639.diff (2 KB)

Event Timeline