From c593faea89acf4e1a2ec08dfd19c1b0f95efac9e Mon Sep 17 00:00:00 2001 From: Balazs Gerofi Date: Wed, 3 Mar 2021 14:42:57 +0900 Subject: [PATCH] MM: handle zero_at_free in page faults Change-Id: Ib2b37c73936a365173d84a2a806a17374ccc05d4 --- kernel/hugefileobj.c | 4 +++- kernel/process.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/kernel/hugefileobj.c b/kernel/hugefileobj.c index d05377e4..db74e8ec 100644 --- a/kernel/hugefileobj.c +++ b/kernel/hugefileobj.c @@ -84,7 +84,9 @@ static int hugefileobj_get_page(struct memobj *memobj, off_t off, goto out; } - memset(obj->pages[pgind], 0, obj->pgsize); + if (!zero_at_free) { + memset(obj->pages[pgind], 0, obj->pgsize); + } dkprintf("%s: obj: 0x%lx, allocated page for off: %lu" " (ind: %d), page size: %lu\n", __func__, obj, off, pgind, obj->pgsize); diff --git a/kernel/process.c b/kernel/process.c index 6edf61e0..c7ddc094 100644 --- a/kernel/process.c +++ b/kernel/process.c @@ -2232,7 +2232,9 @@ retry: #ifdef PROFILE_ENABLE profile_event_add(PROFILE_page_fault_anon_clr, pgsize); #endif // PROFILE_ENABLE - memset(virt, 0, pgsize); + if (!zero_at_free) { + memset(virt, 0, pgsize); + } phys = virt_to_phys(virt); if (phys_to_page(phys)) { dkprintf("%s: NOPHYS,phys=%lx,vmr(%lx-%lx),flag=%x,fa=%lx,reason=%x\n",