[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