xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Bertrand Marquis <Bertrand.Marquis@arm.com>
To: CodeWiz2280 <codewiz2280@gmail.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>, nd <nd@arm.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>
Subject: Re: Keystone Issue
Date: Tue, 9 Jun 2020 15:28:24 +0000	[thread overview]
Message-ID: <363A05E0-61C6-4AE4-9C84-EEAC466989D8@arm.com> (raw)
In-Reply-To: <CALYbLDh8F0JuGmRY0C1Nhp_b4FP041KMa14pOmyoSBtHcz=A2A@mail.gmail.com>

Hi,

> On 9 Jun 2020, at 15:33, CodeWiz2280 <codewiz2280@gmail.com> wrote:
> 
> There does appear to be a secondary (CIC) controller that can forward
> events to the GIC-400 and EDMA controllers for the keystone 2 family.
> Admittedly, i'm not sure how it is being used with regards to the
> peripherals.  I only see mention of the GIC-400 parent for the devices
> in the device tree.  Maybe Bertrand has a better idea on whether any
> peripherals go through the CIC first?  I see that gic_interrupt ()
> fires once in Xen, which calls doIRQ to push out the virtual interrupt
> to the dom0 kernel.  The dom0 kernel then handles the interrupt and
> returns, but gic_interrupt() never fires again in Xen.

I do not remember of any CIC but the behaviour definitely look like an interrupt acknowledge problem.

Could you try the following:
--- a/xen/arch/arm/gic-v2.c
+++ b/xen/arch/arm/gic-v2.c
@@ -667,6 +667,9 @@ static void gicv2_guest_irq_end(struct irq_desc *desc)
     /* Lower the priority of the IRQ */
     gicv2_eoi_irq(desc);
     /* Deactivation happens in maintenance interrupt / via GICV */
+
+    /* Test for Keystone2 */
+    gicv2_dir_irq(desc);
 }

I think the problem I had was related to the vgic not deactivating properly the interrupt.
This might make the interrupt fire indefinitely !!

Regards
Bertrand

> 
> On Mon, Jun 8, 2020 at 12:13 PM Stefano Stabellini
> <sstabellini@kernel.org> wrote:
>> 
>> 
>> 
>> On Mon, 8 Jun 2020, CodeWiz2280 wrote:
>>> It actually shows only 1 interrupt for any of the devices in that list
>>> (e.g. spi, ttyS0, ethernet) so you're probably right on the money with
>>> it being an interrupt acknowledge issue.  Any help you can provide is
>>> greatly appreciated.
>>> 
>>> On Mon, Jun 8, 2020 at 4:40 AM Bertrand Marquis
>>> <Bertrand.Marquis@arm.com> wrote:
>>>> 
>>>> 
>>>> 
>>>>> On 5 Jun 2020, at 20:12, CodeWiz2280 <codewiz2280@gmail.com> wrote:
>>>>> 
>>>>> On Fri, Jun 5, 2020 at 11:05 AM CodeWiz2280 <codewiz2280@gmail.com> wrote:
>>>>>> 
>>>>>> On Fri, Jun 5, 2020 at 8:47 AM Bertrand Marquis
>>>>>> <Bertrand.Marquis@arm.com> wrote:
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>>> On 5 Jun 2020, at 13:42, CodeWiz2280 <codewiz2280@gmail.com> wrote:
>>>>>>>> 
>>>>>>>> On Fri, Jun 5, 2020 at 8:30 AM Julien Grall <julien@xen.org> wrote:
>>>>>>>>> 
>>>>>>>>> Hi,
>>>>>>>>> 
>>>>>>>>> On 05/06/2020 13:25, CodeWiz2280 wrote:
>>>>>>>>>> The Keystone uses the netcp driver, which has interrupts from 40-79
>>>>>>>>>> listed in the device tree (arch/arm/boot/keystone-k2e-netcp.dtsi).
>>>>>>>>>> I'm using the same device tree between my non-xen standalone kernel
>>>>>>>>>> and my dom0 kernel booted by xen.  In the standalone (non-xen) kernel
>>>>>>>>>> the ethernet works fine, but I don't see any of its interrupts in the
>>>>>>>>>> output of /proc/iomem.  I'm not seeing them in /proc/iomem when
>>>>>>>>>> running dom0 under Xen either.  When booting with Xen I get this
>>>>>>>>>> behavior where the ifconfig output shows 1 RX message and 1 TX
>>>>>>>>>> message, and then nothing else.
>>>>>>>>> 
>>>>>>>>> I am not sure whether this is a typo in the e-mail. /proc/iomem is
>>>>>>>>> listing the list of the MMIO regions. You want to use /proc/interrupts.
>>>>>>>>> 
>>>>>>>>> Can you confirm which path you are dumping?
>>>>>>>> Yes, that was a typo.  Sorry about that.  I meant that I am dumping
>>>>>>>> /proc/interrupts and do not
>>>>>>>> see them under the non-xen kernel or xen booted dom0.
>>>>>>> 
>>>>>>> Could you post both /proc/interrupts content ?
>>>>>> 
>>>>>> Standalone non-xen kernel (Ethernet works)
>>>>>> # cat /proc/interrupts
>>>>>>          CPU0       CPU1       CPU2       CPU3
>>>>>> 17:          0          0          0          0     GICv2  29 Level
>>>>>> arch_timer
>>>>>> 18:       9856       1202        457        650     GICv2  30 Level
>>>>>> arch_timer
>>>>>> 21:          0          0          0          0     GICv2 142 Edge
>>>>>> timer-keystone
>>>>>> 22:          0          0          0          0     GICv2  52 Edge      arm-pmu
>>>>>> 23:          0          0          0          0     GICv2  53 Edge      arm-pmu
>>>>>> 24:          0          0          0          0     GICv2  54 Edge      arm-pmu
>>>>>> 25:          0          0          0          0     GICv2  55 Edge      arm-pmu
>>>>>> 26:          0          0          0          0     GICv2  36 Edge
>>>>>> 26202a0.keystone_irq
>>>>>> 27:       1435          0          0          0     GICv2 309 Edge      ttyS0
>>>>>> 29:          0          0          0          0     GICv2 315 Edge
>>>>>> 2530000.i2c
>>>>>> 30:          1          0          0          0     GICv2 318 Edge
>>>>>> 2530400.i2c
>>>>>> 31:          0          0          0          0     GICv2 321 Edge
>>>>>> 2530800.i2c
>>>>>> 32:         69          0          0          0     GICv2 324 Edge
>>>>>> 21000400.spi
>>>>>> 33:          0          0          0          0     GICv2 328 Edge
>>>>>> 21000600.spi
>>>>>> 34:          0          0          0          0     GICv2 332 Edge
>>>>>> 21000800.spi
>>>>>> 70:          0          0          0          0     GICv2 417 Edge
>>>>>> ks-pcie-error-irq
>>>>>> 79:          0          0          0          0   PCI-MSI   0 Edge
>>>>>> PCIe PME, aerdrv
>>>>>> 88:         57          0          0          0     GICv2  80 Level
>>>>>> hwqueue-528
>>>>>> 89:         57          0          0          0     GICv2  81 Level
>>>>>> hwqueue-529
>>>>>> 90:         47          0          0          0     GICv2  82 Level
>>>>>> hwqueue-530
>>>>>> 91:         41          0          0          0     GICv2  83 Level
>>>>>> hwqueue-531
>>>>>> IPI0:          0          0          0          0  CPU wakeup interrupts
>>>>>> IPI1:          0          0          0          0  Timer broadcast interrupts
>>>>>> IPI2:        730        988       1058        937  Rescheduling interrupts
>>>>>> IPI3:          2          3          4          6  Function call interrupts
>>>>>> IPI4:          0          0          0          0  CPU stop interrupts
>>>>>> IPI5:          0          0          0          0  IRQ work interrupts
>>>>>> IPI6:          0          0          0          0  completion interrupts
>>>>>> 
>>>>>> Xen dom0 (Ethernet stops)
>>>>>> # cat /proc/interrupts
>>>>>>          CPU0
>>>>>> 18:      10380     GIC-0  27 Level     arch_timer
>>>>>> 19:          0     GIC-0 142 Edge      timer-keystone
>>>>>> 20:         88     GIC-0  16 Level     events
>>>>>> 21:          0   xen-dyn     Edge    -event     xenbus
>>>>>> 22:          0     GIC-0  36 Edge      26202a0.keystone_irq
>>>>>> 23:          1     GIC-0 312 Edge      ttyS0
>>>>>> 25:          1     GIC-0 318 Edge
>>>>>> 27:          1     GIC-0 324 Edge      21000400.spi
>>>>>> 28:          0     GIC-0 328 Edge      21000600.spi
>>>>>> 29:          0     GIC-0 332 Edge      21000800.spi
>>>>>> 65:          0     GIC-0 417 Edge      ks-pcie-error-irq
>>>>>> 74:          0   PCI-MSI   0 Edge      PCIe PME, aerdrv
>>>>>> 83:          1     GIC-0  80 Level     hwqueue-528
>>>>>> 84:          1     GIC-0  81 Level     hwqueue-529
>>>>>> 85:          1     GIC-0  82 Level     hwqueue-530
>>>>>> 86:          1     GIC-0  83 Level     hwqueue-531
>>>>>> 115:         87   xen-dyn     Edge    -virq      hvc_console
>>>>>> IPI0:          0  CPU wakeup interrupts
>>>>>> IPI1:          0  Timer broadcast interrupts
>>>>>> IPI2:          0  Rescheduling interrupts
>>>>>> IPI3:          0  Function call interrupts
>>>>>> IPI4:          0  CPU stop interrupts
>>>>>> IPI5:          0  IRQ work interrupts
>>>>>> IPI6:          0  completion interrupts
>>>>>> Err:          0
>>>>> After getting a chance to look at this a little more, I believe the
>>>>> TX/RX interrupts for the ethernets map like this:
>>>>> 
>>>>> eth0 Rx  - hwqueue-528
>>>>> eth1 Rx - hwqueue-529
>>>>> eth0 Tx  - hwqueue-530
>>>>> eth1 Tx - hwqueue-531
>>>>>> 
>>>>> The interrupt counts in the standlone working kernel seem to roughly
>>>>> correspond to the counts of Tx/Rx messages in ifconfig.  Going on
>>>>> that, its clear that only 1 interrupt has been received for Tx and 1
>>>>> for Rx in the Xen Dom0 equivalent.  Any thoughts on this?
>>>> 
>>>> This definitely look like an interrupt acknowledgement issue.
>>>> This could be caused by 2 things I remember of:
>>>> - front vs level interrupts
>>>> - a problem with forwarded interrupt acknowledgement.
>>>> I think there was something related to that where the vcpu ack was not properly
>>>> handled on a keystone and I had to change the way the interrupt was acked for
>>>> forwarded hardware interrupts.
>> 
>> Is there maybe some sort of secondary interrupt controller (secondary in
>> addition to the GIC) or interrupt "concentrator" on KeyStone?
>> 
>> Or is it just a small deviation from normal GIC behavior?



  reply	other threads:[~2020-06-09 15:29 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-01 12:38 Keystone Issue CodeWiz2280
2020-06-01 13:29 ` Julien Grall
2020-06-01 15:21   ` CodeWiz2280
2020-06-01 17:38     ` CodeWiz2280
2020-06-03 11:32       ` Julien Grall
2020-06-03 17:13         ` CodeWiz2280
2020-06-03 18:09           ` Julien Grall
2020-06-03 18:37             ` CodeWiz2280
2020-06-04  8:02             ` Bertrand Marquis
2020-06-04  8:59               ` Julien Grall
2020-06-04  9:08                 ` Bertrand Marquis
2020-06-04 10:15                   ` Julien Grall
2020-06-04 12:07                     ` CodeWiz2280
2020-06-04 18:24                       ` Julien Grall
2020-06-05  2:29                         ` CodeWiz2280
2020-06-05  7:36                           ` Bertrand Marquis
2020-06-05 12:25                             ` CodeWiz2280
2020-06-05 12:30                               ` Julien Grall
2020-06-05 12:42                                 ` CodeWiz2280
2020-06-05 12:47                                   ` Bertrand Marquis
2020-06-05 15:05                                     ` CodeWiz2280
2020-06-05 19:12                                       ` CodeWiz2280
2020-06-08  8:40                                         ` Bertrand Marquis
2020-06-08 12:33                                           ` CodeWiz2280
2020-06-08 16:13                                             ` Stefano Stabellini
2020-06-09 14:33                                               ` CodeWiz2280
2020-06-09 15:28                                                 ` Bertrand Marquis [this message]
2020-06-09 15:47                                                   ` Julien Grall
2020-06-09 15:58                                                     ` CodeWiz2280
2020-06-09 17:05                                                       ` Bertrand Marquis
2020-06-09 17:03                                                     ` Bertrand Marquis
2020-06-09 17:32                                                       ` Julien Grall
2020-06-09 17:45                                                         ` Marc Zyngier
2020-06-09 20:07                                                           ` CodeWiz2280
2020-06-10  8:13                                                             ` Bertrand Marquis
2020-06-10  8:06                                                           ` Bertrand Marquis
2020-06-10  8:20                                                             ` Marc Zyngier
2020-06-10  8:39                                                               ` Bertrand Marquis
2020-06-10 12:39                                                                 ` CodeWiz2280
2020-06-10 12:53                                                                   ` Marc Zyngier
2020-06-10 12:58                                                                   ` Julien Grall
2020-06-10 21:46                                                           ` Julien Grall
2020-06-15 19:14                                                             ` CodeWiz2280
2020-06-15 21:32                                                               ` Stefano Stabellini
2020-06-16  7:56                                                                 ` Bertrand Marquis
2020-06-16  8:11                                                               ` Marc Zyngier
2020-06-16 18:13                                                                 ` CodeWiz2280
2020-06-16 18:23                                                                   ` Marc Zyngier
2020-06-17 14:45                                                                     ` CodeWiz2280
2020-06-17 15:25                                                                       ` Marc Zyngier
2020-06-17 18:46                                                                       ` Stefano Stabellini
2020-06-17 23:52                                                                         ` CodeWiz2280
2020-06-23 20:50                                                                           ` CodeWiz2280
2020-06-24  7:50                                                                             ` Bertrand Marquis
2020-06-24 17:28                                                                               ` Stefano Stabellini

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=363A05E0-61C6-4AE4-9C84-EEAC466989D8@arm.com \
    --to=bertrand.marquis@arm.com \
    --cc=codewiz2280@gmail.com \
    --cc=julien@xen.org \
    --cc=nd@arm.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.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).