diff mbox series

[1/2] KVM: arm64: selftest: Add the missing .guest_prepare()

Message ID 20231007124043.626-1-yuzenghui@huawei.com (mailing list archive)
State New, archived
Headers show
Series [1/2] KVM: arm64: selftest: Add the missing .guest_prepare() | expand

Commit Message

Zenghui Yu Oct. 7, 2023, 12:40 p.m. UTC
Running page_fault_test on a Cortex A72 fails with

Test: ro_memslot_no_syndrome_guest_cas
Testing guest mode: PA-bits:40,  VA-bits:48,  4K pages
Testing memory backing src type: anonymous
==== Test Assertion Failure ====
  aarch64/page_fault_test.c:117: guest_check_lse()
  pid=1944087 tid=1944087 errno=4 - Interrupted system call
     1	0x00000000004028b3: vcpu_run_loop at page_fault_test.c:682
     2	0x0000000000402d93: run_test at page_fault_test.c:731
     3	0x0000000000403957: for_each_guest_mode at guest_modes.c:100
     4	0x00000000004019f3: for_each_test_and_guest_mode at page_fault_test.c:1108
     5	 (inlined by) main at page_fault_test.c:1134
     6	0x0000ffff868e503b: ?? ??:0
     7	0x0000ffff868e5113: ?? ??:0
     8	0x0000000000401aaf: _start at ??:?
  guest_check_lse()

because we don't have a guest_prepare stage to check the presence of
FEAT_LSE and skip the related guest_cas testing, and we end-up failing in
GUEST_ASSERT(guest_check_lse()).

Add the missing .guest_prepare() where it's indeed required.

Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
---
 tools/testing/selftests/kvm/aarch64/page_fault_test.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Marc Zyngier Oct. 7, 2023, 4:05 p.m. UTC | #1
On Sat, 07 Oct 2023 13:40:42 +0100,
Zenghui Yu <yuzenghui@huawei.com> wrote:
> 
> Running page_fault_test on a Cortex A72 fails with
> 
> Test: ro_memslot_no_syndrome_guest_cas
> Testing guest mode: PA-bits:40,  VA-bits:48,  4K pages
> Testing memory backing src type: anonymous
> ==== Test Assertion Failure ====
>   aarch64/page_fault_test.c:117: guest_check_lse()
>   pid=1944087 tid=1944087 errno=4 - Interrupted system call
>      1	0x00000000004028b3: vcpu_run_loop at page_fault_test.c:682
>      2	0x0000000000402d93: run_test at page_fault_test.c:731
>      3	0x0000000000403957: for_each_guest_mode at guest_modes.c:100
>      4	0x00000000004019f3: for_each_test_and_guest_mode at page_fault_test.c:1108
>      5	 (inlined by) main at page_fault_test.c:1134
>      6	0x0000ffff868e503b: ?? ??:0
>      7	0x0000ffff868e5113: ?? ??:0
>      8	0x0000000000401aaf: _start at ??:?
>   guest_check_lse()
> 
> because we don't have a guest_prepare stage to check the presence of
> FEAT_LSE and skip the related guest_cas testing, and we end-up failing in
> GUEST_ASSERT(guest_check_lse()).
> 
> Add the missing .guest_prepare() where it's indeed required.
> 
> Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>

Acked-by: Marc Zyngier <maz@kernel.org>

	M.
Oliver Upton Oct. 7, 2023, 4:50 p.m. UTC | #2
On Sat, 7 Oct 2023 20:40:42 +0800, Zenghui Yu wrote:
> Running page_fault_test on a Cortex A72 fails with
> 
> Test: ro_memslot_no_syndrome_guest_cas
> Testing guest mode: PA-bits:40,  VA-bits:48,  4K pages
> Testing memory backing src type: anonymous
> ==== Test Assertion Failure ====
>   aarch64/page_fault_test.c:117: guest_check_lse()
>   pid=1944087 tid=1944087 errno=4 - Interrupted system call
>      1	0x00000000004028b3: vcpu_run_loop at page_fault_test.c:682
>      2	0x0000000000402d93: run_test at page_fault_test.c:731
>      3	0x0000000000403957: for_each_guest_mode at guest_modes.c:100
>      4	0x00000000004019f3: for_each_test_and_guest_mode at page_fault_test.c:1108
>      5	 (inlined by) main at page_fault_test.c:1134
>      6	0x0000ffff868e503b: ?? ??:0
>      7	0x0000ffff868e5113: ?? ??:0
>      8	0x0000000000401aaf: _start at ??:?
>   guest_check_lse()
> 
> [...]

Applied to kvmarm/next, thanks!

[1/2] KVM: arm64: selftest: Add the missing .guest_prepare()
      https://git.kernel.org/kvmarm/kvmarm/c/45c9683d5ce1
[2/2] KVM: arm64: selftest: Perform ISB before reading PAR_EL1
      https://git.kernel.org/kvmarm/kvmarm/c/a9c9864f3c2f

--
Best,
Oliver
diff mbox series

Patch

diff --git a/tools/testing/selftests/kvm/aarch64/page_fault_test.c b/tools/testing/selftests/kvm/aarch64/page_fault_test.c
index 47bb914ab2fa..eb5ead50c0b1 100644
--- a/tools/testing/selftests/kvm/aarch64/page_fault_test.c
+++ b/tools/testing/selftests/kvm/aarch64/page_fault_test.c
@@ -842,6 +842,7 @@  static void help(char *name)
 	.name			= SCAT2(ro_memslot_no_syndrome, _access),	\
 	.data_memslot_flags	= KVM_MEM_READONLY,				\
 	.pt_memslot_flags	= KVM_MEM_READONLY,				\
+	.guest_prepare		= { _PREPARE(_access) },			\
 	.guest_test		= _access,					\
 	.fail_vcpu_run_handler	= fail_vcpu_run_mmio_no_syndrome_handler,	\
 	.expected_events	= { .fail_vcpu_runs = 1 },			\
@@ -865,6 +866,7 @@  static void help(char *name)
 	.name			= SCAT2(ro_memslot_no_syn_and_dlog, _access),	\
 	.data_memslot_flags	= KVM_MEM_READONLY | KVM_MEM_LOG_DIRTY_PAGES,	\
 	.pt_memslot_flags	= KVM_MEM_READONLY | KVM_MEM_LOG_DIRTY_PAGES,	\
+	.guest_prepare		= { _PREPARE(_access) },			\
 	.guest_test		= _access,					\
 	.guest_test_check	= { _test_check },				\
 	.fail_vcpu_run_handler	= fail_vcpu_run_mmio_no_syndrome_handler,	\
@@ -894,6 +896,7 @@  static void help(char *name)
 	.data_memslot_flags	= KVM_MEM_READONLY,				\
 	.pt_memslot_flags	= KVM_MEM_READONLY,				\
 	.mem_mark_cmd		= CMD_HOLE_DATA | CMD_HOLE_PT,			\
+	.guest_prepare		= { _PREPARE(_access) },			\
 	.guest_test		= _access,					\
 	.uffd_data_handler	= _uffd_data_handler,				\
 	.uffd_pt_handler	= uffd_pt_handler,			\