From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Liu Zhiwei" <zhiwei_liu@linux.alibaba.com>,
"Alexandre Iooss" <erdnaxe@crans.org>,
"Chinmay Rath" <rathc@linux.ibm.com>,
qemu-arm@nongnu.org, "Peter Maydell" <peter.maydell@linaro.org>,
"Nicholas Piggin" <npiggin@gmail.com>,
"Ilya Leoshkevich" <iii@linux.ibm.com>,
"David Hildenbrand" <david@redhat.com>,
qemu-ppc@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
qemu-s390x@nongnu.org,
"Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
"Bastian Koppelmann" <kbastian@mail.uni-paderborn.de>,
"Helge Deller" <deller@gmx.de>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Stafford Horne" <shorne@gmail.com>,
"Mahmoud Mandour" <ma.mandourr@gmail.com>,
"Artyom Tarasenko" <atar4qemu@gmail.com>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Alistair Francis" <alistair.francis@wdc.com>,
"Laurent Vivier" <laurent@vivier.eu>,
"Weiwei Li" <liwei1518@gmail.com>,
"Daniel Henrique Barboza" <dbarboza@ventanamicro.com>,
"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
"Yoshinori Sato" <yoshinori.sato@nifty.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
"Aurelien Jarno" <aurelien@aurel32.net>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Thomas Huth" <thuth@redhat.com>,
"Max Filippov" <jcmvbkbc@gmail.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Jiaxun Yang" <jiaxun.yang@flygoat.com>,
"Michael Rolnik" <mrolnik@gmail.com>,
"Song Gao" <gaosong@loongson.cn>,
qemu-riscv@nongnu.org, "Aleksandar Rikalo" <arikalo@gmail.com>,
"Julian Ganz" <neither@nut.email>
Subject: [PATCH 31/35] tests: add test with interrupted memory accesses on rv64
Date: Mon, 27 Oct 2025 11:03:38 +0000 [thread overview]
Message-ID: <20251027110344.2289945-32-alex.bennee@linaro.org> (raw)
In-Reply-To: <20251027110344.2289945-1-alex.bennee@linaro.org>
From: Julian Ganz <neither@nut.email>
This test aims at catching API misbehaviour w.r.t. the interaction
between interrupts and memory accesses, such as the bug fixed in
27f347e6a1d269c533633c812321cabb249eada8
(accel/tcg: also suppress asynchronous IRQs for cpu_io_recompile)
Because the condition for triggering misbehaviour may not be
deterministic and the cross-section between memory accesses and
interrupt handlers may be small, we have to place our trust in large
numbers. Instead of guessing/trying an arbitrary, fixed loop-bound, we
decided to loop for a fixed amount of real-time. This avoids the test
running into a time-out on slower machines while enabling a high number
of possible interactions on faster machines.
The test program sends a single '.' per 1000000 loads/stores over the
serial. This output is not captured, but may be used by developers to
gauge the number of possible interactions.
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Signed-off-by: Julian Ganz <neither@nut.email>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/tcg/riscv64/Makefile.softmmu-target | 6 ++
tests/tcg/riscv64/interruptedmemory.S | 97 +++++++++++++++++++++++
2 files changed, 103 insertions(+)
create mode 100644 tests/tcg/riscv64/interruptedmemory.S
diff --git a/tests/tcg/riscv64/Makefile.softmmu-target b/tests/tcg/riscv64/Makefile.softmmu-target
index d9c0036eb4b..eb1ce6504a0 100644
--- a/tests/tcg/riscv64/Makefile.softmmu-target
+++ b/tests/tcg/riscv64/Makefile.softmmu-target
@@ -30,5 +30,11 @@ run-plugin-doubletrap: doubletrap
$(QEMU) -plugin ../plugins/libdiscons.so -d plugin -D $<.pout \
$(QEMU_OPTS)$<)
+EXTRA_RUNS += run-plugin-interruptedmemory
+run-plugin-interruptedmemory: interruptedmemory
+ $(call run-test, $<, \
+ $(QEMU) -plugin ../plugins/libdiscons.so -d plugin -D $<.pout \
+ $(QEMU_OPTS)$<)
+
# We don't currently support the multiarch system tests
undefine MULTIARCH_TESTS
diff --git a/tests/tcg/riscv64/interruptedmemory.S b/tests/tcg/riscv64/interruptedmemory.S
new file mode 100644
index 00000000000..cd9073ee314
--- /dev/null
+++ b/tests/tcg/riscv64/interruptedmemory.S
@@ -0,0 +1,97 @@
+ .option norvc
+
+ .text
+ .global _start
+_start:
+ # Set up trap vector
+ lla t0, trap
+ csrw mtvec, t0
+
+ # Set up timer
+ lui t1, 0x02004
+ sd zero, 0(t1) # MTIMECMP0
+
+ # Enable timer interrupts
+ li t0, 0x80
+ csrrs zero, mie, t0
+ csrrsi zero, mstatus, 0x8
+
+ # Set up UART
+ lui t1, 0x10000
+ li a0, 0x80 # DLAB=1
+ sb a0, 3(t1)
+ li a0, 1 # Full speed
+ sw a0, 0(t1)
+ li a0, 0x03 # 8N1, DLAB=0
+ sb a0, 3(t1)
+
+ # Run test for around 60s
+ call rtc_get
+ li t0, 30
+ slli t0, t0, 30 # Approx. 10e9 ns
+ add t0, t0, a0
+0:
+ # Tight loop with memory accesses
+ li a1, 1000000
+ la a2, semiargs
+1:
+ ld a0, 0(a2)
+ sd a0, 0(a2)
+ addi a1, a1, -1
+ bnez a1, 1b
+
+ li a0, '.'
+ call send_byte
+ call rtc_get
+ bltu a0, t0, 0b
+
+ li a0, '\n'
+ call send_byte
+
+ # Exit
+ li a0, 0
+ lla a1, semiargs
+ li t0, 0x20026 # ADP_Stopped_ApplicationExit
+ sd t0, 0(a1)
+ sd a0, 8(a1)
+ li a0, 0x20 # TARGET_SYS_EXIT_EXTENDED
+
+ # Semihosting call sequence
+ .balign 16
+ slli zero, zero, 0x1f
+ ebreak
+ srai zero, zero, 0x7
+
+ j .
+
+rtc_get:
+ # Get current time from the goldfish RTC
+ lui t3, 0x0101
+ lw a0, 0(t3)
+ lw t3, 4(t3)
+ slli t3, t3, 32
+ add a0, a0, t3
+ ret
+
+send_byte:
+ # Send a single byte over the serial
+ lui t3, 0x10000
+ lb a1, 5(t3)
+ andi a1, a1, 0x20
+ beqz a1, send_byte
+ sb a0, 0(t3)
+ ret
+
+ .balign 4
+trap:
+ lui t5, 0x0200c
+ ld t6, -0x8(t5) # MTIME
+ addi t6, t6, 100
+ lui t5, 0x02004
+ sd t6, 0(t5) # MTIMECMP
+ mret
+
+ .data
+ .balign 16
+semiargs:
+ .space 16
--
2.47.3
next prev parent reply other threads:[~2025-10-27 11:09 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-27 11:03 [PATCH 00/35] maintainer updates for 8.2 softfeeeze (ci, plugins, semihosting) pre-PR Alex Bennée
2025-10-27 11:03 ` [PATCH 01/35] ci: clean-up remaining bits of armhf builds Alex Bennée
2025-10-27 11:20 ` Philippe Mathieu-Daudé
2025-10-28 12:38 ` Richard Henderson
2025-10-27 11:03 ` [PATCH 02/35] scripts/ci/setup: regenerate yaml Alex Bennée
2025-10-29 8:13 ` Manos Pitsidianakis
2025-10-27 11:03 ` [PATCH 03/35] scripts/ci: move build-environment.yaml up a level Alex Bennée
2025-10-29 8:11 ` Manos Pitsidianakis
2025-10-27 11:03 ` [PATCH 04/35] scripts/ci: allow both Ubuntu or Debian to run upgrade Alex Bennée
2025-10-29 8:18 ` Manos Pitsidianakis
2025-10-27 11:03 ` [PATCH 05/35] tests/lcitool: generate a yaml file for the ppc64le runner Alex Bennée
2025-10-29 8:14 ` Manos Pitsidianakis
2025-10-27 11:03 ` [PATCH 06/35] scripts/ci: modify gitlab runner deb setup Alex Bennée
2025-10-29 8:10 ` Manos Pitsidianakis
2025-10-27 11:03 ` [PATCH 07/35] plugins: add types for callbacks related to certain discontinuities Alex Bennée
2025-10-27 11:03 ` [PATCH 08/35] plugins: add API for registering discontinuity callbacks Alex Bennée
2025-10-27 11:03 ` [PATCH 09/35] plugins: add hooks for new discontinuity related callbacks Alex Bennée
2025-10-27 11:03 ` [PATCH 10/35] contrib/plugins: add plugin showcasing new dicontinuity related API Alex Bennée
2025-10-27 11:03 ` [PATCH 11/35] target/alpha: call plugin trap callbacks Alex Bennée
2025-10-27 11:03 ` [PATCH 12/35] target/arm: " Alex Bennée
2025-10-27 11:03 ` [PATCH 13/35] target/avr: " Alex Bennée
2025-10-27 11:03 ` [PATCH 14/35] target/hppa: " Alex Bennée
2025-10-27 11:03 ` [PATCH 15/35] target/i386: " Alex Bennée
2025-10-27 11:03 ` [PATCH 16/35] target/loongarch: " Alex Bennée
2025-10-27 11:03 ` [PATCH 17/35] target/m68k: " Alex Bennée
2025-10-27 11:03 ` [PATCH 18/35] target/microblaze: " Alex Bennée
2025-10-27 11:03 ` [PATCH 19/35] target/mips: " Alex Bennée
2025-10-27 11:03 ` [PATCH 20/35] target/openrisc: " Alex Bennée
2025-10-27 11:03 ` [PATCH 21/35] target/ppc: " Alex Bennée
2025-10-27 11:03 ` [PATCH 22/35] target/riscv: " Alex Bennée
2025-10-27 11:03 ` [PATCH 23/35] target/rx: " Alex Bennée
2025-10-27 11:03 ` [PATCH 24/35] target/s390x: " Alex Bennée
2025-10-27 11:03 ` [PATCH 25/35] target/sh4: " Alex Bennée
2025-10-27 11:03 ` [PATCH 26/35] target/sparc: " Alex Bennée
2025-10-27 11:03 ` [PATCH 27/35] target/tricore: " Alex Bennée
2025-10-27 11:03 ` [PATCH 28/35] target/xtensa: " Alex Bennée
2025-10-27 11:03 ` [PATCH 29/35] tests: add plugin asserting correctness of discon event's to_pc Alex Bennée
2025-10-27 11:03 ` [PATCH 30/35] tests: add test for double-traps on rv64 Alex Bennée
2025-10-27 11:03 ` Alex Bennée [this message]
2025-10-27 11:03 ` [PATCH 32/35] plugins/core: add missing QEMU_DISABLE_CFI annotations Alex Bennée
2025-10-27 11:03 ` [PATCH 33/35] configs: drop SBSA_REF from minimal specification Alex Bennée
2025-10-27 11:03 ` [PATCH 34/35] gdbstub: Fix %s formatting Alex Bennée
2025-10-27 11:18 ` Philippe Mathieu-Daudé
2025-10-27 11:03 ` [PATCH 35/35] semihosting: Fix GDB File-I/O FLEN Alex Bennée
2025-10-27 11:29 ` [PATCH 00/35] maintainer updates for 10.2 softfeeeze (ci, plugins, semihosting) pre-PR Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251027110344.2289945-32-alex.bennee@linaro.org \
--to=alex.bennee@linaro.org \
--cc=alistair.francis@wdc.com \
--cc=arikalo@gmail.com \
--cc=atar4qemu@gmail.com \
--cc=aurelien@aurel32.net \
--cc=david@redhat.com \
--cc=dbarboza@ventanamicro.com \
--cc=deller@gmx.de \
--cc=edgar.iglesias@gmail.com \
--cc=eduardo@habkost.net \
--cc=erdnaxe@crans.org \
--cc=gaosong@loongson.cn \
--cc=iii@linux.ibm.com \
--cc=jcmvbkbc@gmail.com \
--cc=jiaxun.yang@flygoat.com \
--cc=kbastian@mail.uni-paderborn.de \
--cc=laurent@vivier.eu \
--cc=liwei1518@gmail.com \
--cc=ma.mandourr@gmail.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=mrolnik@gmail.com \
--cc=neither@nut.email \
--cc=npiggin@gmail.com \
--cc=palmer@dabbelt.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=pierrick.bouvier@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=rathc@linux.ibm.com \
--cc=richard.henderson@linaro.org \
--cc=shorne@gmail.com \
--cc=thuth@redhat.com \
--cc=yoshinori.sato@nifty.com \
--cc=zhiwei_liu@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).