Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Generalization of constraints on page allocation and implementation/use
[palacios.git] / linux_module / buddy.h
index 54c24a7..163c5a8 100644 (file)
@@ -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,36 @@ 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);
+
 
 
 /* Allocate pages, returns physical address */
 extern uintptr_t 
 buddy_alloc(struct buddy_memzone * zone,
-           unsigned long order);
+           unsigned long order,
+           int (*filter_func)(void *paddr, void *filter_state),
+           void *filter_state);
 
 
 /* Free a physical address */
-extern void
+extern int
 buddy_free(struct buddy_memzone * zone,
           uintptr_t  addr,
           unsigned long order);