vm: minimum and maximum zone IDs are now defined in arch/../vm.h

This commit is contained in:
2023-05-07 21:38:08 +01:00
parent ad2ce0b2ab
commit 9f3c080e41
4 changed files with 12 additions and 5 deletions

View File

@@ -18,4 +18,7 @@
#define VM_PAGE_MIN_ORDER VM_PAGE_4K #define VM_PAGE_MIN_ORDER VM_PAGE_4K
#define VM_PAGE_MAX_ORDER VM_PAGE_8M #define VM_PAGE_MAX_ORDER VM_PAGE_8M
#define VM_ZONE_MIN VM_ZONE_DMA
#define VM_ZONE_MAX VM_ZONE_NORMAL
#endif #endif

View File

@@ -56,12 +56,12 @@ enum vm_flags {
enum vm_zone_id { enum vm_zone_id {
/* NOTE that these are used as indices into the node_zones array in vm/zone.c /* NOTE that these are used as indices into the node_zones array in vm/zone.c
they need to be continuous, and must start at 0! */ they need to be continuous, and must start at 0!
not all of these zones are implemented for every architecture. */
VM_ZONE_DMA = 0u, VM_ZONE_DMA = 0u,
VM_ZONE_NORMAL = 1u, VM_ZONE_NORMAL = 1u,
VM_ZONE_HIGHMEM = 2u, VM_ZONE_HIGHMEM = 2u,
VM_ZONE_MIN = VM_ZONE_DMA,
VM_ZONE_MAX = VM_ZONE_HIGHMEM,
}; };
enum vm_page_order { enum vm_page_order {

View File

@@ -82,6 +82,10 @@ void vm_cache_destroy(struct vm_cache *cache)
static struct vm_slab *alloc_slab(struct vm_cache *cache, enum vm_flags flags) static struct vm_slab *alloc_slab(struct vm_cache *cache, enum vm_flags flags)
{ {
struct vm_page *slab_page = vm_page_alloc(cache->c_page_order, flags); struct vm_page *slab_page = vm_page_alloc(cache->c_page_order, flags);
if (!slab_page) {
return NULL;
}
struct vm_slab *slab_hdr = NULL; struct vm_slab *slab_hdr = NULL;
void *slab_data = vm_page_get_vaddr(slab_page); void *slab_data = vm_page_get_vaddr(slab_page);

View File

@@ -155,7 +155,7 @@ struct vm_page *vm_page_alloc(enum vm_page_order order, enum vm_flags flags)
{ {
/* TODO prefer nodes closer to us */ /* TODO prefer nodes closer to us */
struct vm_pg_data *node = vm_pg_data_get(0); struct vm_pg_data *node = vm_pg_data_get(0);
enum vm_zone_id zone_id = VM_ZONE_HIGHMEM; enum vm_zone_id zone_id = VM_ZONE_MAX;
if (flags & VM_GET_DMA) { if (flags & VM_GET_DMA) {
zone_id = VM_ZONE_DMA; zone_id = VM_ZONE_DMA;
} }
@@ -168,7 +168,7 @@ struct vm_page *vm_page_alloc(enum vm_page_order order, enum vm_flags flags)
return pg; return pg;
} }
if (zone_id == VM_ZONE_MIN) { if (zone_id <= VM_ZONE_MIN) {
break; break;
} }