]> git.ipfire.org Git - thirdparty/qemu.git/commit
hw/intc/arm_gicv3_kvm: Write all 1's to clear enable/active
authorZenghui Yu <zenghui.yu@linux.dev>
Tue, 29 Jul 2025 16:16:50 +0000 (00:16 +0800)
committerMichael Tokarev <mjt@tls.msk.ru>
Tue, 5 Aug 2025 07:31:48 +0000 (10:31 +0300)
commite3ac46b4553c239a2a8af94311e2de852042c6ed
tree3d0c8c4a7e556f748a724bae4bcaec71e1ceeaa7
parentf74d5de0462ef257dfed03b987145ec7ca3a10d3
hw/intc/arm_gicv3_kvm: Write all 1's to clear enable/active

KVM's userspace access interface to the GICD enable and active bits
is via set/clear register pairs which implement the hardware's "write
1s to the clear register to clear the 0 bits, and write 1s to the set
register to set the 1 bits" semantics.  We didn't get this right,
because we were writing 0 to the clear register.

Writing 0 to GICD_IC{ENABLE,ACTIVE}R architecturally has no effect on
interrupt status (all writes are simply ignored by KVM) and doesn't
comply with the intention of "first write to the clear-reg to clear
all bits".

Write all 1's to actually clear the enable/active status.

This didn't have any adverse effects on migration because there
we start with a clean VM state; it would be guest-visible when
doing a system reset, but since Linux always cleans up the
register state of the GIC during bootup before it enables it
most users won't have run into a problem here.

Cc: qemu-stable@nongnu.org
Fixes: 367b9f527bec ("hw/intc/arm_gicv3_kvm: Implement get/put functions")
Signed-off-by: Zenghui Yu <zenghui.yu@linux.dev>
Message-id: 20250729161650.43758-3-zenghui.yu@linux.dev
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
(cherry picked from commit b10bd4bd17ac8628ede8735a08ad82dc3b721c64)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
hw/intc/arm_gicv3_kvm.c