From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 03/18] hw/intc/arm_gic: Fix deactivation of SPI lines
Date: Sat, 22 Jun 2024 13:06:28 +0100 [thread overview]
Message-ID: <20240622120643.3797539-4-peter.maydell@linaro.org> (raw)
In-Reply-To: <20240622120643.3797539-1-peter.maydell@linaro.org>
From: "Edgar E. Iglesias" <edgar.iglesias@amd.com>
Julien reported that he has seen strange behaviour when running
Xen on QEMU using GICv2. When Xen migrates a guest's vCPU from
one pCPU to another while the vCPU is handling an interrupt, the
guest is unable to properly deactivate interrupts.
Looking at it a little closer, our GICv2 model treats
deactivation of SPI lines as if they were PPI's, i.e banked per
CPU core. The state for active interrupts should only be banked
for PPI lines, not for SPI lines.
Make deactivation of SPI lines unbanked, similar to how we
handle writes to GICD_ICACTIVER.
Reported-by: Julien Grall <julien@xen.org>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Message-id: 20240605143044.2029444-2-edgar.iglesias@gmail.com
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/intc/gic_internal.h | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/hw/intc/gic_internal.h b/hw/intc/gic_internal.h
index 8d29b40ca10..8ddbf554c69 100644
--- a/hw/intc/gic_internal.h
+++ b/hw/intc/gic_internal.h
@@ -280,6 +280,8 @@ static inline void gic_set_active(GICState *s, int irq, int cpu)
static inline void gic_clear_active(GICState *s, int irq, int cpu)
{
+ unsigned int cm;
+
if (gic_is_vcpu(cpu)) {
uint32_t *entry = gic_get_lr_entry(s, irq, cpu);
GICH_LR_CLEAR_ACTIVE(*entry);
@@ -301,11 +303,13 @@ static inline void gic_clear_active(GICState *s, int irq, int cpu)
* the GIC is secure.
*/
if (!s->security_extn || GIC_DIST_TEST_GROUP(phys_irq, 1 << rcpu)) {
- GIC_DIST_CLEAR_ACTIVE(phys_irq, 1 << rcpu);
+ cm = phys_irq < GIC_INTERNAL ? 1 << rcpu : ALL_CPU_MASK;
+ GIC_DIST_CLEAR_ACTIVE(phys_irq, cm);
}
}
} else {
- GIC_DIST_CLEAR_ACTIVE(irq, 1 << cpu);
+ cm = irq < GIC_INTERNAL ? 1 << cpu : ALL_CPU_MASK;
+ GIC_DIST_CLEAR_ACTIVE(irq, cm);
}
}
--
2.34.1
next prev parent reply other threads:[~2024-06-22 12:08 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-22 12:06 [PULL 00/18] target-arm queue Peter Maydell
2024-06-22 12:06 ` [PULL 01/18] hw/net/can/xlnx-versal-canfd: Fix sorting of the tx queue Peter Maydell
2024-06-22 12:06 ` [PULL 02/18] hw/arm/sbsa-ref: switch to 1GHz timer frequency Peter Maydell
2024-06-22 12:06 ` Peter Maydell [this message]
2024-06-22 12:06 ` [PULL 04/18] hw/arm/xilinx_zynq: Fix IRQ/FIQ routing Peter Maydell
2024-06-22 12:06 ` [PULL 05/18] scripts/coverity-scan/COMPONENTS.md: Update paths to match gitlab CI Peter Maydell
2024-06-22 12:06 ` [PULL 06/18] scripts/coverity-scan/COMPONENTS.md: Fix 'char' component Peter Maydell
2024-06-22 12:06 ` [PULL 07/18] scripts/coverity-scan/COMPONENTS.md: Add crypto headers in host/include to the crypto component Peter Maydell
2024-06-22 12:06 ` [PULL 08/18] scripts/coverity-scan/COMPONENTS.md: Fix monitor component Peter Maydell
2024-06-22 12:06 ` [PULL 09/18] scripts/coverity-scan/COMPONENTS.md: Include libqmp in testlibs Peter Maydell
2024-06-22 12:06 ` [PULL 10/18] hw/timer/a9gtimer: Handle QTest mode in a9_gtimer_get_current_cpu Peter Maydell
2024-06-22 12:06 ` [PULL 11/18] hw/usb/hcd-dwc2: Handle invalid address access in read and write functions Peter Maydell
2024-06-22 12:06 ` [PULL 12/18] hw/arm/virt: Add serial aliases in DTB Peter Maydell
2024-06-22 12:06 ` [PULL 13/18] hw/arm/virt: Rename VIRT_UART and VIRT_SECURE_UART to VIRT_UART[01] Peter Maydell
2024-06-22 12:06 ` [PULL 14/18] hw/arm/virt: allow creation of a second NonSecure UART Peter Maydell
2024-06-22 12:06 ` [PULL 15/18] hw/arm/virt: Avoid unexpected warning from Linux guest on host with Fujitsu CPUs Peter Maydell
2024-06-22 12:06 ` [PULL 16/18] hw/misc: Set valid access size for Exynos4210 RNG Peter Maydell
2024-06-22 12:06 ` [PULL 17/18] hw/usb/hcd-ohci: Fix ohci_service_td: accept zero-length TDs where CBP=BE+1 Peter Maydell
2024-06-22 12:06 ` [PULL 18/18] hw/arm/sbsa-ref: Enable CPU cluster on ARM sbsa machine Peter Maydell
2024-06-23 17:46 ` [PULL 00/18] target-arm queue Richard Henderson
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=20240622120643.3797539-4-peter.maydell@linaro.org \
--to=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/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).