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.


more linux changes
Jack Lange [Fri, 18 Mar 2011 20:42:33 +0000 (15:42 -0500)]
Makefile
linux_module/palacios-dev.c
linux_module/palacios-file.c
linux_module/palacios-file.h
linux_module/palacios-mm.c
linux_module/palacios-mm.h
linux_module/palacios-stream.c
linux_module/palacios-stream.h
linux_module/palacios-vm.c
linux_module/palacios.h

index 5c7942a..360dbd6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -615,7 +615,7 @@ palacios: libv3vee.a
 
 
 
-linux_module/v3vee.ko: linux_module/*.c libv3vee.a
+linux_module/v3vee.ko: linux_module/*.c linux_module/*.h libv3vee.a
        cd linux_module/ && make CONFIG_LINUX_KERN=$(CONFIG_LINUX_KERN)
        cp linux_module/v3vee.ko v3vee.ko
 
index 8b30352..a135be9 100644 (file)
@@ -27,6 +27,9 @@
 
 MODULE_LICENSE("GPL");
 
+int mod_allocs = 0;
+int mod_frees = 0;
+
 
 static int v3_major_num = 0;
 
@@ -76,9 +79,9 @@ static long v3_dev_ioctl(struct file * filp,
 
     switch (ioctl) {
        case V3_START_GUEST:{
+           int vm_minor = 0;
            struct v3_guest_img user_image;
            struct v3_guest * guest = kmalloc(sizeof(struct v3_guest), GFP_KERNEL);
-           int vm_minor = 0;
 
            if (IS_ERR(guest)) {
                printk("Error allocating Kernel guest_image\n");
@@ -251,6 +254,11 @@ static void __exit v3_exit(void) {
     extern u32 mallocs;
     extern u32 frees;
 
+
+    // should probably try to stop any guests
+
+
+
     dev_t dev = MKDEV(v3_major_num, MAX_VMS + 1);
 
     printk("Removing V3 Control device\n");
@@ -267,9 +275,34 @@ static void __exit v3_exit(void) {
 
     device_destroy(v3_class, dev);
     class_destroy(v3_class);
+
+
+    palacios_file_deinit();
+    palacios_deinit_stream();
+
+    palacios_deinit_mm();
+
+    printk("Palacios Module Mallocs = %d, Frees = %d\n", mod_allocs, mod_frees);
 }
 
 
 
 module_init(v3_init);
 module_exit(v3_exit);
+
+
+
+void * trace_malloc(size_t size, gfp_t flags) {
+    void * addr = NULL;
+
+    mod_allocs++;
+    addr = kmalloc(size, flags);
+
+    return addr;
+}
+
+
+void trace_free(const void * objp) {
+    mod_frees++;
+    kfree(objp);
+}
index d26fcb2..ed0b410 100644 (file)
@@ -76,6 +76,7 @@ static int palacios_file_close(void * file_ptr) {
     
     list_del(&(pfile->file_node));
 
+    kfree(pfile->path);    
     kfree(pfile);
 
     return 0;
@@ -156,3 +157,12 @@ int palacios_file_init( void ) {
 
     return 0;
 }
+
+
+int palacios_file_deinit( void ) {
+    if (!list_empty(&(global_files))) {
+       printk("Error removing module with open files\n");
+    }
+
+    return 0;
+}
index 7e2180c..280585a 100644 (file)
@@ -2,5 +2,6 @@
 #define __PALACISO_FILE_H__
 
 int palacios_file_init(void);
+int palacios_file_deinit(void);
 
 #endif
index a6505e6..1d750db 100644 (file)
@@ -192,3 +192,9 @@ int palacios_init_mm( void ) {
 
     return 0;
 }
+
+int palacios_deinit_mm( void ) {
+    kfree(pool.bitmap);
+    
+    return 0;
+}
index 940467c..abc8857 100644 (file)
@@ -15,6 +15,7 @@ void free_palacios_pgs(uintptr_t base_addr, u64 num_pages);
 int add_palacios_memory(uintptr_t base_addr, u64 num_pages);
 int remove_palacios_memory(uintptr_t base_addr, u64 num_pages);
 int palacios_init_mm( void );
+int palacios_deinit_mm( void );
 
 
 
index 815a151..f49b668 100644 (file)
@@ -120,3 +120,8 @@ void palacios_init_stream() {
 }
 
 
+void palacios_deinit_stream() {
+    if (!list_empty(&(global_streams))) {
+       printk("Error removing module with open streams\n");
+    }
+}
index 7e9279f..d0bbe7e 100644 (file)
@@ -27,6 +27,7 @@ struct stream_buffer {
 
 
 void palacios_init_stream(void);
+void palacios_deinit_stream(void);
 int stream_enqueue(struct stream_buffer * stream, char * buf, int len);
 int stream_dequeue(struct stream_buffer * stream, char * buf, int len);
 int stream_datalen(struct stream_buffer * stream);
index 1d8bfe0..b025649 100644 (file)
@@ -172,5 +172,8 @@ int stop_palacios_vm(struct v3_guest * guest) {
 
     cdev_del(&(guest->cdev));
 
+    kfree(guest->img);
+    kfree(guest);
+
     return 0;
 }
index 806e1e7..6c85ad8 100644 (file)
@@ -30,6 +30,11 @@ struct v3_mem_region {
 
 
 
+
+void * trace_malloc(size_t size, gfp_t flags);
+void trace_free(const void * objp);
+
+
 struct v3_guest {
     void * v3_ctx;