svn commit: r273748 - head/sys/x86/x86

Peter Grehan grehan at FreeBSD.org
Mon Oct 27 22:02:36 UTC 2014


Author: grehan
Date: Mon Oct 27 22:02:35 2014
New Revision: 273748
URL: https://svnweb.freebsd.org/changeset/base/273748

Log:
  Output a summary of optional SVM features in dmesg similar to CPU features.
  If bootverbose is enabled, a detailed list is provided; otherwise, a
  single-line summary is displayed.
  
  Differential Revision:	https://reviews.freebsd.org/D1008
  Reviewed by:	jhb, neel
  MFC after:	1 week

Modified:
  head/sys/x86/x86/identcpu.c

Modified: head/sys/x86/x86/identcpu.c
==============================================================================
--- head/sys/x86/x86/identcpu.c	Mon Oct 27 21:29:42 2014	(r273747)
+++ head/sys/x86/x86/identcpu.c	Mon Oct 27 22:02:35 2014	(r273748)
@@ -76,6 +76,7 @@ static u_int find_cpu_vendor_id(void);
 static void print_AMD_info(void);
 static void print_INTEL_info(void);
 static void print_INTEL_TLB(u_int data);
+static void print_svm_info(void);
 static void print_via_padlock_info(void);
 static void print_vmx_info(void);
 
@@ -932,6 +933,9 @@ printcpuinfo(void)
 			if (cpu_feature2 & CPUID2_VMX)
 				print_vmx_info();
 
+			if (amd_feature2 & AMDID2_SVM)
+				print_svm_info();
+
 			if ((cpu_feature & CPUID_HTT) &&
 			    cpu_vendor_id == CPU_VENDOR_AMD)
 				cpu_feature &= ~CPUID_HTT;
@@ -1735,6 +1739,67 @@ print_INTEL_TLB(u_int data)
 	}
 }
 
+static void
+print_svm_info(void)
+{
+	u_int features, regs[4];
+	uint64_t msr;
+	int comma;
+
+	printf("\n  SVM: ");
+	do_cpuid(0x8000000A, regs);
+	features = regs[3];
+
+	msr = rdmsr(MSR_VM_CR);
+	if ((msr & VM_CR_SVMDIS) == VM_CR_SVMDIS)
+		printf("(disabled in BIOS) ");
+
+	if (!bootverbose) {
+		comma = 0;
+		if (features & (1 << 0)) {
+			printf("%sNP", comma ? "," : "");
+                        comma = 1; 
+		}
+		if (features & (1 << 3)) {
+			printf("%sNRIP", comma ? "," : "");
+                        comma = 1; 
+		}
+		if (features & (1 << 5)) {
+			printf("%sVClean", comma ? "," : "");
+                        comma = 1; 
+		}
+		if (features & (1 << 6)) {
+			printf("%sAFlush", comma ? "," : "");
+                        comma = 1; 
+		}
+		if (features & (1 << 7)) {
+			printf("%sDAssist", comma ? "," : "");
+                        comma = 1; 
+		}
+		printf("%sNAsids=%d", comma ? "," : "", regs[1]);
+		return;
+	}
+
+	printf("Features=0x%b", features,
+	       "\020"
+	       "\001NP"			/* Nested paging */
+	       "\002LbrVirt"		/* LBR virtualization */
+	       "\003SVML"		/* SVM lock */
+	       "\004NRIPS"		/* NRIP save */
+	       "\005TscRateMsr"		/* MSR based TSC rate control */
+	       "\006VmcbClean"		/* VMCB clean bits */
+	       "\007FlushByAsid"	/* Flush by ASID */
+	       "\010DecodeAssist"	/* Decode assist */
+	       "\011<b8>"
+	       "\012<b9>"
+	       "\013PauseFilter"	/* PAUSE intercept filter */    
+	       "\014<b11>"
+	       "\015PauseFilterThreshold" /* PAUSE filter threshold */
+	       "\016AVIC"		/* virtual interrupt controller */
+                );
+	printf("\nRevision=%d, ASIDs=%d", regs[0] & 0xff, regs[1]);
+}
+
 #ifdef __i386__
 static void
 print_transmeta_info(void)


More information about the svn-src-head mailing list