From: "Krzysztof Wilczyński" <kwilczynski@kernel.org>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: "Bjorn Helgaas" <bhelgaas@google.com>,
"Manivannan Sadhasivam" <mani@kernel.org>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Magnus Lindholm" <linmag7@gmail.com>,
"Matt Turner" <mattst88@gmail.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Christophe Leroy" <chleroy@kernel.org>,
"Madhavan Srinivasan" <maddy@linux.ibm.com>,
"Michael Ellerman" <mpe@ellerman.id.au>,
"Nicholas Piggin" <npiggin@gmail.com>,
"Dexuan Cui" <decui@microsoft.com>,
"Krzysztof Hałasa" <khalasa@piap.pl>,
"Lukas Wunner" <lukas@wunner.de>,
"Oliver O'Halloran" <oohall@gmail.com>,
"Saurabh Singh Sengar" <ssengar@microsoft.com>,
"Shuan He" <heshuan@bytedance.com>,
"Srivatsa Bhat" <srivatsabhat@microsoft.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
linux-pci@vger.kernel.org, linux-alpha@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v6 24/24] PCI/sysfs: Limit BAR resize attribute scope to platforms with PCI mmap
Date: Thu, 30 Apr 2026 06:53:13 +0900 [thread overview]
Message-ID: <20260429212749.GB3724801@rocinante> (raw)
In-Reply-To: <20260429204932.GA318462@bhelgaas>
Hello,
> > The resourceN_resize sysfs attributes allow users to resize
> > Resizable BARs (ReBAR). After a successful resize, the resource
> > attribute groups are removed and recreated so that the updated
> > BAR sizes are reflected in the sysfs files.
>
> Out of curiosity, where does this removal/recreation happen? I don't
> see it in pci_resize_resource() or
> pci_do_resource_release_and_resize().
The __resource_resize_store() helper carries the relevant code, per:
sysfs_remove_groups(&pdev->dev.kobj, pci_dev_resource_attr_groups);
ret = pci_resize_resource(pdev, n, size, 0);
if (ret)
pci_warn(pdev, "Failed to resize BAR %d: %pe\n",
n, ERR_PTR(ret));
pci_assign_unassigned_bus_resources(bus);
if (sysfs_create_groups(&pdev->dev.kobj, pci_dev_resource_attr_groups))
pci_warn(pdev, "Failed to recreate resource groups after BAR resizing\n");
pci_write_config_word(pdev, PCI_COMMAND, cmd);
This takes place under the device_lock() with a given device woken up using
pci_config_pm_runtime_get().
See for reference:
https://elixir.bootlin.com/linux/v7.0.1/source/drivers/pci/pci-sysfs.c#L1596
> > Resizable BARs are a PCI Express extended capability
> > (PCI_EXT_CAP_ID_REBAR), which requires PCIe extended config
> > space.
>
> It sounds like the fact that ReBAR requires extended config space is
> important somehow (beyond just the fact that we can't discover ReBAR
> without it)? Is there some connection between extended config space
> and mmap?
No, there is no connection between extended configuration space and mmap.
I was trying to establish two separate facts:
- ReBAR requires PCI Express (for the extended configuration
space support).
- Every PCI Express-capable architecture defines either
HAVE_PCI_MMAP or ARCH_GENERIC_PCI_MMAP_RESOURCE.
The commit message should have captured the reasoning better.
> > Every PCIe-capable architecture defines either HAVE_PCI_MMAP or
> > ARCH_GENERIC_PCI_MMAP_RESOURCE (via the relevant arch headers
> > or the generic asm-generic/pci.h fallback). On platforms that
> > define neither, the resource files are not created and the sysfs
> > group remove and create calls in __resource_resize_store() are
> > no-ops.
>
> What's the connection between ReBAR and mmap?
The connection is somewhat indirect, through the sysfs resource files.
The resourceN_resize attribute exists so userspace can resize a BAR and
then access it through the resourceN sysfs files. Those resource files
only exist on platforms that define HAVE_PCI_MMAP or
ARCH_GENERIC_PCI_MMAP_RESOURCE.
On architectures without either of these defines, pci_dev_resource_attr_groups
array will be NULL and the sysfs_remove_groups() and sysfs_create_groups()
calls in __resource_resize_store() are no-ops. And there will be no
resource files to tear down or recreate.
To add, there are some kernel drivers that need ReBAR call pci_resize_resource()
directly (e.g., amdgpu, xe, i915), not through the sysfs attribute.
The only platform without these aforementioned defines is Alpha, which is
conventional PCI only and cannot have ReBAR. So this guard removes dead
sysfs code on platforms where it can never be executed.
Hope this helps.
Thank you!
Krzysztof
next prev parent reply other threads:[~2026-04-29 21:53 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-22 16:13 [PATCH v6 00/24] PCI: Convert all dynamic sysfs attributes to static Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 01/24] PCI/sysfs: Use PCI resource accessor macros Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 02/24] PCI: Add pci_resource_is_io() and pci_resource_is_mem() helpers Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 03/24] PCI/sysfs: Only allow supported resource types in I/O and MMIO helpers Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 04/24] PCI/sysfs: Use BAR length in pci_llseek_resource() when attr->size is zero Krzysztof Wilczyński
2026-04-29 19:50 ` Bjorn Helgaas
2026-04-29 20:53 ` Krzysztof Wilczyński
2026-04-30 23:32 ` Krzysztof Wilczyński
2026-05-05 21:46 ` Bjorn Helgaas
2026-05-05 23:19 ` Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 05/24] PCI/sysfs: Add CAP_SYS_ADMIN check to __resource_resize_store() Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 06/24] PCI/sysfs: Add static PCI resource attribute macros Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 07/24] PCI/sysfs: Convert PCI resource files to static attributes Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 08/24] PCI/sysfs: Warn about BAR resize failure in __resource_resize_store() Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 09/24] PCI/sysfs: Add stubs for pci_{create,remove}_sysfs_dev_files() Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 10/24] PCI/sysfs: Limit pci_sysfs_init() late_initcall compile scope Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 11/24] alpha/PCI: Add security_locked_down() check to pci_mmap_resource() Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 12/24] alpha/PCI: Use BAR index in sysfs attr->private instead of resource pointer Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 13/24] alpha/PCI: Use PCI resource accessor macros Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 14/24] alpha/PCI: Fix __pci_mmap_fits() overflow for zero-length BARs Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 15/24] alpha/PCI: Remove WARN from __pci_mmap_fits() Krzysztof Wilczyński
2026-04-22 16:13 ` [PATCH v6 16/24] alpha/PCI: Add static PCI resource attribute macros Krzysztof Wilczyński
2026-04-22 16:14 ` [PATCH v6 17/24] alpha/PCI: Convert resource files to static attributes Krzysztof Wilczyński
2026-04-22 16:14 ` [PATCH v6 18/24] PCI/sysfs: Remove pci_{create,remove}_sysfs_dev_files() Krzysztof Wilczyński
2026-04-22 16:14 ` [PATCH v6 19/24] PCI: Add macros for legacy I/O and memory address space sizes Krzysztof Wilczyński
2026-04-22 16:14 ` [PATCH v6 20/24] alpha/PCI: Compute legacy size in pci_mmap_legacy_page_range() Krzysztof Wilczyński
2026-04-22 16:14 ` [PATCH v6 21/24] PCI/sysfs: Add __weak pci_legacy_has_sparse() helper Krzysztof Wilczyński
2026-04-22 16:14 ` [PATCH v6 22/24] PCI/sysfs: Convert legacy I/O and memory attributes to static definitions Krzysztof Wilczyński
2026-04-22 16:14 ` [PATCH v6 23/24] PCI/sysfs: Remove pci_create_legacy_files() and pci_sysfs_init() Krzysztof Wilczyński
2026-04-22 16:14 ` [PATCH v6 24/24] PCI/sysfs: Limit BAR resize attribute scope to platforms with PCI mmap Krzysztof Wilczyński
2026-04-29 20:49 ` Bjorn Helgaas
2026-04-29 21:53 ` Krzysztof Wilczyński [this message]
2026-04-30 2:51 ` Krzysztof Wilczyński
2026-05-05 22:01 ` Bjorn Helgaas
2026-05-05 23:42 ` Krzysztof Wilczyński
2026-05-06 17:48 ` Bjorn Helgaas
2026-04-23 17:22 ` [PATCH v6 00/24] PCI: Convert all dynamic sysfs attributes to static Krzysztof Wilczyński
2026-04-23 18:23 ` Bjorn Helgaas
2026-04-23 19:00 ` Krzysztof Wilczyński
2026-04-27 14:09 ` Shivaprasad G Bhat
2026-04-27 23:34 ` Krzysztof Wilczyński
2026-04-29 20:04 ` Bjorn Helgaas
2026-04-30 1:31 ` Krzysztof Wilczyński
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=20260429212749.GB3724801@rocinante \
--to=kwilczynski@kernel.org \
--cc=bhelgaas@google.com \
--cc=chleroy@kernel.org \
--cc=decui@microsoft.com \
--cc=helgaas@kernel.org \
--cc=heshuan@bytedance.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=khalasa@piap.pl \
--cc=linmag7@gmail.com \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lpieralisi@kernel.org \
--cc=lukas@wunner.de \
--cc=maddy@linux.ibm.com \
--cc=mani@kernel.org \
--cc=mattst88@gmail.com \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
--cc=oohall@gmail.com \
--cc=richard.henderson@linaro.org \
--cc=srivatsabhat@microsoft.com \
--cc=ssengar@microsoft.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