Linux PCI subsystem development
 help / color / mirror / Atom feed
From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Alexander Motin <mav@ixsystems.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
	Nicholas Johnson <nicholas.johnson-opensource@outlook.com.au>,
	Nick Wolff <nwolff@ixsystems.com>,
	Bjorn Helgaas <bjorn@helgaas.com>,
	linux-pci@vger.kernel.org
Subject: Re: pci_bus_distribute_available_resources() is wrong?
Date: Tue, 13 Dec 2022 07:49:48 +0200	[thread overview]
Message-ID: <Y5gSfJd0H4rKXe9H@black.fi.intel.com> (raw)
In-Reply-To: <6053736d-1923-41e7-def9-7585ce1772d9@ixsystems.com>

Hi,

On Mon, Dec 12, 2022 at 04:10:16PM -0500, Alexander Motin wrote:
> On 12.12.2022 15:32, Bjorn Helgaas wrote:
> > On Mon, Dec 12, 2022 at 1:36 PM Alexander Motin <mav@ixsystems.com> wrote:
> > > Hi,
> > > 
> > > I am writing to you three as the authors of Linux
> > > drivers/pci/setup-bus.c pci_bus_distribute_available_resources()
> > > function.  Trying to debug PCI hot-plug issue on passive side of AMD NTB
> > > I hit this function, behavior of which I looks very suspicious to me,
> > > which I believe cause resource allocation problems we observe.
> > > 
> > > As I see, this function distributes extra size of parent memory window
> > > of hot-plug PCI bridge between memory windows of child bridges.  It
> > > probably makes some sense, but I see a problem in the fact that the
> > > function only looks on children bridge memory windows, but not any other
> > > resources (of bridges or other devices that may be there).

Right the idea was that we allocate the spare resources for the possible
hotplug downstream ports so that it is possible to extend that topology
without running out of resources. This is mostly used with
Thunderbolt/USB4 PCIe tunneling.

However, like many have noticed, it does not handle the more generic PCI
case well. Sorry about that.

> > > In my AMD NTB case PCI topology looks this way:
> > > 
> > > +-[0000:80]-+-00.0
> > > |           +-01.1-[81-83]----00.0-[82-83]----00.0-[83]--+-00.0 Dummy
> > > |           |                                            \-00.1 NTB
> > > 
> > > 80:01.1 is the root bridge where the hot-plug happens.  The 81:00.0
> > > bridge in addition to memory windows has small 16KB BAR.  But since it
> > > is the only bridge on the bus, the function passes all available
> > > resources down to its children.  As result, that BAR fails to allocate.
> > >    And while that BAR seems not really needed, in some cases the
> > > allocation error makes whole memory window to be disabled, that ends up
> > > in NTB device driver attach failure.

Just out of the curiosity, is this PCIe or PCI topology?

> > Mika is working on what sounds like the same problem.  His current
> > patch series is at
> > https://lore.kernel.org/linux-pci/20221130112221.66612-1-mika.westerberg@linux.intel.com/
> > 
> > We would appreciate your comments and testing as that series is developed.
> 
> Thank you, Bjorn.  This definitely looks related, but as you've already
> noted in your review there, present patch does not handle BARs of the bridge
> itself, that I have in my case.  I'd be happy to test the updated patch.
> Please keep me in a loop.
> 
> I also agree with your comment that the same should be done in case of
> multiple bridges.  I am generally not sure the cases of single bridge or not
> having hot-plug on this level should be any specific.

Yeah, I'm working on a new version of the patch series that should take
these into consideration. The challenge is that the code has been used
with the Thunderbolt/USB4 PCIe tunneling for some time already and we
don't want to break that either.

I'm also more than happy to test any patches regarding this if someone
else wants to work on it ;-)

  reply	other threads:[~2022-12-13  5:49 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <2ec11223-edb3-5f5c-62cd-3532d92de0a4@ixsystems.com>
     [not found] ` <CAErSpo7WrAg5D4xyv0SycoDc1etSspU_TL6XMAK4STYrXDrGNQ@mail.gmail.com>
2022-12-12 21:10   ` pci_bus_distribute_available_resources() is wrong? Alexander Motin
2022-12-13  5:49     ` Mika Westerberg [this message]
2022-12-13 14:11       ` Alexander Motin
2022-12-13 14:48         ` Mika Westerberg
2022-12-13 15:00           ` Alexander Motin
2022-12-13 15:10             ` Mika Westerberg

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=Y5gSfJd0H4rKXe9H@black.fi.intel.com \
    --to=mika.westerberg@linux.intel.com \
    --cc=bhelgaas@google.com \
    --cc=bjorn@helgaas.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=mav@ixsystems.com \
    --cc=nicholas.johnson-opensource@outlook.com.au \
    --cc=nwolff@ixsystems.com \
    /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