From: Lei Xia Date: Thu, 21 Apr 2011 14:34:48 +0000 (-0500) Subject: add thread sleep and wakeup to host os hooks X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=a996f792cb40f3451085f9951dd4462d188c84b8;p=palacios-OLD.git add thread sleep and wakeup to host os hooks --- diff --git a/palacios/include/palacios/vmm.h b/palacios/include/palacios/vmm.h index ae4421c..5cb1db1 100644 --- a/palacios/include/palacios/vmm.h +++ b/palacios/include/palacios/vmm.h @@ -184,13 +184,33 @@ struct guest_info; #ifdef CONFIG_MULTITHREAD_OS -#define V3_CREATE_THREAD(fn, arg, name) \ - do { \ +#define V3_CREATE_THREAD(fn, arg, name) ({ \ + void * thread = NULL; \ extern struct v3_os_hooks * os_hooks; \ if ((os_hooks) && (os_hooks)->start_kernel_thread) { \ - (os_hooks)->start_kernel_thread(fn, arg, name); \ + thread = (os_hooks)->start_kernel_thread(fn, arg, name); \ } \ - } while (0) + thread; \ + }) + + +#define V3_THREAD_SLEEP() \ + do{ \ + extern struct v3_os_hooks * os_hooks; \ + if ((os_hooks) && (os_hooks)->kernel_thread_sleep) { \ + (os_hooks)->kernel_thread_sleep(); \ + } \ + }while(0) + + +#define V3_THREAD_WAKEUP(thread) \ + do{ \ + extern struct v3_os_hooks * os_hooks; \ + if ((os_hooks) && (os_hooks)->kernel_thread_wakeup) { \ + (os_hooks)->kernel_thread_wakeup(thread); \ + } \ + }while(0) + #define V3_Call_On_CPU(cpu, fn, arg) \ @@ -298,7 +318,9 @@ struct v3_os_hooks { - void (*start_kernel_thread)(int (*fn)(void * arg), void * arg, char * thread_name); + void * (*start_kernel_thread)(int (*fn)(void * arg), void * arg, char * thread_name); + void (*kernel_thread_sleep)(void); + void (*kernel_thread_wakeup)(void * thread); void (*interrupt_cpu)(struct v3_vm_info * vm, int logical_cpu, int vector); void (*call_on_cpu)(int logical_cpu, void (*fn)(void * arg), void * arg); void * (*start_thread_on_cpu)(int cpu_id, int (*fn)(void * arg), void * arg, char * thread_name); diff --git a/palacios/src/devices/Kconfig b/palacios/src/devices/Kconfig index eb15aca..be4de33 100644 --- a/palacios/src/devices/Kconfig +++ b/palacios/src/devices/Kconfig @@ -156,7 +156,7 @@ config LINUX_VIRTIO_VNET default n depends on PCI && EXPERIMENTAL && VNET help - Enable the Virtio VNET interface + Enable the Virtio VNET interface for Control VM config DEBUG_LINUX_VIRTIO_VNET bool "Virtio VNET Interface Debugging" @@ -167,11 +167,11 @@ config DEBUG_LINUX_VIRTIO_VNET config VNET_NIC - bool "Enable VNET VIrtio NIC Device" + bool "Enable VNET Backend Device" default n depends on PCI && EXPERIMENTAL && VNET help - Enable the VNET Virtio backend device + Enable the VNET backend device config DEBUG_VNET_NIC bool "VNET NIC Device Debugging"