From: "Pali Rohár" <pali@kernel.org>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: "Martin Mareš" <mj@ucw.cz>, "Krzysztof Wilczyński" <kw@linux.com>,
"Matthew Wilcox" <willy@infradead.org>,
linux-pci@vger.kernel.org
Subject: IORESOURCE_WINDOW for PCI-to-PCI bridges
Date: Fri, 11 Nov 2022 21:09:45 +0100 [thread overview]
Message-ID: <20221111200945.qlholxaoa2ecrfm4@pali> (raw)
In-Reply-To: <20220120210212.GA1066435@bhelgaas>
On Thursday 20 January 2022 15:02:12 Bjorn Helgaas wrote:
> On Thu, Jan 20, 2022 at 09:45:05PM +0100, Pali Rohár wrote:
> > On Thursday 20 January 2022 14:33:52 Bjorn Helgaas wrote:
> > > On Fri, Dec 31, 2021 at 11:27:48PM +0100, Pali Rohár wrote:
> > > > On Sunday 26 December 2021 23:20:27 Pali Rohár wrote:
> > > > > On Sunday 26 December 2021 23:13:11 Martin Mareš wrote:
> > > > > > Hi!
> > > > > >
> > > > > > > + else if (i < 7+6+4)
> > > > > > > + {
> > > > > > > + /*
> > > > > > > + * If kernel was compiled without CONFIG_PCI_IOV option then after
> > > > > > > + * the ROM line for configured bridge device (that which had set
> > > > > > > + * subordinary bus number to non-zero value) are four additional lines
> > > > > > > + * which describe resources behind bridge. For PCI-to-PCI bridges they
> > > > > > > + * are: IO, MEM, PREFMEM and empty. For CardBus bridges they are: IO0,
> > > > > > > + * IO1, MEM0 and MEM1. For unconfigured bridges and other devices
> > > > > > > + * there is no additional line after the ROM line. If kernel was
> > > > > > > + * compiled with CONFIG_PCI_IOV option then after the ROM line and
> > > > > > > + * before the first bridge resource line are six additional lines
> > > > > > > + * which describe IOV resources. Read all remaining lines in resource
> > > > > > > + * file and based on the number of remaining lines (0, 4, 6, 10) parse
> > > > > > > + * resources behind bridge.
> > > > > > > + */
> > > > > > > + lines[i-7].flags = flags;
> > > > > > > + lines[i-7].base_addr = start;
> > > > > > > + lines[i-7].size = size;
> > > > > > > + }
> > > > > > > + }
> > > > > > > + if (i == 7+4 || i == 7+6+4)
> > > > > >
> > > > > > This looks crazy: is there any other way how to tell what the
> > > > > > bridge entries mean? Checking the number of entries looks very
> > > > > > brittle.
> > > > >
> > > > > I do not know any other way. Just for reference, here is a link to
> > > > > the function resource_show() and DEVICE_COUNT_RESOURCE enum:
> > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/pci/pci-sysfs.c?h=v5.15#n136
> > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/pci.h?h=v5.15#n94
> > > >
> > > > I have also checked flags and there is no indication if resource is
> > > > assigned on bridge as BAR or is forwarded behind the bridge.
> > > >
> > > > Bjorn, Krzysztof: any idea if something better than checking number
> > > > of entries in "resource" node can be used to determinate type of
> > > > entry at specified line in "resource" node?
> > >
> > > That *is* crazy. I'm sorry that resource_show() works that way, and
> > > that it gives no clue to identify BAR vs ROM vs IOV BAR vs CB window
> > > vs regular bridge window.
> > >
> > > It's conceivable that we could add "io_window" and "mem_window" files
> > > or something similar.
> >
> > Meanwhile I found out that in linux/ioport.h file is IORESOURCE_WINDOW
> > constant with comment /* forwarded by bridge */
> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/ioport.h?h=v5.15#n56
> >
> > But apparently it is not set for resources behind PCI bridges and
> > therefore it is not available in column of "resources" sysfs file.
> >
> > So maybe instead of adding new sysfs files, it would be better way to
> > implement this flag and export it in flags column of "resources" file
> > for every row which belongs to resources behind bridges?
>
> I looked at that, too. Today we only set IORESOURCE_WINDOW for host
> bridge windows. Maybe it could be set for PCI-to-PCI bridge windows,
> too. Would have to audit users to make sure it wouldn't break
> anything.
Hello Bjorn, I would like to remind this older issue. Did you have a time
to audit usage of IORESOURCE_WINDOW? Some flag for resource forwarding
windows in PCI-to-PCI bridges would really help userspace application to
distinguish between IO/MEM BARs an IO/MEM forwarding windows.
next prev parent reply other threads:[~2022-11-11 20:10 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-20 15:54 [PATCH pciutils 1/4] lspci: Show 16/32/64 bit width for address ranges behind bridge Pali Rohár
2021-12-20 15:54 ` [PATCH pciutils 2/4] lspci: Simplify printing range in show_range() Pali Rohár
2021-12-20 15:54 ` [PATCH pciutils 3/4] libpci: Add support for filling bridge resources Pali Rohár
2021-12-26 22:13 ` Martin Mareš
2021-12-26 22:20 ` Pali Rohár
2021-12-31 22:27 ` Pali Rohár
2022-01-20 20:33 ` Bjorn Helgaas
2022-01-20 20:45 ` Pali Rohár
2022-01-20 21:02 ` Bjorn Helgaas
2022-01-20 21:19 ` Pali Rohár
2022-11-11 20:09 ` Pali Rohár [this message]
2022-11-11 21:05 ` IORESOURCE_WINDOW for PCI-to-PCI bridges Bjorn Helgaas
2022-11-11 21:48 ` Pali Rohár
2022-11-15 22:15 ` Bjorn Helgaas
2021-12-20 15:54 ` [PATCH pciutils 4/4] lspci: Use PCI_FILL_BRIDGE_BASES to detect if range behind bridge is disabled or unsupported Pali Rohár
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=20221111200945.qlholxaoa2ecrfm4@pali \
--to=pali@kernel.org \
--cc=helgaas@kernel.org \
--cc=kw@linux.com \
--cc=linux-pci@vger.kernel.org \
--cc=mj@ucw.cz \
--cc=willy@infradead.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