diff --git a/include/socks/vm.h b/include/socks/vm.h index e5a2da6..2671f41 100644 --- a/include/socks/vm.h +++ b/include/socks/vm.h @@ -74,7 +74,7 @@ typedef enum vm_page_order { VM_PAGE_32M, VM_PAGE_64M, VM_PAGE_128M, -#if 0 + /* vm_page_t only has 4 bits to store the page order with. the maximum order that can be stored in 4 bits is 15 (VM_PAGE_128M) to use any of the page orders listed here, this field @@ -82,7 +82,12 @@ typedef enum vm_page_order { VM_PAGE_256M, VM_PAGE_512M, VM_PAGE_1G, -#endif + VM_PAGE_2G, + VM_PAGE_4G, + VM_PAGE_8G, + VM_PAGE_16G, + VM_PAGE_32G, + VM_PAGE_64G, } vm_page_order_t; typedef enum vm_page_flags { diff --git a/vm/page.c b/vm/page.c index 5ac08c6..08b4f8c 100644 --- a/vm/page.c +++ b/vm/page.c @@ -22,7 +22,7 @@ static size_t page_order_bytes[] = { [VM_PAGE_32M] = 0x2000000, [VM_PAGE_64M] = 0x4000000, [VM_PAGE_128M] = 0x8000000, -#if 0 + /* vm can support pages of this size, but vm_page_t only has 4 bits with which to store the page order, which cannot accomodate these @@ -30,7 +30,12 @@ static size_t page_order_bytes[] = { [VM_PAGE_256M] = 0x10000000, [VM_PAGE_512M] = 0x20000000, [VM_PAGE_1G] = 0x40000000, -#endif + [VM_PAGE_2G] = 0x80000000, + [VM_PAGE_4G] = 0x100000000, + [VM_PAGE_8G] = 0x200000000, + [VM_PAGE_16G] = 0x400000000, + [VM_PAGE_32G] = 0x800000000, + [VM_PAGE_64G] = 0x1000000000, }; phys_addr_t vm_virt_to_phys(void *p) @@ -90,7 +95,7 @@ size_t vm_page_get_pfn(vm_page_t *pg) size_t vm_page_order_to_bytes(vm_page_order_t order) { - if (order < 0 || order > VM_PAGE_MAX_ORDER) { + if (order < VM_PAGE_4K || order > VM_PAGE_64G) { return 0; } @@ -99,7 +104,7 @@ size_t vm_page_order_to_bytes(vm_page_order_t order) phys_addr_t vm_page_order_to_pages(vm_page_order_t order) { - if (order < 0 || order > VM_PAGE_MAX_ORDER) { + if (order < VM_PAGE_4K || order > VM_PAGE_64G) { return 0; }