From: Alexander Motin <mav@ixsystems.com>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: Mika Westerberg <mika.westerberg@linux.intel.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: Mon, 12 Dec 2022 16:10:16 -0500 [thread overview]
Message-ID: <6053736d-1923-41e7-def9-7585ce1772d9@ixsystems.com> (raw)
In-Reply-To: <CAErSpo7WrAg5D4xyv0SycoDc1etSspU_TL6XMAK4STYrXDrGNQ@mail.gmail.com>
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).
>>
>> 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.
>
> 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.
>> It may be rare to see PCI bridges with BARs, but I know that at least
>> some PLX bridges also have BARs for configuration purposes. Also I
>> suppose the same problem would happen if there are other device on the
>> bus aside of the bridge.
>>
>> I've tried to disable pci_bus_distribute_available_resources(), and it
>> fixed the problem. But I suppose it may cause problems in cases for
>> which this function was developed (hot-plug of JBOD supporting
>> hot-plug?). Am I right?
>>
>> I would appreciate your feedback on this issue. I am new to this code
>> area of Linux and not sure how to better fix this, but the way the code
>> is written now looks very wrong to me.
>>
>> Thanks.
>>
>> --
>> Alexander Motin
--
Alexander Motin
next parent reply other threads:[~2022-12-12 21:10 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 ` Alexander Motin [this message]
2022-12-13 5:49 ` pci_bus_distribute_available_resources() is wrong? Mika Westerberg
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=6053736d-1923-41e7-def9-7585ce1772d9@ixsystems.com \
--to=mav@ixsystems.com \
--cc=bhelgaas@google.com \
--cc=bjorn@helgaas.com \
--cc=linux-pci@vger.kernel.org \
--cc=mika.westerberg@linux.intel.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