Print this page
8956 Implement KPTI
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>

@@ -19,17 +19,17 @@
  * CDDL HEADER END
  */
 /*
  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
  */
 
 #ifndef _SYS_MACH_MMU_H
 #define _SYS_MACH_MMU_H
 
-#pragma ident   "%Z%%M% %I%     %E% SMI"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 #ifndef _ASM

@@ -129,10 +129,23 @@
  */
 #define PT_NOSYNC       (0x200) /* PTE was created with HAT_NOSYNC */
 #define PT_NOCONSIST    (0x400) /* PTE was created with HAT_LOAD_NOCONSIST */
 #define PT_FOREIGN      (0x600) /* MFN mapped on the hypervisor has no PFN */
 
+#ifndef _BOOT
+
+extern ulong_t getcr3(void);
+extern void setcr3(ulong_t);
+
+#define getcr3_pa() (getcr3() & MMU_PAGEMASK)
+#define getpcid() ((getcr4() & CR4_PCIDE) ? \
+        (getcr3() & MMU_PAGEOFFSET) : PCID_NONE)
+
+extern void mmu_invlpg(caddr_t);
+
+#endif
+
 #ifdef __xpv
 #include <sys/xen_mmu.h>
 #else
 #include <sys/pc_mmu.h>
 #endif

@@ -149,14 +162,10 @@
 void set_pteval(paddr_t, uint_t, uint_t, x86pte_t);
 paddr_t make_ptable(x86pte_t *, uint_t);
 x86pte_t *find_pte(uint64_t, paddr_t *, uint_t, uint_t);
 x86pte_t *map_pte(paddr_t, uint_t);
 
-#ifndef _BOOT
-ulong_t getcr3();
-#endif
-
 extern uint_t *shift_amt;
 extern uint_t ptes_per_table;
 extern paddr_t top_page_table;
 extern uint_t top_level;
 extern uint_t pte_size;