Commit 3b1ddbb6 authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'virt-to-pfn-for-arch-v6.5-2' of...

Merge tag 'virt-to-pfn-for-arch-v6.5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator into asm-generic

This is an attempt to harden the typing on virt_to_pfn()
and pfn_to_virt().

Making virt_to_pfn() a static inline taking a strongly typed
(const void *) makes the contract of a passing a pointer of that
type to the function explicit and exposes any misuse of the
macro virt_to_pfn() acting polymorphic and accepting many types
such as (void *), (unitptr_t) or (unsigned long) as arguments
without warnings.

For symmetry, we do the same with pfn_to_virt().

The problem with this inconsistent typing was pointed out by
Russell King:
https://lore.kernel.org/linux-arm-kernel/YoJDKJXc0MJ2QZTb@shell.armlinux.org.uk/

And confirmed by Andrew Morton:
https://lore.kernel.org/linux-mm/20220701160004.2ffff4e5ab59a55499f4c736@linux-foundation.org/

So the recognition of the problem is widespread.

These platforms have been chosen as initial conversion targets:

- ARM
- ARM64/Aarch64
- asm-generic (including for example x86)
- m68k

The idea is that if this goes in, it will block further misuse
of the function signatures due to the large compile coverage,
and then I can go in and fix the remaining architectures on a
one-by-one basis.

Some of the patches have been circulated before but were not
picked up by subsystem maintainers, so now the arch tree is
target for this series.

It has passed zeroday builds after a lot of iterations in my
personal tree, but there could be some randconfig outliers.
New added or deeply hidden problems appear all the time so
some minor fallout can be expected.

* tag 'virt-to-pfn-for-arch-v6.5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator:
  m68k/mm: Make pfn accessors static inlines
  arm64: memory: Make virt_to_pfn() a static inline
  ARM: mm: Make virt_to_pfn() a static inline
  asm-generic/page.h: Make pfn accessors static inlines
  xen/netback: Pass (void *) to virt_to_page()
  netfs: Pass a pointer to virt_to_page()
  cifs: Pass a pointer to virt_to_page() in cifsglob
  cifs: Pass a pointer to virt_to_page()
  riscv: mm: init: Pass a pointer to virt_to_page()
  ARC: init: Pass a pointer to virt_to_pfn() in init
  m68k: Pass a pointer to virt_to_pfn() virt_to_page()
  fs/proc/kcore.c: Pass a pointer to virt_addr_valid()
parents 7877cb91 ef7d0f5d
...@@ -87,7 +87,7 @@ void __init setup_arch_memory(void) ...@@ -87,7 +87,7 @@ void __init setup_arch_memory(void)
setup_initial_init_mm(_text, _etext, _edata, _end); setup_initial_init_mm(_text, _etext, _edata, _end);
/* first page of system - kernel .vector starts here */ /* first page of system - kernel .vector starts here */
min_low_pfn = virt_to_pfn(CONFIG_LINUX_RAM_BASE); min_low_pfn = virt_to_pfn((void *)CONFIG_LINUX_RAM_BASE);
/* Last usable page of low mem */ /* Last usable page of low mem */
max_low_pfn = max_pfn = PFN_DOWN(low_mem_start + low_mem_sz); max_low_pfn = max_pfn = PFN_DOWN(low_mem_start + low_mem_sz);
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/string.h> #include <linux/string.h>
#include <asm/mach/sharpsl_param.h> #include <asm/mach/sharpsl_param.h>
#include <asm/memory.h> #include <asm/page.h>
/* /*
* Certain hardware parameters determined at the time of device manufacture, * Certain hardware parameters determined at the time of device manufacture,
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
#ifndef __ASM_ARM_DELAY_H #ifndef __ASM_ARM_DELAY_H
#define __ASM_ARM_DELAY_H #define __ASM_ARM_DELAY_H
#include <asm/memory.h> #include <asm/page.h>
#include <asm/param.h> /* HZ */ #include <asm/param.h> /* HZ */
/* /*
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/types.h> #include <linux/types.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm-generic/pci_iomap.h> #include <asm-generic/pci_iomap.h>
/* /*
......
...@@ -5,11 +5,16 @@ ...@@ -5,11 +5,16 @@
* Copyright (C) 2000-2002 Russell King * Copyright (C) 2000-2002 Russell King
* modification for nommu, Hyok S. Choi, 2004 * modification for nommu, Hyok S. Choi, 2004
* *
* Note: this file should not be included by non-asm/.h files * Note: this file should not be included explicitly, include <asm/page.h>
* to get access to these definitions.
*/ */
#ifndef __ASM_ARM_MEMORY_H #ifndef __ASM_ARM_MEMORY_H
#define __ASM_ARM_MEMORY_H #define __ASM_ARM_MEMORY_H
#ifndef _ASMARM_PAGE_H
#error "Do not include <asm/memory.h> directly"
#endif
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/const.h> #include <linux/const.h>
#include <linux/types.h> #include <linux/types.h>
...@@ -288,10 +293,12 @@ static inline unsigned long __phys_to_virt(phys_addr_t x) ...@@ -288,10 +293,12 @@ static inline unsigned long __phys_to_virt(phys_addr_t x)
#endif #endif
#define virt_to_pfn(kaddr) \ static inline unsigned long virt_to_pfn(const void *p)
((((unsigned long)(kaddr) - PAGE_OFFSET) >> PAGE_SHIFT) + \ {
PHYS_PFN_OFFSET) unsigned long kaddr = (unsigned long)p;
return (((kaddr - PAGE_OFFSET) >> PAGE_SHIFT) +
PHYS_PFN_OFFSET);
}
#define __pa_symbol_nodebug(x) __virt_to_phys_nodebug((x)) #define __pa_symbol_nodebug(x) __virt_to_phys_nodebug((x))
#ifdef CONFIG_DEBUG_VIRTUAL #ifdef CONFIG_DEBUG_VIRTUAL
......
...@@ -161,10 +161,10 @@ extern int pfn_valid(unsigned long); ...@@ -161,10 +161,10 @@ extern int pfn_valid(unsigned long);
#define pfn_valid pfn_valid #define pfn_valid pfn_valid
#endif #endif
#include <asm/memory.h>
#endif /* !__ASSEMBLY__ */ #endif /* !__ASSEMBLY__ */
#include <asm/memory.h>
#define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
#include <asm-generic/getorder.h> #include <asm-generic/getorder.h>
......
...@@ -27,7 +27,7 @@ extern struct page *empty_zero_page; ...@@ -27,7 +27,7 @@ extern struct page *empty_zero_page;
#else #else
#include <asm-generic/pgtable-nopud.h> #include <asm-generic/pgtable-nopud.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/pgtable-hwdef.h> #include <asm/pgtable-hwdef.h>
......
...@@ -147,8 +147,6 @@ static inline void init_proc_vtable(const struct processor *p) ...@@ -147,8 +147,6 @@ static inline void init_proc_vtable(const struct processor *p)
extern void cpu_resume(void); extern void cpu_resume(void);
#include <asm/memory.h>
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
#define cpu_switch_mm(pgd,mm) cpu_do_switch_mm(virt_to_phys(pgd),mm) #define cpu_switch_mm(pgd,mm) cpu_do_switch_mm(virt_to_phys(pgd),mm)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#ifndef ASMARM_SPARSEMEM_H #ifndef ASMARM_SPARSEMEM_H
#define ASMARM_SPARSEMEM_H #define ASMARM_SPARSEMEM_H
#include <asm/memory.h> #include <asm/page.h>
/* /*
* Two definitions are required for sparsemem: * Two definitions are required for sparsemem:
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/domain.h> #include <asm/domain.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
.macro csdb .macro csdb
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* User space memory access functions * User space memory access functions
*/ */
#include <linux/string.h> #include <linux/string.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/domain.h> #include <asm/domain.h>
#include <asm/unaligned.h> #include <asm/unaligned.h>
#include <asm/unified.h> #include <asm/unified.h>
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include <asm/glue-pf.h> #include <asm/glue-pf.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/mpu.h> #include <asm/mpu.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/suspend.h> #include <asm/suspend.h>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/glue-df.h> #include <asm/glue-df.h>
#include <asm/glue-pf.h> #include <asm/glue-pf.h>
#include <asm/vfpmacros.h> #include <asm/vfpmacros.h>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/ftrace.h> #include <asm/ftrace.h>
#include <asm/unwind.h> #include <asm/unwind.h>
#include <asm/memory.h> #include <asm/page.h>
#ifdef CONFIG_AEABI #ifdef CONFIG_AEABI
#include <asm/unistd-oabi.h> #include <asm/unistd-oabi.h>
#endif #endif
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Low-level vector interface routines for the ARMv7-M architecture * Low-level vector interface routines for the ARMv7-M architecture
*/ */
#include <asm/memory.h> #include <asm/page.h>
#include <asm/glue.h> #include <asm/glue.h>
#include <asm/thread_notify.h> #include <asm/thread_notify.h>
#include <asm/v7m.h> #include <asm/v7m.h>
......
...@@ -14,12 +14,11 @@ ...@@ -14,12 +14,11 @@
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/cp15.h> #include <asm/cp15.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
#include <asm/v7m.h> #include <asm/v7m.h>
#include <asm/mpu.h> #include <asm/mpu.h>
#include <asm/page.h>
/* /*
* Kernel startup entry point. * Kernel startup entry point.
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include <asm/domain.h> #include <asm/domain.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
#if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_SEMIHOSTING) #if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_SEMIHOSTING)
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#include <asm/system_misc.h> #include <asm/system_misc.h>
#include <asm/idmap.h> #include <asm/idmap.h>
#include <asm/suspend.h> #include <asm/suspend.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/sections.h> #include <asm/sections.h>
#include "reboot.h" #include "reboot.h"
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <asm/bugs.h> #include <asm/bugs.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/idmap.h> #include <asm/idmap.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/smp_plat.h> #include <asm/smp_plat.h>
#include <asm/suspend.h> #include <asm/suspend.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include <linux/string.h> /* memcpy */ #include <linux/string.h> /* memcpy */
#include <asm/cputype.h> #include <asm/cputype.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/system_info.h> #include <asm/system_info.h>
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/tcm.h> #include <asm/tcm.h>
......
...@@ -12,9 +12,8 @@ ...@@ -12,9 +12,8 @@
#include <asm/vmlinux.lds.h> #include <asm/vmlinux.lds.h>
#include <asm/cache.h> #include <asm/cache.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
#include <asm/memory.h>
#include <asm/mpu.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/mpu.h>
OUTPUT_ARCH(arm) OUTPUT_ARCH(arm)
ENTRY(stext) ENTRY(stext)
......
...@@ -12,9 +12,8 @@ ...@@ -12,9 +12,8 @@
#include <asm/vmlinux.lds.h> #include <asm/vmlinux.lds.h>
#include <asm/cache.h> #include <asm/cache.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
#include <asm/memory.h>
#include <asm/mpu.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/mpu.h>
OUTPUT_ARCH(arm) OUTPUT_ARCH(arm)
ENTRY(stext) ENTRY(stext)
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/cp15.h> #include <asm/cp15.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/smp_plat.h> #include <asm/smp_plat.h>
#include <asm/smp_scu.h> #include <asm/smp_scu.h>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/memory.h> #include <asm/page.h>
#include "memory.h" #include "memory.h"
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include <linux/platform_data/pm33xx.h> #include <linux/platform_data/pm33xx.h>
#include <linux/ti-emif-sram.h> #include <linux/ti-emif-sram.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/memory.h> #include <asm/page.h>
#include "iomap.h" #include "iomap.h"
#include "cm33xx.h" #include "cm33xx.h"
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include <linux/platform_data/pm33xx.h> #include <linux/platform_data/pm33xx.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/hardware/cache-l2x0.h> #include <asm/hardware/cache-l2x0.h>
#include <asm/memory.h> #include <asm/page.h>
#include "cm33xx.h" #include "cm33xx.h"
#include "common.h" #include "common.h"
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/smp_scu.h> #include <asm/smp_scu.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/hardware/cache-l2x0.h> #include <asm/hardware/cache-l2x0.h>
#include "omap-secure.h" #include "omap-secure.h"
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#include <linux/clk.h> #include <linux/clk.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <linux/sizes.h> #include <linux/sizes.h>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/memory.h> #include <asm/page.h>
.data .data
/* /*
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
#include <linux/time.h> #include <linux/time.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/suspend.h> #include <asm/suspend.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/memory.h> #include <asm/page.h>
/* /*
* Boot code for secondary CPUs. * Boot code for secondary CPUs.
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/threads.h> #include <linux/threads.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/memory.h> #include <asm/page.h>
#define SCTLR_MMU 0x01 #define SCTLR_MMU 0x01
#define BOOTROM_ADDRESS 0xE6340000 #define BOOTROM_ADDRESS 0xE6340000
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
*/ */
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/assembler.h> #include <asm/assembler.h>
.arch armv7-a .arch armv7-a
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#ifndef __MACH_SPEAR_H #ifndef __MACH_SPEAR_H
#define __MACH_SPEAR_H #define __MACH_SPEAR_H
#include <asm/memory.h> #include <asm/page.h>
#if defined(CONFIG_ARCH_SPEAR3XX) || defined (CONFIG_ARCH_SPEAR6XX) #if defined(CONFIG_ARCH_SPEAR3XX) || defined (CONFIG_ARCH_SPEAR6XX)
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/memory.h>
#include <asm/page.h> #include <asm/page.h>
#include "proc-macros.S" #include "proc-macros.S"
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/memory.h>
#include <asm/page.h> #include <asm/page.h>
#include "proc-macros.S" #include "proc-macros.S"
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <linux/sizes.h> #include <linux/sizes.h>
#include <linux/cma.h> #include <linux/cma.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/highmem.h> #include <asm/highmem.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include <asm/domain.h> #include <asm/domain.h>
#include <asm/fixmap.h> #include <asm/fixmap.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/ptdump.h> #include <asm/ptdump.h>
static struct addr_marker address_markers[] = { static struct addr_marker address_markers[] = {
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#include <asm/cp15.h> #include <asm/cp15.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/memblock.h> #include <asm/memblock.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/setup.h> #include <asm/setup.h>
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <asm/cputype.h> #include <asm/cputype.h>
#include <asm/highmem.h> #include <asm/highmem.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/memory.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#include <asm/system_info.h> #include <asm/system_info.h>
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/procinfo.h> #include <asm/procinfo.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
#include <asm/kasan_def.h> #include <asm/kasan_def.h>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/fixmap.h> #include <asm/fixmap.h>
#include <asm/dma.h> #include <asm/dma.h>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include <asm/cputype.h> #include <asm/cputype.h>
#include <asm/mpu.h> #include <asm/mpu.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/sections.h> #include <asm/sections.h>
#include "mm.h" #include "mm.h"
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/hwcap.h> #include <asm/hwcap.h>
#include <asm/pgtable-hwdef.h> #include <asm/pgtable-hwdef.h>
#include <asm/memory.h> #include <asm/page.h>
#include "proc-macros.S" #include "proc-macros.S"
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
*/ */
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/memory.h> #include <asm/page.h>
#include <asm/v7m.h> #include <asm/v7m.h>
#include "proc-macros.S" #include "proc-macros.S"
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <linux/pgtable.h> #include <linux/pgtable.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/cp15.h> #include <asm/cp15.h>
#include <asm/memory.h> #include <asm/page.h>
.section ".idmap.text", "ax" .section ".idmap.text", "ax"
......
...@@ -331,6 +331,14 @@ static inline void *phys_to_virt(phys_addr_t x) ...@@ -331,6 +331,14 @@ static inline void *phys_to_virt(phys_addr_t x)
return (void *)(__phys_to_virt(x)); return (void *)(__phys_to_virt(x));
} }
/* Needed already here for resolving __phys_to_pfn() in virt_to_pfn() */
#include <asm-generic/memory_model.h>
static inline unsigned long virt_to_pfn(const void *kaddr)
{
return __phys_to_pfn(virt_to_phys(kaddr));
}
/* /*
* Drivers should NOT use these either. * Drivers should NOT use these either.
*/ */
...@@ -339,7 +347,6 @@ static inline void *phys_to_virt(phys_addr_t x) ...@@ -339,7 +347,6 @@ static inline void *phys_to_virt(phys_addr_t x)
#define __pa_nodebug(x) __virt_to_phys_nodebug((unsigned long)(x)) #define __pa_nodebug(x) __virt_to_phys_nodebug((unsigned long)(x))
#define __va(x) ((void *)__phys_to_virt((phys_addr_t)(x))) #define __va(x) ((void *)__phys_to_virt((phys_addr_t)(x)))
#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
#define virt_to_pfn(x) __phys_to_pfn(__virt_to_phys((unsigned long)(x)))
#define sym_to_pfn(x) __phys_to_pfn(__pa_symbol(x)) #define sym_to_pfn(x) __phys_to_pfn(__pa_symbol(x))
/* /*
......
...@@ -115,7 +115,7 @@ static inline void pgd_set(pgd_t *pgdp, pmd_t *pmdp) ...@@ -115,7 +115,7 @@ static inline void pgd_set(pgd_t *pgdp, pmd_t *pmdp)
pgd_val(*pgdp) = virt_to_phys(pmdp); pgd_val(*pgdp) = virt_to_phys(pmdp);
} }
#define __pte_page(pte) ((unsigned long) (pte_val(pte) & PAGE_MASK)) #define __pte_page(pte) ((void *) (pte_val(pte) & PAGE_MASK))
#define pmd_page_vaddr(pmd) ((unsigned long) (pmd_val(pmd))) #define pmd_page_vaddr(pmd) ((unsigned long) (pmd_val(pmd)))
static inline int pte_none(pte_t pte) static inline int pte_none(pte_t pte)
...@@ -134,7 +134,6 @@ static inline void pte_clear(struct mm_struct *mm, unsigned long addr, ...@@ -134,7 +134,6 @@ static inline void pte_clear(struct mm_struct *mm, unsigned long addr,
pte_val(*ptep) = 0; pte_val(*ptep) = 0;
} }
#define pte_pagenr(pte) ((__pte_page(pte) - PAGE_OFFSET) >> PAGE_SHIFT)
#define pte_page(pte) virt_to_page(__pte_page(pte)) #define pte_page(pte) virt_to_page(__pte_page(pte))
static inline int pmd_none2(pmd_t *pmd) { return !pmd_val(*pmd); } static inline int pmd_none2(pmd_t *pmd) { return !pmd_val(*pmd); }
......
...@@ -121,8 +121,15 @@ static inline void *__va(unsigned long x) ...@@ -121,8 +121,15 @@ static inline void *__va(unsigned long x)
* TODO: implement (fast) pfn<->pgdat_idx conversion functions, this makes lots * TODO: implement (fast) pfn<->pgdat_idx conversion functions, this makes lots
* of the shifts unnecessary. * of the shifts unnecessary.
*/ */
#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) static inline unsigned long virt_to_pfn(const void *kaddr)
#define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT) {
return __pa(kaddr) >> PAGE_SHIFT;
}
static inline void *pfn_to_virt(unsigned long pfn)
{
return __va(pfn << PAGE_SHIFT);
}
extern int m68k_virt_to_node_shift; extern int m68k_virt_to_node_shift;
......
...@@ -19,8 +19,15 @@ extern unsigned long memory_end; ...@@ -19,8 +19,15 @@ extern unsigned long memory_end;
#define __pa(vaddr) ((unsigned long)(vaddr)) #define __pa(vaddr) ((unsigned long)(vaddr))
#define __va(paddr) ((void *)((unsigned long)(paddr))) #define __va(paddr) ((void *)((unsigned long)(paddr)))
#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) static inline unsigned long virt_to_pfn(const void *kaddr)
#define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT) {
return __pa(kaddr) >> PAGE_SHIFT;
}
static inline void *pfn_to_virt(unsigned long pfn)
{
return __va(pfn << PAGE_SHIFT);
}
#define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)) #define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT))
#define page_to_virt(page) __va(((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET)) #define page_to_virt(page) __va(((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET))
......
...@@ -91,7 +91,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) ...@@ -91,7 +91,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
#define pmd_set(pmdp,ptep) do {} while (0) #define pmd_set(pmdp,ptep) do {} while (0)
#define __pte_page(pte) \ #define __pte_page(pte) \
((unsigned long) __va ((pte_val (pte) & SUN3_PAGE_PGNUM_MASK) << PAGE_SHIFT)) (__va ((pte_val (pte) & SUN3_PAGE_PGNUM_MASK) << PAGE_SHIFT))
static inline unsigned long pmd_page_vaddr(pmd_t pmd) static inline unsigned long pmd_page_vaddr(pmd_t pmd)
{ {
...@@ -111,7 +111,7 @@ static inline void pte_clear (struct mm_struct *mm, unsigned long addr, pte_t *p ...@@ -111,7 +111,7 @@ static inline void pte_clear (struct mm_struct *mm, unsigned long addr, pte_t *p
#define pte_page(pte) virt_to_page(__pte_page(pte)) #define pte_page(pte) virt_to_page(__pte_page(pte))
#define pmd_pfn(pmd) (pmd_val(pmd) >> PAGE_SHIFT) #define pmd_pfn(pmd) (pmd_val(pmd) >> PAGE_SHIFT)
#define pmd_page(pmd) virt_to_page(pmd_page_vaddr(pmd)) #define pmd_page(pmd) virt_to_page((void *)pmd_page_vaddr(pmd))
static inline int pmd_none2 (pmd_t *pmd) { return !pmd_val (*pmd); } static inline int pmd_none2 (pmd_t *pmd) { return !pmd_val (*pmd); }
......
...@@ -69,7 +69,8 @@ void __init paging_init(void) ...@@ -69,7 +69,8 @@ void __init paging_init(void)
/* now change pg_table to kernel virtual addresses */ /* now change pg_table to kernel virtual addresses */
for (i = 0; i < PTRS_PER_PTE; ++i, ++pg_table) { for (i = 0; i < PTRS_PER_PTE; ++i, ++pg_table) {
pte_t pte = pfn_pte(virt_to_pfn(address), PAGE_INIT); pte_t pte = pfn_pte(virt_to_pfn((void *)address),
PAGE_INIT);
if (address >= (unsigned long) high_memory) if (address >= (unsigned long) high_memory)
pte_val(pte) = 0; pte_val(pte) = 0;
......
...@@ -102,7 +102,7 @@ static struct list_head ptable_list[2] = { ...@@ -102,7 +102,7 @@ static struct list_head ptable_list[2] = {
LIST_HEAD_INIT(ptable_list[1]), LIST_HEAD_INIT(ptable_list[1]),
}; };
#define PD_PTABLE(page) ((ptable_desc *)&(virt_to_page(page)->lru)) #define PD_PTABLE(page) ((ptable_desc *)&(virt_to_page((void *)(page))->lru))
#define PD_PAGE(ptable) (list_entry(ptable, struct page, lru)) #define PD_PAGE(ptable) (list_entry(ptable, struct page, lru))
#define PD_MARKBITS(dp) (*(unsigned int *)&PD_PAGE(dp)->index) #define PD_MARKBITS(dp) (*(unsigned int *)&PD_PAGE(dp)->index)
...@@ -201,7 +201,7 @@ int free_pointer_table(void *table, int type) ...@@ -201,7 +201,7 @@ int free_pointer_table(void *table, int type)
list_del(dp); list_del(dp);
mmu_page_dtor((void *)page); mmu_page_dtor((void *)page);
if (type == TABLE_PTE) if (type == TABLE_PTE)
pgtable_pte_page_dtor(virt_to_page(page)); pgtable_pte_page_dtor(virt_to_page((void *)page));
free_page (page); free_page (page);
return 1; return 1;
} else if (ptable_list[type].next != dp) { } else if (ptable_list[type].next != dp) {
......
...@@ -75,7 +75,7 @@ void __init paging_init(void) ...@@ -75,7 +75,7 @@ void __init paging_init(void)
/* now change pg_table to kernel virtual addresses */ /* now change pg_table to kernel virtual addresses */
pg_table = (pte_t *) __va ((unsigned long) pg_table); pg_table = (pte_t *) __va ((unsigned long) pg_table);
for (i=0; i<PTRS_PER_PTE; ++i, ++pg_table) { for (i=0; i<PTRS_PER_PTE; ++i, ++pg_table) {
pte_t pte = pfn_pte(virt_to_pfn(address), PAGE_INIT); pte_t pte = pfn_pte(virt_to_pfn((void *)address), PAGE_INIT);
if (address >= (unsigned long)high_memory) if (address >= (unsigned long)high_memory)
pte_val (pte) = 0; pte_val (pte) = 0;
set_pte (pg_table, pte); set_pte (pg_table, pte);
......
...@@ -29,7 +29,7 @@ static unsigned long dvma_page(unsigned long kaddr, unsigned long vaddr) ...@@ -29,7 +29,7 @@ static unsigned long dvma_page(unsigned long kaddr, unsigned long vaddr)
j = *(volatile unsigned long *)kaddr; j = *(volatile unsigned long *)kaddr;
*(volatile unsigned long *)kaddr = j; *(volatile unsigned long *)kaddr = j;
ptep = pfn_pte(virt_to_pfn(kaddr), PAGE_KERNEL); ptep = pfn_pte(virt_to_pfn((void *)kaddr), PAGE_KERNEL);
pte = pte_val(ptep); pte = pte_val(ptep);
// pr_info("dvma_remap: addr %lx -> %lx pte %08lx\n", kaddr, vaddr, pte); // pr_info("dvma_remap: addr %lx -> %lx pte %08lx\n", kaddr, vaddr, pte);
if(ptelist[(vaddr & 0xff000) >> PAGE_SHIFT] != pte) { if(ptelist[(vaddr & 0xff000) >> PAGE_SHIFT] != pte) {
......
...@@ -125,7 +125,7 @@ inline int dvma_map_cpu(unsigned long kaddr, ...@@ -125,7 +125,7 @@ inline int dvma_map_cpu(unsigned long kaddr,
do { do {
pr_debug("mapping %08lx phys to %08lx\n", pr_debug("mapping %08lx phys to %08lx\n",
__pa(kaddr), vaddr); __pa(kaddr), vaddr);
set_pte(pte, pfn_pte(virt_to_pfn(kaddr), set_pte(pte, pfn_pte(virt_to_pfn((void *)kaddr),
PAGE_KERNEL)); PAGE_KERNEL));
pte++; pte++;
kaddr += PAGE_SIZE; kaddr += PAGE_SIZE;
......
...@@ -356,7 +356,7 @@ static phys_addr_t __init alloc_pte_late(uintptr_t va) ...@@ -356,7 +356,7 @@ static phys_addr_t __init alloc_pte_late(uintptr_t va)
unsigned long vaddr; unsigned long vaddr;
vaddr = __get_free_page(GFP_KERNEL); vaddr = __get_free_page(GFP_KERNEL);
BUG_ON(!vaddr || !pgtable_pte_page_ctor(virt_to_page(vaddr))); BUG_ON(!vaddr || !pgtable_pte_page_ctor(virt_to_page((void *)vaddr)));
return __pa(vaddr); return __pa(vaddr);
} }
...@@ -439,7 +439,7 @@ static phys_addr_t __init alloc_pmd_late(uintptr_t va) ...@@ -439,7 +439,7 @@ static phys_addr_t __init alloc_pmd_late(uintptr_t va)
unsigned long vaddr; unsigned long vaddr;
vaddr = __get_free_page(GFP_KERNEL); vaddr = __get_free_page(GFP_KERNEL);
BUG_ON(!vaddr || !pgtable_pmd_page_ctor(virt_to_page(vaddr))); BUG_ON(!vaddr || !pgtable_pmd_page_ctor(virt_to_page((void *)vaddr)));
return __pa(vaddr); return __pa(vaddr);
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/assembler.h> #include <asm/assembler.h>
#include <asm/memory.h> #include <asm/page.h>
#include "emif.h" #include "emif.h"
#include "ti-emif-asm-offsets.h" #include "ti-emif-asm-offsets.h"
......
...@@ -689,7 +689,7 @@ static void xenvif_fill_frags(struct xenvif_queue *queue, struct sk_buff *skb) ...@@ -689,7 +689,7 @@ static void xenvif_fill_frags(struct xenvif_queue *queue, struct sk_buff *skb)
prev_pending_idx = pending_idx; prev_pending_idx = pending_idx;
txp = &queue->pending_tx_info[pending_idx].req; txp = &queue->pending_tx_info[pending_idx].req;
page = virt_to_page(idx_to_kaddr(queue, pending_idx)); page = virt_to_page((void *)idx_to_kaddr(queue, pending_idx));
__skb_fill_page_desc(skb, i, page, txp->offset, txp->size); __skb_fill_page_desc(skb, i, page, txp->offset, txp->size);
skb->len += txp->size; skb->len += txp->size;
skb->data_len += txp->size; skb->data_len += txp->size;
......
...@@ -240,7 +240,7 @@ static ssize_t netfs_extract_kvec_to_sg(struct iov_iter *iter, ...@@ -240,7 +240,7 @@ static ssize_t netfs_extract_kvec_to_sg(struct iov_iter *iter,
if (is_vmalloc_or_module_addr((void *)kaddr)) if (is_vmalloc_or_module_addr((void *)kaddr))
page = vmalloc_to_page((void *)kaddr); page = vmalloc_to_page((void *)kaddr);
else else
page = virt_to_page(kaddr); page = virt_to_page((void *)kaddr);
sg_set_page(sg, page, len, off); sg_set_page(sg, page, len, off);
sgtable->nents++; sgtable->nents++;
......
...@@ -199,7 +199,7 @@ kclist_add_private(unsigned long pfn, unsigned long nr_pages, void *arg) ...@@ -199,7 +199,7 @@ kclist_add_private(unsigned long pfn, unsigned long nr_pages, void *arg)
ent->addr = (unsigned long)page_to_virt(p); ent->addr = (unsigned long)page_to_virt(p);
ent->size = nr_pages << PAGE_SHIFT; ent->size = nr_pages << PAGE_SHIFT;
if (!virt_addr_valid(ent->addr)) if (!virt_addr_valid((void *)ent->addr))
goto free_out; goto free_out;
/* cut not-mapped area. ....from ppc-32 code. */ /* cut not-mapped area. ....from ppc-32 code. */
......
...@@ -2218,7 +2218,7 @@ static inline void cifs_sg_set_buf(struct sg_table *sgtable, ...@@ -2218,7 +2218,7 @@ static inline void cifs_sg_set_buf(struct sg_table *sgtable,
} while (buflen); } while (buflen);
} else { } else {
sg_set_page(&sgtable->sgl[sgtable->nents++], sg_set_page(&sgtable->sgl[sgtable->nents++],
virt_to_page(addr), buflen, off); virt_to_page((void *)addr), buflen, off);
} }
} }
......
...@@ -2500,7 +2500,7 @@ static ssize_t smb_extract_kvec_to_rdma(struct iov_iter *iter, ...@@ -2500,7 +2500,7 @@ static ssize_t smb_extract_kvec_to_rdma(struct iov_iter *iter,
if (is_vmalloc_or_module_addr((void *)kaddr)) if (is_vmalloc_or_module_addr((void *)kaddr))
page = vmalloc_to_page((void *)kaddr); page = vmalloc_to_page((void *)kaddr);
else else
page = virt_to_page(kaddr); page = virt_to_page((void *)kaddr);
if (!smb_set_sge(rdma, page, off, seg)) if (!smb_set_sge(rdma, page, off, seg))
return -EIO; return -EIO;
......
...@@ -74,8 +74,16 @@ extern unsigned long memory_end; ...@@ -74,8 +74,16 @@ extern unsigned long memory_end;
#define __va(x) ((void *)((unsigned long) (x))) #define __va(x) ((void *)((unsigned long) (x)))
#define __pa(x) ((unsigned long) (x)) #define __pa(x) ((unsigned long) (x))
#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) static inline unsigned long virt_to_pfn(const void *kaddr)
#define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT) {
return __pa(kaddr) >> PAGE_SHIFT;
}
#define virt_to_pfn virt_to_pfn
static inline void *pfn_to_virt(unsigned long pfn)
{
return __va(pfn) << PAGE_SHIFT;
}
#define pfn_to_virt pfn_to_virt
#define virt_to_page(addr) pfn_to_page(virt_to_pfn(addr)) #define virt_to_page(addr) pfn_to_page(virt_to_pfn(addr))
#define page_to_virt(page) pfn_to_virt(page_to_pfn(page)) #define page_to_virt(page) pfn_to_virt(page_to_pfn(page))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment