svn commit: r255058 - head/sys/amd64/include
Konstantin Belousov
kib at FreeBSD.org
Fri Aug 30 07:42:38 UTC 2013
Author: kib
Date: Fri Aug 30 07:42:38 2013
New Revision: 255058
URL: http://svnweb.freebsd.org/changeset/base/255058
Log:
Provide a wrapper for the INVPCID instruction, definition of the
descriptor and symbolic names for the operation types.
Sponsored by: The FreeBSD Foundation
Reviewed by: alc
Tested by: pho, bf
Modified:
head/sys/amd64/include/cpufunc.h
Modified: head/sys/amd64/include/cpufunc.h
==============================================================================
--- head/sys/amd64/include/cpufunc.h Fri Aug 30 07:37:45 2013 (r255057)
+++ head/sys/amd64/include/cpufunc.h Fri Aug 30 07:42:38 2013 (r255058)
@@ -472,6 +472,26 @@ invlpg(u_long addr)
__asm __volatile("invlpg %0" : : "m" (*(char *)addr) : "memory");
}
+#define INVPCID_ADDR 0
+#define INVPCID_CTX 1
+#define INVPCID_CTXGLOB 2
+#define INVPCID_ALLCTX 3
+
+struct invpcid_descr {
+ uint64_t pcid:12 __packed;
+ uint64_t pad:52 __packed;
+ uint64_t addr;
+} __packed;
+
+static __inline void
+invpcid(struct invpcid_descr *d, int type)
+{
+
+ /* invpcid (%rdx),%rax */
+ __asm __volatile(".byte 0x66,0x0f,0x38,0x82,0x02"
+ : : "d" (d), "a" ((u_long)type) : "memory");
+}
+
static __inline u_short
rfs(void)
{
More information about the svn-src-all
mailing list