diff mbox series

[v7,02/19] hexagon: mm: Convert to GENERIC_IOREMAP

Message ID 20230620131356.25440-3-bhe@redhat.com (mailing list archive)
State New
Headers show
Series mm: ioremap: Convert architectures to take GENERIC_IOREMAP way | expand

Commit Message

Baoquan He June 20, 2023, 1:13 p.m. UTC
By taking GENERIC_IOREMAP method, the generic ioremap_prot() and
iounmap() are visible and available to arch. This change will
simplify implementation by removing duplicated codes with generic
ioremap_prot() and iounmap(), and has the equivalent functioality.

For hexagon, the current ioremap() and iounmap() are the same as
generic version. After taking GENERIC_IOREMAP way, the old ioremap()
and iounmap() can be completely removed.

Signed-off-by: Baoquan He <bhe@redhat.com>
Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Brian Cain <bcain@quicinc.com>
Cc: linux-hexagon@vger.kernel.org
---
v6->v7:
- Fix building error reported by lkp test robot. Here I only fixed the
  redefinition of iounmap(), ignored the PCI_IOBASE warnings since
  Nathan kindly reminded me the warning is a generic issue, and Niklas
  is working on that within below patchset.
  https://lore.kernel.org/all/20230612160237.GA199007@dev-arch.thelio-3990X/T/#u

 arch/hexagon/Kconfig          |  1 +
 arch/hexagon/include/asm/io.h | 11 +++++----
 arch/hexagon/mm/ioremap.c     | 44 -----------------------------------
 3 files changed, 8 insertions(+), 48 deletions(-)
 delete mode 100644 arch/hexagon/mm/ioremap.c

Comments

kernel test robot June 21, 2023, 2:15 a.m. UTC | #1
Hi Baoquan,

kernel test robot noticed the following build errors:

[auto build test ERROR on akpm-mm/mm-everything]

url:    https://github.com/intel-lab-lkp/linux/commits/Baoquan-He/asm-generic-iomap-h-remove-ARCH_HAS_IOREMAP_xx-macros/20230620-212135
base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link:    https://lore.kernel.org/r/20230620131356.25440-3-bhe%40redhat.com
patch subject: [PATCH v7 02/19] hexagon: mm: Convert to GENERIC_IOREMAP
config: hexagon-randconfig-r041-20230620 (https://download.01.org/0day-ci/archive/20230621/202306211030.DioMEPhl-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce: (https://download.01.org/0day-ci/archive/20230621/202306211030.DioMEPhl-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202306211030.DioMEPhl-lkp@intel.com/

All errors (new ones prefixed by >>):

>> arch/hexagon/kernel/hexagon_ksyms.o: error: local symbol ioremap was exported
Baoquan He June 21, 2023, 8:50 a.m. UTC | #2
Hi,

On 06/21/23 at 10:15am, kernel test robot wrote:
> Hi Baoquan,
> 
> kernel test robot noticed the following build errors:
> 
> [auto build test ERROR on akpm-mm/mm-everything]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Baoquan-He/asm-generic-iomap-h-remove-ARCH_HAS_IOREMAP_xx-macros/20230620-212135
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> patch link:    https://lore.kernel.org/r/20230620131356.25440-3-bhe%40redhat.com
> patch subject: [PATCH v7 02/19] hexagon: mm: Convert to GENERIC_IOREMAP
> config: hexagon-randconfig-r041-20230620 (https://download.01.org/0day-ci/archive/20230621/202306211030.DioMEPhl-lkp@intel.com/config)
> compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
> reproduce: (https://download.01.org/0day-ci/archive/20230621/202306211030.DioMEPhl-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202306211030.DioMEPhl-lkp@intel.com/
> 
> All errors (new ones prefixed by >>):
> 
> >> arch/hexagon/kernel/hexagon_ksyms.o: error: local symbol ioremap was exported

I followed steps in your reproduce link, didn't reproduce the error as
above line reported. I can still see those PCI_IOMAP warning, however
they will disappear when rebuilding. The clone3 warning can always ben
seen. I didn't see the symbol ioremap error. Could you double check if
anything missed in steps?

[root@dell-pem620-01 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash
Compiler will be installed in /root/0day
make --keep-going LLVM=1 CROSS_COMPILE=hexagon-linux- LLVM_IAS=1 --jobs=48 W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash
make[1]: Entering directory '/root/linux/build_dir'
  GEN     Makefile
ld.lld: /lib64/libtinfo.so.6: no version information available (required by ld.lld)
tools/testing/selftests/arm64/tags/.gitignore: warning: ignored by one of the .gitignore files
tools/testing/selftests/arm64/tags/Makefile: warning: ignored by one of the .gitignore files
tools/testing/selftests/arm64/tags/run_tags_test.sh: warning: ignored by one of the .gitignore files
tools/testing/selftests/arm64/tags/tags_test.c: warning: ignored by one of the .gitignore files
tools/testing/selftests/kvm/.gitignore: warning: ignored by one of the .gitignore files
tools/testing/selftests/kvm/Makefile: warning: ignored by one of the .gitignore files
tools/testing/selftests/kvm/config: warning: ignored by one of the .gitignore files
tools/testing/selftests/kvm/settings: warning: ignored by one of the .gitignore files
  CALL    ../scripts/checksyscalls.sh
clang: /lib64/libtinfo.so.6: no version information available (required by clang)
<stdin>:1519:2: warning: syscall clone3 not implemented [-W#warnings]
 1519 | #warning syscall clone3 not implemented
      |  ^
1 warning generated.
make[1]: Leaving directory '/root/linux/build_dir'
[root@dell-pem620-01 linux]#
Nathan Chancellor June 21, 2023, 7:08 p.m. UTC | #3
On Wed, Jun 21, 2023 at 04:50:53PM +0800, Baoquan He wrote:
> Hi,
> 
> On 06/21/23 at 10:15am, kernel test robot wrote:
> > Hi Baoquan,
> > 
> > kernel test robot noticed the following build errors:
> > 
> > [auto build test ERROR on akpm-mm/mm-everything]
> > 
> > url:    https://github.com/intel-lab-lkp/linux/commits/Baoquan-He/asm-generic-iomap-h-remove-ARCH_HAS_IOREMAP_xx-macros/20230620-212135
> > base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> > patch link:    https://lore.kernel.org/r/20230620131356.25440-3-bhe%40redhat.com
> > patch subject: [PATCH v7 02/19] hexagon: mm: Convert to GENERIC_IOREMAP
> > config: hexagon-randconfig-r041-20230620 (https://download.01.org/0day-ci/archive/20230621/202306211030.DioMEPhl-lkp@intel.com/config)
> > compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
> > reproduce: (https://download.01.org/0day-ci/archive/20230621/202306211030.DioMEPhl-lkp@intel.com/reproduce)
> > 
> > If you fix the issue in a separate patch/commit (i.e. not just a new version of
> > the same patch/commit), kindly add following tags
> > | Reported-by: kernel test robot <lkp@intel.com>
> > | Closes: https://lore.kernel.org/oe-kbuild-all/202306211030.DioMEPhl-lkp@intel.com/
> > 
> > All errors (new ones prefixed by >>):
> > 
> > >> arch/hexagon/kernel/hexagon_ksyms.o: error: local symbol ioremap was exported
> 
> I followed steps in your reproduce link, didn't reproduce the error as
> above line reported. I can still see those PCI_IOMAP warning, however
> they will disappear when rebuilding. The clone3 warning can always ben
> seen. I didn't see the symbol ioremap error. Could you double check if
> anything missed in steps?
> 
> [root@dell-pem620-01 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash
> Compiler will be installed in /root/0day
> make --keep-going LLVM=1 CROSS_COMPILE=hexagon-linux- LLVM_IAS=1 --jobs=48 W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash
> make[1]: Entering directory '/root/linux/build_dir'
>   GEN     Makefile
> ld.lld: /lib64/libtinfo.so.6: no version information available (required by ld.lld)

Hmmm, seems like a dynamic linking issue, likely because either libtinfo
is not available or the version on your system is older or newer than
the one that the compiler was built with.

Intel folks, you can opt out of this particular library dependency with
'-DLLVM_ENABLE_TERMINFO=OFF' to cmake, which will make it easier for
others to use it; the compiler can still output color on most terminals
even without libtinfo.

> tools/testing/selftests/arm64/tags/.gitignore: warning: ignored by one of the .gitignore files
> tools/testing/selftests/arm64/tags/Makefile: warning: ignored by one of the .gitignore files
> tools/testing/selftests/arm64/tags/run_tags_test.sh: warning: ignored by one of the .gitignore files
> tools/testing/selftests/arm64/tags/tags_test.c: warning: ignored by one of the .gitignore files
> tools/testing/selftests/kvm/.gitignore: warning: ignored by one of the .gitignore files
> tools/testing/selftests/kvm/Makefile: warning: ignored by one of the .gitignore files
> tools/testing/selftests/kvm/config: warning: ignored by one of the .gitignore files
> tools/testing/selftests/kvm/settings: warning: ignored by one of the .gitignore files
>   CALL    ../scripts/checksyscalls.sh
> clang: /lib64/libtinfo.so.6: no version information available (required by clang)
> <stdin>:1519:2: warning: syscall clone3 not implemented [-W#warnings]
>  1519 | #warning syscall clone3 not implemented
>       |  ^
> 1 warning generated.
> make[1]: Leaving directory '/root/linux/build_dir'
> [root@dell-pem620-01 linux]# 
> 
> 

I am able to reproduce this with the kernel.org LLVM builds that I do,
which should not have that library dependency:

https://mirrors.edge.kernel.org/pub/tools/llvm/

$ curl -LSso .config https://download.01.org/0day-ci/archive/20230621/202306211030.DioMEPhl-lkp@intel.com/config

$ make -skj"$(nproc)" ARCH=hexagon LLVM=$(realpath llvm-16.0.6-x86_64/bin)/ olddefconfig all
...
make[5]: *** No rule to make target 'arch/hexagon/mm/ioremap.o', needed by 'arch/hexagon/mm/built-in.a'.
...
arch/hexagon/kernel/hexagon_ksyms.o: error: local symbol ioremap was exported
...

The first issue is resolved with:

diff --git a/arch/hexagon/mm/Makefile b/arch/hexagon/mm/Makefile
index 49911a906fd0..ba4b04d962d6 100644
--- a/arch/hexagon/mm/Makefile
+++ b/arch/hexagon/mm/Makefile
@@ -3,5 +3,5 @@
 # Makefile for Hexagon memory management subsystem
 #
 
-obj-y := init.o ioremap.o uaccess.o vm_fault.o cache.o
+obj-y := init.o uaccess.o vm_fault.o cache.o
 obj-y += copy_to_user.o copy_from_user.o vm_tlb.o

For the second issue, it seems that ioremap is exported in
arch/hexagon/kernel/hexagon_ksyms.c but ioremap() is a static inline
function with CONFIG_GENERIC_IOREMAP. I think we can just remove the
ioremap and iounmap exports now, as ioremap() calls ioremap_prot(),
which is exported, and iounmap() is exported in mm/ioremap.c.

diff --git a/arch/hexagon/kernel/hexagon_ksyms.c b/arch/hexagon/kernel/hexagon_ksyms.c
index ec56ce2d92a2..36a80e31d187 100644
--- a/arch/hexagon/kernel/hexagon_ksyms.c
+++ b/arch/hexagon/kernel/hexagon_ksyms.c
@@ -14,12 +14,10 @@
 EXPORT_SYMBOL(__clear_user_hexagon);
 EXPORT_SYMBOL(raw_copy_from_user);
 EXPORT_SYMBOL(raw_copy_to_user);
-EXPORT_SYMBOL(iounmap);
 EXPORT_SYMBOL(__vmgetie);
 EXPORT_SYMBOL(__vmsetie);
 EXPORT_SYMBOL(__vmyield);
 EXPORT_SYMBOL(empty_zero_page);
-EXPORT_SYMBOL(ioremap);
 EXPORT_SYMBOL(memcpy);
 EXPORT_SYMBOL(memset);
 

With those two diffs, the randconfig the robot provides builds and links
without any errors.

Cheers,
Nathan
Baoquan He June 25, 2023, 1:15 a.m. UTC | #4
On 06/21/23 at 07:08pm, Nathan Chancellor wrote:
> On Wed, Jun 21, 2023 at 04:50:53PM +0800, Baoquan He wrote:
> > Hi,
> > 
> > On 06/21/23 at 10:15am, kernel test robot wrote:
> > > Hi Baoquan,
> > > 
> > > kernel test robot noticed the following build errors:
> > > 
> > > [auto build test ERROR on akpm-mm/mm-everything]
> > > 
> > > url:    https://github.com/intel-lab-lkp/linux/commits/Baoquan-He/asm-generic-iomap-h-remove-ARCH_HAS_IOREMAP_xx-macros/20230620-212135
> > > base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> > > patch link:    https://lore.kernel.org/r/20230620131356.25440-3-bhe%40redhat.com
> > > patch subject: [PATCH v7 02/19] hexagon: mm: Convert to GENERIC_IOREMAP
> > > config: hexagon-randconfig-r041-20230620 (https://download.01.org/0day-ci/archive/20230621/202306211030.DioMEPhl-lkp@intel.com/config)
> > > compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
> > > reproduce: (https://download.01.org/0day-ci/archive/20230621/202306211030.DioMEPhl-lkp@intel.com/reproduce)
> > > 
> > > If you fix the issue in a separate patch/commit (i.e. not just a new version of
> > > the same patch/commit), kindly add following tags
> > > | Reported-by: kernel test robot <lkp@intel.com>
> > > | Closes: https://lore.kernel.org/oe-kbuild-all/202306211030.DioMEPhl-lkp@intel.com/
> > > 
> > > All errors (new ones prefixed by >>):
> > > 
> > > >> arch/hexagon/kernel/hexagon_ksyms.o: error: local symbol ioremap was exported
> > 
> > I followed steps in your reproduce link, didn't reproduce the error as
> > above line reported. I can still see those PCI_IOMAP warning, however
> > they will disappear when rebuilding. The clone3 warning can always ben
> > seen. I didn't see the symbol ioremap error. Could you double check if
> > anything missed in steps?
> > 
> > [root@dell-pem620-01 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash
> > Compiler will be installed in /root/0day
> > make --keep-going LLVM=1 CROSS_COMPILE=hexagon-linux- LLVM_IAS=1 --jobs=48 W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash
> > make[1]: Entering directory '/root/linux/build_dir'
> >   GEN     Makefile
> > ld.lld: /lib64/libtinfo.so.6: no version information available (required by ld.lld)
> 
> Hmmm, seems like a dynamic linking issue, likely because either libtinfo
> is not available or the version on your system is older or newer than
> the one that the compiler was built with.
> 
> Intel folks, you can opt out of this particular library dependency with
> '-DLLVM_ENABLE_TERMINFO=OFF' to cmake, which will make it easier for
> others to use it; the compiler can still output color on most terminals
> even without libtinfo.
> 
> > tools/testing/selftests/arm64/tags/.gitignore: warning: ignored by one of the .gitignore files
> > tools/testing/selftests/arm64/tags/Makefile: warning: ignored by one of the .gitignore files
> > tools/testing/selftests/arm64/tags/run_tags_test.sh: warning: ignored by one of the .gitignore files
> > tools/testing/selftests/arm64/tags/tags_test.c: warning: ignored by one of the .gitignore files
> > tools/testing/selftests/kvm/.gitignore: warning: ignored by one of the .gitignore files
> > tools/testing/selftests/kvm/Makefile: warning: ignored by one of the .gitignore files
> > tools/testing/selftests/kvm/config: warning: ignored by one of the .gitignore files
> > tools/testing/selftests/kvm/settings: warning: ignored by one of the .gitignore files
> >   CALL    ../scripts/checksyscalls.sh
> > clang: /lib64/libtinfo.so.6: no version information available (required by clang)
> > <stdin>:1519:2: warning: syscall clone3 not implemented [-W#warnings]
> >  1519 | #warning syscall clone3 not implemented
> >       |  ^
> > 1 warning generated.
> > make[1]: Leaving directory '/root/linux/build_dir'
> > [root@dell-pem620-01 linux]# 
> > 
> > 
> 
> I am able to reproduce this with the kernel.org LLVM builds that I do,
> which should not have that library dependency:
> 
> https://mirrors.edge.kernel.org/pub/tools/llvm/
> 
> $ curl -LSso .config https://download.01.org/0day-ci/archive/20230621/202306211030.DioMEPhl-lkp@intel.com/config
> 
> $ make -skj"$(nproc)" ARCH=hexagon LLVM=$(realpath llvm-16.0.6-x86_64/bin)/ olddefconfig all
> ...
> make[5]: *** No rule to make target 'arch/hexagon/mm/ioremap.o', needed by 'arch/hexagon/mm/built-in.a'.
> ...
> arch/hexagon/kernel/hexagon_ksyms.o: error: local symbol ioremap was exported
> ...
> 
> The first issue is resolved with:
> 
> diff --git a/arch/hexagon/mm/Makefile b/arch/hexagon/mm/Makefile
> index 49911a906fd0..ba4b04d962d6 100644
> --- a/arch/hexagon/mm/Makefile
> +++ b/arch/hexagon/mm/Makefile
> @@ -3,5 +3,5 @@
>  # Makefile for Hexagon memory management subsystem
>  #
>  
> -obj-y := init.o ioremap.o uaccess.o vm_fault.o cache.o
> +obj-y := init.o uaccess.o vm_fault.o cache.o
>  obj-y += copy_to_user.o copy_from_user.o vm_tlb.o

Ah, right, arch/hexagon/mm/ioremap.c is removed, I forgot change that in
Makefile. Thanks.

> 
> For the second issue, it seems that ioremap is exported in
> arch/hexagon/kernel/hexagon_ksyms.c but ioremap() is a static inline
> function with CONFIG_GENERIC_IOREMAP. I think we can just remove the
> ioremap and iounmap exports now, as ioremap() calls ioremap_prot(),
> which is exported, and iounmap() is exported in mm/ioremap.c.
> 
> diff --git a/arch/hexagon/kernel/hexagon_ksyms.c b/arch/hexagon/kernel/hexagon_ksyms.c
> index ec56ce2d92a2..36a80e31d187 100644
> --- a/arch/hexagon/kernel/hexagon_ksyms.c
> +++ b/arch/hexagon/kernel/hexagon_ksyms.c
> @@ -14,12 +14,10 @@
>  EXPORT_SYMBOL(__clear_user_hexagon);
>  EXPORT_SYMBOL(raw_copy_from_user);
>  EXPORT_SYMBOL(raw_copy_to_user);
> -EXPORT_SYMBOL(iounmap);
>  EXPORT_SYMBOL(__vmgetie);
>  EXPORT_SYMBOL(__vmsetie);
>  EXPORT_SYMBOL(__vmyield);
>  EXPORT_SYMBOL(empty_zero_page);
> -EXPORT_SYMBOL(ioremap);
>  EXPORT_SYMBOL(memcpy);
>  EXPORT_SYMBOL(memset);
>  
> 
> With those two diffs, the randconfig the robot provides builds and links
> without any errors.

Thanks a lot, I will add this into patch 02/19 of v8 post.
diff mbox series

Patch

diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig
index 54eadf265178..17afffde1a7f 100644
--- a/arch/hexagon/Kconfig
+++ b/arch/hexagon/Kconfig
@@ -25,6 +25,7 @@  config HEXAGON
 	select NEED_SG_DMA_LENGTH
 	select NO_IOPORT_MAP
 	select GENERIC_IOMAP
+	select GENERIC_IOREMAP
 	select GENERIC_SMP_IDLE_THREAD
 	select STACKTRACE_SUPPORT
 	select GENERIC_CLOCKEVENTS_BROADCAST
diff --git a/arch/hexagon/include/asm/io.h b/arch/hexagon/include/asm/io.h
index 46a099de85b7..e2b308e32a37 100644
--- a/arch/hexagon/include/asm/io.h
+++ b/arch/hexagon/include/asm/io.h
@@ -27,8 +27,6 @@ 
 extern int remap_area_pages(unsigned long start, unsigned long phys_addr,
 				unsigned long end, unsigned long flags);
 
-extern void iounmap(const volatile void __iomem *addr);
-
 /* Defined in lib/io.c, needed for smc91x driver. */
 extern void __raw_readsw(const void __iomem *addr, void *data, int wordlen);
 extern void __raw_writesw(void __iomem *addr, const void *data, int wordlen);
@@ -170,8 +168,13 @@  static inline void writel(u32 data, volatile void __iomem *addr)
 #define writew_relaxed __raw_writew
 #define writel_relaxed __raw_writel
 
-void __iomem *ioremap(unsigned long phys_addr, unsigned long size);
-#define ioremap_uc(X, Y) ioremap((X), (Y))
+/*
+ * I/O memory mapping functions.
+ */
+#define _PAGE_IOREMAP (_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \
+		       (__HEXAGON_C_DEV << 6))
+
+#define ioremap_uc(addr, size) ioremap((addr), (size))
 
 
 #define __raw_writel writel
diff --git a/arch/hexagon/mm/ioremap.c b/arch/hexagon/mm/ioremap.c
deleted file mode 100644
index 255c5b1ee1a7..000000000000
--- a/arch/hexagon/mm/ioremap.c
+++ /dev/null
@@ -1,44 +0,0 @@ 
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * I/O remap functions for Hexagon
- *
- * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
- */
-
-#include <linux/io.h>
-#include <linux/vmalloc.h>
-#include <linux/mm.h>
-
-void __iomem *ioremap(unsigned long phys_addr, unsigned long size)
-{
-	unsigned long last_addr, addr;
-	unsigned long offset = phys_addr & ~PAGE_MASK;
-	struct vm_struct *area;
-
-	pgprot_t prot = __pgprot(_PAGE_PRESENT|_PAGE_READ|_PAGE_WRITE
-					|(__HEXAGON_C_DEV << 6));
-
-	last_addr = phys_addr + size - 1;
-
-	/*  Wrapping not allowed  */
-	if (!size || (last_addr < phys_addr))
-		return NULL;
-
-	/*  Rounds up to next page size, including whole-page offset */
-	size = PAGE_ALIGN(offset + size);
-
-	area = get_vm_area(size, VM_IOREMAP);
-	addr = (unsigned long)area->addr;
-
-	if (ioremap_page_range(addr, addr+size, phys_addr, prot)) {
-		vunmap((void *)addr);
-		return NULL;
-	}
-
-	return (void __iomem *) (offset + addr);
-}
-
-void iounmap(const volatile void __iomem *addr)
-{
-	vunmap((void *) ((unsigned long) addr & PAGE_MASK));
-}