From: Jack Lange Date: Wed, 4 May 2011 22:12:18 +0000 (-0500) Subject: bind launch thread to local core X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=059b4180c355172ab9ec55fd81996d32ce696d05;p=palacios.git bind launch thread to local core --- diff --git a/linux_module/palacios-dev.c b/linux_module/palacios-dev.c index 60f01ec..f019e18 100644 --- a/linux_module/palacios-dev.c +++ b/linux_module/palacios-dev.c @@ -138,7 +138,25 @@ static long v3_dev_ioctl(struct file * filp, init_completion(&(guest->start_done)); init_completion(&(guest->thread_done)); - kthread_run(start_palacios_vm, guest, guest->name); + { + struct task_struct * launch_thread = NULL; + // At some point we're going to want to allow the user to specify a CPU mask + // But for now, well just launch from the local core, and rely on the global cpu mask + + preempt_disable(); + launch_thread = kthread_create(start_palacios_vm, guest, guest->name); + + if (IS_ERR(launch_thread)) { + preempt_enable(); + printk("Palacios error creating launch thread for vm (%s)\n", guest->name); + return -EFAULT; + } + + kthread_bind(launch_thread, smp_processor_id()); + preempt_enable(); + + wake_up_process(launch_thread); + } wait_for_completion(&(guest->start_done));