[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PULL 37/38] ppc/xics: fix irq priority in ics_set_irq_type()
From: |
David Gibson |
Subject: |
[Qemu-ppc] [PULL 37/38] ppc/xics: fix irq priority in ics_set_irq_type() |
Date: |
Tue, 21 May 2019 16:29:23 +1000 |
From: Cédric Le Goater <address@hidden>
Recent commits changed the behavior of ics_set_irq_type() to
initialize correctly LSIs at the KVM level. ics_set_irq_type() is also
called by the realize routine of the different devices of the machine
when initial interrupts are claimed, before the ICSState device is
reseted.
In the case, the ICSIRQState priority is 0x0 and the call to
ics_set_irq_type() results in configuring the target of the
interrupt. On P9, when using the KVM XICS-on-XIVE device, the target
is configured to be server 0, priority 0 and the event queue 0 is
created automatically by KVM.
With the dual interrupt mode creating the KVM device at reset, it
leads to unexpected effects on the guest, mostly blocking IPIs. This
is wrong, fix it by reseting the ICSIRQState structure when
ics_set_irq_type() is called.
Fixes: commit 6cead90c5c9c ("xics: Write source state to KVM at claim time")
Signed-off-by: Greg Kurz <address@hidden>
Signed-off-by: Cédric Le Goater <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: David Gibson <address@hidden>
---
hw/intc/xics.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/hw/intc/xics.c b/hw/intc/xics.c
index af7dc709ab..79f5a8a916 100644
--- a/hw/intc/xics.c
+++ b/hw/intc/xics.c
@@ -610,6 +610,12 @@ static const TypeInfo ics_simple_info = {
.class_size = sizeof(ICSStateClass),
};
+static void ics_reset_irq(ICSIRQState *irq)
+{
+ irq->priority = 0xff;
+ irq->saved_priority = 0xff;
+}
+
static void ics_base_reset(DeviceState *dev)
{
ICSState *ics = ICS_BASE(dev);
@@ -623,8 +629,7 @@ static void ics_base_reset(DeviceState *dev)
memset(ics->irqs, 0, sizeof(ICSIRQState) * ics->nr_irqs);
for (i = 0; i < ics->nr_irqs; i++) {
- ics->irqs[i].priority = 0xff;
- ics->irqs[i].saved_priority = 0xff;
+ ics_reset_irq(ics->irqs + i);
ics->irqs[i].flags = flags[i];
}
}
@@ -760,6 +765,7 @@ void ics_set_irq_type(ICSState *ics, int srcno, bool lsi)
lsi ? XICS_FLAGS_IRQ_LSI : XICS_FLAGS_IRQ_MSI;
if (kvm_irqchip_in_kernel()) {
+ ics_reset_irq(ics->irqs + srcno);
ics_set_kvm_state_one(ics, srcno);
}
}
--
2.21.0
- [Qemu-ppc] [PULL 22/38] target/ppc: Use vector variable shifts for VSL, VSR, VSRA, (continued)
- [Qemu-ppc] [PULL 22/38] target/ppc: Use vector variable shifts for VSL, VSR, VSRA, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 32/38] sysbus: add a sysbus_mmio_unmap() helper, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 16/38] Fix typo on "info pic" monitor cmd output for xive, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 28/38] spapr/xive: add state synchronization with KVM, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 21/38] spapr: Add forgotten capability to migration stream, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 30/38] spapr/xive: add migration support for KVM, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 26/38] spapr/xive: add KVM support, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 33/38] spapr: introduce routines to delete the KVM IRQ device, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 25/38] linux-headers: Update linux headers to 5.2-rc1, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 23/38] spapr: Fix phb_placement backwards compatibility, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 37/38] ppc/xics: fix irq priority in ics_set_irq_type(),
David Gibson <=
- [Qemu-ppc] [PULL 36/38] spapr/irq: initialize the IRQ device only once, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 34/38] spapr: check for the activation of the KVM IRQ device, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 35/38] spapr/irq: introduce a spapr_irq_init_device() helper, David Gibson, 2019/05/21
- [Qemu-ppc] [PULL 38/38] spapr/irq: add KVM support to the 'dual' machine, David Gibson, 2019/05/21
- Re: [Qemu-ppc] [Qemu-devel] [PULL 00/38] ppc-for-4.1 queue 20190521, no-reply, 2019/05/21
- Re: [Qemu-ppc] [PULL 00/38] ppc-for-4.1 queue 20190521, Peter Maydell, 2019/05/21