From 48f753b0c6baf09ea1e2aba64618dc8dbe5dd745 Mon Sep 17 00:00:00 2001 From: caiyiming Date: Thu, 9 Nov 2023 01:27:15 +0000 Subject: [PATCH] 1109 Signed-off-by: caiyiming --- libpurgeablemem/c/src/purgeable_mem_c.c | 5 +++-- libpurgeablemem/common/src/ux_page_table_c.c | 9 +++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/libpurgeablemem/c/src/purgeable_mem_c.c b/libpurgeablemem/c/src/purgeable_mem_c.c index 2c150ca..e1a08fe 100644 --- a/libpurgeablemem/c/src/purgeable_mem_c.c +++ b/libpurgeablemem/c/src/purgeable_mem_c.c @@ -72,8 +72,9 @@ static struct PurgMem *PurgMemCreate_(size_t len, struct PurgMemBuilder *builder return NULL; } size_t size = RoundUp(len, PAGE_SIZE); - int type = MAP_ANONYMOUS; - type |= (UxpteIsEnabled() ? MAP_PURGEABLE : MAP_PRIVATE); + unsigned int utype = MAP_ANONYMOUS; + utype |= (UxpteIsEnabled() ? MAP_PURGEABLE : MAP_PRIVATE); + int type = (int) utype; pugObj->dataPtr = mmap(NULL, size, PROT_READ | PROT_WRITE, type, -1, 0); if (pugObj->dataPtr == MAP_FAILED) { PM_HILOG_ERROR_C(LOG_CORE, "%{public}s: mmap dataPtr fail", __func__); diff --git a/libpurgeablemem/common/src/ux_page_table_c.c b/libpurgeablemem/common/src/ux_page_table_c.c index 8fe95de..7dd5e4c 100644 --- a/libpurgeablemem/common/src/ux_page_table_c.c +++ b/libpurgeablemem/common/src/ux_page_table_c.c @@ -259,8 +259,13 @@ static inline bool UxpteCAS_(uxpte_t *uxpte, uxpte_t old, uxpte_t newVal) static void UxpteAdd(uxpte_t *pte, size_t incNum) { - uxpte_t old; + uxpte_t old = 0; + uxpte_t newVal = 0; do { + if (old + incNum < old || old + incNum < incNum) { + break; + } + newVal = old + incNum; old = UxpteLoad(pte); if (ULONG_MAX - old < incNum) { return; @@ -269,7 +274,7 @@ static void UxpteAdd(uxpte_t *pte, size_t incNum) sched_yield(); continue; } - } while (!UxpteCAS_(pte, old, old + incNum)); + } while (!UxpteCAS_(pte, old, newVal)); } static void UxpteSub(uxpte_t *pte, size_t decNum) -- Gitee