lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20080218033600.A9761DDE35@ozlabs.org>
Date:	Mon, 18 Feb 2008 14:35:41 +1100
From:	Benjamin Herrenschmidt <benh@...nel.crashing.org>
To:	<linux-kernel@...r.kernel.org>
CC:	Greg Kroah-Hartman <greg@...ah.com>,
	Al Viro <viro@....linux.org.uk>, <jgarzik@...ox.com>,
	David Miller <davem@...emloft.net>,
	David Howells <dhowells@...hat.com>, <miles@....org>
Subject: [RFC/PATCH] iomap: Add specific address space __iomap for iomap pointers

The current iomap stuff (pci_iomap, ioport_map, pcim_iomap, ...) is
confusing as it returns pointers in the _miomem address space.

However, even if that would work on some architectures, the result
of those functions is -not- to be used as an __iomem, with accessors
such as readl/writel, but only with the new brand of specific accessors
(ioread32/iowrite32/...).

This causes confusion, there have been bugs in the past due to that,
and this is just wrong, so this is an attempt at fixing it by introducing
a new address space __iomap for the iomap stuff.

This patch adds the annotation and changes the generic and arch code
that returns these pointers. I have -not- yet started looking at drivers
and fixing them (that will be the hard part) and I may well have missed
or even borked things, as this stage, I'm looking for feedback on the
approach and for the affected arch maintainers to have a quick look in
case I missed something in their code.

_THIS_ _IS_ _UNTESTED_ (just so that you know !)

Note that incorrect address space annotations will not break build,
though they will spew warnings in sparse. So it is doable to get a
patch such as this one in, and -then- fix the drivers, though it would
be best to have as much conversion as possible done at once still.

Signed-off-by: Benjamin Herrenschmidt <benh@...nel.crashing.org>
---

 arch/frv/mb93090-mb00/pci-iomap.c |    4 -
 arch/powerpc/kernel/iomap.c       |   69 ++++++++++++++++--------------
 arch/sparc/lib/iomap.c            |   14 +++---
 arch/sparc64/lib/iomap.c          |   12 ++---
 arch/v850/kernel/rte_mb_a_pci.c   |    4 -
 include/asm-arm/io.h              |    8 +--
 include/asm-frv/io.h              |   16 +++---
 include/asm-generic/iomap.h       |   44 +++++++++----------
 include/asm-mn10300/io.h          |   24 +++++-----
 include/asm-ppc/io.h              |   58 +++++++++++++------------
 include/asm-sparc/io.h            |   32 ++++++-------
 include/asm-sparc64/io.h          |   20 ++++----
 include/asm-v850/io.h             |   12 ++---
 include/asm-v850/pci.h            |    4 -
 include/linux/compiler.h          |    2 
 include/linux/pci.h               |    6 +-
 lib/devres.c                      |   26 +++++------
 lib/iomap.c                       |   87 +++++++++++++++++++-------------------
 18 files changed, 226 insertions(+), 216 deletions(-)

--- linux-work.orig/include/linux/compiler.h	2008-02-18 13:31:00.000000000 +1100
+++ linux-work/include/linux/compiler.h	2008-02-18 13:31:50.000000000 +1100
@@ -10,6 +10,7 @@
 # define __force	__attribute__((force))
 # define __nocast	__attribute__((nocast))
 # define __iomem	__attribute__((noderef, address_space(2)))
+# define __iomap	__attribute__((noderef, address_space(4)))
 # define __acquires(x)	__attribute__((context(x,0,1)))
 # define __releases(x)	__attribute__((context(x,1,0)))
 # define __acquire(x)	__context__(x,1)
@@ -24,6 +25,7 @@ extern void __chk_io_ptr(const volatile 
 # define __force
 # define __nocast
 # define __iomem
+# define __iomap
 # define __chk_user_ptr(x) (void)0
 # define __chk_io_ptr(x) (void)0
 # define __builtin_warning(x, y...) (1)
Index: linux-work/lib/iomap.c
===================================================================
--- linux-work.orig/lib/iomap.c	2008-02-18 13:33:23.000000000 +1100
+++ linux-work/lib/iomap.c	2008-02-18 13:46:43.000000000 +1100
@@ -50,6 +50,7 @@ static void bad_io_access(unsigned long 
  */
 #define IO_COND(addr, is_pio, is_mmio) do {			\
 	unsigned long port = (unsigned long __force)addr;	\
+	void __iomem *mem = (void __iomem __force *)addr;	\
 	if (port >= PIO_RESERVED) {				\
 		is_mmio;					\
 	} else if (port > PIO_OFFSET) {				\
@@ -69,29 +70,29 @@ static void bad_io_access(unsigned long 
 #define mmio_read32be(addr) be32_to_cpu(__raw_readl(addr))
 #endif
 
-unsigned int ioread8(void __iomem *addr)
+unsigned int ioread8(void __iomap *addr)
 {
-	IO_COND(addr, return inb(port), return readb(addr));
+	IO_COND(addr, return inb(port), return readb(mem));
 	return 0xff;
 }
-unsigned int ioread16(void __iomem *addr)
+unsigned int ioread16(void __iomap *addr)
 {
-	IO_COND(addr, return inw(port), return readw(addr));
+	IO_COND(addr, return inw(port), return readw(mem));
 	return 0xffff;
 }
-unsigned int ioread16be(void __iomem *addr)
+unsigned int ioread16be(void __iomap *addr)
 {
-	IO_COND(addr, return pio_read16be(port), return mmio_read16be(addr));
+	IO_COND(addr, return pio_read16be(port), return mmio_read16be(mem));
 	return 0xffff;
 }
-unsigned int ioread32(void __iomem *addr)
+unsigned int ioread32(void __iomap *addr)
 {
-	IO_COND(addr, return inl(port), return readl(addr));
+	IO_COND(addr, return inl(port), return readl(mem));
 	return 0xffffffff;
 }
-unsigned int ioread32be(void __iomem *addr)
+unsigned int ioread32be(void __iomap *addr)
 {
-	IO_COND(addr, return pio_read32be(port), return mmio_read32be(addr));
+	IO_COND(addr, return pio_read32be(port), return mmio_read32be(mem));
 	return 0xffffffff;
 }
 EXPORT_SYMBOL(ioread8);
@@ -106,29 +107,29 @@ EXPORT_SYMBOL(ioread32be);
 #endif
 
 #ifndef mmio_write16be
-#define mmio_write16be(val,port) __raw_writew(be16_to_cpu(val),port)
-#define mmio_write32be(val,port) __raw_writel(be32_to_cpu(val),port)
+#define mmio_write16be(val,mem) __raw_writew(be16_to_cpu(val),mem)
+#define mmio_write32be(val,mem) __raw_writel(be32_to_cpu(val),mem)
 #endif
 
-void iowrite8(u8 val, void __iomem *addr)
+void iowrite8(u8 val, void __iomap *addr)
 {
-	IO_COND(addr, outb(val,port), writeb(val, addr));
+	IO_COND(addr, outb(val,port), writeb(val, mem));
 }
-void iowrite16(u16 val, void __iomem *addr)
+void iowrite16(u16 val, void __iomap *addr)
 {
-	IO_COND(addr, outw(val,port), writew(val, addr));
+	IO_COND(addr, outw(val,port), writew(val, mem));
 }
-void iowrite16be(u16 val, void __iomem *addr)
+void iowrite16be(u16 val, void __iomap *addr)
 {
-	IO_COND(addr, pio_write16be(val,port), mmio_write16be(val, addr));
+	IO_COND(addr, pio_write16be(val,port), mmio_write16be(val, mem));
 }
-void iowrite32(u32 val, void __iomem *addr)
+void iowrite32(u32 val, void __iomap *addr)
 {
-	IO_COND(addr, outl(val,port), writel(val, addr));
+	IO_COND(addr, outl(val,port), writel(val, mem));
 }
-void iowrite32be(u32 val, void __iomem *addr)
+void iowrite32be(u32 val, void __iomap *addr)
 {
-	IO_COND(addr, pio_write32be(val,port), mmio_write32be(val, addr));
+	IO_COND(addr, pio_write32be(val,port), mmio_write32be(val, mem));
 }
 EXPORT_SYMBOL(iowrite8);
 EXPORT_SYMBOL(iowrite16);
@@ -193,47 +194,47 @@ static inline void mmio_outsl(void __iom
 }
 #endif
 
-void ioread8_rep(void __iomem *addr, void *dst, unsigned long count)
+void ioread8_rep(void __iomap *addr, void *dst, unsigned long count)
 {
-	IO_COND(addr, insb(port,dst,count), mmio_insb(addr, dst, count));
+	IO_COND(addr, insb(port,dst,count), mmio_insb(mem, dst, count));
 }
-void ioread16_rep(void __iomem *addr, void *dst, unsigned long count)
+void ioread16_rep(void __iomap *addr, void *dst, unsigned long count)
 {
-	IO_COND(addr, insw(port,dst,count), mmio_insw(addr, dst, count));
+	IO_COND(addr, insw(port,dst,count), mmio_insw(mem, dst, count));
 }
-void ioread32_rep(void __iomem *addr, void *dst, unsigned long count)
+void ioread32_rep(void __iomap *addr, void *dst, unsigned long count)
 {
-	IO_COND(addr, insl(port,dst,count), mmio_insl(addr, dst, count));
+	IO_COND(addr, insl(port,dst,count), mmio_insl(mem, dst, count));
 }
 EXPORT_SYMBOL(ioread8_rep);
 EXPORT_SYMBOL(ioread16_rep);
 EXPORT_SYMBOL(ioread32_rep);
 
-void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count)
+void iowrite8_rep(void __iomap *addr, const void *src, unsigned long count)
 {
-	IO_COND(addr, outsb(port, src, count), mmio_outsb(addr, src, count));
+	IO_COND(addr, outsb(port, src, count), mmio_outsb(mem, src, count));
 }
-void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count)
+void iowrite16_rep(void __iomap *addr, const void *src, unsigned long count)
 {
-	IO_COND(addr, outsw(port, src, count), mmio_outsw(addr, src, count));
+	IO_COND(addr, outsw(port, src, count), mmio_outsw(mem, src, count));
 }
-void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count)
+void iowrite32_rep(void __iomap *addr, const void *src, unsigned long count)
 {
-	IO_COND(addr, outsl(port, src,count), mmio_outsl(addr, src, count));
+	IO_COND(addr, outsl(port, src,count), mmio_outsl(mem, src, count));
 }
 EXPORT_SYMBOL(iowrite8_rep);
 EXPORT_SYMBOL(iowrite16_rep);
 EXPORT_SYMBOL(iowrite32_rep);
 
 /* Create a virtual mapping cookie for an IO port range */
-void __iomem *ioport_map(unsigned long port, unsigned int nr)
+void __iomap *ioport_map(unsigned long port, unsigned int nr)
 {
 	if (port > PIO_MASK)
 		return NULL;
-	return (void __iomem *) (unsigned long) (port + PIO_OFFSET);
+	return (void __iomap *) (unsigned long) (port + PIO_OFFSET);
 }
 
-void ioport_unmap(void __iomem *addr)
+void ioport_unmap(void __iomap *addr)
 {
 	/* Nothing to do */
 }
@@ -246,7 +247,7 @@ EXPORT_SYMBOL(ioport_unmap);
  * @bar: BAR number
  * @maxlen: length of the memory to map
  *
- * Using this function you will get a __iomem address to your device BAR.
+ * Using this function you will get a __iomap address to your device BAR.
  * You can access it using ioread*() and iowrite*(). These functions hide
  * the details if this is a MMIO or PIO address space and will just do what
  * you expect from them in the correct way.
@@ -254,7 +255,7 @@ EXPORT_SYMBOL(ioport_unmap);
  * @maxlen specifies the maximum length to map. If you want to get access to
  * the complete BAR without checking for its length first, pass %0 here.
  * */
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
+void __iomap *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);
@@ -268,16 +269,16 @@ void __iomem *pci_iomap(struct pci_dev *
 		return ioport_map(start, len);
 	if (flags & IORESOURCE_MEM) {
 		if (flags & IORESOURCE_CACHEABLE)
-			return ioremap(start, len);
-		return ioremap_nocache(start, len);
+			return (void __iomap __force *)ioremap(start, len);
+		return (void __iomap __force *)ioremap_nocache(start, len);
 	}
 	/* What? */
 	return NULL;
 }
 
-void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
+void pci_iounmap(struct pci_dev *dev, void __iomap * addr)
 {
-	IO_COND(addr, /* nothing */, iounmap(addr));
+	IO_COND(addr, /* nothing */, iounmap((void __iomem __force *)addr));
 }
 EXPORT_SYMBOL(pci_iomap);
 EXPORT_SYMBOL(pci_iounmap);
Index: linux-work/arch/powerpc/kernel/iomap.c
===================================================================
--- linux-work.orig/arch/powerpc/kernel/iomap.c	2008-02-18 13:40:52.000000000 +1100
+++ linux-work/arch/powerpc/kernel/iomap.c	2008-02-18 13:47:32.000000000 +1100
@@ -13,25 +13,28 @@
  * Here comes the ppc64 implementation of the IOMAP 
  * interfaces.
  */
-unsigned int ioread8(void __iomem *addr)
+
+#define IOMAP_TO_IOMEM(addr)	((void __iomem __force *)(addr))
+
+unsigned int ioread8(void __iomap *addr)
 {
-	return readb(addr);
+	return readb(IOMAP_TO_IOMEM(addr));
 }
-unsigned int ioread16(void __iomem *addr)
+unsigned int ioread16(void __iomap *addr)
 {
-	return readw(addr);
+	return readw(IOMAP_TO_IOMEM(addr));
 }
-unsigned int ioread16be(void __iomem *addr)
+unsigned int ioread16be(void __iomap *addr)
 {
-	return in_be16(addr);
+	return in_be16(IOMAP_TO_IOMEM(addr));
 }
-unsigned int ioread32(void __iomem *addr)
+unsigned int ioread32(void __iomap *addr)
 {
-	return readl(addr);
+	return readl(IOMAP_TO_IOMEM(addr));
 }
-unsigned int ioread32be(void __iomem *addr)
+unsigned int ioread32be(void __iomap *addr)
 {
-	return in_be32(addr);
+	return in_be32(IOMAP_TO_IOMEM(addr));
 }
 EXPORT_SYMBOL(ioread8);
 EXPORT_SYMBOL(ioread16);
@@ -41,23 +44,23 @@ EXPORT_SYMBOL(ioread32be);
 
 void iowrite8(u8 val, void __iomem *addr)
 {
-	writeb(val, addr);
+	writeb(val, IOMAP_TO_IOMEM(addr));
 }
 void iowrite16(u16 val, void __iomem *addr)
 {
-	writew(val, addr);
+	writew(val, IOMAP_TO_IOMEM(addr));
 }
 void iowrite16be(u16 val, void __iomem *addr)
 {
-	out_be16(addr, val);
+	out_be16(IOMAP_TO_IOMEM(addr), val);
 }
 void iowrite32(u32 val, void __iomem *addr)
 {
-	writel(val, addr);
+	writel(val, IOMAP_TO_IOMEM(addr));
 }
 void iowrite32be(u32 val, void __iomem *addr)
 {
-	out_be32(addr, val);
+	out_be32(IOMAP_TO_IOMEM(addr), val);
 }
 EXPORT_SYMBOL(iowrite8);
 EXPORT_SYMBOL(iowrite16);
@@ -73,33 +76,33 @@ EXPORT_SYMBOL(iowrite32be);
  * FIXME! We could make these do EEH handling if we really
  * wanted. Not clear if we do.
  */
-void ioread8_rep(void __iomem *addr, void *dst, unsigned long count)
+void ioread8_rep(void __iomap *addr, void *dst, unsigned long count)
 {
-	_insb((u8 __iomem *) addr, dst, count);
+	_insb((u8 __iomem __force *) addr, dst, count);
 }
-void ioread16_rep(void __iomem *addr, void *dst, unsigned long count)
+void ioread16_rep(void __iomap *addr, void *dst, unsigned long count)
 {
-	_insw_ns((u16 __iomem *) addr, dst, count);
+	_insw_ns((u16 __iomem __force *) addr, dst, count);
 }
-void ioread32_rep(void __iomem *addr, void *dst, unsigned long count)
+void ioread32_rep(void __iomap *addr, void *dst, unsigned long count)
 {
-	_insl_ns((u32 __iomem *) addr, dst, count);
+	_insl_ns((u32 __iomem __force *) addr, dst, count);
 }
 EXPORT_SYMBOL(ioread8_rep);
 EXPORT_SYMBOL(ioread16_rep);
 EXPORT_SYMBOL(ioread32_rep);
 
-void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count)
+void iowrite8_rep(void __iomap *addr, const void *src, unsigned long count)
 {
-	_outsb((u8 __iomem *) addr, src, count);
+	_outsb((u8 __iomem __force *) addr, src, count);
 }
-void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count)
+void iowrite16_rep(void __iomap *addr, const void *src, unsigned long count)
 {
-	_outsw_ns((u16 __iomem *) addr, src, count);
+	_outsw_ns((u16 __iomem __force *) addr, src, count);
 }
-void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count)
+void iowrite32_rep(void __iomap *addr, const void *src, unsigned long count)
 {
-	_outsl_ns((u32 __iomem *) addr, src, count);
+	_outsl_ns((u32 __iomem __force *) addr, src, count);
 }
 EXPORT_SYMBOL(iowrite8_rep);
 EXPORT_SYMBOL(iowrite16_rep);
@@ -117,7 +120,7 @@ void ioport_unmap(void __iomem *addr)
 EXPORT_SYMBOL(ioport_map);
 EXPORT_SYMBOL(ioport_unmap);
 
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
+void __iomap *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
 {
 	resource_size_t start = pci_resource_start(dev, bar);
 	resource_size_t len = pci_resource_len(dev, bar);
@@ -130,18 +133,20 @@ void __iomem *pci_iomap(struct pci_dev *
 	if (flags & IORESOURCE_IO)
 		return ioport_map(start, len);
 	if (flags & IORESOURCE_MEM)
-		return ioremap(start, len);
+		return (void __iomap __force *)ioremap(start, len);
 	/* What? */
 	return NULL;
 }
 
 void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
 {
-	if (isa_vaddr_is_ioport(addr))
+	void __iomem *vaddr = (void __iomem __force *)addr;
+
+	if (isa_vaddr_is_ioport(vaddr))
 		return;
-	if (pcibios_vaddr_is_ioport(addr))
+	if (pcibios_vaddr_is_ioport(vaddr))
 		return;
-	iounmap(addr);
+	iounmap(vaddr);
 }
 
 EXPORT_SYMBOL(pci_iomap);
Index: linux-work/arch/frv/mb93090-mb00/pci-iomap.c
===================================================================
--- linux-work.orig/arch/frv/mb93090-mb00/pci-iomap.c	2008-02-18 14:07:50.000000000 +1100
+++ linux-work/arch/frv/mb93090-mb00/pci-iomap.c	2008-02-18 14:07:58.000000000 +1100
@@ -11,7 +11,7 @@
 #include <linux/pci.h>
 #include <linux/module.h>
 
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
+void __iomap *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);
@@ -21,7 +21,7 @@ void __iomem *pci_iomap(struct pci_dev *
 		return NULL;
 
 	if ((flags & IORESOURCE_IO) || (flags & IORESOURCE_MEM))
-		return (void __iomem *) start;
+		return (void __iomap *) start;
 
 	return NULL;
 }
Index: linux-work/arch/sparc/lib/iomap.c
===================================================================
--- linux-work.orig/arch/sparc/lib/iomap.c	2008-02-18 14:15:54.000000000 +1100
+++ linux-work/arch/sparc/lib/iomap.c	2008-02-18 14:16:33.000000000 +1100
@@ -6,12 +6,12 @@
 #include <asm/io.h>
 
 /* Create a virtual mapping cookie for an IO port range */
-void __iomem *ioport_map(unsigned long port, unsigned int nr)
+void __iomap *ioport_map(unsigned long port, unsigned int nr)
 {
-	return (void __iomem *) (unsigned long) port;
+	return (void __iomap *) (unsigned long) port;
 }
 
-void ioport_unmap(void __iomem *addr)
+void ioport_unmap(void __iomap *addr)
 {
 	/* Nothing to do */
 }
@@ -19,7 +19,7 @@ EXPORT_SYMBOL(ioport_map);
 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)
+void __iomap *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);
@@ -33,14 +33,14 @@ void __iomem *pci_iomap(struct pci_dev *
 		return ioport_map(start, len);
 	if (flags & IORESOURCE_MEM) {
 		if (flags & IORESOURCE_CACHEABLE)
-			return ioremap(start, len);
-		return ioremap_nocache(start, len);
+			return (void __iomap __force *)ioremap(start, len);
+		return (void __iomap __force *)ioremap_nocache(start, len);
 	}
 	/* What? */
 	return NULL;
 }
 
-void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
+void pci_iounmap(struct pci_dev *dev, void __iomap * addr)
 {
 	/* nothing to do */
 }
Index: linux-work/arch/sparc64/lib/iomap.c
===================================================================
--- linux-work.orig/arch/sparc64/lib/iomap.c	2008-02-18 14:16:50.000000000 +1100
+++ linux-work/arch/sparc64/lib/iomap.c	2008-02-18 14:17:13.000000000 +1100
@@ -6,12 +6,12 @@
 #include <asm/io.h>
 
 /* Create a virtual mapping cookie for an IO port range */
-void __iomem *ioport_map(unsigned long port, unsigned int nr)
+void __iomap *ioport_map(unsigned long port, unsigned int nr)
 {
 	return (void __iomem *) (unsigned long) port;
 }
 
-void ioport_unmap(void __iomem *addr)
+void ioport_unmap(void __iomap *addr)
 {
 	/* Nothing to do */
 }
@@ -19,7 +19,7 @@ EXPORT_SYMBOL(ioport_map);
 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)
+void __iomap *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);
@@ -33,14 +33,14 @@ void __iomem *pci_iomap(struct pci_dev *
 		return ioport_map(start, len);
 	if (flags & IORESOURCE_MEM) {
 		if (flags & IORESOURCE_CACHEABLE)
-			return ioremap(start, len);
-		return ioremap_nocache(start, len);
+			return (void __iomap __force *)ioremap(start, len);
+		return (void __iomap __force *)ioremap_nocache(start, len);
 	}
 	/* What? */
 	return NULL;
 }
 
-void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
+void pci_iounmap(struct pci_dev *dev, void __iomap * addr)
 {
 	/* nothing to do */
 }
Index: linux-work/arch/v850/kernel/rte_mb_a_pci.c
===================================================================
--- linux-work.orig/arch/v850/kernel/rte_mb_a_pci.c	2008-02-18 14:19:39.000000000 +1100
+++ linux-work/arch/v850/kernel/rte_mb_a_pci.c	2008-02-18 14:19:46.000000000 +1100
@@ -788,7 +788,7 @@ pci_free_consistent (struct pci_dev *pde
 .
 /* iomap/iomap */
 
-void __iomem *pci_iomap (struct pci_dev *dev, int bar, unsigned long max)
+void __iomap *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);
@@ -801,7 +801,7 @@ void __iomem *pci_iomap (struct pci_dev 
 	return ioremap (start, len);
 }
 
-void pci_iounmap (struct pci_dev *dev, void __iomem *addr)
+void pci_iounmap (struct pci_dev *dev, void __iomap *addr)
 {
 	/* nothing */
 }
Index: linux-work/include/asm-arm/io.h
===================================================================
--- linux-work.orig/include/asm-arm/io.h	2008-02-18 13:48:26.000000000 +1100
+++ linux-work/include/asm-arm/io.h	2008-02-18 14:05:33.000000000 +1100
@@ -243,14 +243,14 @@ extern void _memset_io(volatile void __i
 #define iowrite16_rep(p,s,c)	__raw_writesw(p,s,c)
 #define iowrite32_rep(p,s,c)	__raw_writesl(p,s,c)
 
-extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
-extern void ioport_unmap(void __iomem *addr);
+extern void __iomap *ioport_map(unsigned long port, unsigned int nr);
+extern void ioport_unmap(void __iomap *addr);
 #endif
 
 struct pci_dev;
 
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen);
-extern void pci_iounmap(struct pci_dev *dev, void __iomem *addr);
+extern void __iomao *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen);
+extern void pci_iounmap(struct pci_dev *dev, void __iomap *addr);
 
 /*
  * can the hardware map this into one segment or not, given no other
Index: linux-work/include/asm-frv/io.h
===================================================================
--- linux-work.orig/include/asm-frv/io.h	2008-02-18 14:06:49.000000000 +1100
+++ linux-work/include/asm-frv/io.h	2008-02-18 14:07:15.000000000 +1100
@@ -290,12 +290,12 @@ static inline void flush_write_buffers(v
 /*
  * do appropriate I/O accesses for token type
  */
-static inline unsigned int ioread8(void __iomem *p)
+static inline unsigned int ioread8(void __iomap *p)
 {
 	return __builtin_read8(p);
 }
 
-static inline unsigned int ioread16(void __iomem *p)
+static inline unsigned int ioread16(void __iomap *p)
 {
 	uint16_t ret = __builtin_read16(p);
 	if (__is_PCI_addr(p))
@@ -303,7 +303,7 @@ static inline unsigned int ioread16(void
 	return ret;
 }
 
-static inline unsigned int ioread32(void __iomem *p)
+static inline unsigned int ioread32(void __iomap *p)
 {
 	uint32_t ret = __builtin_read32(p);
 	if (__is_PCI_addr(p))
@@ -311,14 +311,14 @@ static inline unsigned int ioread32(void
 	return ret;
 }
 
-static inline void iowrite8(u8 val, void __iomem *p)
+static inline void iowrite8(u8 val, void __iomap *p)
 {
 	__builtin_write8(p, val);
 	if (__is_PCI_MEM(p))
 		__flush_PCI_writes();
 }
 
-static inline void iowrite16(u16 val, void __iomem *p)
+static inline void iowrite16(u16 val, void __iomap *p)
 {
 	if (__is_PCI_addr(p))
 		val = _swapw(val);
@@ -327,7 +327,7 @@ static inline void iowrite16(u16 val, vo
 		__flush_PCI_writes();
 }
 
-static inline void iowrite32(u32 val, void __iomem *p)
+static inline void iowrite32(u32 val, void __iomap *p)
 {
 	if (__is_PCI_addr(p))
 		val = _swapl(val);
@@ -368,8 +368,8 @@ static inline void iowrite32_rep(void __
 
 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
 struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
-static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p)
+extern void __iomap *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
+static inline void pci_iounmap(struct pci_dev *dev, void __iomap *p)
 {
 }
 
Index: linux-work/include/asm-generic/iomap.h
===================================================================
--- linux-work.orig/include/asm-generic/iomap.h	2008-02-18 14:08:39.000000000 +1100
+++ linux-work/include/asm-generic/iomap.h	2008-02-18 14:09:20.000000000 +1100
@@ -25,17 +25,17 @@
  * in the low address range. Architectures for which this is not
  * true can't use this generic implementation.
  */
-extern unsigned int ioread8(void __iomem *);
-extern unsigned int ioread16(void __iomem *);
-extern unsigned int ioread16be(void __iomem *);
-extern unsigned int ioread32(void __iomem *);
-extern unsigned int ioread32be(void __iomem *);
-
-extern void iowrite8(u8, void __iomem *);
-extern void iowrite16(u16, void __iomem *);
-extern void iowrite16be(u16, void __iomem *);
-extern void iowrite32(u32, void __iomem *);
-extern void iowrite32be(u32, void __iomem *);
+extern unsigned int ioread8(void __iomap *);
+extern unsigned int ioread16(void __iomap *);
+extern unsigned int ioread16be(void __iomap *);
+extern unsigned int ioread32(void __iomap *);
+extern unsigned int ioread32be(void __iomap *);
+
+extern void iowrite8(u8, void __iomap *);
+extern void iowrite16(u16, void __iomap *);
+extern void iowrite16be(u16, void __iomap *);
+extern void iowrite32(u32, void __iomap *);
+extern void iowrite32be(u32, void __iomap *);
 
 /*
  * "string" versions of the above. Note that they
@@ -48,21 +48,21 @@ extern void iowrite32be(u32, void __iome
  * memory across multiple ports, use "memcpy_toio()"
  * and friends.
  */
-extern void ioread8_rep(void __iomem *port, void *buf, unsigned long count);
-extern void ioread16_rep(void __iomem *port, void *buf, unsigned long count);
-extern void ioread32_rep(void __iomem *port, void *buf, unsigned long count);
-
-extern void iowrite8_rep(void __iomem *port, const void *buf, unsigned long count);
-extern void iowrite16_rep(void __iomem *port, const void *buf, unsigned long count);
-extern void iowrite32_rep(void __iomem *port, const void *buf, unsigned long count);
+extern void ioread8_rep(void __iomap *port, void *buf, unsigned long count);
+extern void ioread16_rep(void __iomap *port, void *buf, unsigned long count);
+extern void ioread32_rep(void __iomap *port, void *buf, unsigned long count);
+
+extern void iowrite8_rep(void __iomap *port, const void *buf, unsigned long count);
+extern void iowrite16_rep(void __iomap *port, const void *buf, unsigned long count);
+extern void iowrite32_rep(void __iomap *port, const void *buf, unsigned long count);
 
 /* Create a virtual mapping cookie for an IO port range */
-extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
-extern void ioport_unmap(void __iomem *);
+extern void __iomap *ioport_map(unsigned long port, unsigned int nr);
+extern void ioport_unmap(void __iomap *);
 
 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
 struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
-extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
+extern void __iomap *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
+extern void pci_iounmap(struct pci_dev *dev, void __iomap *);
 
 #endif
Index: linux-work/include/asm-mn10300/io.h
===================================================================
--- linux-work.orig/include/asm-mn10300/io.h	2008-02-18 14:20:40.000000000 +1100
+++ linux-work/include/asm-mn10300/io.h	2008-02-18 14:21:39.000000000 +1100
@@ -184,13 +184,13 @@ static inline void outsl(unsigned long a
 	}
 }
 
-#define ioread8(addr)		readb(addr)
-#define ioread16(addr)		readw(addr)
-#define ioread32(addr)		readl(addr)
-
-#define iowrite8(v, addr)	writeb((v), (addr))
-#define iowrite16(v, addr)	writew((v), (addr))
-#define iowrite32(v, addr)	writel((v), (addr))
+#define ioread8(addr)		readb((void __iomem __force *)(addr))
+#define ioread16(addr)		readw((void __iomem __force *)(addr))
+#define ioread32(addr)		readl((void __iomem __force *)(addr))
+
+#define iowrite8(v, addr)	writeb((v), (void __iomem __force *)(addr))
+#define iowrite16(v, addr)	writew((v), (void __iomem __force *)(addr))
+#define iowrite32(v, addr)	writel((v), (void __iomem __force *)(addr))
 
 #define ioread8_rep(p, dst, count) \
 	insb((unsigned long) (p), (dst), (count))
@@ -216,8 +216,8 @@ static inline void outsl(unsigned long a
 
 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
 struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
-static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p)
+extern void __iomap *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
+static inline void pci_iounmap(struct pci_dev *dev, void __iomap *p)
 {
 }
 
@@ -263,12 +263,12 @@ static inline void iounmap(void *addr)
 {
 }
 
-static inline void __iomem *ioport_map(unsigned long port, unsigned int nr)
+static inline void __iomap *ioport_map(unsigned long port, unsigned int nr)
 {
-	return (void __iomem *) port;
+	return (void __iomap *) port;
 }
 
-static inline void ioport_unmap(void __iomem *p)
+static inline void ioport_unmap(void __iomap *p)
 {
 }
 
Index: linux-work/include/asm-ppc/io.h
===================================================================
--- linux-work.orig/include/asm-ppc/io.h	2008-02-18 14:09:46.000000000 +1100
+++ linux-work/include/asm-ppc/io.h	2008-02-18 14:11:51.000000000 +1100
@@ -403,74 +403,76 @@ extern inline void * phys_to_virt(unsign
  * Here comes the ppc implementation of the IOMAP 
  * interfaces.
  */
-static inline unsigned int ioread8(void __iomem *addr)
+#define IOMAP_TO_IOMEM(addr)	((void __iomem __force *)(addr))
+
+static inline unsigned int ioread8(void __iomap *addr)
 {
-	return readb(addr);
+	return readb(IOMAP_TO_IOMEM(addr));
 }
 
-static inline unsigned int ioread16(void __iomem *addr)
+static inline unsigned int ioread16(void __iomap *addr)
 {
-	return readw(addr);
+	return readw(IOMAP_TO_IOMEM(addr));
 }
 
-static inline unsigned int ioread32(void __iomem *addr)
+static inline unsigned int ioread32(void __iomap *addr)
 {
-	return readl(addr);
+	return readl(IOMAP_TO_IOMEM(addr));
 }
 
-static inline void iowrite8(u8 val, void __iomem *addr)
+static inline void iowrite8(u8 val, void __iomap *addr)
 {
-	writeb(val, addr);
+	writeb(val, IOMAP_TO_IOMEM(addr));
 }
 
-static inline void iowrite16(u16 val, void __iomem *addr)
+static inline void iowrite16(u16 val, void __iomap *addr)
 {
-	writew(val, addr);
+	writew(val, IOMAP_TO_IOMEM(addr));
 }
 
-static inline void iowrite32(u32 val, void __iomem *addr)
+static inline void iowrite32(u32 val, void __iomap *addr)
 {
-	writel(val, addr);
+	writel(val, IOMAP_TO_IOMEM(addr));
 }
 
-static inline void ioread8_rep(void __iomem *addr, void *dst, unsigned long count)
+static inline void ioread8_rep(void __iomap *addr, void *dst, unsigned long count)
 {
-	_insb(addr, dst, count);
+	_insb(IOMAP_TO_IOMEM(addr), dst, count);
 }
 
-static inline void ioread16_rep(void __iomem *addr, void *dst, unsigned long count)
+static inline void ioread16_rep(void __iomap *addr, void *dst, unsigned long count)
 {
-	_insw_ns(addr, dst, count);
+	_insw_ns(IOMAP_TO_IOMEM(addr), dst, count);
 }
 
-static inline void ioread32_rep(void __iomem *addr, void *dst, unsigned long count)
+static inline void ioread32_rep(void __iomap *addr, void *dst, unsigned long count)
 {
-	_insl_ns(addr, dst, count);
+	_insl_ns(IOMAP_TO_IOMEM(addr), dst, count);
 }
 
-static inline void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count)
+static inline void iowrite8_rep(void __iomap *addr, const void *src, unsigned long count)
 {
-	_outsb(addr, src, count);
+	_outsb(IOMAP_TO_IOMEM(addr), src, count);
 }
 
-static inline void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count)
+static inline void iowrite16_rep(void __iomap *addr, const void *src, unsigned long count)
 {
-	_outsw_ns(addr, src, count);
+	_outsw_ns(IOMAP_TO_IOMEM(addr), src, count);
 }
 
-static inline void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count)
+static inline void iowrite32_rep(void __iomap *addr, const void *src, unsigned long count)
 {
-	_outsl_ns(addr, src, count);
+	_outsl_ns(IOMAP_TO_IOMEM(addr), src, count);
 }
 
 /* Create a virtual mapping cookie for an IO port range */
-extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
-extern void ioport_unmap(void __iomem *);
+extern void __iomap *ioport_map(unsigned long port, unsigned int nr);
+extern void ioport_unmap(void __iomap *);
 
 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
 struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
-extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
+extern void __iomap *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
+extern void pci_iounmap(struct pci_dev *dev, void __iomap *);
 
 #endif /* _PPC_IO_H */
 
Index: linux-work/include/asm-sparc/io.h
===================================================================
--- linux-work.orig/include/asm-sparc/io.h	2008-02-18 14:13:13.000000000 +1100
+++ linux-work/include/asm-sparc/io.h	2008-02-18 14:14:15.000000000 +1100
@@ -249,50 +249,50 @@ extern void __iomem *ioremap(unsigned lo
 #define ioremap_nocache(X,Y)	ioremap((X),(Y))
 extern void iounmap(volatile void __iomem *addr);
 
-#define ioread8(X)			readb(X)
-#define ioread16(X)			readw(X)
-#define ioread32(X)			readl(X)
-#define iowrite8(val,X)			writeb(val,X)
-#define iowrite16(val,X)		writew(val,X)
-#define iowrite32(val,X)		writel(val,X)
+#define ioread8(X)			readb((void __iomem __force *)(X))
+#define ioread16(X)			readw((void __iomem __force *)(X))
+#define ioread32(X)			readl((void __iomem __force *)(X))
+#define iowrite8(val,X)			writeb(val,(void __iomem __force *)(X))
+#define iowrite16(val,X)		writew(val,(void __iomem __force *)(X))
+#define iowrite32(val,X)		writel(val,(void __iomem __force *)(X))
 
-static inline void ioread8_rep(void __iomem *port, void *buf, unsigned long count)
+static inline void ioread8_rep(void __iomap *port, void *buf, unsigned long count)
 {
 	insb((unsigned long __force)port, buf, count);
 }
-static inline void ioread16_rep(void __iomem *port, void *buf, unsigned long count)
+static inline void ioread16_rep(void __iomap *port, void *buf, unsigned long count)
 {
 	insw((unsigned long __force)port, buf, count);
 }
 
-static inline void ioread32_rep(void __iomem *port, void *buf, unsigned long count)
+static inline void ioread32_rep(void __iomap *port, void *buf, unsigned long count)
 {
 	insl((unsigned long __force)port, buf, count);
 }
 
-static inline void iowrite8_rep(void __iomem *port, const void *buf, unsigned long count)
+static inline void iowrite8_rep(void __iomap *port, const void *buf, unsigned long count)
 {
 	outsb((unsigned long __force)port, buf, count);
 }
 
-static inline void iowrite16_rep(void __iomem *port, const void *buf, unsigned long count)
+static inline void iowrite16_rep(void __iomap *port, const void *buf, unsigned long count)
 {
 	outsw((unsigned long __force)port, buf, count);
 }
 
-static inline void iowrite32_rep(void __iomem *port, const void *buf, unsigned long count)
+static inline void iowrite32_rep(void __iomap *port, const void *buf, unsigned long count)
 {
 	outsl((unsigned long __force)port, buf, count);
 }
 
 /* Create a virtual mapping cookie for an IO port range */
-extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
-extern void ioport_unmap(void __iomem *);
+extern void __iomap *ioport_map(unsigned long port, unsigned int nr);
+extern void ioport_unmap(void __iomap *);
 
 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
 struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
-extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
+extern void __iomap *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
+extern void pci_iounmap(struct pci_dev *dev, void __iomap *);
 
 /*
  * Bus number may be in res->flags... somewhere.
Index: linux-work/include/asm-sparc64/io.h
===================================================================
--- linux-work.orig/include/asm-sparc64/io.h	2008-02-18 14:14:43.000000000 +1100
+++ linux-work/include/asm-sparc64/io.h	2008-02-18 14:15:01.000000000 +1100
@@ -444,21 +444,21 @@ static inline void iounmap(volatile void
 {
 }
 
-#define ioread8(X)			readb(X)
-#define ioread16(X)			readw(X)
-#define ioread32(X)			readl(X)
-#define iowrite8(val,X)			writeb(val,X)
-#define iowrite16(val,X)		writew(val,X)
-#define iowrite32(val,X)		writel(val,X)
+#define ioread8(X)			readb((void __iomem __force *)(X))
+#define ioread16(X)			readw((void __iomem __force *)(X))
+#define ioread32(X)			readl((void __iomem __force *)(X))
+#define iowrite8(val,X)			writeb(val,(void __iomem __force *)(X))
+#define iowrite16(val,X)		writew(val,(void __iomem __force *)(X))
+#define iowrite32(val,X)		writel(val,(void __iomem __force *)(X))
 
 /* Create a virtual mapping cookie for an IO port range */
-extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
-extern void ioport_unmap(void __iomem *);
+extern void __iomap *ioport_map(unsigned long port, unsigned int nr);
+extern void ioport_unmap(void __iomap *);
 
 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
 struct pci_dev;
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
-extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
+extern void __iomap *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
+extern void pci_iounmap(struct pci_dev *dev, void __iomap *);
 
 /* Similarly for SBUS. */
 #define sbus_ioremap(__res, __offset, __size, __name) \
Index: linux-work/include/asm-v850/io.h
===================================================================
--- linux-work.orig/include/asm-v850/io.h	2008-02-18 14:17:47.000000000 +1100
+++ linux-work/include/asm-v850/io.h	2008-02-18 14:18:21.000000000 +1100
@@ -106,12 +106,12 @@ outsl (unsigned long port, const void *s
 #define ioremap_writethrough(physaddr, size)	ioremap (physaddr, size)
 #define ioremap_fullcache(physaddr, size)	ioremap (physaddr, size)
 
-#define ioread8(addr)		readb (addr)
-#define ioread16(addr)		readw (addr)
-#define ioread32(addr)		readl (addr)
-#define iowrite8(val, addr)	writeb (val, addr)
-#define iowrite16(val, addr)	writew (val, addr)
-#define iowrite32(val, addr)	writel (val, addr)
+#define ioread8(addr)		readb ((void __iomem __force *)(addr))
+#define ioread16(addr)		readw ((void __iomem __force *)(addr))
+#define ioread32(addr)		readl ((void __iomem __force *)(addr))
+#define iowrite8(val, addr)	writeb (val, (void __iomem __force *)(addr))
+#define iowrite16(val, addr)	writew (val, (void __iomem __force *)(addr))
+#define iowrite32(val, addr)	writel (val, (void __iomem __force *)(addr))
 
 #define mmiowb()
 
Index: linux-work/include/asm-v850/pci.h
===================================================================
--- linux-work.orig/include/asm-v850/pci.h	2008-02-18 14:18:57.000000000 +1100
+++ linux-work/include/asm-v850/pci.h	2008-02-18 14:19:02.000000000 +1100
@@ -113,7 +113,7 @@ static inline void pci_dma_burst_advice(
 }
 #endif
 
-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
-extern void pci_iounmap (struct pci_dev *dev, void __iomem *addr);
+extern void __iomap *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
+extern void pci_iounmap (struct pci_dev *dev, void __iomap *addr);
 
 #endif /* __V850_PCI_H__ */
Index: linux-work/include/linux/pci.h
===================================================================
--- linux-work.orig/include/linux/pci.h	2008-02-18 14:24:13.000000000 +1100
+++ linux-work/include/linux/pci.h	2008-02-18 14:24:29.000000000 +1100
@@ -1030,9 +1030,9 @@ enum pci_fixup_pass {
 
 void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
 
-void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
-void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
-void __iomem * const *pcim_iomap_table(struct pci_dev *pdev);
+void __iomap *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
+void pcim_iounmap(struct pci_dev *pdev, void __iomap *addr);
+void __iomap * const *pcim_iomap_table(struct pci_dev *pdev);
 int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name);
 void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask);
 
Index: linux-work/lib/devres.c
===================================================================
--- linux-work.orig/lib/devres.c	2008-02-18 14:22:13.000000000 +1100
+++ linux-work/lib/devres.c	2008-02-18 14:23:44.000000000 +1100
@@ -90,7 +90,7 @@ EXPORT_SYMBOL(devm_iounmap);
  */
 static void devm_ioport_map_release(struct device *dev, void *res)
 {
-	ioport_unmap(*(void __iomem **)res);
+	ioport_unmap(*(void __iomap **)res);
 }
 
 static int devm_ioport_map_match(struct device *dev, void *res,
@@ -111,7 +111,7 @@ static int devm_ioport_map_match(struct 
 void __iomem * devm_ioport_map(struct device *dev, unsigned long port,
 			       unsigned int nr)
 {
-	void __iomem **ptr, *addr;
+	void __iomap **ptr, *addr;
 
 	ptr = devres_alloc(devm_ioport_map_release, sizeof(*ptr), GFP_KERNEL);
 	if (!ptr)
@@ -136,7 +136,7 @@ EXPORT_SYMBOL(devm_ioport_map);
  * Managed ioport_unmap().  @addr must have been mapped using
  * devm_ioport_map().
  */
-void devm_ioport_unmap(struct device *dev, void __iomem *addr)
+void devm_ioport_unmap(struct device *dev, void __iomap *addr)
 {
 	ioport_unmap(addr);
 	WARN_ON(devres_destroy(dev, devm_ioport_map_release,
@@ -151,7 +151,7 @@ EXPORT_SYMBOL(devm_ioport_unmap);
 #define PCIM_IOMAP_MAX	PCI_ROM_RESOURCE
 
 struct pcim_iomap_devres {
-	void __iomem *table[PCIM_IOMAP_MAX];
+	void __iomap *table[PCIM_IOMAP_MAX];
 };
 
 static void pcim_iomap_release(struct device *gendev, void *res)
@@ -178,7 +178,7 @@ static void pcim_iomap_release(struct de
  * be safely called without context and guaranteed to succed once
  * allocated.
  */
-void __iomem * const * pcim_iomap_table(struct pci_dev *pdev)
+void __iomap * const * pcim_iomap_table(struct pci_dev *pdev)
 {
 	struct pcim_iomap_devres *dr, *new_dr;
 
@@ -203,13 +203,13 @@ EXPORT_SYMBOL(pcim_iomap_table);
  * Managed pci_iomap().  Map is automatically unmapped on driver
  * detach.
  */
-void __iomem * pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen)
+void __iomap * pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen)
 {
-	void __iomem **tbl;
+	void __iomap **tbl;
 
 	BUG_ON(bar >= PCIM_IOMAP_MAX);
 
-	tbl = (void __iomem **)pcim_iomap_table(pdev);
+	tbl = (void __iomap **)pcim_iomap_table(pdev);
 	if (!tbl || tbl[bar])	/* duplicate mappings not allowed */
 		return NULL;
 
@@ -225,14 +225,14 @@ EXPORT_SYMBOL(pcim_iomap);
  *
  * Managed pci_iounmap().  @addr must have been mapped using pcim_iomap().
  */
-void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr)
+void pcim_iounmap(struct pci_dev *pdev, void __iomap *addr)
 {
-	void __iomem **tbl;
+	void __iomap **tbl;
 	int i;
 
 	pci_iounmap(pdev, addr);
 
-	tbl = (void __iomem **)pcim_iomap_table(pdev);
+	tbl = (void __iomap **)pcim_iomap_table(pdev);
 	BUG_ON(!tbl);
 
 	for (i = 0; i < PCIM_IOMAP_MAX; i++)
@@ -254,7 +254,7 @@ EXPORT_SYMBOL(pcim_iounmap);
  */
 int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name)
 {
-	void __iomem * const *iomap;
+	void __iomap * const *iomap;
 	int i, rc;
 
 	iomap = pcim_iomap_table(pdev);
@@ -306,7 +306,7 @@ EXPORT_SYMBOL(pcim_iomap_regions);
  */
 void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask)
 {
-	void __iomem * const *iomap;
+	void __iomap * const *iomap;
 	int i;
 
 	iomap = pcim_iomap_table(pdev);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ