X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm.h;h=dad24f6be7a81e2654149ef31db9085f40796dae;hb=09a7d3811df9df65346e36419f553a38c8c45c72;hp=f37ad83f9bc6e660b3474c1721251077e22934fc;hpb=e531d13b53ac8b32bca19131dd7a2824cb17eff9;p=palacios.git diff --git a/palacios/include/palacios/vmm.h b/palacios/include/palacios/vmm.h index f37ad83..dad24f6 100644 --- a/palacios/include/palacios/vmm.h +++ b/palacios/include/palacios/vmm.h @@ -160,6 +160,9 @@ struct guest_info; } while (0) + + + #define V3_Hook_Interrupt(vm, irq) ({ \ int ret = 0; \ extern struct v3_os_hooks * os_hooks; \ @@ -188,6 +191,17 @@ struct guest_info; } while (0) + +#define V3_CREATE_THREAD_ON_CPU(cpu, fn, arg, name) ({ \ + void * thread = NULL; \ + extern struct v3_os_hooks * os_hooks; \ + if ((os_hooks) && (os_hooks)->start_thread_on_cpu) { \ + thread = (os_hooks)->start_thread_on_cpu(cpu, fn, arg, name); \ + } \ + thread; \ + }) + + #define V3_ACK_IRQ(irq) \ do { \ extern struct v3_os_hooks * os_hooks; \ @@ -197,21 +211,30 @@ struct guest_info; } while (0) - - +#define V3_Reparent_Threadd() \ + do { \ + if((os_hooks) && (os_hooks)->reparent_threaded) { \ + (os_hooks)->reparent_threaded(); \ + } \ + } while(0) /* ** */ #define V3_ASSERT(x) \ do { \ + extern struct v3_os_hooks * os_hooks; \ if (!(x)) { \ PrintDebug("Failed assertion in %s: %s at %s, line %d, RA=%lx\n", \ __func__, #x, __FILE__, __LINE__, \ (ulong_t) __builtin_return_address(0)); \ - while(1); \ + while(1){ \ + if ((os_hooks) && (os_hooks)->yield_cpu) { \ + (os_hooks)->yield_cpu(); \ + } \ + } \ } \ } while(0) \ - + @@ -261,7 +284,6 @@ struct v3_os_hooks { void *(*vaddr_to_paddr)(void *addr); int (*hook_interrupt)(struct v3_vm_info * vm, unsigned int irq); - int (*ack_irq)(int irq); unsigned int (*get_cpu_khz)(void); @@ -279,7 +301,7 @@ struct v3_os_hooks { 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); - + void (*reparent_threadd)(void); }; @@ -301,8 +323,9 @@ struct v3_interrupt { void Init_V3(struct v3_os_hooks * hooks, int num_cpus); +struct v3_vm_info * v3_create_vm(void * cfg, void * priv_data); int v3_start_vm(struct v3_vm_info * vm, unsigned int cpu_mask); -struct v3_vm_info * v3_create_vm(void * cfg); + int v3_deliver_irq(struct v3_vm_info * vm, struct v3_interrupt * intr);