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.


Expose VM reset capability to Linux and Linux user
[palacios.git] / linux_module / palacios.h
index 1b5cf44..63d948f 100644 (file)
@@ -44,6 +44,8 @@
 
 #define V3_VM_MOVE_MEM 36
 
+#define V3_VM_RESET    40
+
 #define V3_VM_FB_INPUT 257
 #define V3_VM_FB_QUERY 258
 
@@ -62,10 +64,9 @@ struct v3_guest_img {
     char name[128];
 } __attribute__((packed));
 
-typedef enum { PREALLOCATED=0,          // user space-allocated (e.g. hot remove)
+typedef enum { PREALLOCATED=0,         // user space-allocated (e.g. hot remove)
              REQUESTED,               // kernel will attempt allocation (anywhere)
              REQUESTED32,             // kernel will attempt allocation (<4GB)
-
 } v3_mem_region_type_t;
 
 struct v3_mem_region {
@@ -91,6 +92,16 @@ struct v3_mem_move_cmd{
     unsigned short     pcore_id;
 } __attribute__((packed));
 
+struct v3_reset_cmd {
+#define V3_RESET_VM_ALL    0
+#define V3_RESET_VM_HRT    1
+#define V3_RESET_VM_ROS    2
+#define V3_RESET_VM_CORE_RANGE  3
+    unsigned int type;
+    unsigned int first_core;  // for CORE_RANGE
+    unsigned int num_cores;   // for CORE_RANGE
+} __attribute__((packed));
+    
 struct v3_chkpt_info {
     char store[128];
     char url[256]; /* This might need to be bigger... */
@@ -156,7 +167,7 @@ struct proc_dir_entry *palacios_get_procdir(void);
 void  palacios_print_scoped(void *vm, int vcore, const char *fmt, ...);
 #define palacios_print(...) palacios_print_scoped(0,-1, __VA_ARGS__)
 // node_id=-1 => no node constraint
-void *palacios_allocate_pages(int num_pages, unsigned int alignment, int node_id, int constraints);
+void *palacios_allocate_pages(int num_pages, unsigned int alignment, int node_id, int (*filter_func)(void *paddr, void *filter_state), void *filter_state);
 void  palacios_free_pages(void *page_addr, int num_pages);
 void *palacios_alloc(unsigned int size);
 // node_id=-1 => no node constraint