From nobody Tue Dec 2 01:24:49 2025 Received: from out-185.mta0.migadu.com (out-185.mta0.migadu.com [91.218.175.185]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9CA61301466 for ; Fri, 21 Nov 2025 19:32:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.185 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763753553; cv=none; b=Xzxmpban0MUOePn7RgNI+SeNtJugOuSbQO9mnBOT6I8lKyUADZKdbvtvm6wvxSs5fl6H0Eeu6X3RWNE4yR1SwGftHDxgNs03Ye5DxESHxUGD/Kds69lEWOmxcYMxBgpcF+52VuXUpZbvZqNnVRnyHnKTczMWvdJUZIkZ5vF4Hw8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763753553; c=relaxed/simple; bh=yWgRTXXeJZU1v0pITpCzPJB/oUhQrczlGMOlkF7tLF4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IBlAvXE5Rczzxwk721nLCPZJdnkAsC49mXXhFtErjQUKil/AvaYVgR4702L4rKXxgTzA5CdsamScDL3y8xwYbNE+aeDQ5lHzy5mvFXstKsIV+M3LtvjFqAZ4A+ZpFXYQqAMFZu6NLhLYinelsrTUcfK3ThznI4RP1EkjrLEahL8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=PuWJ0Tt+; arc=none smtp.client-ip=91.218.175.185 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="PuWJ0Tt+" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1763753547; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9C9XfX+UY14sw/5vUVA6fyLzyZRFAVFX0tjWpm79IXc=; b=PuWJ0Tt+28oCCxCxw/ndtUo1oAvd/scT4LiQajCzrPArGxriJxRl0CWhmcKxIkfuYHra9D 5KOSUF3S0ySGrrcf/FJATAo7gNtaEtvj4RaTxLOMGKSLRGH7PgOcQC1tI2mOPZbKyXXSDf NBOc/jjrUpnN8jhbSzpFUpl64awBaaE= From: Yosry Ahmed To: Sean Christopherson Cc: Paolo Bonzini , Ken Hofsass , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed Subject: [PATCH 2/3] KVM: selftests: Use TEST_ASSERT_EQ() in debug_regs Date: Fri, 21 Nov 2025 19:32:03 +0000 Message-ID: <20251121193204.952988-3-yosry.ahmed@linux.dev> In-Reply-To: <20251121193204.952988-1-yosry.ahmed@linux.dev> References: <20251121193204.952988-1-yosry.ahmed@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" The test currently uses calls of TEST_ASSERT() that combine all checked conditions for every test case. This makes it unclear which value is incorrect without visually parsing the output. The only useful content in the error message is the test case, especially for test cases running in loops where even the line number of the failed assertion does not provide full information. Switch to using TEST_ASSERT_EQ(), and print the test case currently being asserted to keep the information intact. The test output is a lot more verbose now, but debuggability trumps conciseness (right?). Signed-off-by: Yosry Ahmed --- tools/testing/selftests/kvm/x86/debug_regs.c | 66 +++++++------------- 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/tools/testing/selftests/kvm/x86/debug_regs.c b/tools/testing/s= elftests/kvm/x86/debug_regs.c index 2d814c1d1dc4..563e52217cdd 100644 --- a/tools/testing/selftests/kvm/x86/debug_regs.c +++ b/tools/testing/selftests/kvm/x86/debug_regs.c @@ -104,20 +104,19 @@ int main(void) run =3D vcpu->run; =20 /* Test software BPs - int3 */ + pr_info("Testing INT3\n"); memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP; vcpu_guest_debug_set(vcpu, &debug); vcpu_run(vcpu); - TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && - run->debug.arch.exception =3D=3D BP_VECTOR && - run->debug.arch.pc =3D=3D CAST_TO_RIP(sw_bp), - "INT3: exit %d exception %d rip 0x%llx (should be 0x%llx)", - run->exit_reason, run->debug.arch.exception, - run->debug.arch.pc, CAST_TO_RIP(sw_bp)); + TEST_ASSERT_EQ(run->exit_reason, KVM_EXIT_DEBUG); + TEST_ASSERT_EQ(run->debug.arch.exception, BP_VECTOR); + TEST_ASSERT_EQ(run->debug.arch.pc, CAST_TO_RIP(sw_bp)); vcpu_skip_insn(vcpu, 1); =20 /* Test instruction HW BP over DR[0-3] */ for (i =3D 0; i < 4; i++) { + pr_info("Testing INS_HW_BP DR[%d]\n", i); memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP; debug.arch.debugreg[i] =3D CAST_TO_RIP(hw_bp); @@ -125,21 +124,17 @@ int main(void) vcpu_guest_debug_set(vcpu, &debug); vcpu_run(vcpu); target_dr6 =3D 0xffff0ff0 | (1UL << i); - TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && - run->debug.arch.exception =3D=3D DB_VECTOR && - run->debug.arch.pc =3D=3D CAST_TO_RIP(hw_bp) && - run->debug.arch.dr6 =3D=3D target_dr6, - "INS_HW_BP (DR%d): exit %d exception %d rip 0x%llx " - "(should be 0x%llx) dr6 0x%llx (should be 0x%llx)", - i, run->exit_reason, run->debug.arch.exception, - run->debug.arch.pc, CAST_TO_RIP(hw_bp), - run->debug.arch.dr6, target_dr6); + TEST_ASSERT_EQ(run->exit_reason, KVM_EXIT_DEBUG); + TEST_ASSERT_EQ(run->debug.arch.exception, DB_VECTOR); + TEST_ASSERT_EQ(run->debug.arch.pc, CAST_TO_RIP(hw_bp)); + TEST_ASSERT_EQ(run->debug.arch.dr6, target_dr6); } /* Skip "nop" */ vcpu_skip_insn(vcpu, 1); =20 /* Test data access HW BP over DR[0-3] */ for (i =3D 0; i < 4; i++) { + pr_info("Testing DATA_HW_BP DR[%d]\n", i); memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP; debug.arch.debugreg[i] =3D CAST_TO_RIP(guest_value); @@ -148,15 +143,10 @@ int main(void) vcpu_guest_debug_set(vcpu, &debug); vcpu_run(vcpu); target_dr6 =3D 0xffff0ff0 | (1UL << i); - TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && - run->debug.arch.exception =3D=3D DB_VECTOR && - run->debug.arch.pc =3D=3D CAST_TO_RIP(write_data) && - run->debug.arch.dr6 =3D=3D target_dr6, - "DATA_HW_BP (DR%d): exit %d exception %d rip 0x%llx " - "(should be 0x%llx) dr6 0x%llx (should be 0x%llx)", - i, run->exit_reason, run->debug.arch.exception, - run->debug.arch.pc, CAST_TO_RIP(write_data), - run->debug.arch.dr6, target_dr6); + TEST_ASSERT_EQ(run->exit_reason, KVM_EXIT_DEBUG); + TEST_ASSERT_EQ(run->debug.arch.exception, DB_VECTOR); + TEST_ASSERT_EQ(run->debug.arch.pc, CAST_TO_RIP(write_data)); + TEST_ASSERT_EQ(run->debug.arch.dr6, target_dr6); /* Rollback the 4-bytes "mov" */ vcpu_skip_insn(vcpu, -7); } @@ -167,6 +157,7 @@ int main(void) target_rip =3D CAST_TO_RIP(ss_start); target_dr6 =3D 0xffff4ff0ULL; for (i =3D 0; i < ARRAY_SIZE(ss_size); i++) { + pr_info("Testing SINGLE_STEP (%d)\n", i); target_rip +=3D ss_size[i]; memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP | @@ -174,33 +165,24 @@ int main(void) debug.arch.debugreg[7] =3D 0x00000400; vcpu_guest_debug_set(vcpu, &debug); vcpu_run(vcpu); - TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && - run->debug.arch.exception =3D=3D DB_VECTOR && - run->debug.arch.pc =3D=3D target_rip && - run->debug.arch.dr6 =3D=3D target_dr6, - "SINGLE_STEP[%d]: exit %d exception %d rip 0x%llx " - "(should be 0x%llx) dr6 0x%llx (should be 0x%llx)", - i, run->exit_reason, run->debug.arch.exception, - run->debug.arch.pc, target_rip, run->debug.arch.dr6, - target_dr6); + TEST_ASSERT_EQ(run->exit_reason, KVM_EXIT_DEBUG); + TEST_ASSERT_EQ(run->debug.arch.exception, DB_VECTOR); + TEST_ASSERT_EQ(run->debug.arch.pc, target_rip); + TEST_ASSERT_EQ(run->debug.arch.dr6, target_dr6); } =20 /* Finally test global disable */ + pr_info("Testing DR7.GD\n"); memset(&debug, 0, sizeof(debug)); debug.control =3D KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP; debug.arch.debugreg[7] =3D 0x400 | DR7_GD; vcpu_guest_debug_set(vcpu, &debug); vcpu_run(vcpu); target_dr6 =3D 0xffff0ff0 | DR6_BD; - TEST_ASSERT(run->exit_reason =3D=3D KVM_EXIT_DEBUG && - run->debug.arch.exception =3D=3D DB_VECTOR && - run->debug.arch.pc =3D=3D CAST_TO_RIP(bd_start) && - run->debug.arch.dr6 =3D=3D target_dr6, - "DR7.GD: exit %d exception %d rip 0x%llx " - "(should be 0x%llx) dr6 0x%llx (should be 0x%llx)", - run->exit_reason, run->debug.arch.exception, - run->debug.arch.pc, target_rip, run->debug.arch.dr6, - target_dr6); + TEST_ASSERT_EQ(run->exit_reason, KVM_EXIT_DEBUG); + TEST_ASSERT_EQ(run->debug.arch.exception, DB_VECTOR); + TEST_ASSERT_EQ(run->debug.arch.pc, CAST_TO_RIP(bd_start)); + TEST_ASSERT_EQ(run->debug.arch.dr6, target_dr6); =20 /* Disable all debug controls, run to the end */ memset(&debug, 0, sizeof(debug)); --=20 2.52.0.rc2.455.g230fcf2819-goog