Module Name: src
Committed By: msaitoh
Date: Thu Nov 22 06:15:06 UTC 2018
Modified Files:
src/usr.sbin/cpuctl/arch: i386.c
Log Message:
Decode Intel/AMD MONITOR/MWAIT leaf.
To generate a diff of this commit:
cvs rdiff -u -r1.88 -r1.89 src/usr.sbin/cpuctl/arch/i386.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/cpuctl/arch/i386.c
diff -u src/usr.sbin/cpuctl/arch/i386.c:1.88 src/usr.sbin/cpuctl/arch/i386.c:1.89
--- src/usr.sbin/cpuctl/arch/i386.c:1.88 Wed Nov 21 12:19:51 2018
+++ src/usr.sbin/cpuctl/arch/i386.c Thu Nov 22 06:15:06 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: i386.c,v 1.88 2018/11/21 12:19:51 msaitoh Exp $ */
+/* $NetBSD: i386.c,v 1.89 2018/11/22 06:15:06 msaitoh Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: i386.c,v 1.88 2018/11/21 12:19:51 msaitoh Exp $");
+__RCSID("$NetBSD: i386.c,v 1.89 2018/11/22 06:15:06 msaitoh Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -2160,6 +2160,29 @@ identifycpu(int fd, const char *cpuname)
identifycpu_cpuids(ci);
+ if ((ci->ci_cpuid_level >= 5)
+ && ((cpu_vendor == CPUVENDOR_INTEL)
+ || (cpu_vendor == CPUVENDOR_AMD))) {
+ uint16_t lmin, lmax;
+ x86_cpuid(5, descs);
+
+ print_bits(cpuname, "MONITOR/MWAIT extensions",
+ CPUID_MON_FLAGS, descs[2]);
+ lmin = __SHIFTOUT(descs[0], CPUID_MON_MINSIZE);
+ lmax = __SHIFTOUT(descs[1], CPUID_MON_MAXSIZE);
+ aprint_normal("%s: monitor-line size %hu", cpuname, lmin);
+ if (lmin != lmax)
+ aprint_normal("-%hu", lmax);
+ aprint_normal("\n");
+
+ for (i = 0; i <= 7; i++) {
+ unsigned int num = CPUID_MON_SUBSTATE(descs[3], i);
+
+ if (num != 0)
+ aprint_normal("%s: C%u substates %u\n",
+ cpuname, i, num);
+ }
+ }
if ((ci->ci_cpuid_level >= 6)
&& ((cpu_vendor == CPUVENDOR_INTEL)
|| (cpu_vendor == CPUVENDOR_AMD))) {