linux-kernel.vger.kernel.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).