FAILED: Patch "PCI: Use resource_set_range() that correctly sets ->end" failed to apply to 5.10-stable tree
Subsystems (2)
Sasha Levin
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Thanks,
Sasha
------------------ original commit in Linus's tree ------------------
From 11721c45a8266a9d0c9684153d20e37159465f96 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= <[email protected]>
Date: Mon, 8 Dec 2025 16:56:54 +0200
Subject: [PATCH] PCI: Use resource_set_range() that correctly sets ->end
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
__pci_read_base() sets resource start and end addresses when resource is larger than 4G but pci_bus_addr_t or resource_size_t are not capable of representing 64-bit PCI addresses. This creates a problematic resource that has non-zero flags but the start and end addresses do not yield to resource size of 0 but 1.
Replace custom resource addresses setup with resource_set_range() that correctly sets end address as -1 which results in resource_size() returning 0.
For consistency, also use resource_set_range() in the other branch that does size based resource setup.
--- drivers/pci/probe.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/pci/probe.c +2 -4
@@ -287,8 +287,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,if ((sizeof (pci_bus_addr_t) <8 ||sizeof (resource_size_t) <8 ) && sz64 >0x100000000ULL ) { res->flags |=IORESOURCE_UNSET |IORESOURCE_DISABLED ; - res->start =0 ; - res->end =0 ; +resource_set_range (res,0 ,0 );pci_err (dev,"%s: can't handle BAR larger than 4GB (size %#010llx)\n" , res_name, (unsigned long long )sz64); goto out;
@@ -297,8 +296,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,if ((sizeof (pci_bus_addr_t) <8 ) && l) {/* Above 32-bit boundary; try to reallocate */ res->flags |=IORESOURCE_UNSET ; - res->start =0 ; - res->end = sz64 -1 ; +resource_set_range (res,0 , sz64);pci_info (dev,"%s: can't handle BAR above 4GB (bus address %#010llx)\n" , res_name, (unsigned long long )l64); goto out;
Signature · 1 line
2.51.0