From e7af1dd2e0d8203a4d498a18bdd153a82da22227 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Fri, 13 Dec 2024 14:25:40 -0500 Subject: [PATCH] kernel/vm: Introduce VMCache::CanOvercommit(). Allows the Anonymous caches to report overcommitting status. --- headers/private/kernel/vm/VMCache.h | 1 + src/system/kernel/vm/VMAnonymousCache.cpp | 7 +++++++ src/system/kernel/vm/VMAnonymousCache.h | 1 + src/system/kernel/vm/VMAnonymousNoSwapCache.cpp | 7 +++++++ src/system/kernel/vm/VMAnonymousNoSwapCache.h | 1 + src/system/kernel/vm/VMCache.cpp | 7 +++++++ 6 files changed, 24 insertions(+) diff --git a/headers/private/kernel/vm/VMCache.h b/headers/private/kernel/vm/VMCache.h index 504f4f655f..8bfc57e323 100644 --- a/headers/private/kernel/vm/VMCache.h +++ b/headers/private/kernel/vm/VMCache.h @@ -149,6 +149,7 @@ public: { return fRefCount; } // backing store operations + virtual bool CanOvercommit(); virtual status_t Commit(off_t size, int priority); virtual bool HasPage(off_t offset); diff --git a/src/system/kernel/vm/VMAnonymousCache.cpp b/src/system/kernel/vm/VMAnonymousCache.cpp index 6247423a61..b77f825e75 100644 --- a/src/system/kernel/vm/VMAnonymousCache.cpp +++ b/src/system/kernel/vm/VMAnonymousCache.cpp @@ -738,6 +738,13 @@ VMAnonymousCache::Commit(off_t size, int priority) } +bool +VMAnonymousCache::CanOvercommit() +{ + return fCanOvercommit; +} + + bool VMAnonymousCache::HasPage(off_t offset) { diff --git a/src/system/kernel/vm/VMAnonymousCache.h b/src/system/kernel/vm/VMAnonymousCache.h index 741d2a283a..b312e52df0 100644 --- a/src/system/kernel/vm/VMAnonymousCache.h +++ b/src/system/kernel/vm/VMAnonymousCache.h @@ -49,6 +49,7 @@ public: virtual status_t Discard(off_t offset, off_t size); + virtual bool CanOvercommit(); virtual status_t Commit(off_t size, int priority); virtual bool HasPage(off_t offset); virtual bool DebugHasPage(off_t offset); diff --git a/src/system/kernel/vm/VMAnonymousNoSwapCache.cpp b/src/system/kernel/vm/VMAnonymousNoSwapCache.cpp index cd402fde25..09bc70f082 100644 --- a/src/system/kernel/vm/VMAnonymousNoSwapCache.cpp +++ b/src/system/kernel/vm/VMAnonymousNoSwapCache.cpp @@ -94,6 +94,13 @@ VMAnonymousNoSwapCache::Commit(off_t size, int priority) } +bool +VMAnonymousNoSwapCache::CanOvercommit() +{ + return fCanOvercommit; +} + + bool VMAnonymousNoSwapCache::HasPage(off_t offset) { diff --git a/src/system/kernel/vm/VMAnonymousNoSwapCache.h b/src/system/kernel/vm/VMAnonymousNoSwapCache.h index 762717e4db..615f20f026 100644 --- a/src/system/kernel/vm/VMAnonymousNoSwapCache.h +++ b/src/system/kernel/vm/VMAnonymousNoSwapCache.h @@ -22,6 +22,7 @@ public: int32 numGuardPages, uint32 allocationFlags); + virtual bool CanOvercommit(); virtual status_t Commit(off_t size, int priority); virtual bool HasPage(off_t offset); diff --git a/src/system/kernel/vm/VMCache.cpp b/src/system/kernel/vm/VMCache.cpp index ae86c643ba..d152ad47bc 100644 --- a/src/system/kernel/vm/VMCache.cpp +++ b/src/system/kernel/vm/VMCache.cpp @@ -1298,6 +1298,13 @@ VMCache::FlushAndRemoveAllPages() } +bool +VMCache::CanOvercommit() +{ + return false; +} + + status_t VMCache::Commit(off_t size, int priority) {