shmobj: Support large page

Mixing page sizes is allowed by shmobj.

Change-Id: Ic48b71da2db6ce3f68fa3dbc8ad5ae96347d6018
Refs: #1381
Refs: #1458
This commit is contained in:
Ken Sato
2020-01-15 15:45:17 +09:00
committed by Masamichi Takagi
parent 4b66373813
commit 9a60997ea0
32 changed files with 2212 additions and 75 deletions

View File

@ -1714,7 +1714,8 @@ do_mmap(const uintptr_t addr0, const size_t len0, const int prot,
}
p2align = pgshift - PAGE_SHIFT;
}
else if ((flags & MAP_PRIVATE) && (flags & MAP_ANONYMOUS)
else if (((flags & (MAP_PRIVATE | MAP_SHARED))
&& (flags & MAP_ANONYMOUS))
&& !proc->thp_disable) {
pgshift = 0; /* transparent huge page */
p2align = PAGE_P2ALIGN;
@ -1950,7 +1951,7 @@ do_mmap(const uintptr_t addr0, const size_t len0, const int prot,
memset(&ads, 0, sizeof(ads));
ads.shm_segsz = len;
ads.shm_perm.mode = SHM_DEST;
ads.init_pgshift = PAGE_SHIFT;
ads.init_pgshift = PAGE_SHIFT + p2align;
error = shmobj_create(&ads, &memobj);
if (error) {
ekprintf("do_mmap:shmobj_create failed. %d\n", error);