--- test.c 2018-05-04 13:47:26.000000000 +0200 +++ test-io.c 2020-03-04 10:26:06.812886694 +0100 @@ -159,6 +159,20 @@ printf("EDX: %llx\n", regs.rdx); return 1; + case KVM_EXIT_IO: + if ((r->io.direction == KVM_EXIT_IO_OUT) && (r->io.port == 0xe9)) { + char *p = (char *)r; + + if (r->io.size != 1) { + fprintf(stderr, "Bad I/O of size %d!!!\n", r->io.size); + } else { + printf("%c", *(p + r->io.data_offset)); + fflush(stdout); + } + } else { + fprintf(stderr, "Bad I/O to port %d!!!\n", r->io.port); + } + break; default: fprintf(stderr, "VM Exit reason: %d, expected KVM_EXIT_HLT (%d)\n", r->exit_reason, KVM_EXIT_HLT);