linux/arch
Paul Mackerras 7a72233b3d powerpc: Work around gcc miscompilation of __pa() on 64-bit
commit bdbc29c19b upstream.

On 64-bit, __pa(&static_var) gets miscompiled by recent versions of
gcc as something like:

        addis 3,2,.LANCHOR1+4611686018427387904@toc@ha
        addi 3,3,.LANCHOR1+4611686018427387904@toc@l

This ends up effectively ignoring the offset, since its bottom 32 bits
are zero, and means that the result of __pa() still has 0xC in the top
nibble.  This happens with gcc 4.8.1, at least.

To work around this, for 64-bit we make __pa() use an AND operator,
and for symmetry, we make __va() use an OR operator.  Using an AND
operator rather than a subtraction ends up with slightly shorter code
since it can be done with a single clrldi instruction, whereas it
takes three instructions to form the constant (-PAGE_OFFSET) and add
it on.  (Note that MEMORY_START is always 0 on 64-bit.)

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-09-07 21:58:14 -07:00
..
alpha alpha: makefile: don't enforce small data model for kernel builds 2013-08-20 08:26:28 -07:00
arm ARM: 7809/1: perf: fix event validation for software group leaders 2013-08-20 08:26:29 -07:00
avr32 avr32: fix relocation check for signed 18-bit offset 2013-06-07 12:49:10 -07:00
blackfin blackfin: fix ifdef fustercluck in mach-bf538/boards/ezkit.c 2012-04-26 14:46:51 -04:00
c6x irq: Kill pointless irqd_to_hw export 2012-04-10 22:39:17 -06:00
cris CRIS: Add _sdata to vmlinux.lds.S 2013-08-20 08:26:28 -07:00
frv frv: Use core allocator for task_struct 2013-08-20 08:26:28 -07:00
h8300 signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer 2013-04-05 10:04:14 -07:00
hexagon hexagon: add missing cpu.h include 2012-04-23 12:57:24 -05:00
ia64 Wrong asm register contraints in the kvm implementation 2013-05-07 19:51:55 -07:00
m32r signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer 2013-04-05 10:04:14 -07:00
m68k m68k/atari: ARAnyM - Fix NatFeat module support 2013-08-20 08:26:29 -07:00
microblaze microblaze: Update microblaze defconfigs 2013-08-20 08:26:27 -07:00
mips MIPS: Rewrite pfn_valid to work in modules, too. 2013-08-20 08:26:28 -07:00
mn10300 signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer 2013-04-05 10:04:14 -07:00
openrisc Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
parisc Purge existing TLB entries in set_pte_at and ptep_set_wrprotect 2013-02-28 06:59:05 -08:00
powerpc powerpc: Work around gcc miscompilation of __pa() on 64-bit 2013-09-07 21:58:14 -07:00
s390 s390: move dummy io_remap_pfn_range() to asm/pgtable.h 2013-08-04 16:26:03 +08:00
score score: Add missing RCU idle APIs on idle loop 2012-10-13 05:38:55 +09:00
sh sh: Fix FDPIC binary loader 2013-01-21 11:45:14 -08:00
sparc sparc32: Add ucmpdi2.o to obj-y instead of lib-y. 2013-08-20 08:26:28 -07:00
tile tilepro: work around module link error with gcc 4.7 2013-06-27 11:27:30 -07:00
um um: Implement a custom pte_same() function 2012-06-01 15:18:18 +08:00
unicore32 Merge branch 'for-linus' of git://git.linaro.org/people/mszyprowski/linux-dma-mapping 2012-04-04 17:13:43 -07:00
x86 x86/xen: do not identity map UNUSABLE regions in the machine E820 2013-08-29 09:50:14 -07:00
xtensa xtensa: replace xtensa-specific _f{data,text} by _s{data,text} 2013-08-20 08:26:29 -07:00
.gitignore
Kconfig Merge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile 2012-03-29 14:49:45 -07:00