From: David Gibson <david@gibson.dropbear.id.au>
To: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
benh@kernel.crashing.org, clg@kaod.org
Subject: Re: [Qemu-devel] [PATCH v4 2/9] ppc/xics: Fix migration failure with kernel-irqchip=off
Date: Wed, 21 Sep 2016 17:21:31 +1000 [thread overview]
Message-ID: <20160921072131.GA1809@umbus.fritz.box> (raw)
In-Reply-To: <1474266577-11704-3-git-send-email-nikunj@linux.vnet.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 3436 bytes --]
On Mon, Sep 19, 2016 at 11:59:30AM +0530, Nikunj A Dadhania wrote:
> With a single cpu VM running with kernel-irqchip=off and a flood ping
> running in the guest. Migration fails once in few times.
>
> Found that whenever there is an interrupt (in this case lsi int 3 from
> e1000), we raise an interrupt using qemu_irq_pulse() and also see that
> the kvm ioctl is complete.
Uh.. for an lsi qemu_irq_pulse() should not ever be used - that should
only be used for edge or message interrupts.
> 67351@1468011062.810020:xics_set_irq_lsi set_irq_lsi: srcno 3 [irq 0x1003]
> 67351@1468011062.810031:xics_icp_irq cpu 0 trying to deliver irq 0x1003 priority 0x5
> 67351@1468011062.810038:xics_icp_raise raising IRQ new XIRR=0xff001003
> new pending priority=0x5
>
> After migration on the target side, interrupts(prio 0x5) are rejected as
> there is a interrupt pending (pending_priority 0x5). Moreover, we never
> get an icp_accept from the guest, so it hangs and crashes.
Sorry, I'm still having a lot of trouble following this description of
what's happening.
> Basically, resend the irq pulse(lsi) to the guest.
>
> Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
> ---
> hw/intc/xics.c | 19 +++++++++++++++----
> 1 file changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/hw/intc/xics.c b/hw/intc/xics.c
> index 69162f0..f765b08 100644
> --- a/hw/intc/xics.c
> +++ b/hw/intc/xics.c
> @@ -209,7 +209,7 @@ static const TypeInfo xics_common_info = {
> #define CPPR(ss) (((ss)->xirr) >> 24)
>
> static void ics_reject(ICSState *ics, int nr);
> -static void ics_resend(ICSState *ics);
> +static void ics_resend(ICSState *ics, int server);
> static void ics_eoi(ICSState *ics, int nr);
>
> static void icp_check_ipi(XICSState *xics, int server)
> @@ -238,7 +238,7 @@ static void icp_resend(XICSState *xics, int server)
> if (ss->mfrr < CPPR(ss)) {
> icp_check_ipi(xics, server);
> }
> - ics_resend(xics->ics);
> + ics_resend(xics->ics, server);
> }
>
> void icp_set_cppr(XICSState *xics, int server, uint8_t cppr)
> @@ -512,13 +512,24 @@ static void ics_reject(ICSState *ics, int nr)
> }
> }
>
> -static void ics_resend(ICSState *ics)
> +static void ics_resend(ICSState *ics, int server)
> {
> int i;
> + ICPState *ss = ics->xics->ss + server;
> + ICSIRQState *irq;
>
> for (i = 0; i < ics->nr_irqs; i++) {
> /* FIXME: filter by server#? */
> - if (ics->irqs[i].flags & XICS_FLAGS_IRQ_LSI) {
> + irq = &ics->irqs[i];
> + if (!(irq->flags & XICS_FLAGS_IRQ_MASK)) {
> + continue;
> + }
> +
> + if (irq->flags & XICS_FLAGS_IRQ_LSI) {
> + if (irq->status & XICS_STATUS_SENT) {
> + qemu_irq_raise(ss->output);
> + continue;
Directly reraising the CPU irq line from an ics function rather than
an icp function seems very dubious. It really seems like instead we
need to be recalculating the output line state from the ICP state,
after we've done all the ICS resends.
> + }
> resend_lsi(ics, i);
> } else {
> resend_msi(ics, i);
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2016-09-21 9:27 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-19 6:29 [Qemu-devel] [PATCH v4 0/9] sPAPR xics rework/cleanup Nikunj A Dadhania
2016-09-19 6:29 ` [Qemu-devel] [PATCH v4 1/9] ppc/xics: account correct irq status Nikunj A Dadhania
2016-09-21 6:39 ` David Gibson
2016-09-19 6:29 ` [Qemu-devel] [PATCH v4 2/9] ppc/xics: Fix migration failure with kernel-irqchip=off Nikunj A Dadhania
2016-09-21 7:21 ` David Gibson [this message]
2016-09-19 6:29 ` [Qemu-devel] [PATCH v4 3/9] ppc/xics: Make the ICSState a list Nikunj A Dadhania
2016-09-19 6:59 ` [Qemu-devel] [Qemu-ppc] " Cédric Le Goater
2016-09-19 7:02 ` Nikunj A Dadhania
2016-09-19 7:24 ` Cédric Le Goater
2016-09-20 5:13 ` Nikunj A Dadhania
2016-09-21 7:48 ` [Qemu-devel] " David Gibson
2016-09-19 6:29 ` [Qemu-devel] [PATCH v4 4/9] ppc/xics: An ICS with offset 0 is assumed to be uninitialized Nikunj A Dadhania
2016-09-21 7:50 ` David Gibson
2016-09-19 6:29 ` [Qemu-devel] [PATCH v4 5/9] ppc/xics: Use a helper to add a new ICS Nikunj A Dadhania
2016-09-21 23:40 ` David Gibson
2016-09-22 6:21 ` Cédric Le Goater
2016-09-23 0:37 ` David Gibson
2016-09-19 6:29 ` [Qemu-devel] [PATCH v4 6/9] ppc/xics: Split ICS into ics-base and ics class Nikunj A Dadhania
2016-09-19 7:09 ` [Qemu-devel] [Qemu-ppc] " Cédric Le Goater
2016-09-20 5:14 ` Nikunj A Dadhania
2016-09-19 14:34 ` Cédric Le Goater
2016-09-20 6:02 ` Nikunj A Dadhania
2016-09-20 6:20 ` Cédric Le Goater
2016-09-20 6:29 ` Nikunj A Dadhania
2016-09-20 7:13 ` Cédric Le Goater
2016-09-20 8:10 ` Nikunj A Dadhania
2016-09-20 9:06 ` Cédric Le Goater
2016-09-20 9:41 ` Nikunj A Dadhania
2016-09-20 9:52 ` Cédric Le Goater
2016-09-20 10:03 ` Nikunj A Dadhania
2016-09-19 6:29 ` [Qemu-devel] [PATCH v4 7/9] ppc/xics: Add "native" XICS subclass Nikunj A Dadhania
2016-09-19 7:03 ` [Qemu-devel] [Qemu-ppc] " Cédric Le Goater
2016-09-22 0:02 ` [Qemu-devel] " David Gibson
2016-09-22 6:27 ` Cédric Le Goater
2016-09-19 6:29 ` [Qemu-devel] [PATCH v4 8/9] ppc/xics: Add xics to the monitor "info pic" command Nikunj A Dadhania
2016-09-22 0:07 ` David Gibson
2016-09-19 6:29 ` [Qemu-devel] [PATCH v4 9/9] ppc/xics: move set_nr_{irqs, servers} to xics.c Nikunj A Dadhania
2016-09-22 0:14 ` David Gibson
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=20160921072131.GA1809@umbus.fritz.box \
--to=david@gibson.dropbear.id.au \
--cc=benh@kernel.crashing.org \
--cc=clg@kaod.org \
--cc=nikunj@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.