All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Thomas Meyer <thomas@m3y3r.de>, Ingo Molnar <mingo@elte.hu>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	LKML <linux-kernel@vger.kernel.org>,
	Adrian Bunk <bunk@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Natalie Protasevich <protasnb@gmail.com>
Subject: Re: ohci1394 problem (MMIO broken) (was 2.6.25-rc6-git6: Reported regressions from 2.6.24)
Date: Thu, 27 Mar 2008 10:25:46 +1100	[thread overview]
Message-ID: <1206573946.6926.51.camel@pasglop> (raw)
In-Reply-To: <1206502750.10573.12.camel@pasglop>

While at it, here's an updated version of my patch that applies on top
of yesterday git. I also turned "len" into a resource_size_t as it's
technically the right type to use in the generic code, even if it makes
little sense to try to map more than 32 bits on a 32 bits arch :-) Maybe
we should actually add some kind of warning here or error checking
though rather than just cropping the value.

I "fixed" all archs even those that don't technically need it (like real
64 bits one) for consistency (and who knows if they ever want to make
resource_size_t even bigger ...). The patch actually fixes at least one
bug in the case of arch/ppc which needs that change.
---

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>
---

Index: linux-work/lib/iomap.c
===================================================================
--- linux-work.orig/lib/iomap.c	2008-03-26 10:39:25.000000000 +1100
+++ linux-work/lib/iomap.c	2008-03-27 10:20:14.000000000 +1100
@@ -257,7 +257,7 @@ EXPORT_SYMBOL(ioport_unmap);
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 {
 	resource_size_t start = pci_resource_start(dev, bar);
-	unsigned long len = pci_resource_len(dev, bar);
+	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (!len || !start)
Index: linux-work/arch/alpha/kernel/pci.c
===================================================================
--- linux-work.orig/arch/alpha/kernel/pci.c	2007-09-28 11:42:04.000000000 +1000
+++ linux-work/arch/alpha/kernel/pci.c	2008-03-27 10:19:59.000000000 +1100
@@ -547,8 +547,8 @@ sys_pciconfig_iobase(long which, unsigne
 
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 {
-	unsigned long start = pci_resource_start(dev, bar);
-	unsigned long len = pci_resource_len(dev, bar);
+	resource_size_t start = pci_resource_start(dev, bar);
+	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (!len || !start)
Index: linux-work/arch/arm/mm/iomap.c
===================================================================
--- linux-work.orig/arch/arm/mm/iomap.c	2007-07-27 13:44:41.000000000 +1000
+++ linux-work/arch/arm/mm/iomap.c	2008-03-27 10:19:59.000000000 +1100
@@ -26,8 +26,8 @@ EXPORT_SYMBOL(ioport_unmap);
 #ifdef CONFIG_PCI
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 {
-	unsigned long start = pci_resource_start(dev, bar);
-	unsigned long len   = pci_resource_len(dev, bar);
+	resource_size_t start = pci_resource_start(dev, bar);
+	resource_size_t len   = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (!len || !start)
Index: linux-work/arch/frv/mb93090-mb00/pci-iomap.c
===================================================================
--- linux-work.orig/arch/frv/mb93090-mb00/pci-iomap.c	2007-07-27 13:44:41.000000000 +1000
+++ linux-work/arch/frv/mb93090-mb00/pci-iomap.c	2008-03-27 10:19:59.000000000 +1100
@@ -13,8 +13,8 @@
 
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 {
-	unsigned long start = pci_resource_start(dev, bar);
-	unsigned long len = pci_resource_len(dev, bar);
+	resource_size_t start = pci_resource_start(dev, bar);
+	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (!len || !start)
Index: linux-work/arch/mips/lib/iomap-pci.c
===================================================================
--- linux-work.orig/arch/mips/lib/iomap-pci.c	2007-09-28 11:42:05.000000000 +1000
+++ linux-work/arch/mips/lib/iomap-pci.c	2008-03-27 10:19:59.000000000 +1100
@@ -45,8 +45,8 @@ static void __iomem *ioport_map_pci(stru
  */
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 {
-	unsigned long start = pci_resource_start(dev, bar);
-	unsigned long len = pci_resource_len(dev, bar);
+	resource_size_t start = pci_resource_start(dev, bar);
+	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (!len || !start)
Index: linux-work/arch/parisc/lib/iomap.c
===================================================================
--- linux-work.orig/arch/parisc/lib/iomap.c	2007-07-27 13:44:42.000000000 +1000
+++ linux-work/arch/parisc/lib/iomap.c	2008-03-27 10:19:59.000000000 +1100
@@ -438,8 +438,8 @@ void ioport_unmap(void __iomem *addr)
 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 {
-	unsigned long start = pci_resource_start(dev, bar);
-	unsigned long len = pci_resource_len(dev, bar);
+	resource_size_t start = pci_resource_start(dev, bar);
+	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (!len || !start)
Index: linux-work/arch/sh/drivers/pci/pci.c
===================================================================
--- linux-work.orig/arch/sh/drivers/pci/pci.c	2008-03-19 13:52:27.000000000 +1100
+++ linux-work/arch/sh/drivers/pci/pci.c	2008-03-27 10:19:59.000000000 +1100
@@ -191,8 +191,8 @@ void __init pcibios_update_irq(struct pc
 
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 {
-	unsigned long start = pci_resource_start(dev, bar);
-	unsigned long len = pci_resource_len(dev, bar);
+	resource_size_t start = pci_resource_start(dev, bar);
+	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (unlikely(!len || !start))
Index: linux-work/arch/mn10300/unit-asb2305/pci-iomap.c
===================================================================
--- linux-work.orig/arch/mn10300/unit-asb2305/pci-iomap.c	2008-03-19 13:52:26.000000000 +1100
+++ linux-work/arch/mn10300/unit-asb2305/pci-iomap.c	2008-03-27 10:19:59.000000000 +1100
@@ -16,8 +16,8 @@
  */
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 {
-	unsigned long start = pci_resource_start(dev, bar);
-	unsigned long len = pci_resource_len(dev, bar);
+	resource_size_t start = pci_resource_start(dev, bar);
+	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (!len || !start)
Index: linux-work/arch/ppc/kernel/pci.c
===================================================================
--- linux-work.orig/arch/ppc/kernel/pci.c	2007-09-28 11:42:05.000000000 +1000
+++ linux-work/arch/ppc/kernel/pci.c	2008-03-27 10:19:59.000000000 +1100
@@ -1176,8 +1176,8 @@ void __init pci_init_resource(struct res
 
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
 {
-	unsigned long start = pci_resource_start(dev, bar);
-	unsigned long len = pci_resource_len(dev, bar);
+	resource_size_t start = pci_resource_start(dev, bar);
+	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (!len)
Index: linux-work/arch/sparc/lib/iomap.c
===================================================================
--- linux-work.orig/arch/sparc/lib/iomap.c	2007-07-27 13:44:42.000000000 +1000
+++ linux-work/arch/sparc/lib/iomap.c	2008-03-27 10:19:59.000000000 +1100
@@ -21,8 +21,8 @@ EXPORT_SYMBOL(ioport_unmap);
 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 {
-	unsigned long start = pci_resource_start(dev, bar);
-	unsigned long len = pci_resource_len(dev, bar);
+	resource_size_t start = pci_resource_start(dev, bar);
+	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (!len || !start)
Index: linux-work/arch/sparc64/lib/iomap.c
===================================================================
--- linux-work.orig/arch/sparc64/lib/iomap.c	2007-07-27 13:44:42.000000000 +1000
+++ linux-work/arch/sparc64/lib/iomap.c	2008-03-27 10:19:59.000000000 +1100
@@ -21,8 +21,8 @@ EXPORT_SYMBOL(ioport_unmap);
 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 {
-	unsigned long start = pci_resource_start(dev, bar);
-	unsigned long len = pci_resource_len(dev, bar);
+	resource_size_t start = pci_resource_start(dev, bar);
+	resource_size_t len = pci_resource_len(dev, bar);
 	unsigned long flags = pci_resource_flags(dev, bar);
 
 	if (!len || !start)
Index: linux-work/arch/v850/kernel/rte_mb_a_pci.c
===================================================================
--- linux-work.orig/arch/v850/kernel/rte_mb_a_pci.c	2008-03-03 11:58:41.000000000 +1100
+++ linux-work/arch/v850/kernel/rte_mb_a_pci.c	2008-03-27 10:19:59.000000000 +1100
@@ -790,8 +790,8 @@ pci_free_consistent (struct pci_dev *pde
 
 void __iomem *pci_iomap (struct pci_dev *dev, int bar, unsigned long max)
 {
-	unsigned long start = pci_resource_start (dev, bar);
-	unsigned long len = pci_resource_len (dev, bar);
+	resource_size_t start = pci_resource_start (dev, bar);
+	resource_size_t len = pci_resource_len (dev, bar);
 
 	if (!start || len == 0)
 		return 0;



  reply	other threads:[~2008-03-26 23:27 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-22  1:59 2.6.25-rc6-git6: Reported regressions from 2.6.24 Rafael J. Wysocki
2008-03-22  2:52 ` Jeff Garzik
2008-03-22 11:11   ` Ingo Molnar
2008-03-22  5:33 ` Andrew Morton
2008-03-22 11:15   ` Ingo Molnar
2008-03-22 17:53     ` Rafael J. Wysocki
2008-03-22 16:32 ` Heiko Carstens
2008-03-22 17:56   ` Rafael J. Wysocki
2008-03-22 16:34 ` ohci1394 problem (MMIO broken) (was 2.6.25-rc6-git6: Reported regressions from 2.6.24) Stefan Richter
2008-03-22 17:24   ` Thomas Meyer
2008-03-22 17:58     ` Rafael J. Wysocki
2008-03-22 18:27     ` Stefan Richter
2008-03-22 19:02       ` Stefan Richter
2008-03-22 21:33         ` Linus Torvalds
2008-03-22 21:58           ` Thomas Gleixner
2008-03-22 21:59           ` H. Peter Anvin
2008-03-22 22:27             ` ohci1394 problem (MMIO broken) (was 2.6.25-rc6-git6: Reported regressions from 2.6.24) [Bug 10080] Stefan Richter
2008-03-22 23:28             ` ohci1394 problem (MMIO broken) (was 2.6.25-rc6-git6: Reported regressions from 2.6.24) Yinghai Lu
2008-03-22 23:31               ` H. Peter Anvin
2008-03-23  2:00                 ` Yinghai Lu
2008-03-23  2:39                   ` H. Peter Anvin
2008-03-23  3:30                     ` Yinghai Lu
2008-03-22 23:01           ` Linus Torvalds
2008-03-22 23:50             ` Stefan Richter
2008-03-23  6:35               ` Ingo Molnar
2008-03-24 19:34                 ` Thomas Meyer
2008-03-24 19:47                   ` Ingo Molnar
2008-03-24 20:17                     ` Thomas Meyer
2008-03-24 20:47                       ` Linus Torvalds
2008-03-26  3:39                         ` Benjamin Herrenschmidt
2008-03-26 23:25                           ` Benjamin Herrenschmidt [this message]
2008-03-24 19:58             ` Thomas Meyer
2008-03-24 20:50               ` Linus Torvalds
2008-03-24 21:24                 ` Stefan Richter
2008-03-24 21:47               ` Stefan Richter
2008-03-25  7:31                 ` Ingo Molnar
2008-03-25 16:50                   ` Ingo Molnar
2008-03-25 17:06                     ` Stefan Richter
2008-03-25 18:32                     ` Thomas Meyer
2008-03-25 20:11                       ` Ingo Molnar
2008-03-25 20:29                         ` Ingo Molnar
2008-03-25 21:08                           ` Thomas Meyer
2008-03-25 21:47                             ` Linus Torvalds
2008-03-25 22:02                               ` Thomas Meyer
2008-03-26 10:14                               ` Ivan Kokshaysky
2008-03-26 12:17                                 ` Benjamin Herrenschmidt
2008-03-26 13:54                                 ` [patch] pci: revert "PCI: remove transparent bridge sizing" Ingo Molnar
2008-03-26 17:45                                   ` Thomas Meyer
2008-03-26 18:07                                   ` Gary Hade
2008-03-26 18:33                                     ` Linus Torvalds
2008-03-26 20:30                                       ` Gary Hade
2008-03-26 20:46                                         ` Linus Torvalds
2008-03-26 20:58                                           ` Ivan Kokshaysky
2008-03-26 21:41                                             ` Linus Torvalds
2008-03-26 21:57                                               ` Benjamin Herrenschmidt
2008-03-26 22:07                                                 ` Alan Cox
2008-03-26 22:27                                                   ` Benjamin Herrenschmidt
2008-03-26 22:10                                                 ` Ingo Molnar
2008-03-26 22:29                                                   ` Benjamin Herrenschmidt
2008-03-26 22:47                                                     ` Linus Torvalds
2008-03-26 22:54                                                       ` Benjamin Herrenschmidt
2008-03-26 23:18                                                         ` Benjamin Herrenschmidt
2008-03-26 22:30                                                   ` Ingo Molnar
2008-03-26 22:31                                                 ` Linus Torvalds
2008-03-26 22:47                                                   ` Alan Cox
2008-03-26 23:17                                                     ` Benjamin Herrenschmidt
2008-03-26 23:29                                               ` Ivan Kokshaysky
2008-03-26 23:43                                                 ` Linus Torvalds
2008-03-27 17:12                                                   ` Linus Torvalds
2008-03-27 22:18                                                     ` Ivan Kokshaysky
2008-03-27 22:34                                                       ` Linus Torvalds
2008-03-28 19:24                                                       ` Gary Hade
2008-03-28 20:46                                                         ` Gary Hade
2008-03-30 15:44                                                           ` Ivan Kokshaysky
2008-03-26 23:45                                                 ` Benjamin Herrenschmidt
2008-03-26 21:29                                     ` Ingo Molnar
2008-03-26 11:12                           ` ohci1394 problem (MMIO broken) (was 2.6.25-rc6-git6: Reported regressions from 2.6.24) Ivan Kokshaysky
2008-03-25 21:02                         ` Thomas Meyer
2008-03-25 23:33           ` Benjamin Herrenschmidt
2008-03-26  0:03             ` Yinghai Lu
2008-03-26  0:12               ` Benjamin Herrenschmidt
2008-03-23 12:57 ` 2.6.25-rc6-git6: Reported regressions from 2.6.24 Alan Cox
2008-03-26 16:30 ` Ray Lee
2008-03-26 17:02   ` Adrian Bunk
2008-03-26 22:11   ` Rafael J. Wysocki
2008-03-27 10:18   ` Romano Giannetti
2008-03-27 14:43     ` Ray Lee
2008-03-31 18:21 ` Linus Torvalds
2008-03-31 19:29   ` Mark Lord
2008-03-31 21:04     ` Tino Keitel
2008-03-31 21:26       ` Tino Keitel
2008-04-03 19:06     ` 2.6.25-rc7/8: Another resume regression Mark Lord
2008-04-05  2:27       ` Mark Lord
2008-04-07 10:51         ` Rafael J. Wysocki
2008-04-07 15:51           ` Mark Lord
2008-04-07 17:40             ` Rafael J. Wysocki
2008-04-08 15:35               ` Mark Lord

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=1206573946.6926.51.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=akpm@linux-foundation.org \
    --cc=bunk@kernel.org \
    --cc=ink@jurassic.park.msu.ru \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=protasnb@gmail.com \
    --cc=rjw@sisk.pl \
    --cc=stefanr@s5r6.in-berlin.de \
    --cc=tglx@linutronix.de \
    --cc=thomas@m3y3r.de \
    --cc=torvalds@linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.