From: Jack Lange Date: Fri, 18 Mar 2011 20:42:33 +0000 (-0500) Subject: more linux changes X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=c79291850ac3605c924a2c5e9617028038bb8f63;p=palacios.releases.git more linux changes --- diff --git a/Makefile b/Makefile index 5c7942a..360dbd6 100644 --- 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 diff --git a/linux_module/palacios-dev.c b/linux_module/palacios-dev.c index 8b30352..a135be9 100644 --- a/linux_module/palacios-dev.c +++ b/linux_module/palacios-dev.c @@ -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); +} diff --git a/linux_module/palacios-file.c b/linux_module/palacios-file.c index d26fcb2..ed0b410 100644 --- a/linux_module/palacios-file.c +++ b/linux_module/palacios-file.c @@ -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; +} diff --git a/linux_module/palacios-file.h b/linux_module/palacios-file.h index 7e2180c..280585a 100644 --- a/linux_module/palacios-file.h +++ b/linux_module/palacios-file.h @@ -2,5 +2,6 @@ #define __PALACISO_FILE_H__ int palacios_file_init(void); +int palacios_file_deinit(void); #endif diff --git a/linux_module/palacios-mm.c b/linux_module/palacios-mm.c index a6505e6..1d750db 100644 --- a/linux_module/palacios-mm.c +++ b/linux_module/palacios-mm.c @@ -192,3 +192,9 @@ int palacios_init_mm( void ) { return 0; } + +int palacios_deinit_mm( void ) { + kfree(pool.bitmap); + + return 0; +} diff --git a/linux_module/palacios-mm.h b/linux_module/palacios-mm.h index 940467c..abc8857 100644 --- a/linux_module/palacios-mm.h +++ b/linux_module/palacios-mm.h @@ -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 ); diff --git a/linux_module/palacios-stream.c b/linux_module/palacios-stream.c index 815a151..f49b668 100644 --- a/linux_module/palacios-stream.c +++ b/linux_module/palacios-stream.c @@ -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"); + } +} diff --git a/linux_module/palacios-stream.h b/linux_module/palacios-stream.h index 7e9279f..d0bbe7e 100644 --- a/linux_module/palacios-stream.h +++ b/linux_module/palacios-stream.h @@ -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); diff --git a/linux_module/palacios-vm.c b/linux_module/palacios-vm.c index 1d8bfe0..b025649 100644 --- a/linux_module/palacios-vm.c +++ b/linux_module/palacios-vm.c @@ -172,5 +172,8 @@ int stop_palacios_vm(struct v3_guest * guest) { cdev_del(&(guest->cdev)); + kfree(guest->img); + kfree(guest); + return 0; } diff --git a/linux_module/palacios.h b/linux_module/palacios.h index 806e1e7..6c85ad8 100644 --- a/linux_module/palacios.h +++ b/linux_module/palacios.h @@ -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;