From: "Alex Bennée" <alex.bennee@linaro.org>
To: Julian Ganz <neither@nut.email>
Cc: qemu-devel@nongnu.org,
Daniel Henrique Barboza <dbarboza@ventanamicro.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Alistair Francis <alistair.francis@wdc.com>,
Weiwei Li <liwei1518@gmail.com>,
Liu Zhiwei <zhiwei_liu@linux.alibaba.com>,
qemu-riscv@nongnu.org (open list:RISC-V TCG CPUs)
Subject: Re: [PATCH v7 25/25] tests: add test with interrupted memory accesses on rv64
Date: Tue, 14 Oct 2025 13:47:34 +0100 [thread overview]
Message-ID: <87frbllkex.fsf@draig.linaro.org> (raw)
In-Reply-To: <729c8db0f4b61033f5a460747ea50fced9dabc1e.1759744337.git.neither@nut.email> (Julian Ganz's message of "Mon, 6 Oct 2025 11:59:20 +0200")
Julian Ganz <neither@nut.email> writes:
> This test aims at catching API misbehaviour w.r.t. the interaction
> between interrupts and memory accesses, such as the bug fixed in
>
> 27f347e6a1d269c533633c812321cabb249eada8
Even better the abbrev with title:
27f347e6a1d (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.
>
> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
> Signed-off-by: Julian Ganz <neither@nut.email>
> ---
> tests/tcg/riscv64/Makefile.softmmu-target | 6 ++
> tests/tcg/riscv64/interruptedmemory.S | 67 +++++++++++++++++++++++
> 2 files changed, 73 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 1a71a78653..d8f92b8e61 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)$<)
Something went wrong with substitutions there because I see:
timeout -s KILL --foreground 120 /home/alex/lsrc/qemu.git/builds/all/qemu-system-riscv64 -plugin ../plugins/libdiscons.so -d plugin -D .pout -M virt -display none -semihosting -device loader,file=interruptedmemory
There doesn't seem to be any output either when I run it manually -
should we be checking the output and at least confirming we are
detecting the right sort of events?
> +
> # 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 0000000000..a32d672849
> --- /dev/null
> +++ b/tests/tcg/riscv64/interruptedmemory.S
> @@ -0,0 +1,67 @@
> + .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
> +
> + # Find out when to stop
> + call rtc_get
> + li t0, 60
> + slli t0, t0, 30 # Approx. 10e9 ns
> + add t0, t0, a0
The runtime of 60s seems quite long for a tcg test. Can we not show
stuff happening in a shorter period of time?
> +
> + # Loop with memory accesses
> + la t1, semiargs
> +0:
> + ld t2, 0(t1)
> + sd t2, 0(t1)
> + call rtc_get
> + bltu a0, t0, 0b
> +
> + 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
> +
> +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
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
next prev parent reply other threads:[~2025-10-14 12:48 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-06 9:56 [PATCH v7 00/25] tcg-plugins: add hooks for discontinuities Julian Ganz
2025-10-06 9:56 ` [PATCH v7 01/25] plugins: add types for callbacks related to certain discontinuities Julian Ganz
2025-10-14 11:06 ` Alex Bennée
2025-10-06 9:56 ` [PATCH v7 02/25] plugins: add API for registering discontinuity callbacks Julian Ganz
2025-10-14 11:06 ` Alex Bennée
2025-10-06 9:56 ` [PATCH v7 03/25] plugins: add hooks for new discontinuity related callbacks Julian Ganz
2025-10-06 9:56 ` [PATCH v7 04/25] contrib/plugins: add plugin showcasing new dicontinuity related API Julian Ganz
2025-10-14 11:08 ` Alex Bennée
2025-10-06 9:57 ` [PATCH v7 05/25] target/alpha: call plugin trap callbacks Julian Ganz
2025-10-06 9:57 ` [PATCH v7 06/25] target/arm: " Julian Ganz
2025-10-06 22:32 ` Richard Henderson
2025-10-06 9:57 ` [PATCH v7 07/25] target/avr: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 08/25] target/hppa: " Julian Ganz
2025-10-06 22:38 ` Richard Henderson
2025-10-07 13:29 ` Julian Ganz
2025-10-07 14:56 ` Richard Henderson
2025-10-06 9:57 ` [PATCH v7 09/25] target/i386: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 10/25] target/loongarch: " Julian Ganz
2025-10-14 10:55 ` Alex Bennée
2025-10-14 14:02 ` Julian Ganz
2025-10-06 9:57 ` [PATCH v7 11/25] target/m68k: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 12/25] target/microblaze: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 13/25] target/mips: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 14/25] target/openrisc: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 15/25] target/ppc: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 16/25] target/riscv: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 17/25] target/rx: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 18/25] target/s390x: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 19/25] target/sh4: " Julian Ganz
2025-10-06 9:57 ` [PATCH v7 20/25] target/sparc: " Julian Ganz
2025-10-06 9:59 ` [PATCH v7 21/25] target/tricore: " Julian Ganz
2025-10-06 9:59 ` [PATCH v7 22/25] target/xtensa: " Julian Ganz
2025-10-07 11:59 ` Philippe Mathieu-Daudé
2025-10-06 9:59 ` [PATCH v7 23/25] tests: add plugin asserting correctness of discon event's to_pc Julian Ganz
2025-10-06 9:59 ` [PATCH v7 24/25] tests: add test for double-traps on rv64 Julian Ganz
2025-10-09 2:49 ` Alistair Francis
2025-10-06 9:59 ` [PATCH v7 25/25] tests: add test with interrupted memory accesses " Julian Ganz
2025-10-14 12:47 ` Alex Bennée [this message]
2025-10-14 14:17 ` Julian Ganz
2025-10-14 12:52 ` [PATCH v7 00/25] tcg-plugins: add hooks for discontinuities 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=87frbllkex.fsf@draig.linaro.org \
--to=alex.bennee@linaro.org \
--cc=alistair.francis@wdc.com \
--cc=dbarboza@ventanamicro.com \
--cc=liwei1518@gmail.com \
--cc=neither@nut.email \
--cc=palmer@dabbelt.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.