[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PULL 36/38] ppc/xics: fix irq priority in ics_set_irq_type()
From: |
David Gibson |
Subject: |
[Qemu-ppc] [PULL 36/38] ppc/xics: fix irq priority in ics_set_irq_type() |
Date: |
Wed, 22 May 2019 14:45:58 +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 18/38] target/ppc: Fix xvabs[sd]p, xvnabs[sd]p, xvneg[sd]p, xvcpsgn[sd]p, (continued)
- [Qemu-ppc] [PULL 18/38] target/ppc: Fix xvabs[sd]p, xvnabs[sd]p, xvneg[sd]p, xvcpsgn[sd]p, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 32/38] spapr: introduce routines to delete the KVM IRQ device, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 23/38] spapr: Fix phb_placement backwards compatibility, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 30/38] spapr/xive: activate KVM support, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 26/38] spapr/xive: add hcall support when under KVM, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 25/38] spapr/xive: add KVM support, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 29/38] spapr/xive: add migration support for KVM, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 27/38] spapr/xive: add state synchronization with KVM, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 34/38] spapr/irq: introduce a spapr_irq_init_device() helper, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 37/38] spapr/irq: add KVM support to the 'dual' machine, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 36/38] ppc/xics: fix irq priority in ics_set_irq_type(),
David Gibson <=
- [Qemu-ppc] [PULL 35/38] spapr/irq: initialize the IRQ device only once, David Gibson, 2019/05/22
- [Qemu-ppc] [PULL 38/38] docs: provide documentation on the POWER9 XIVE interrupt controller, David Gibson, 2019/05/22
- Re: [Qemu-ppc] [PULL 00/38] ppc-for-4.1 queue 20190522, Peter Maydell, 2019/05/23