X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fbuddy.h;h=e0ef86dfd1f79ec1d27ed07dbeddeea2885484c6;hb=97126b352ec28abf6c6d8ec3883f0179a7d431c1;hp=54c24a72e4f0dc95c7979745a627f88fbbd5af01;hpb=a61cac5cf9cf6beb6dccec02b94bb5a37429e7fb;p=palacios.git diff --git a/linux_module/buddy.h b/linux_module/buddy.h index 54c24a7..e0ef86d 100644 --- a/linux_module/buddy.h +++ b/linux_module/buddy.h @@ -48,6 +48,8 @@ struct buddy_mempool { */ unsigned long num_free_blocks; + + void *user_metadata; // whatever the user wants struct rb_node tree_node; }; @@ -71,30 +73,37 @@ buddy_init(unsigned long pool_order, unsigned int node_id); extern void -buddy_deinit(struct buddy_memzone * zone); +buddy_deinit(struct buddy_memzone * zone, + int (*free_callback)(void *user_metadata)); /* Add pool at given physical address */ extern int buddy_add_pool(struct buddy_memzone * zone, unsigned long base_addr, - unsigned long pool_order); + unsigned long pool_order, + void *user_metadata); /* Remove pool based at given physical address */ extern int buddy_remove_pool(struct buddy_memzone * zone, unsigned long base_addr, - unsigned char force); + unsigned char force, + void **user_metadata); + +// constraint=0 => no constraints, otherwise bitmask of: +#define LWK_BUDDY_CONSTRAINT_4GB 0x1 /* Allocate pages, returns physical address */ extern uintptr_t buddy_alloc(struct buddy_memzone * zone, - unsigned long order); + unsigned long order, + int constraints); /* Free a physical address */ -extern void +extern int buddy_free(struct buddy_memzone * zone, uintptr_t addr, unsigned long order);