From: Keith Busch <keith.busch@intel.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: linux-pci@vger.kernel.org, Bjorn Helgaas <bhelgaas@google.com>,
Maik Broemme <mbroemme@libmpq.org>,
Pawandeep Oza <poza@codeaurora.org>,
Sinan Kaya <okaya@codeaurora.org>
Subject: Re: [PATCHv2 4/6] PCI/DPC: Print AER status in DPC event handling
Date: Thu, 25 Jan 2018 14:15:21 -0700 [thread overview]
Message-ID: <20180125211521.GB19484@localhost.localdomain> (raw)
In-Reply-To: <20180125195512.GL5317@bhelgaas-glaptop.roam.corp.google.com>
On Thu, Jan 25, 2018 at 01:55:12PM -0600, Bjorn Helgaas wrote:
> On Tue, Jan 16, 2018 at 10:22:04PM -0700, Keith Busch wrote:
> >
> > schedule_work(&dpc->work);
> >
> > + if (reason == 0)
> > + dpc->info.severity = AER_NONFATAL;
> > + else
> > + dpc->info.severity = AER_CORRECTABLE;
>
> This looks wrong because we call schedule_work() before we set
> dpc->info.severity. I think that's racy because
> interrupt_event_handler() might read dpc->info.severity before
> dpc_irq() sets it.
You're right, my mistake.
> That raises the question of how we pass information from dpc_irq() to
> interrupt_event_handler(). I think interrupt_event_handler() is a
> work item because it removes devices and might need to sleep. That
> makes sense.
>
> But we pass dpc->info and dpc->rp_pio_status from dpc_irq() to
> interrupt_event_handler() via the single struct dpc_dev. That doesn't
> make sense in general because dpc_irq() may be invoked several times
> for each invocation of interrupt_event_handler(). I think the general
> purpose solution for passing information from interrupt context to
> process context would be a queue.
>
> It looks like we side-step that issue by disabling interrupts in
> dpc_irq() and re-enabling them in interrupt_event_handler(). That
> probably does work, but it's strange and requires extra config
> accesses. The fact that we clear PCI_EXP_DPC_STATUS_INTERRUPT at the
> end of interrupt_event_handler() should be enough -- sec 6.2.10.1 says
> we should only get a new MSI when the logical AND of things including
> PCI_EXP_DPC_STATUS_INTERRUPT transitions from FALSE to TRUE.
Yes, that's true. We could get the same interrupt for non-DPC related
events, and the interrupt config setting was something Alex proposed to
make sure we don't note the same events multiple times. Using these
config registers seems a bit overkill, though.
> I think all the log registers (Error Source ID and RP PIO Logs) are
> latched when DPC Trigger Status is set, so I think all the dmesg
> logging and dpc_process_rp_pio_error() stuff *could* be done in
> interrupt_event_handler(). Then it would be together with the
> PCI_EXP_DPC_STATUS write that clears DPC Trigger Status (and clears
> the latched log registers) and we wouldn't have the question about
> what belongs on dpc_irq() and what belongs in
> interrupt_event_handler().
That sounds great. If we defer all logging and containment handling
to the work-queue, that should even fix up the issues the interrupt
disable/enabling was trying to solve.
That doesn't even sound difficult to code. Let me send you a proposal
instead of this series, maybe by tomorrow.
> After we clear PCI_EXP_DPC_STATUS_TRIGGER, we're supposed to "honor
> timing requirements ... with respect to the first Configuration Read
> following a Conventional Reset" (PCIe r4.0, sec 7.9.15.4). Where does
> that happen?
That is referring to reading the downstream port, and that is not
handled by the DPC driver. The expectation is that the link is down on a
DPC event, and the Link Up is handled by the pciehp driver, which
should be honoring those timing requirements.
next prev parent reply other threads:[~2018-01-25 21:15 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-17 5:22 [PATCHv2 0/6] PCI/DPC updates Keith Busch
2018-01-17 5:22 ` [PATCHv2 1/6] PCI/AER: Return correct value when AER is not supported Keith Busch
2018-01-17 5:22 ` [PATCHv2 2/6] PCI/AER: API for obtaining AER information Keith Busch
2018-01-17 5:22 ` [PATCHv2 3/6] PCI/DPC: Enable DPC in conjuction with AER Keith Busch
2018-01-17 5:22 ` [PATCHv2 4/6] PCI/DPC: Print AER status in DPC event handling Keith Busch
2018-01-25 19:55 ` Bjorn Helgaas
2018-01-25 21:15 ` Keith Busch [this message]
2018-01-25 21:19 ` Keith Busch
2018-01-17 5:22 ` [PATCHv2 5/6] PCI/DPC: Fix interrupt message number print Keith Busch
2018-01-17 5:22 ` [PATCHv2 6/6] PCI/DPC: Enable ERR_COR Keith Busch
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=20180125211521.GB19484@localhost.localdomain \
--to=keith.busch@intel.com \
--cc=bhelgaas@google.com \
--cc=helgaas@kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=mbroemme@libmpq.org \
--cc=okaya@codeaurora.org \
--cc=poza@codeaurora.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).