Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iomap: fix 64 bits resources on 32 bits

Almost all implementations of pci_iomap() in the kernel, including the generic
lib/iomap.c one, copies the content of a struct resource into unsigned long's
which will break on 32 bits platforms with 64 bits resources.

This fixes all definitions of pci_iomap() to use resource_size_t. I also
"fixed" the 64bits arch for consistency.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: <linux-arch@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Benjamin Herrenschmidt and committed by
Linus Torvalds
b70d3a2c 626adeb6

+23 -23
+2 -2
arch/alpha/kernel/pci.c
··· 514 514 515 515 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 516 516 { 517 - unsigned long start = pci_resource_start(dev, bar); 518 - unsigned long len = pci_resource_len(dev, bar); 517 + resource_size_t start = pci_resource_start(dev, bar); 518 + resource_size_t len = pci_resource_len(dev, bar); 519 519 unsigned long flags = pci_resource_flags(dev, bar); 520 520 521 521 if (!len || !start)
+2 -2
arch/arm/mm/iomap.c
··· 26 26 #ifdef CONFIG_PCI 27 27 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 28 28 { 29 - unsigned long start = pci_resource_start(dev, bar); 30 - unsigned long len = pci_resource_len(dev, bar); 29 + resource_size_t start = pci_resource_start(dev, bar); 30 + resource_size_t len = pci_resource_len(dev, bar); 31 31 unsigned long flags = pci_resource_flags(dev, bar); 32 32 33 33 if (!len || !start)
+2 -2
arch/frv/mb93090-mb00/pci-iomap.c
··· 13 13 14 14 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 15 15 { 16 - unsigned long start = pci_resource_start(dev, bar); 17 - unsigned long len = pci_resource_len(dev, bar); 16 + resource_size_t start = pci_resource_start(dev, bar); 17 + resource_size_t len = pci_resource_len(dev, bar); 18 18 unsigned long flags = pci_resource_flags(dev, bar); 19 19 20 20 if (!len || !start)
+2 -2
arch/mips/lib/iomap-pci.c
··· 45 45 */ 46 46 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 47 47 { 48 - unsigned long start = pci_resource_start(dev, bar); 49 - unsigned long len = pci_resource_len(dev, bar); 48 + resource_size_t start = pci_resource_start(dev, bar); 49 + resource_size_t len = pci_resource_len(dev, bar); 50 50 unsigned long flags = pci_resource_flags(dev, bar); 51 51 52 52 if (!len || !start)
+2 -2
arch/mn10300/unit-asb2305/pci-iomap.c
··· 16 16 */ 17 17 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 18 18 { 19 - unsigned long start = pci_resource_start(dev, bar); 20 - unsigned long len = pci_resource_len(dev, bar); 19 + resource_size_t start = pci_resource_start(dev, bar); 20 + resource_size_t len = pci_resource_len(dev, bar); 21 21 unsigned long flags = pci_resource_flags(dev, bar); 22 22 23 23 if (!len || !start)
+2 -2
arch/parisc/lib/iomap.c
··· 438 438 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ 439 439 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 440 440 { 441 - unsigned long start = pci_resource_start(dev, bar); 442 - unsigned long len = pci_resource_len(dev, bar); 441 + resource_size_t start = pci_resource_start(dev, bar); 442 + resource_size_t len = pci_resource_len(dev, bar); 443 443 unsigned long flags = pci_resource_flags(dev, bar); 444 444 445 445 if (!len || !start)
+2 -2
arch/ppc/kernel/pci.c
··· 1121 1121 1122 1122 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max) 1123 1123 { 1124 - unsigned long start = pci_resource_start(dev, bar); 1125 - unsigned long len = pci_resource_len(dev, bar); 1124 + resource_size_t start = pci_resource_start(dev, bar); 1125 + resource_size_t len = pci_resource_len(dev, bar); 1126 1126 unsigned long flags = pci_resource_flags(dev, bar); 1127 1127 1128 1128 if (!len)
+2 -2
arch/sh/drivers/pci/pci.c
··· 191 191 192 192 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 193 193 { 194 - unsigned long start = pci_resource_start(dev, bar); 195 - unsigned long len = pci_resource_len(dev, bar); 194 + resource_size_t start = pci_resource_start(dev, bar); 195 + resource_size_t len = pci_resource_len(dev, bar); 196 196 unsigned long flags = pci_resource_flags(dev, bar); 197 197 198 198 if (unlikely(!len || !start))
+2 -2
arch/sparc/lib/iomap.c
··· 21 21 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ 22 22 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 23 23 { 24 - unsigned long start = pci_resource_start(dev, bar); 25 - unsigned long len = pci_resource_len(dev, bar); 24 + resource_size_t start = pci_resource_start(dev, bar); 25 + resource_size_t len = pci_resource_len(dev, bar); 26 26 unsigned long flags = pci_resource_flags(dev, bar); 27 27 28 28 if (!len || !start)
+2 -2
arch/sparc64/lib/iomap.c
··· 21 21 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ 22 22 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 23 23 { 24 - unsigned long start = pci_resource_start(dev, bar); 25 - unsigned long len = pci_resource_len(dev, bar); 24 + resource_size_t start = pci_resource_start(dev, bar); 25 + resource_size_t len = pci_resource_len(dev, bar); 26 26 unsigned long flags = pci_resource_flags(dev, bar); 27 27 28 28 if (!len || !start)
+2 -2
arch/v850/kernel/rte_mb_a_pci.c
··· 790 790 791 791 void __iomem *pci_iomap (struct pci_dev *dev, int bar, unsigned long max) 792 792 { 793 - unsigned long start = pci_resource_start (dev, bar); 794 - unsigned long len = pci_resource_len (dev, bar); 793 + resource_size_t start = pci_resource_start (dev, bar); 794 + resource_size_t len = pci_resource_len (dev, bar); 795 795 796 796 if (!start || len == 0) 797 797 return 0;
+1 -1
lib/iomap.c
··· 257 257 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 258 258 { 259 259 resource_size_t start = pci_resource_start(dev, bar); 260 - unsigned long len = pci_resource_len(dev, bar); 260 + resource_size_t len = pci_resource_len(dev, bar); 261 261 unsigned long flags = pci_resource_flags(dev, bar); 262 262 263 263 if (!len || !start)