mm: added page fault range caching for each mm_space_t

mm: added last_pagefault handling when mm_space_t is unmapped

mm: fixed styling inconsistencies, fixed last pagefault range removal

mm: fix unitialized last_pagefault member in slab data
This commit is contained in:
jvbronzeado
2026-07-08 19:59:48 -03:00
parent c0f81d39c9
commit 185b33e719
3 changed files with 28 additions and 3 deletions
+11 -1
View File
@@ -122,6 +122,9 @@ void mm_insert_range(mm_space_t *space, mm_range_t *new_range) {
if (next_range && ranges_compatible(new_range, next_range)) {
new_range->size += next_range->size;
if (space->last_pagefault == next_range)
space->last_pagefault = NULL;
rbtree_remove(&space->ranges, &next_range->rbtree_node);
mm_free_range(next_range);
if (new_range->flags & MM_RANGE_FLAGS_FILE) {
@@ -133,6 +136,9 @@ void mm_insert_range(mm_space_t *space, mm_range_t *new_range) {
if (prev_range && ranges_compatible(prev_range, new_range)) {
prev_range->size += new_range->size;
if (space->last_pagefault == new_range)
space->last_pagefault = NULL;
rbtree_remove(&space->ranges, &new_range->rbtree_node);
mm_free_range(new_range);
if (prev_range->flags & MM_RANGE_FLAGS_FILE) {
@@ -382,6 +388,9 @@ int mm_change_range(mm_space_t *space, void *address, size_t size, bool free, in
// remove or change the flags of the range
if (free) {
if (space->last_pagefault == range)
space->last_pagefault = NULL;
rbtree_remove(&space->ranges, &range->rbtree_node);
mm_destroy_range(range, 0, range->size, 0);
mm_free_range(range);
@@ -410,8 +419,9 @@ int mm_change_range(mm_space_t *space, void *address, size_t size, bool free, in
}
size_t difference = (uintptr_t)top - (uintptr_t)range->start;
if (free)
if (free) {
mm_destroy_range(range, 0, difference, 0);
}
range->start = (void *)((uintptr_t)range->start + difference);
range->size -= difference;