From c29806a316c574fde22853e1687ba4e9561a1102 Mon Sep 17 00:00:00 2001 From: Haryslee Date: Sat, 13 Mar 2021 17:34:27 +0800 Subject: [PATCH] Optimization for physics memory Change-Id: Id7765f13d15014c8b19b75156b9f5971cbe99705 --- kernel/base/vm/los_vm_page.c | 7 ++++++- kernel/base/vm/los_vm_phys.c | 12 ++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/kernel/base/vm/los_vm_page.c b/kernel/base/vm/los_vm_page.c index b612b5c2..9f2efd62 100755 --- a/kernel/base/vm/los_vm_page.c +++ b/kernel/base/vm/los_vm_page.c @@ -76,7 +76,12 @@ VOID OsVmPageStartup(VOID) OsVmPhysAreaSizeAdjust(ROUNDUP((g_vmBootMemBase - KERNEL_ASPACE_BASE), PAGE_SIZE)); - nPage = OsVmPhysPageNumGet(); + /* + * Pages getting from OsVmPhysPageNumGet() interface here contain the memory + * struct LosVmPage occupied, which satisfies the equation: + * nPage * sizeof(LosVmPage) + nPage * PAGE_SIZE = OsVmPhysPageNumGet() * PAGE_SIZE. + */ + nPage = OsVmPhysPageNumGet() * PAGE_SIZE / (sizeof(LosVmPage) + PAGE_SIZE); g_vmPageArraySize = nPage * sizeof(LosVmPage); g_vmPageArray = (LosVmPage *)OsVmBootMemAlloc(g_vmPageArraySize); diff --git a/kernel/base/vm/los_vm_phys.c b/kernel/base/vm/los_vm_phys.c index afb70520..bc2c8491 100755 --- a/kernel/base/vm/los_vm_phys.c +++ b/kernel/base/vm/los_vm_phys.c @@ -108,12 +108,12 @@ VOID OsVmPhysSegAdd(VOID) VOID OsVmPhysAreaSizeAdjust(size_t size) { - INT32 i; - - for (i = 0; i < (sizeof(g_physArea) / sizeof(g_physArea[0])); i++) { - g_physArea[i].start += size; - g_physArea[i].size -= size; - } + /* + * The first physics memory segment is used for kernel image and kernel heap, + * so just need to adjust the first one here. + */ + g_physArea[0].start += size; + g_physArea[0].size -= size; } UINT32 OsVmPhysPageNumGet(VOID)