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