Re: [PATCH v5 47/49] KVM: selftests: Add VGICv5 LPI delivery tests

[email protected] Fri, 07 Aug 2026 17:39:27 +0000
Newsgroups dev.linux.lists.kvmarm,org.kernel.vger.kvm
Message-ID <[email protected]>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The system instruction GIC CDEOI requires the fixed register XZR, but is emitted using a compiler constraint which may select a general-purpose register.
--

--- Patch [47]: [PATCH v5 47/49] KVM: selftests: Add VGICv5 LPI delivery tests ---
commit 1dca3130863c08b0c3a19e09294df6edd1534a20
Author: Sascha Bischoff <[email protected]>

KVM: selftests: Add VGICv5 LPI delivery tests

Add a two-VPE VGICv5 LPI delivery test. Exercise the virtual IRS ID
registers and IST base configuration path before checking interrupt
delivery.

> diff --git a/tools/testing/selftests/kvm/arm64/vgic_v5.c b/tools/testing/selftests/kvm/arm64/vgic_v5.c
> index 23fbd2db50c43..71bda5661c74e 100644
> --- a/tools/testing/selftests/kvm/arm64/vgic_v5.c
> +++ b/tools/testing/selftests/kvm/arm64/vgic_v5.c

[ ... ]

> @@ -209,6 +298,67 @@ static void guest_spi_line_code(void)
>  		wfi();
>  }
>  
> +static void guest_lpi_irq_handler(struct ex_regs *regs)
> +{
> +	u32 vcpu_id = guest_get_vcpuid();
> +	u32 expected_lpi = vcpu_id ? LPI_TEST_TO_VPE1 : LPI_TEST_TO_VPE0;
> +	u64 expected_hwirq = gicv5_lpi_hwirq(expected_lpi);
> +	u32 hwirq;
> +	u64 ia;
> +
> +	ia = gicr_insn(CDIA);
> +	if (!GICV5_GICR_CDIA_VALID(ia))
> +		return;
> +
> +	gsb_ack();
> +	isb();
> +
> +	hwirq = FIELD_GET(GICV5_GICR_CDIA_INTID, ia);
> +	GUEST_ASSERT_EQ(hwirq, expected_hwirq);
> +
> +	gic_insn(hwirq, CDDI);
> +	gic_insn(0, CDEOI);

[Severity: Medium]
Will this lead to misencoded instructions?

The system instruction GIC CDEOI requires the fixed register XZR, but is
emitted using the gic_insn() macro which expands to write_sysreg_s() using a
compiler constraint instead of a hardcoded register.

If the compiler selects a general-purpose register other than XZR, this could
result in CONSTRAINED UNPREDICTABLE behavior. Should this instruction use an
inline assembly block that explicitly hardcodes the exact register in the
instruction string?

> +
> +	if (vcpu_id) {
> +		gicv5_send_lpi(LPI_TEST_TO_VPE0);
> +		GUEST_SYNC(GUEST_CMD_LPI_REPLIED);
> +		while (1)
> +			wfi();
> +	}
> +
> +	GUEST_DONE();
> +}

-- 
Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=47