linux/arch/powerpc/include/asm
Michael Ellerman e41e53cd4f powerpc/mm: Fix virt_addr_valid() etc. on 64-bit hash
virt_addr_valid() is supposed to tell you if it's OK to call virt_to_page() on
an address. What this means in practice is that it should only return true for
addresses in the linear mapping which are backed by a valid PFN.

We are failing to properly check that the address is in the linear mapping,
because virt_to_pfn() will return a valid looking PFN for more or less any
address. That bug is actually caused by __pa(), used in virt_to_pfn().

eg: __pa(0xc000000000010000) = 0x10000  # Good
    __pa(0xd000000000010000) = 0x10000  # Bad!
    __pa(0x0000000000010000) = 0x10000  # Bad!

This started happening after commit bdbc29c19b ("powerpc: Work around gcc
miscompilation of __pa() on 64-bit") (Aug 2013), where we changed the definition
of __pa() to work around a GCC bug. Prior to that we subtracted PAGE_OFFSET from
the value passed to __pa(), meaning __pa() of a 0xd or 0x0 address would give
you something bogus back.

Until we can verify if that GCC bug is no longer an issue, or come up with
another solution, this commit does the minimal fix to make virt_addr_valid()
work, by explicitly checking that the address is in the linear mapping region.

Fixes: bdbc29c19b ("powerpc: Work around gcc miscompilation of __pa() on 64-bit")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Reviewed-by: Paul Mackerras <paulus@ozlabs.org>
Reviewed-by: Balbir Singh <bsingharora@gmail.com>
Tested-by: Breno Leitao <breno.leitao@gmail.com>
2017-05-19 13:04:35 +10:00
..
book3s powerpc/mm/book3s/64: Rework page table geometry for lower memory usage 2017-05-09 19:24:23 +10:00
nohash powerpc/mm/nohash: MM_SLICE is only used by book3s 64 2017-03-31 23:09:47 +11:00
8xx_immap.h
Kbuild
accounting.h sched/cputime, powerpc: Prepare accounting structure for cputime flush on tick 2017-01-14 09:54:12 +01:00
agp.h
archrandom.h
asm-compat.h
asm-offsets.h
asm-prototypes.h powerpc: Fix missing CRCs, add more asm-prototypes.h declarations 2017-03-21 22:09:26 +11:00
async_tx.h
atomic.h
backlight.h
barrier.h
bitops.h powerpc: Add more PPC bit conversion macros 2017-04-06 19:58:53 +10:00
bootx.h
btext.h
bug.h debug: Add _ONCE() logic to report_bug() 2017-03-30 09:37:20 +02:00
bugs.h
cache.h powerpc: Add new cache geometry aux vectors 2017-02-06 19:46:04 +11:00
cacheflush.h
cell-pmu.h
cell-regs.h
checksum.h powerpc/64: Fix checksum folding in csum_add() 2017-03-04 23:07:17 +11:00
cmpxchg.h
code-patching.h powerpc: Introduce a new helper to obtain function entry points 2017-04-24 19:07:58 +10:00
compat.h
context_tracking.h
copro.h
cpm.h
cpm1.h powerpc/8xx: Adding support of IRQ in MPC8xx GPIO 2017-05-02 22:35:00 -05:00
cpm2.h
cpu_has_feature.h powerpc/64s: Support new device tree binding for discovering CPU features 2017-05-09 23:42:55 +10:00
cpufeature.h
cpuidle.h powerpc/64s: Idle POWER8 avoid full state loss recovery where possible 2017-04-23 20:32:12 +10:00
cputable.h powerpc/64s: Support new device tree binding for discovering CPU features 2017-05-09 23:42:55 +10:00
cputhreads.h
cputime.h sched/cputime: Remove generic asm headers 2017-02-01 09:14:07 +01:00
current.h
dbdma.h
dbell.h powerpc/powernv: POWER9 support for msgsnd/doorbell IPI 2017-04-13 23:34:34 +10:00
dcr-generic.h
dcr-mmio.h
dcr-native.h
dcr-regs.h
dcr.h
debug.h powerpc: Create asm/debugfs.h and move powerpc_debugfs_root there 2017-04-11 07:46:03 +10:00
debugfs.h powerpc: Create asm/debugfs.h and move powerpc_debugfs_root there 2017-04-11 07:46:03 +10:00
delay.h
device.h treewide: Move dma_ops from struct dev_archdata into struct device 2017-01-24 12:23:35 -05:00
disassemble.h KVM: PPC: Book3S: Add MMIO emulation for FP and VSX instructions 2017-04-20 11:36:41 +10:00
dma-mapping.h treewide: Consolidate get_dma_ops() implementations 2017-01-24 12:23:35 -05:00
dma.h
dt_cpu_ftrs.h powerpc/64s: Support new device tree binding for discovering CPU features 2017-05-09 23:42:55 +10:00
edac.h
eeh.h
eeh_event.h
ehv_pic.h
elf.h powerpc/64: Fix L1D cache shape vector reporting L1I values 2017-03-06 21:51:32 +11:00
emergency-restart.h
emulated_ops.h
epapr_hcalls.h
exception-64e.h
exception-64s.h powerpc updates for 4.12 part 1. 2017-05-05 11:36:44 -07:00
exec.h
extable.h powerpc: switch to extable.h 2017-03-28 18:23:54 -04:00
fadump.h powerpc/fadump: remove dependency with CONFIG_KEXEC 2017-05-08 17:15:11 -07:00
fb.h
feature-fixups.h powerpc/64s: Simplify POWER9 DD1 idle workaround code 2017-04-23 20:32:23 +10:00
firmware.h powerpc/pseries: Add hypercall wrappers for hash page table resizing 2017-02-09 21:45:48 +11:00
fixmap.h
floppy.h
fs_pd.h
fsl_85xx_cache_sram.h
fsl_gtm.h
fsl_hcalls.h scripts/spelling.txt: add "partiton" pattern and fix typo instances 2017-02-27 18:43:46 -08:00
fsl_lbc.h
fsl_pamu_stash.h
fsl_pm.h
ftrace.h
futex.h
grackle.h
hardirq.h
head-64.h powerpc/kprobes: Blacklist common exception handlers 2017-04-23 20:32:26 +10:00
heathrow.h
highmem.h
hmi.h
hugetlb.h powerpc/mm: Fix little-endian 4K hugetlb 2017-01-18 11:58:50 +11:00
hvcall.h powerpc/pseries: Move struct hcall_stats to hvCall_inst.c 2017-03-20 19:02:49 +11:00
hvconsole.h
hvcserver.h
hvsi.h
hw_breakpoint.h
hw_irq.h
hydra.h
i8259.h
ibmebus.h
icswx.h
ide.h
ima.h powerpc: ima: send the kexec buffer to the next kernel 2016-12-20 09:48:44 -08:00
immap_cpm2.h
io-defs.h
io-workarounds.h
io.h powerpc/mm: Wire up ioremap_cache() 2017-04-21 21:08:47 +10:00
io_event_irq.h
iommu.h KVM: PPC: iommu: Unify TCE checking 2017-04-20 11:39:21 +10:00
ipic.h
irq.h
irq_work.h
irqflags.h
isa-bridge.h powerpc: Add support for non-PCI ISA bridges 2017-01-31 13:54:17 +11:00
jump_label.h
kdebug.h
kdump.h
kexec.h powerpc: ima: send the kexec buffer to the next kernel 2016-12-20 09:48:44 -08:00
keylargo.h
kgdb.h
kmap_types.h
kprobes.h powerpc/kprobes: Add support for KPROBES_ON_FTRACE 2017-04-24 19:07:58 +10:00
kvm_asm.h
kvm_book3s.h KVM: PPC: Book3S HV: Enable radix guest support 2017-01-31 19:11:52 +11:00
kvm_book3s_32.h
kvm_book3s_64.h powerpc/pseries: Skip using reserved virtual address range 2017-04-01 21:12:27 +11:00
kvm_book3s_asm.h KVM: PPC: Book3S HV: Native usage of the XIVE interrupt controller 2017-04-27 21:37:29 +10:00
kvm_booke.h
kvm_booke_hv_asm.h
kvm_fpu.h
kvm_host.h Merge remote-tracking branch 'remotes/powerpc/topic/xive' into kvm-ppc-next 2017-04-28 08:23:16 +10:00
kvm_para.h
kvm_ppc.h * ARM: HYP mode stub supports kexec/kdump on 32-bit; improved PMU 2017-05-08 12:37:56 -07:00
libata-portmap.h
linkage.h
livepatch.h powerpc/livepatch: Remove klp_write_module_reloc() stub 2016-12-19 11:15:25 +01:00
local.h
lppaca.h
lv1call.h
machdep.h powerpc/powernv: Override pcibios_default_alignment() to force PCI devices to be page aligned 2017-04-19 12:51:26 -05:00
macio.h
mc146818rtc.h
mce.h powerpc/book3s: Print task info if we take a machine check in user mode 2017-04-03 16:12:00 +10:00
mediabay.h
mm-arch-hooks.h
mman.h
mmu-8xx.h
mmu-40x.h
mmu-44x.h
mmu-book3e.h powerpc/mm/nohash: MM_SLICE is only used by book3s 64 2017-03-31 23:09:47 +11:00
mmu.h powerpc/mm/hash: Support 68 bit VA 2017-03-31 23:10:00 +11:00
mmu_context.h powerpc updates for 4.12 part 1. 2017-05-05 11:36:44 -07:00
mmzone.h
module.h powerpc/modules: If mprofile-kernel is enabled add it to vermagic 2017-05-15 19:31:38 +10:00
mpc5xxx.h
mpc6xx.h
mpc52xx.h
mpc52xx_psc.h
mpc85xx.h
mpc5121.h
mpc8260.h
mpic.h
mpic_msgr.h
mpic_timer.h
msi_bitmap.h
nmi.h
nvram.h
ohare.h
opal-api.h Merge branch 'topic/xive' (early part) into next 2017-04-12 22:31:37 +10:00
opal.h Merge branch 'topic/xive' (early part) into next 2017-04-12 22:31:37 +10:00
oprofile_impl.h
paca.h powerpc/64s: Dedicated system reset interrupt stack 2017-04-28 21:02:25 +10:00
page.h powerpc/mm: Fix virt_addr_valid() etc. on 64-bit hash 2017-05-19 13:04:35 +10:00
page_32.h
page_64.h powerpc/mm/slice: Move slice_mask struct definition to slice.c 2017-03-31 23:09:56 +11:00
parport.h
pasemi_dma.h
pci-bridge.h powerpc: Move isa bridge definitions to separate include 2017-01-31 13:54:17 +11:00
pci.h PCI: Add arch_can_pci_mmap_io() on architectures which can mmap() I/O space 2017-04-18 13:02:26 -05:00
percpu.h
perf_event.h
perf_event_fsl_emb.h
perf_event_server.h powerpc/perf: Support to export MMCRA[TEC*] field to userspace 2017-04-19 20:00:22 +10:00
pgalloc.h
pgtable-be-types.h powerpc/mm: Fix little-endian 4K hugetlb 2017-01-18 11:58:50 +11:00
pgtable-types.h powerpc/mm: Fix little-endian 4K hugetlb 2017-01-18 11:58:50 +11:00
pgtable.h
plpar_wrappers.h powerpc/pseries: Add hypercall wrappers for hash page table resizing 2017-02-09 21:45:48 +11:00
pmac_feature.h
pmac_low_i2c.h
pmac_pfunc.h
pmc.h
pmi.h
pnv-pci.h drivers/pci/hotplug: Mask PDC interrupt if required 2017-02-15 20:02:43 +11:00
powernv.h powerpc/powernv: Introduce address translation services for Nvlink2 2017-04-04 13:27:26 +10:00
ppc-opcode.h * ARM: HYP mode stub supports kexec/kdump on 32-bit; improved PMU 2017-05-08 12:37:56 -07:00
ppc-pci.h
ppc4xx.h
ppc4xx_ocm.h
ppc_asm.h powerpc/32: Remove FIX_SRR1 2017-01-26 17:49:32 -06:00
probes.h
processor.h powerpc/64e: Don't place the stack beyond TASK_SIZE 2017-05-05 01:22:06 -05:00
prom.h powerpc: Update to new option-vector-5 format for CAS 2017-03-06 21:44:09 +11:00
ps3.h treewide: Consolidate get_dma_ops() implementations 2017-01-24 12:23:35 -05:00
ps3av.h
ps3gpu.h
ps3stor.h
pte-common.h
ptrace.h
reg.h powerpc/64s: Support new device tree binding for discovering CPU features 2017-05-09 23:42:55 +10:00
reg_8xx.h powerpc/8xx: Perf events on PPC 8xx 2017-01-26 17:49:34 -06:00
reg_a2.h
reg_booke.h
reg_fsl_emb.h
rheap.h
rio.h
rtas.h powerpc/pseries: Implement indexed-count hotplug memory add 2017-02-17 17:57:30 +11:00
runlatch.h
scom.h
seccomp.h
sections.h powerpc/kprobes: Blacklist exception handlers 2017-04-23 20:32:25 +10:00
serial.h
setjmp.h
setup.h
sfp-machine.h
shmparam.h
signal.h
smp.h powerpc: Add struct smp_ops_t.cause_nmi_ipi operation 2017-04-28 21:02:25 +10:00
smu.h
sparsemem.h powerpc/mm: Fix build break with BOOK3S_64=n and MEMORY_HOTPLUG=y 2017-02-15 19:58:39 +11:00
spinlock.h
spinlock_types.h
spu.h
spu_csa.h
spu_info.h
spu_priv1.h
sstep.h
string.h
swab.h
swiotlb.h treewide: Constify most dma_map_ops structures 2017-01-24 12:23:35 -05:00
switch_to.h
synch.h
syscall.h
syscalls.h powerpc/tracing: Allow tracing of mmap syscalls 2017-04-12 22:32:43 +10:00
systbl.h powerpc: Wire up statx() syscall 2017-03-16 20:45:53 +11:00
tce.h
termios.h
thread_info.h powerpc updates for 4.12 part 1. 2017-05-05 11:36:44 -07:00
time.h
timex.h
tlb.h
tlbflush.h
tm.h
topology.h
trace.h
trace_clock.h
tsi108.h
tsi108_irq.h
tsi108_pci.h
types.h
uaccess.h powerpc: get rid of zeroing, switch to RAW_COPY_USER 2017-04-06 15:08:42 -04:00
udbg.h
uic.h
unaligned.h
uninorth.h
unistd.h powerpc: Wire up statx() syscall 2017-03-16 20:45:53 +11:00
uprobes.h
user.h
vdso.h
vdso_datapage.h
vga.h
vio.h
word-at-a-time.h
xics.h powerpc: Change the doorbell IPI calling convention 2017-04-13 23:34:33 +10:00
xilinx_intc.h
xilinx_pci.h
xive-regs.h powerpc/xive: Native exploitation of the XIVE interrupt controller 2017-04-10 21:41:34 +10:00
xive.h KVM: PPC: Book3S HV: Native usage of the XIVE interrupt controller 2017-04-27 21:37:29 +10:00
xmon.h powerpc/xive: Native exploitation of the XIVE interrupt controller 2017-04-10 21:41:34 +10:00
xor.h