android_kernel_oneplus_msm8998/arch/arm/kernel
Russell King e26a9e00af ARM: Better virt_to_page() handling
virt_to_page() is incredibly inefficient when virt-to-phys patching is
enabled.  This is because we end up with this calculation:

  page = &mem_map[asm virt_to_phys(addr) >> 12 - __pv_phys_offset >> 12]

in assembly.  The asm virt_to_phys() is equivalent this this operation:

  addr - PAGE_OFFSET + __pv_phys_offset

and we can see that because this is assembly, the compiler has no chance
to optimise some of that away.  This should reduce down to:

  page = &mem_map[(addr - PAGE_OFFSET) >> 12]

for the common cases.  Permit the compiler to make this optimisation by
giving it more of the information it needs - do this by providing a
virt_to_pfn() macro.

Another issue which makes this more complex is that __pv_phys_offset is
a 64-bit type on all platforms.  This is needlessly wasteful - if we
store the physical offset as a PFN, we can save a lot of work having
to deal with 64-bit values, which sometimes ends up producing incredibly
horrid code:

     a4c:       e3009000        movw    r9, #0
                        a4c: R_ARM_MOVW_ABS_NC  __pv_phys_offset
     a50:       e3409000        movt    r9, #0          ; r9 = &__pv_phys_offset
                        a50: R_ARM_MOVT_ABS     __pv_phys_offset
     a54:       e3002000        movw    r2, #0
                        a54: R_ARM_MOVW_ABS_NC  __pv_phys_offset
     a58:       e3402000        movt    r2, #0          ; r2 = &__pv_phys_offset
                        a58: R_ARM_MOVT_ABS     __pv_phys_offset
     a5c:       e5999004        ldr     r9, [r9, #4]    ; r9 = high word of __pv_phys_offset
     a60:       e3001000        movw    r1, #0
                        a60: R_ARM_MOVW_ABS_NC  mem_map
     a64:       e592c000        ldr     ip, [r2]        ; ip = low word of __pv_phys_offset

Reviewed-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2014-04-03 22:46:34 +01:00
..
.gitignore
arch_timer.c arch_timer: Move to generic sched_clock framework 2013-10-09 16:54:10 -07:00
armksyms.c ARM: Better virt_to_page() handling 2014-04-03 22:46:34 +01:00
arthur.c
asm-offsets.c ARM: kernel: implement stack pointer save array through MPIDR hashing 2013-06-20 11:24:11 +01:00
atags.h ARM: constify machine_desc structure uses 2013-07-26 14:55:59 +01:00
atags_compat.c
atags_parse.c ARM: constify machine_desc structure uses 2013-07-26 14:55:59 +01:00
atags_proc.c procfs: new helper - PDE_DATA(inode) 2013-04-09 14:13:32 -04:00
bios32.c ARM: 7986/1: bios32: use pci_enable_resource to enable PCI resources 2014-02-25 11:37:49 +00:00
calls.S sched: Add new scheduler syscalls to support an extended scheduling parameters ABI 2014-01-13 13:41:04 +01:00
cpuidle.c
crash_dump.c
debug.S ARM: compile fix for DEBUG_LL=y && MMU=n 2013-01-16 14:30:06 -08:00
devtree.c arch/arm/kernel/: use memblock apis for early memory allocations 2014-01-21 16:19:47 -08:00
dma-isa.c
dma.c
early_printk.c early_printk: consolidate random copies of identical code 2013-04-29 18:28:13 -07:00
elf.c
entry-armv.S ARM: 7946/1: asm: __und_usr_thumb need byteswap instructions in BE case 2014-01-28 14:34:02 +00:00
entry-common.S ARM: asm: Add ARM_BE8() assembly helper 2013-10-19 20:46:33 +01:00
entry-header.S arm: Fix build error with context tracking calls 2013-09-27 17:59:47 +02:00
entry-v7m.S ARM: 7890/1: v7-M: drop using mach/entry-macro.S 2013-12-29 12:32:32 +00:00
etm.c ARM: 7905/1: etm: Remove unnecessary amba_set_drvdata() 2013-12-29 12:32:34 +00:00
fiq.c ARM: 7819/1: fiq: Cast the first argument of flush_icache_range() 2013-08-20 00:11:50 +01:00
fiqasm.S
ftrace.c
head-common.S arm: delete __cpuinit/__CPUINIT usage from all ARM users 2013-07-14 19:36:52 -04:00
head-nommu.S ARM: fix asm/memory.h build error 2013-12-13 20:25:30 +00:00
head.S ARM: Better virt_to_page() handling 2014-04-03 22:46:34 +01:00
hw_breakpoint.c ARM: 7948/1: hw_breakpoint: Add ARMv8 support 2014-02-10 11:48:05 +00:00
hyp-stub.S ARM: 7786/1: hyp: fix macro parameterisation 2013-07-22 14:30:34 +01:00
insn.c
insn.h
io.c ARM: 7930/1: Introduce atomic MMIO modify 2014-01-28 14:06:25 +00:00
irq.c ARM: irq: Call irqchip_init if no init_irq function is specified 2013-04-02 11:05:40 -07:00
isa.c
iwmmxt.S
jump_label.c
kgdb.c
kprobes-arm.c
kprobes-common.c
kprobes-test-arm.c
kprobes-test-thumb.c
kprobes-test.c
kprobes-test.h
kprobes-thumb.c
kprobes.c ARM: 7862/1: pcpu: replace __get_cpu_var_uses 2013-10-29 11:06:27 +00:00
kprobes.h
machine_kexec.c ARM: 7897/1: kexec: Use the right ISA for relocate_new_kernel 2013-11-30 22:21:02 +00:00
Makefile Merge branch 'baserock/bjdooks/312-rc4/be/core-v3' of git://git.baserock.org/delta/linux into devel-stable 2013-10-30 22:20:26 +00:00
module.c Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm 2013-11-14 08:51:29 +09:00
opcodes.c
patch.c
patch.h
perf_event.c Revert "ARM: 7556/1: perf: fix updated event period in response to PERF_EVENT_IOC_PERIOD" 2013-12-17 15:21:35 +01:00
perf_event_cpu.c ARM: 7937/1: perf_event: Silence sparse warning 2014-01-11 12:06:58 +00:00
perf_event_v6.c ARM: perf: don't pretend to support counting of L1I writes 2013-01-16 12:01:59 +00:00
perf_event_v7.c ARM: 7663/1: perf: fix ARMv7 EVTYPE_MASK to include NSH bit 2013-03-03 22:54:17 +00:00
perf_event_xscale.c ARM: perf: don't pretend to support counting of L1I writes 2013-01-16 12:01:59 +00:00
perf_regs.c ARM: perf: add support for perf registers API 2013-09-30 16:41:50 +01:00
pj4-cp0.c
process.c ARM: 7912/1: check stack pointer in get_wchan 2013-12-09 23:24:31 +00:00
psci.c arm: introduce psci_smp_ops 2013-05-21 14:24:11 +00:00
psci_smp.c ARM: PSCI: remove unnecessary include of arm-gic.h 2013-10-01 16:34:10 -05:00
ptrace.c ptrace/arm: revert "hw_breakpoints: Fix racy access to ptrace breakpoints" 2013-07-09 10:33:25 -07:00
relocate_kernel.S ARM: 7897/1: kexec: Use the right ISA for relocate_new_kernel 2013-11-30 22:21:02 +00:00
return_address.c ARM: 7676/1: fix a wrong value returned from CALLER_ADDRn 2013-03-19 11:43:46 +00:00
setup.c ARM: 7982/1: introduce HWCAP2 feature bits for ARMv8 Crypto Extensions 2014-02-25 11:40:50 +00:00
signal.c Merge branches 'fixes', 'mmci' and 'sa11x0' into for-next 2013-11-12 10:59:08 +00:00
sigreturn_codes.S ARM: 7895/1: signal: fix armv7-m build issue in sigreturn_codes.S 2013-11-30 22:21:00 +00:00
sleep.S Merge branch 'baserock/bjdooks/312-rc4/be/core-v3' of git://git.baserock.org/delta/linux into devel-stable 2013-10-30 22:20:26 +00:00
smp.c ARM: SMP implementations are not supposed to return from smp_ops.cpu_die() 2014-01-21 16:42:14 +00:00
smp_scu.c ARM: smp_scu: data endian fixes 2013-10-19 20:46:33 +01:00
smp_tlb.c ARM: 7855/1: Add check for Cortex-A15 errata 798181 ECO 2013-10-29 11:06:13 +00:00
smp_twd.c ARM: twd: data endian fix 2013-10-19 20:46:33 +01:00
stacktrace.c ARM: 7913/1: fix framepointer check in unwind_frame 2013-12-09 23:24:33 +00:00
suspend.c ARM: suspend: use hash of cpu_logical_map value to index into save array 2013-07-30 09:00:43 -04:00
swp_emulate.c arm: single_open() leaks 2013-05-05 00:07:22 -04:00
sys_arm.c
sys_oabi-compat.c
tcm.c ARM: add permission annotations to MT_MEMORY* mapping types 2013-12-11 09:53:14 +00:00
thumbee.c
time.c ARM: call of_clk_init from default time_init handler 2013-09-29 21:09:15 +02:00
topology.c ARM: 7920/1: topology: Staticise non-exported symbols 2013-12-29 12:32:42 +00:00
traps.c Merge branches 'amba', 'fixes', 'kees', 'misc' and 'unstable/sa11x0' into for-next 2014-01-21 21:26:33 +00:00
unwind.c ARM: 7987/1: ARM : unwinder : Prevent data abort due to stack overflow 2014-02-25 11:48:24 +00:00
v7m.c ARM: 7828/1: ARMv7-M: implement restart routine common to all v7-M machines 2013-09-02 13:49:29 +01:00
vmlinux.lds.S ARM: use linker magic for vectors and vector stubs 2013-07-31 21:34:24 +01:00
xscale-cp0.c