For some tests we would like to force a guest exit to stress the context switching code. This adds a MMIO register that when accessed ignores any read or write, and implements a vm_exit() function for guests to call when they need to force an exit to the host. --- tools/testing/selftests/kvm/arm/guest-base.S | 6 ++++++ tools/testing/selftests/kvm/arm/guest-driver.c | 3 +++ tools/testing/selftests/kvm/arm/guest.h | 1 + tools/testing/selftests/kvm/arm/io_common.h | 2 ++ 4 files changed, 12 insertions(+) diff --git a/tools/testing/selftests/kvm/arm/guest-base.S b/tools/testing/selftests/kvm/arm/guest-base.S index a992554f..f5930fb 100644 --- a/tools/testing/selftests/kvm/arm/guest-base.S +++ b/tools/testing/selftests/kvm/arm/guest-base.S @@ -55,6 +55,12 @@ putc: strb r0, [r1] mov pc, lr +.globl vm_exit +vm_exit: + ldr r1, =IO_CTL_STUB + strb r0, [r1] + mov pc, lr + .section .text.extable b impossible b undef diff --git a/tools/testing/selftests/kvm/arm/guest-driver.c b/tools/testing/selftests/kvm/arm/guest-driver.c index efd7009..da03f28 100644 --- a/tools/testing/selftests/kvm/arm/guest-driver.c +++ b/tools/testing/selftests/kvm/arm/guest-driver.c @@ -210,6 +210,9 @@ static bool handle_mmio(struct kvm_run *kvm_run, printf("%c", data[0]); return false; + case IO_CTL_STUB: + return false; + case IO_CTL_EXIT: printf("VM shutting down status %i\n", data[0]); if (data[0] != 0) diff --git a/tools/testing/selftests/kvm/arm/guest.h b/tools/testing/selftests/kvm/arm/guest.h index e857440..40a2eb2 100644 --- a/tools/testing/selftests/kvm/arm/guest.h +++ b/tools/testing/selftests/kvm/arm/guest.h @@ -6,6 +6,7 @@ void ok(void); void fail(void); void putc(char c); +void vm_exit(void); extern int skip_undef, undef_count; static inline void print(const char *p) diff --git a/tools/testing/selftests/kvm/arm/io_common.h b/tools/testing/selftests/kvm/arm/io_common.h index d6c8c37..9ca4f31 100644 --- a/tools/testing/selftests/kvm/arm/io_common.h +++ b/tools/testing/selftests/kvm/arm/io_common.h @@ -7,5 +7,7 @@ #define IO_CTL_EXIT (0xf0000001) /* print a character */ #define IO_CTL_PRINT (0xf0000002) +/* Stub MMIO operation, will cause a guest exit */ +#define IO_CTL_STUB (0xf0000003) #endif /* __IO_DATA_H */ -- 1.7.9.5 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm