kernel: demand_paging: allow reserving page frames
This adds the kconfig to allow reserving a number of page frames which do not count towards free memory. This is to ensure that there are enough page frames available for paging code and data. Or else, it would be possible to exhaust all page frames via anonymous memory mappings. Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This commit is contained in:
parent
7ad00b9e47
commit
2dfae4a0f7
2 changed files with 19 additions and 0 deletions
11
arch/Kconfig
11
arch/Kconfig
|
@ -701,6 +701,17 @@ config DEMAND_PAGING_ALLOW_IRQ
|
|||
runs with interrupts disabled for the entire operation. However,
|
||||
ISRs may also page fault.
|
||||
|
||||
config DEMAND_PAGING_PAGE_FRAMES_RESERVE
|
||||
int "Number of page frames reserved for paging"
|
||||
default 32 if !LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOT
|
||||
default 0
|
||||
help
|
||||
This sets the number of page frames that will be reserved for
|
||||
paging that do not count towards free memory. This is to
|
||||
ensure that there are some page frames available for paging
|
||||
code and data. Otherwise, it would be possible to exhaust
|
||||
all page frames via anonymous memory mappings.
|
||||
|
||||
config DEMAND_PAGING_STATS
|
||||
bool "Gather Demand Paging Statistics"
|
||||
help
|
||||
|
|
|
@ -624,7 +624,15 @@ size_t k_mem_free_get(void)
|
|||
__ASSERT(page_frames_initialized, "%s called too early", __func__);
|
||||
|
||||
key = k_spin_lock(&z_mm_lock);
|
||||
#ifdef CONFIG_DEMAND_PAGING
|
||||
if (z_free_page_count > CONFIG_DEMAND_PAGING_PAGE_FRAMES_RESERVE) {
|
||||
ret = z_free_page_count - CONFIG_DEMAND_PAGING_PAGE_FRAMES_RESERVE;
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
#else
|
||||
ret = z_free_page_count;
|
||||
#endif
|
||||
k_spin_unlock(&z_mm_lock, key);
|
||||
|
||||
return ret * (size_t)CONFIG_MMU_PAGE_SIZE;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue