Listing 2. I/O Callbacks (used in launcher.c) static int my_inb(void *opaque, int16_t addr, uint8_t *data) { puts ("inb"); return 0; } static int my_inw(void *opaque, uint16_t addr, uint16_t *data) { puts ("inw"); return 0; } static int my_inl(void *opaque, uint16_t addr, uint32_t *data) { puts ("inl"); return 0; } static int my_outb(void *opaque, uint16_t addr, uint8_t data) { puts ("outb"); return 0; } static int my_outw(void *opaque, uint16_t addr, uint16_t data) { puts ("outw"); return 0; } static int my_outl (void *opaque, uint16_t addr, uint32_t data) { puts ("outl"); return 0; } static int my_pre_kvm_run(void *opaque, int vcpu) { return 0; } ... and similar for my_mmio_read, my_mmio_write, my_debug, my_halt, my_shutdown, my_io_window, my_try_push_interrupts, my_try_push_nmi, my_post_kvm_run, and my_tpr_access static struct kvm_callbacks my_callbacks = { .inb = my_inb, .inw = my_inw, .inl = my_inl, .outb = my_outb, .outw = my_outw, .outl = my_outl, .mmio_read = my_mmio_read, .mmio_write = my_mmio_write, .debug = my_debug, .halt = my_halt, .io_window = my_io_window, .try_push_interrupts = my_try_push_interrupts, .try_push_nmi = my_try_push_nmi, // added in kvm-77 .post_kvm_run = my_post_kvm_run, .pre_kvm_run = my_pre_kvm_run, .tpr_access = my_tpr_access };