Print this page
8956 Implement KPTI
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
9208 hati_demap_func should take pagesize into account
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Tim Kordas <tim.kordas@joyent.com>
Reviewed by: Yuri Pankov <yuripv@yuripv.net>
*** 19,28 ****
--- 19,29 ----
* CDDL HEADER END
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ * Copyright 2018 Joyent, Inc.
*/
#ifndef _VM_HAT_PTE_H
#define _VM_HAT_PTE_H
*** 136,145 ****
--- 137,147 ----
* while (--l >= 0)
* ...
*/
#define MAX_NUM_LEVEL 4
#define MAX_PAGE_LEVEL 2
+ #define MIN_PAGE_LEVEL 0
typedef int8_t level_t;
#define LEVEL_SHIFT(l) (mmu.level_shift[l])
#define LEVEL_SIZE(l) (mmu.level_size[l])
#define LEVEL_OFFSET(l) (mmu.level_offset[l])
#define LEVEL_MASK(l) (mmu.level_mask[l])
*** 152,164 ****
#define PFN_64G (64ull * (1024 * 1024 * 1024 / MMU_PAGESIZE))
#define PFN_ABOVE4G(pfn) ((pfn) >= PFN_4G)
#define PFN_ABOVE64G(pfn) ((pfn) >= PFN_64G)
/*
! * The CR3 register holds the physical address of the top level page table.
*/
! #define MAKECR3(pfn) mmu_ptob(pfn)
/*
* HAT/MMU parameters that depend on kernel mode and/or processor type
*/
struct htable;
--- 154,167 ----
#define PFN_64G (64ull * (1024 * 1024 * 1024 / MMU_PAGESIZE))
#define PFN_ABOVE4G(pfn) ((pfn) >= PFN_4G)
#define PFN_ABOVE64G(pfn) ((pfn) >= PFN_64G)
/*
! * The CR3 register holds the physical address of the top level page table,
! * along with the current PCID if any.
*/
! #define MAKECR3(pfn, pcid) (mmu_ptob(pfn) | pcid)
/*
* HAT/MMU parameters that depend on kernel mode and/or processor type
*/
struct htable;
*** 171,184 ****
uint_t num_level; /* number of page table levels in use */
uint_t max_level; /* just num_level - 1 */
uint_t max_page_level; /* maximum level at which we can map a page */
uint_t umax_page_level; /* max user page map level */
uint_t ptes_per_table; /* # of entries in lower level page tables */
! uint_t top_level_count; /* # of entries in top most level page table */
uint_t hash_cnt; /* cnt of entries in htable_hash_cache */
! uint_t vlp_hash_cnt; /* cnt of entries in vlp htable_hash_cache */
uint_t pae_hat; /* either 0 or 1 */
uintptr_t hole_start; /* start of VA hole (or -1 if none) */
uintptr_t hole_end; /* end of VA hole (or 0 if none) */
--- 174,193 ----
uint_t num_level; /* number of page table levels in use */
uint_t max_level; /* just num_level - 1 */
uint_t max_page_level; /* maximum level at which we can map a page */
uint_t umax_page_level; /* max user page map level */
uint_t ptes_per_table; /* # of entries in lower level page tables */
! uint_t top_level_count; /* # of entries in top-level page table */
! uint_t top_level_uslots; /* # of user slots in top-level page table */
! uint_t num_copied_ents; /* # of PCP-copied PTEs to create */
! /* 32-bit versions of values */
! uint_t top_level_uslots32;
! uint_t max_level32;
! uint_t num_copied_ents32;
uint_t hash_cnt; /* cnt of entries in htable_hash_cache */
! uint_t hat32_hash_cnt; /* cnt of entries in 32-bit htable_hash_cache */
uint_t pae_hat; /* either 0 or 1 */
uintptr_t hole_start; /* start of VA hole (or -1 if none) */
uintptr_t hole_end; /* end of VA hole (or 0 if none) */