>-----Original Message----- >From: dri-devel <dri-devel-boun...@lists.freedesktop.org> On Behalf Of Ilpo >Järvinen >Sent: Thursday, September 11, 2025 3:56 AM >To: linux-...@vger.kernel.org; Bjorn Helgaas <bhelg...@google.com>; >Krzysztof Wilczyński <k...@linux.com>; Christian König ><christian.koe...@amd.com>; Winiarski, Michal <michal.winiar...@intel.com>; >Alex Deucher <alexander.deuc...@amd.com>; amd-...@lists.freedesktop.org; >David Airlie <airl...@gmail.com>; dri-devel@lists.freedesktop.org; intel- >g...@lists.freedesktop.org; intel...@lists.freedesktop.org; Jani Nikula ><jani.nik...@linux.intel.com>; Joonas Lahtinen ><joonas.lahti...@linux.intel.com>; De Marchi, Lucas ><lucas.demar...@intel.com>; Vivi, Rodrigo <rodrigo.v...@intel.com>; Simona >Vetter <sim...@ffwll.ch>; Tvrtko Ursulin <tursu...@ursulin.net>; ?UTF- >8?q?Thomas=20Hellstr=C3=B6m?= <thomas.hellst...@linux.intel.com>; linux- >ker...@vger.kernel.org >Cc: linux-...@vger.kernel.org; Ilpo Järvinen <ilpo.jarvi...@linux.intel.com> >Subject: [PATCH 02/11] PCI: Cleanup pci_rebar_bytes_to_size() and move into >rebar.c > >Move pci_rebar_bytes_to_size() from include/linux/pci.h into rebar.c as >it does not look very trivial and is not expected to be performance >critical. > >Convert literals to use a newly added PCI_REBAR_MIN_SIZE define. > >Also add kernel doc for the function as the function is exported. > >Signed-off-by: Ilpo Järvinen <ilpo.jarvi...@linux.intel.com> >--- > drivers/pci/rebar.c | 23 +++++++++++++++++++++++ > include/linux/pci.h | 10 +++------- > 2 files changed, 26 insertions(+), 7 deletions(-) > >diff --git a/drivers/pci/rebar.c b/drivers/pci/rebar.c >index b87cfa6fb3ef..961bd43be02b 100644 >--- a/drivers/pci/rebar.c >+++ b/drivers/pci/rebar.c >@@ -7,11 +7,34 @@ > #include <linux/errno.h> > #include <linux/export.h> > #include <linux/ioport.h> >+#include <linux/log2.h> > #include <linux/pci.h> >+#include <linux/sizes.h> > #include <linux/types.h> > > #include "pci.h" > >+#define PCI_REBAR_MIN_SIZE ((resource_size_t)SZ_1M) >+ >+/** >+ * pci_rebar_bytes_to_size - Convert size in bytes to PCI BAR Size >+ * @bytes: size in bytes >+ * >+ * Convert bytes to BAR Size in Resizable BAR Capability (PCIe r6.2, >+ * sec. 7.8.6.3). >+ * >+ * Return: BAR Size as defined in the PCIe spec (0=1MB, bit 31=128TB).
Thank you for this helper and documentation. I wasted a lot of time to trying to understand this usage a few years ago. Regardless of the rest of the patch set, this update should be used. Reviewed-by: Michael J. Ruhl <mjr...@habana.ai Mike >+ */ >+int pci_rebar_bytes_to_size(u64 bytes) >+{ >+ int rebar_minsize = ilog2(PCI_REBAR_MIN_SIZE); >+ >+ bytes = roundup_pow_of_two(bytes); >+ >+ return max(ilog2(bytes), rebar_minsize) - rebar_minsize; >+} >+EXPORT_SYMBOL_GPL(pci_rebar_bytes_to_size); >+ > void pci_rebar_init(struct pci_dev *pdev) > { > pdev->rebar_cap = pci_find_ext_capability(pdev, >PCI_EXT_CAP_ID_REBAR); >diff --git a/include/linux/pci.h b/include/linux/pci.h >index 59876de13860..894e9020b07d 100644 >--- a/include/linux/pci.h >+++ b/include/linux/pci.h >@@ -1418,16 +1418,12 @@ void pcibios_reset_secondary_bus(struct pci_dev >*dev); > void pci_update_resource(struct pci_dev *dev, int resno); > int __must_check pci_assign_resource(struct pci_dev *dev, int i); > void pci_release_resource(struct pci_dev *dev, int resno); >-static inline int pci_rebar_bytes_to_size(u64 bytes) >-{ >- bytes = roundup_pow_of_two(bytes); >- >- /* Return BAR size as defined in the resizable BAR specification */ >- return max(ilog2(bytes), 20) - 20; >-} > >+/* Resizable BAR related routines */ >+int pci_rebar_bytes_to_size(u64 bytes); > u32 pci_rebar_get_possible_sizes(struct pci_dev *pdev, int bar); > int __must_check pci_resize_resource(struct pci_dev *dev, int i, int size); >+ > int pci_select_bars(struct pci_dev *dev, unsigned long flags); > bool pci_device_is_present(struct pci_dev *pdev); > void pci_ignore_hotplug(struct pci_dev *dev); >-- >2.39.5