From ed923ac82f00261a42878e8ee75d125f3c1958bb Mon Sep 17 00:00:00 2001 From: Masamichi Takagi Date: Mon, 15 Jun 2020 13:23:52 +0900 Subject: [PATCH] TO RESET: hugefileobj: pre-allocate on mmap Set this change to "TO RESET" because one of the Fujitsu tests fails. Change-Id: Iddc30e8452b3d39da4975079d0c6a035e4f3dbde --- kernel/hugefileobj.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/kernel/hugefileobj.c b/kernel/hugefileobj.c index 2ded1d50..cd300fd9 100644 --- a/kernel/hugefileobj.c +++ b/kernel/hugefileobj.c @@ -281,6 +281,34 @@ int hugefileobj_create(struct memobj *memobj, size_t len, off_t off, virt_addr, nr_pages, obj->pgsize); + +#ifdef ENABLE_FUGAKU_HACKS + { + int pgind; + int npages; + + for (pgind = 0; pgind < obj->nr_pages; ++pgind) { + if (obj->pages[pgind]) { + continue; + } + + npages = obj->pgsize >> PAGE_SHIFT; + obj->pages[pgind] = ihk_mc_alloc_aligned_pages_user(npages, + obj->pgshift - PTL1_SHIFT, + IHK_MC_AP_NOWAIT | IHK_MC_AP_USER, 0); + if (!obj->pages[pgind]) { + kprintf("%s: error: could not allocate page for off: %lu" + ", page size: %lu\n", __func__, off, obj->pgsize); + continue; + } + + memset(obj->pages[pgind], 0, obj->pgsize); + dkprintf("%s: obj: 0x%lx, pre-allocated page for off: %lu" + " (ind: %d), page size: %lu\n", + __func__, obj, off, pgind, obj->pgsize); + } + } +#endif } obj->memobj.size = len;