-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
MODULE_LICENSE("GPL");
+int mod_allocs = 0;
+int mod_frees = 0;
+
static int v3_major_num = 0;
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");
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");
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);
+}
list_del(&(pfile->file_node));
+ kfree(pfile->path);
kfree(pfile);
return 0;
return 0;
}
+
+
+int palacios_file_deinit( void ) {
+ if (!list_empty(&(global_files))) {
+ printk("Error removing module with open files\n");
+ }
+
+ return 0;
+}
#define __PALACISO_FILE_H__
int palacios_file_init(void);
+int palacios_file_deinit(void);
#endif
return 0;
}
+
+int palacios_deinit_mm( void ) {
+ kfree(pool.bitmap);
+
+ return 0;
+}
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 );
}
+void palacios_deinit_stream() {
+ if (!list_empty(&(global_streams))) {
+ printk("Error removing module with open streams\n");
+ }
+}
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);
cdev_del(&(guest->cdev));
+ kfree(guest->img);
+ kfree(guest);
+
return 0;
}
+
+void * trace_malloc(size_t size, gfp_t flags);
+void trace_free(const void * objp);
+
+
struct v3_guest {
void * v3_ctx;