|
|
|
@ -41,11 +41,11 @@
|
|
|
|
|
# if CFG_DEBUG_PAGE_ALLOCS_NOISY
|
|
|
|
|
# define page_debug_noisy(msg, ...) kprintf("[page] " msg, ##__VA_ARGS__)
|
|
|
|
|
# else
|
|
|
|
|
# define page_debug_noisy(msg, ...)
|
|
|
|
|
# define page_debug_noisy(msg, ...) ({})
|
|
|
|
|
# endif
|
|
|
|
|
#else
|
|
|
|
|
# define page_debug(msg, ...)
|
|
|
|
|
# define page_debug_noisy(msg, ...)
|
|
|
|
|
# define page_debug(msg, ...) ({})
|
|
|
|
|
# define page_debug_noisy(msg, ...) ({})
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -54,7 +54,7 @@
|
|
|
|
|
* the one below it, starting at one page per entry. The effective result is
|
|
|
|
|
* that a single entry in the cache on level L covers `(1 << L)` pages.
|
|
|
|
|
*/
|
|
|
|
|
#define CACHE_LEVELS (HUGEPAGE_SHIFT - PAGE_SHIFT + 1)
|
|
|
|
|
#define CACHE_LEVELS GET_PAGE_LEVELS
|
|
|
|
|
|
|
|
|
|
#define LEVEL_SHIFT(level) (PAGE_SHIFT + (level))
|
|
|
|
|
|
|
|
|
@ -75,7 +75,7 @@ struct cache_pool {
|
|
|
|
|
usize free_entries;
|
|
|
|
|
};
|
|
|
|
|
static struct cache_pool caches[CACHE_LEVELS];
|
|
|
|
|
MTX(caches_lock);
|
|
|
|
|
static MTX(caches_lock);
|
|
|
|
|
|
|
|
|
|
#define LONG_BIT_MASK (~(LONG_BIT - 1))
|
|
|
|
|
|
|
|
|
@ -138,7 +138,7 @@ int pages_init(void)
|
|
|
|
|
vm_flush();
|
|
|
|
|
|
|
|
|
|
/* phys_end gets aligned, as promised by the comment in kmalloc_init() */
|
|
|
|
|
phys_end = uintptr_align(phys_end, -HUGEPAGE_SHIFT);
|
|
|
|
|
phys_end = align_floor(phys_end, HUGEPAGE_SIZE);
|
|
|
|
|
usize phys_size = phys_end - phys_start;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -187,7 +187,7 @@ int pages_init(void)
|
|
|
|
|
|
|
|
|
|
/* kheap_start and kheap_end are globals */
|
|
|
|
|
kheap_start = __v(phys_start);
|
|
|
|
|
kheap_end = ptr_align(bitmap_start, -HUGEPAGE_SHIFT);
|
|
|
|
|
kheap_end = align_floor(bitmap_start, HUGEPAGE_SIZE);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* populate the freelist on the highest level, all levels beneath it
|
|
|
|
|