#include <linux/module.h>
+#include <linux/moduleparam.h>
#include <linux/errno.h>
#include <linux/percpu.h>
#include <linux/fs.h>
MODULE_LICENSE("GPL");
+// Module parameter
+int cpu_list[NR_CPUS] = {};
+int cpu_list_len = 0;
+module_param_array(cpu_list, int, &cpu_list_len, 0644);
+MODULE_PARM_DESC(cpu_list, "Comma-delimited list of CPUs that Palacios will run on");
+
int mod_allocs = 0;
int mod_frees = 0;
switch (ioctl) {
- case V3_START_GUEST:{
+ case V3_CREATE_GUEST:{
int vm_minor = 0;
struct v3_guest_img user_image;
struct v3_guest * guest = kmalloc(sizeof(struct v3_guest), GFP_KERNEL);
memset(guest, 0, sizeof(struct v3_guest));
- printk("Palacios: Starting V3 Guest...\n");
+ printk("Palacios: Creating V3 Guest...\n");
vm_minor = register_vm(guest);
strncpy(guest->name, user_image.name, 127);
- printk("Palacios: Launching VM\n");
-
INIT_LIST_HEAD(&(guest->exts));
- if (start_palacios_vm(guest) == -1) {
- printk("Palacios: Error starting guest\n");
+ if (create_palacios_vm(guest) == -1) {
+ printk("Palacios: Error creating guest\n");
return -EFAULT;
}
- return guest->vm_dev;
+ return vm_minor;
break;
}
- case V3_STOP_GUEST: {
+ case V3_FREE_GUEST: {
unsigned long vm_idx = arg;
struct v3_guest * guest = guest_map[vm_idx];
- printk("Stopping VM idx=%d\n", vm_idx);
- printk("Stopping VM (%s) (%p)\n", guest->name, guest);
+ printk("Freeing VM (%s) (%p)\n", guest->name, guest);
-
- if (irqs_disabled()) {
- printk("WHAT!!?? IRQs are disabled??\n");
- break;
- }
-
- stop_palacios_vm(guest);
+ free_palacios_vm(guest);
guest_map[vm_idx] = NULL;
break;
}
palacios_init_mm();
-
// Initialize Palacios
-
palacios_vmm_init();