All of lore.kernel.org
 help / color / mirror / Atom feed
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


  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.