X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_host_events.c;h=4b9dcbec94263d10c12a976e861d0f8b194e6f41;hb=774bac9fbb03ef8bf7c2ca2c79a8b87c9bc4c526;hp=28543f79a740f274c84e3d51a23b5958499f956a;hpb=9a32111c4074aafd55cd9590a24bd5c751a6fe61;p=palacios.git diff --git a/palacios/src/palacios/vmm_host_events.c b/palacios/src/palacios/vmm_host_events.c index 28543f7..4b9dcbe 100644 --- a/palacios/src/palacios/vmm_host_events.c +++ b/palacios/src/palacios/vmm_host_events.c @@ -29,6 +29,7 @@ int v3_init_host_events(struct v3_vm_info * vm) { INIT_LIST_HEAD(&(host_evts->timer_events)); INIT_LIST_HEAD(&(host_evts->serial_events)); INIT_LIST_HEAD(&(host_evts->console_events)); + INIT_LIST_HEAD(&(host_evts->debug_events)); return 0; } @@ -66,6 +67,12 @@ int v3_deinit_host_events(struct v3_vm_info * vm) { V3_Free(hook); } + + list_for_each_entry_safe(hook, tmp, &(host_evts->debug_events), link) { + list_del(&(hook->link)); + V3_Free(hook); + } + return 0; } @@ -80,7 +87,7 @@ int v3_hook_host_event(struct v3_vm_info * vm, hook = (struct v3_host_event_hook *)V3_Malloc(sizeof(struct v3_host_event_hook)); if (hook == NULL) { - PrintError("Could not allocate event hook\n"); + PrintError(vm, VCORE_NONE,"Could not allocate event hook\n"); return -1; } @@ -103,6 +110,9 @@ int v3_hook_host_event(struct v3_vm_info * vm, case HOST_CONSOLE_EVT: list_add(&(hook->link), &(host_evts->console_events)); break; + case HOST_DEBUG_EVT: + list_add(&(hook->link), &(host_evts->debug_events)); + break; } return 0; @@ -218,3 +228,26 @@ int v3_deliver_console_event(struct v3_vm_info * vm, return 0; } + + +int v3_deliver_debug_event(struct v3_vm_info * vm, + struct v3_debug_event * evt) { + struct v3_host_events * host_evts = NULL; + struct v3_host_event_hook * hook = NULL; + + + host_evts = &(vm->host_event_hooks); + + if (vm->run_state != VM_RUNNING) { + return -1; + } + + list_for_each_entry(hook, &(host_evts->debug_events), link) { + if (hook->cb.debug_handler(vm, evt, hook->private_data) == -1) { + return -1; + } + } + + return 0; +} +