socsvn commit: r271359 - in soc2014/op/freebsd-base/sys: amd64/amd64 amd64/include kern

op at FreeBSD.org op at FreeBSD.org
Fri Jul 25 10:36:13 UTC 2014


Author: op
Date: Fri Jul 25 10:36:11 2014
New Revision: 271359
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=271359

Log:
  KSP: move cpu_extstate to common place
  
  Signed-off-by: Oliver Pinter <oliver.pntr at gmail.com>
  
  git: https://github.com/opntr/opBSD/tree/op/gsoc2014/kpatch

Modified:
  soc2014/op/freebsd-base/sys/amd64/amd64/identcpu.c
  soc2014/op/freebsd-base/sys/amd64/amd64/initcpu.c
  soc2014/op/freebsd-base/sys/amd64/include/md_var.h
  soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c

Modified: soc2014/op/freebsd-base/sys/amd64/amd64/identcpu.c
==============================================================================
--- soc2014/op/freebsd-base/sys/amd64/amd64/identcpu.c	Fri Jul 25 10:35:00 2014	(r271358)
+++ soc2014/op/freebsd-base/sys/amd64/amd64/identcpu.c	Fri Jul 25 10:36:11 2014	(r271359)
@@ -568,6 +568,14 @@
 		cpu_stdext_feature &= ~cpu_stdext_disable;
 	}
 
+	if (cpu_high >= 13) {
+		if (cpu_feature2 & CPUID2_OSXSAVE) {
+			cpuid_count(13, 1, regs);
+			cpu_extstate = regs[0];
+		} else
+			cpu_extstate = 0;
+	}
+
 	if (cpu_vendor_id == CPU_VENDOR_INTEL ||
 	    cpu_vendor_id == CPU_VENDOR_AMD ||
 	    cpu_vendor_id == CPU_VENDOR_CENTAUR) {

Modified: soc2014/op/freebsd-base/sys/amd64/amd64/initcpu.c
==============================================================================
--- soc2014/op/freebsd-base/sys/amd64/amd64/initcpu.c	Fri Jul 25 10:35:00 2014	(r271358)
+++ soc2014/op/freebsd-base/sys/amd64/amd64/initcpu.c	Fri Jul 25 10:36:11 2014	(r271359)
@@ -78,6 +78,7 @@
 u_int	cpu_mon_mwait_flags;	/* MONITOR/MWAIT flags (CPUID.05H.ECX) */
 u_int	cpu_mon_min_size;	/* MONITOR minimum range size, bytes */
 u_int	cpu_mon_max_size;	/* MONITOR minimum range size, bytes */
+u_int	cpu_extstate;		/* Extended State features */
 
 SYSCTL_UINT(_hw, OID_AUTO, via_feature_rng, CTLFLAG_RD,
 	&via_feature_rng, 0, "VIA RNG feature available in CPU");

Modified: soc2014/op/freebsd-base/sys/amd64/include/md_var.h
==============================================================================
--- soc2014/op/freebsd-base/sys/amd64/include/md_var.h	Fri Jul 25 10:35:00 2014	(r271358)
+++ soc2014/op/freebsd-base/sys/amd64/include/md_var.h	Fri Jul 25 10:36:11 2014	(r271359)
@@ -61,6 +61,7 @@
 extern	u_int	cpu_mon_mwait_flags;
 extern	u_int	cpu_mon_min_size;
 extern	u_int	cpu_mon_max_size;
+extern	u_int	cpu_extstate;
 extern	char	ctx_switch_xsave[];
 extern	char	kstack[];
 extern	char	sigcode[];

Modified: soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c
==============================================================================
--- soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c	Fri Jul 25 10:35:00 2014	(r271358)
+++ soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c	Fri Jul 25 10:36:11 2014	(r271359)
@@ -101,13 +101,8 @@
 			return (true);
 		break;
 	case KSP_CPUID_EXTSTATE :
-		{
-			u_int cp[4];
-
-			cpuid_count(0xd, 0x1, cp);
-			if ((cp[0] & p->feature) != 0)
-				return (true);
-		}
+		if ((cpu_extstate & p->feature) != 0)
+			return (true);
 		break;
 	case KSP_SELFTEST:
 		if ((p->feature & KSP_FEATURE_SELFTEST) != 0)


More information about the svn-soc-all mailing list