vm: log per-zone free memory during init
This commit is contained in:
27
vm/zone.c
27
vm/zone.c
@@ -1,10 +1,12 @@
|
||||
#include <socks/locks.h>
|
||||
#include <socks/util.h>
|
||||
#include <socks/queue.h>
|
||||
#include <socks/memblock.h>
|
||||
#include <socks/types.h>
|
||||
#include <socks/vm.h>
|
||||
#include <socks/printk.h>
|
||||
#include <socks/libc/string.h>
|
||||
#include <socks/machine/cpu.h>
|
||||
|
||||
static vm_page_t *group_pages_into_block(vm_zone_t *z, phys_addr_t base, phys_addr_t limit, int order)
|
||||
{
|
||||
@@ -14,13 +16,10 @@ static vm_page_t *group_pages_into_block(vm_zone_t *z, phys_addr_t base, phys_ad
|
||||
if (!pg) {
|
||||
continue;
|
||||
}
|
||||
/* p_flags is the only part of the page that has been
|
||||
initialised at this point. */
|
||||
|
||||
pg->p_order = order;
|
||||
pg->p_node = z->z_info.zd_node;
|
||||
pg->p_zone = z->z_info.zd_id;
|
||||
pg->p_reserved = 0;
|
||||
|
||||
if (order != VM_PAGE_MIN_ORDER) {
|
||||
pg->p_flags |= VM_PAGE_HUGE;
|
||||
@@ -81,6 +80,21 @@ static void convert_region_to_blocks(vm_zone_t *zone,
|
||||
}
|
||||
}
|
||||
|
||||
static size_t zone_free_bytes(vm_zone_t *z)
|
||||
{
|
||||
size_t free_bytes = 0;
|
||||
for (vm_page_order_t i = VM_PAGE_MIN_ORDER; i <= VM_PAGE_MAX_ORDER; i++) {
|
||||
size_t page_bytes = vm_page_order_to_bytes(i);
|
||||
size_t nr_pages = 0;
|
||||
queue_foreach (vm_page_t, pg, &z->z_free_pages[i], p_list) {
|
||||
free_bytes += page_bytes;
|
||||
nr_pages++;
|
||||
}
|
||||
}
|
||||
|
||||
return free_bytes;
|
||||
}
|
||||
|
||||
void vm_zone_init(vm_zone_t *z, const vm_zone_descriptor_t *zone_info)
|
||||
{
|
||||
memset(z, 0x0, sizeof *z);
|
||||
@@ -139,8 +153,13 @@ void vm_zone_init(vm_zone_t *z, const vm_zone_descriptor_t *zone_info)
|
||||
}
|
||||
}
|
||||
|
||||
size_t free_bytes = zone_free_bytes(z);
|
||||
spin_unlock_irqrestore(&z->z_lock, flags);
|
||||
printk("vm: zone %s on node %u online.", z->z_info.zd_name, z->z_info.zd_node);
|
||||
|
||||
char free_bytes_str[64];
|
||||
data_size_to_string(free_bytes, free_bytes_str, sizeof free_bytes_str);
|
||||
|
||||
printk("vm: node %u/zone %s: %s of memory online.", z->z_info.zd_node, z->z_info.zd_name, free_bytes_str);
|
||||
}
|
||||
|
||||
static int replenish_free_page_list(vm_zone_t *z, vm_page_order_t order)
|
||||
|
||||
Reference in New Issue
Block a user