OSDN Git Service

KVM: arm64: selftests: Stop unnecessary test stage tracking of debug-exceptions
authorReiji Watanabe <reijiw@google.com>
Thu, 20 Oct 2022 05:41:58 +0000 (22:41 -0700)
committerMarc Zyngier <maz@kernel.org>
Thu, 10 Nov 2022 19:03:54 +0000 (19:03 +0000)
Currently, debug-exceptions test unnecessarily tracks some test stages
using GUEST_SYNC().  The code for it needs to be updated as test cases
are added or removed.  Stop doing the unnecessary stage tracking,
as they are not so useful and are a bit pain to maintain.

Signed-off-by: Reiji Watanabe <reijiw@google.com>
Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20221020054202.2119018-6-reijiw@google.com
tools/testing/selftests/kvm/aarch64/debug-exceptions.c

index 0c23702..040e4d7 100644 (file)
@@ -181,23 +181,17 @@ static volatile char write_data;
 
 static void guest_code(uint8_t bpn, uint8_t wpn)
 {
-       GUEST_SYNC(0);
-
        /* Software-breakpoint */
        reset_debug_state();
        asm volatile("sw_bp: brk #0");
        GUEST_ASSERT_EQ(sw_bp_addr, PC(sw_bp));
 
-       GUEST_SYNC(1);
-
        /* Hardware-breakpoint */
        reset_debug_state();
        install_hw_bp(bpn, PC(hw_bp));
        asm volatile("hw_bp: nop");
        GUEST_ASSERT_EQ(hw_bp_addr, PC(hw_bp));
 
-       GUEST_SYNC(2);
-
        /* Hardware-breakpoint + svc */
        reset_debug_state();
        install_hw_bp(bpn, PC(bp_svc));
@@ -205,8 +199,6 @@ static void guest_code(uint8_t bpn, uint8_t wpn)
        GUEST_ASSERT_EQ(hw_bp_addr, PC(bp_svc));
        GUEST_ASSERT_EQ(svc_addr, PC(bp_svc) + 4);
 
-       GUEST_SYNC(3);
-
        /* Hardware-breakpoint + software-breakpoint */
        reset_debug_state();
        install_hw_bp(bpn, PC(bp_brk));
@@ -214,8 +206,6 @@ static void guest_code(uint8_t bpn, uint8_t wpn)
        GUEST_ASSERT_EQ(sw_bp_addr, PC(bp_brk));
        GUEST_ASSERT_EQ(hw_bp_addr, PC(bp_brk));
 
-       GUEST_SYNC(4);
-
        /* Watchpoint */
        reset_debug_state();
        install_wp(wpn, PC(write_data));
@@ -223,8 +213,6 @@ static void guest_code(uint8_t bpn, uint8_t wpn)
        GUEST_ASSERT_EQ(write_data, 'x');
        GUEST_ASSERT_EQ(wp_data_addr, PC(write_data));
 
-       GUEST_SYNC(5);
-
        /* Single-step */
        reset_debug_state();
        install_ss();
@@ -238,8 +226,6 @@ static void guest_code(uint8_t bpn, uint8_t wpn)
        GUEST_ASSERT_EQ(ss_addr[1], PC(ss_start) + 4);
        GUEST_ASSERT_EQ(ss_addr[2], PC(ss_start) + 8);
 
-       GUEST_SYNC(6);
-
        /* OS Lock does not block software-breakpoint */
        reset_debug_state();
        enable_os_lock();
@@ -247,8 +233,6 @@ static void guest_code(uint8_t bpn, uint8_t wpn)
        asm volatile("sw_bp2: brk #0");
        GUEST_ASSERT_EQ(sw_bp_addr, PC(sw_bp2));
 
-       GUEST_SYNC(7);
-
        /* OS Lock blocking hardware-breakpoint */
        reset_debug_state();
        enable_os_lock();
@@ -257,8 +241,6 @@ static void guest_code(uint8_t bpn, uint8_t wpn)
        asm volatile("hw_bp2: nop");
        GUEST_ASSERT_EQ(hw_bp_addr, 0);
 
-       GUEST_SYNC(8);
-
        /* OS Lock blocking watchpoint */
        reset_debug_state();
        enable_os_lock();
@@ -269,8 +251,6 @@ static void guest_code(uint8_t bpn, uint8_t wpn)
        GUEST_ASSERT_EQ(write_data, 'x');
        GUEST_ASSERT_EQ(wp_data_addr, 0);
 
-       GUEST_SYNC(9);
-
        /* OS Lock blocking single-step */
        reset_debug_state();
        enable_os_lock();
@@ -370,7 +350,6 @@ static void test_guest_debug_exceptions(void)
        struct kvm_vcpu *vcpu;
        struct kvm_vm *vm;
        struct ucall uc;
-       int stage;
 
        vm = vm_create_with_one_vcpu(&vcpu, guest_code);
        ucall_init(vm, NULL);
@@ -391,23 +370,16 @@ static void test_guest_debug_exceptions(void)
 
        /* Run tests with breakpoint#0 and watchpoint#0. */
        vcpu_args_set(vcpu, 2, 0, 0);
-       for (stage = 0; stage < 11; stage++) {
-               vcpu_run(vcpu);
 
-               switch (get_ucall(vcpu, &uc)) {
-               case UCALL_SYNC:
-                       TEST_ASSERT(uc.args[1] == stage,
-                               "Stage %d: Unexpected sync ucall, got %lx",
-                               stage, (ulong)uc.args[1]);
-                       break;
-               case UCALL_ABORT:
-                       REPORT_GUEST_ASSERT_2(uc, "values: %#lx, %#lx");
-                       break;
-               case UCALL_DONE:
-                       goto done;
-               default:
-                       TEST_FAIL("Unknown ucall %lu", uc.cmd);
-               }
+       vcpu_run(vcpu);
+       switch (get_ucall(vcpu, &uc)) {
+       case UCALL_ABORT:
+               REPORT_GUEST_ASSERT_2(uc, "values: %#lx, %#lx");
+               break;
+       case UCALL_DONE:
+               goto done;
+       default:
+               TEST_FAIL("Unknown ucall %lu", uc.cmd);
        }
 
 done: