From: Lukas Wunner <lukas@wunner.de>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Keith Busch <keith.busch@intel.com>,
Linux PCI <linux-pci@vger.kernel.org>,
Bjorn Helgaas <bhelgaas@google.com>,
Oza Pawandeep <poza@codeaurora.org>,
Sinan Kaya <okaya@codeaurora.org>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>
Subject: Re: [PATCHv2 2/7] PCI/DPC: Fix PCI legacy interrupt acknowledgement
Date: Wed, 4 Apr 2018 10:38:03 +0200 [thread overview]
Message-ID: <20180404083803.GA32642@wunner.de> (raw)
In-Reply-To: <alpine.DEB.2.21.1804041002550.2056@nanos.tec.linutronix.de>
On Wed, Apr 04, 2018 at 10:13:32AM +0200, Thomas Gleixner wrote:
> On Tue, 3 Apr 2018, Bjorn Helgaas wrote:
> > On Tue, Apr 03, 2018 at 03:38:47PM -0500, Bjorn Helgaas wrote:
> > > On Mon, Apr 02, 2018 at 10:21:58AM -0600, Keith Busch wrote:
> > > > From: Oza Pawandeep <poza@codeaurora.org>
> > > >
> > > > The DPC driver was acknowledging the DPC interrupt status in deferred
> > > > work. That works for edge triggered interrupts, but causes an interrupt
> > > > storm with level triggered legacy interrupts.
>
> The problem is homebrewn in the driver. So, yes it needs to mask the
> interrupt before returning from the irq handler if the rest of the magic is
> done in a worker.
If the IRQ is shared, the other handlers are starved for a brief
period of time between the IRQ being masked in the handler and
unmasked in the worker.
What is the recommended way to handle this?
I'm asking because I'm working on patches to runtime suspend
pciehp hotplug ports to D3hot. The first few Thunderbolt
controllers that came to market had broken MSI signalling
and are thus using INTx. If a hotplug port is signaling an
interrupt while its parent(s) are in D3hot, its config space
is inaccessible for the IRQ handler, so the parent(s) have to
be resumed to D0 first. This takes too long to be done in an
IRQ handler and I believe can also sleep, so it's done by a worker.
Now the problem is, INTx interrupts may be shared by multiple
devices, and they *are* on my machine. The conundrum I'm
facing is to mask the IRQ and starve all the other handlers
while the device is woken, or not mask it but risk getting
lots of spurious interrupts.
For now I've gone with the latter approach, so I leave the
IRQ unmasked and return IRQ_NONE because I don't know yet if
the IRQ originated from this particular hotplug port or from
something else. Now if I check /proc/interrupts, I can see
that about 5000 spurious interrupts were accumulated until
the hotplug port's parents were woken and the interrupt could
finally be handled.
Is there a better way to deal with this?
Just so you get an idea what I'm talking about, this is
/proc/interrupts on a MacBookPro9,1 with a daisy-chain of two
Light Ridge Thunderbolt controllers and one Port Ridge (all
with broken MSI signaling):
16: IO-APIC 16-fasteoi pciehp
17: IO-APIC 17-fasteoi pciehp, pciehp, pciehp, mmc0, snd_hda_intel, b43
18: IO-APIC 18-fasteoi pciehp, pciehp, i801_smbus
19: IO-APIC 19-fasteoi pciehp
Thanks!
Lukas
next prev parent reply other threads:[~2018-04-04 8:38 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-02 16:21 [PATCHv2 0/7] DPC updates Keith Busch
2018-04-02 16:21 ` [PATCHv2 1/7] PCI/DPC: Enable ERR_COR Keith Busch
2018-04-02 21:23 ` Bjorn Helgaas
2018-04-02 23:09 ` Keith Busch
2018-04-03 14:16 ` Bjorn Helgaas
2018-04-03 14:31 ` Rafael J. Wysocki
2018-04-03 14:37 ` Keith Busch
2018-04-02 16:21 ` [PATCHv2 2/7] PCI/DPC: Fix PCI legacy interrupt acknowledgement Keith Busch
2018-04-03 20:38 ` Bjorn Helgaas
2018-04-03 23:04 ` Bjorn Helgaas
2018-04-04 8:13 ` Thomas Gleixner
2018-04-04 8:38 ` Lukas Wunner [this message]
2018-04-26 5:33 ` poza
2018-05-16 15:16 ` Timur Tabi
2018-05-16 21:04 ` Bjorn Helgaas
2018-04-02 16:21 ` [PATCHv2 3/7] PCI/DPC: Leave interrupts enabled while handling event Keith Busch
2018-04-02 16:22 ` [PATCHv2 4/7] PCI/DPC: Defer event handling to work queue Keith Busch
2018-04-02 16:22 ` [PATCHv2 5/7] PCI/DPC: Remove rp_pio_status from dpc struct Keith Busch
2018-04-02 16:22 ` [PATCHv2 6/7] PCI/AER: API for obtaining AER information Keith Busch
2018-04-09 10:03 ` David Laight
2018-04-09 14:37 ` Keith Busch
2018-04-02 16:22 ` [PATCHv2 7/7] PCI/DPC: Print AER status in DPC event handling Keith Busch
2018-05-17 15:02 ` poza
2018-05-17 15:04 ` poza
2018-06-19 21:31 ` [PATCHv2 0/7] DPC updates Bjorn Helgaas
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=20180404083803.GA32642@wunner.de \
--to=lukas@wunner.de \
--cc=bhelgaas@google.com \
--cc=keith.busch@intel.com \
--cc=linux-pci@vger.kernel.org \
--cc=okaya@codeaurora.org \
--cc=poza@codeaurora.org \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
/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.