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;