From 9f3c080e41befe73e822b66536e93fb6cba28eef Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sun, 7 May 2023 21:38:08 +0100 Subject: [PATCH] vm: minimum and maximum zone IDs are now defined in arch/../vm.h --- arch/x86_64/include/socks/machine/vm.h | 3 +++ include/socks/vm.h | 6 +++--- vm/cache.c | 4 ++++ vm/page.c | 4 ++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/arch/x86_64/include/socks/machine/vm.h b/arch/x86_64/include/socks/machine/vm.h index 11b3418..f52734e 100644 --- a/arch/x86_64/include/socks/machine/vm.h +++ b/arch/x86_64/include/socks/machine/vm.h @@ -18,4 +18,7 @@ #define VM_PAGE_MIN_ORDER VM_PAGE_4K #define VM_PAGE_MAX_ORDER VM_PAGE_8M +#define VM_ZONE_MIN VM_ZONE_DMA +#define VM_ZONE_MAX VM_ZONE_NORMAL + #endif diff --git a/include/socks/vm.h b/include/socks/vm.h index 74c8461..53aaeda 100644 --- a/include/socks/vm.h +++ b/include/socks/vm.h @@ -56,12 +56,12 @@ enum vm_flags { enum vm_zone_id { /* 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_NORMAL = 1u, VM_ZONE_HIGHMEM = 2u, - VM_ZONE_MIN = VM_ZONE_DMA, - VM_ZONE_MAX = VM_ZONE_HIGHMEM, }; enum vm_page_order { diff --git a/vm/cache.c b/vm/cache.c index 7012c9d..6c2ea85 100644 --- a/vm/cache.c +++ b/vm/cache.c @@ -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) { struct vm_page *slab_page = vm_page_alloc(cache->c_page_order, flags); + if (!slab_page) { + return NULL; + } + struct vm_slab *slab_hdr = NULL; void *slab_data = vm_page_get_vaddr(slab_page); diff --git a/vm/page.c b/vm/page.c index fd33542..831c1bd 100644 --- a/vm/page.c +++ b/vm/page.c @@ -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 */ 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) { 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; } - if (zone_id == VM_ZONE_MIN) { + if (zone_id <= VM_ZONE_MIN) { break; }