diff options
Diffstat (limited to 'usr/src/uts/i86pc/vm/vm_machdep.c')
| -rw-r--r-- | usr/src/uts/i86pc/vm/vm_machdep.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/usr/src/uts/i86pc/vm/vm_machdep.c b/usr/src/uts/i86pc/vm/vm_machdep.c index ab0ab9181f..8512bdc99f 100644 --- a/usr/src/uts/i86pc/vm/vm_machdep.c +++ b/usr/src/uts/i86pc/vm/vm_machdep.c @@ -172,6 +172,7 @@ map_pgsz(int maptype, struct proc *p, caddr_t addr, size_t len, int *remap) * to be used for mapping application and libraries text segments. */ int use_text_largepages = 0; +int use_shm_largepages = 0; /* * Return a bit vector of large page size codes that @@ -201,6 +202,29 @@ map_execseg_pgszcvec(int text, caddr_t addr, size_t len) return (1 << 1); } +uint_t +map_shm_pgszcvec(caddr_t addr, size_t len, uintptr_t off) +{ + size_t pgsz; + caddr_t a; + + if (!use_shm_largepages || mmu.max_page_level == 0) { + return (0); + } + + pgsz = LEVEL_SIZE(1); + a = (caddr_t)P2ROUNDUP((uintptr_t)addr, pgsz); + if (a < addr || a >= addr + len || + P2PHASE((uintptr_t)addr ^ off, pgsz)) { + return (0); + } + len -= (a - addr); + if (len < pgsz) { + return (0); + } + return (1 << 1); +} + /* * Handle a pagefault. */ |
