[Midnightbsd-cvs] src [7176] trunk/sys: use cpuid_count for cpuctl
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Mon Jul 27 20:49:36 EDT 2015
Revision: 7176
http://svnweb.midnightbsd.org/src/?rev=7176
Author: laffer1
Date: 2015-07-27 20:49:35 -0400 (Mon, 27 Jul 2015)
Log Message:
-----------
use cpuid_count for cpuctl
Modified Paths:
--------------
trunk/sys/amd64/include/cpufunc.h
trunk/sys/dev/cpuctl/cpuctl.c
trunk/sys/i386/include/cpufunc.h
Modified: trunk/sys/amd64/include/cpufunc.h
===================================================================
--- trunk/sys/amd64/include/cpufunc.h 2015-07-28 00:43:18 UTC (rev 7175)
+++ trunk/sys/amd64/include/cpufunc.h 2015-07-28 00:49:35 UTC (rev 7176)
@@ -107,6 +107,13 @@
}
static __inline void
+clts(void)
+{
+
+ __asm __volatile("clts");
+}
+
+static __inline void
disable_intr(void)
{
__asm __volatile("cli" : : : "memory");
@@ -273,7 +280,23 @@
__asm __volatile("outw %0, %w1" : : "a" (data), "Nd" (port));
}
+static __inline u_long
+popcntq(u_long mask)
+{
+ u_long result;
+
+ __asm __volatile("popcntq %1,%0" : "=r" (result) : "rm" (mask));
+ return (result);
+}
+
static __inline void
+lfence(void)
+{
+
+ __asm __volatile("lfence" : : : "memory");
+}
+
+static __inline void
mfence(void)
{
@@ -409,6 +432,25 @@
return (data);
}
+static __inline u_long
+rxcr(u_int reg)
+{
+ u_int low, high;
+
+ __asm __volatile("xgetbv" : "=a" (low), "=d" (high) : "c" (reg));
+ return (low | ((uint64_t)high << 32));
+}
+
+static __inline void
+load_xcr(u_int reg, u_long val)
+{
+ u_int low, high;
+
+ low = val;
+ high = val >> 32;
+ __asm __volatile("xsetbv" : : "c" (reg), "a" (low), "d" (high));
+}
+
/*
* Global TLB flush (except for thise for pages marked PG_G)
*/
@@ -674,6 +716,9 @@
int breakpoint(void);
u_int bsfl(u_int mask);
u_int bsrl(u_int mask);
+void clflush(u_long addr);
+void clts(void);
+void cpuid_count(u_int ax, u_int cx, u_int *p);
void disable_intr(void);
void do_cpuid(u_int ax, u_int *p);
void enable_intr(void);
Modified: trunk/sys/dev/cpuctl/cpuctl.c
===================================================================
--- trunk/sys/dev/cpuctl/cpuctl.c 2015-07-28 00:43:18 UTC (rev 7175)
+++ trunk/sys/dev/cpuctl/cpuctl.c 2015-07-28 00:49:35 UTC (rev 7176)
@@ -204,7 +204,7 @@
oldcpu = td->td_oncpu;
is_bound = cpu_sched_is_bound(td);
set_cpu(cpu, td);
- do_cpuid(data->level, data->data);
+ cpuid_count(data->level, 0, data->data);
restore_cpu(oldcpu, is_bound, td);
return (0);
}
Modified: trunk/sys/i386/include/cpufunc.h
===================================================================
--- trunk/sys/i386/include/cpufunc.h 2015-07-28 00:43:18 UTC (rev 7175)
+++ trunk/sys/i386/include/cpufunc.h 2015-07-28 00:49:35 UTC (rev 7176)
@@ -97,6 +97,13 @@
}
static __inline void
+clts(void)
+{
+
+ __asm __volatile("clts");
+}
+
+static __inline void
disable_intr(void)
{
#ifdef XEN
@@ -148,6 +155,13 @@
}
static __inline void
+lfence(void)
+{
+
+ __asm __volatile("lfence" : : : "memory");
+}
+
+static __inline void
mfence(void)
{
@@ -688,6 +702,9 @@
int breakpoint(void);
u_int bsfl(u_int mask);
u_int bsrl(u_int mask);
+void clflush(u_long addr);
+void clts(void);
+void cpuid_count(u_int ax, u_int cx, u_int *p);
void disable_intr(void);
void do_cpuid(u_int ax, u_int *p);
void enable_intr(void);
More information about the Midnightbsd-cvs
mailing list