linux/arch
Paul Mackerras a485c70989 powerpc: Fix "attempt to move .org backwards" error
Building a 64-bit powerpc kernel with PR KVM enabled currently gives
this error:

  AS      arch/powerpc/kernel/head_64.o
arch/powerpc/kernel/exceptions-64s.S: Assembler messages:
arch/powerpc/kernel/exceptions-64s.S:258: Error: attempt to move .org backwards
make[2]: *** [arch/powerpc/kernel/head_64.o] Error 1

This happens because the MASKABLE_EXCEPTION_PSERIES macro turns into
33 instructions, but we only have space for 32 at the decrementer
interrupt vector (from 0x900 to 0x980).

In the code generated by the MASKABLE_EXCEPTION_PSERIES macro, we
currently have two instances of the HMT_MEDIUM macro, which has the
effect of setting the SMT thread priority to medium.  One is the
first instruction, and is overwritten by a no-op on processors where
we save the PPR (processor priority register), that is, POWER7 or
later.  The other is after we have saved the PPR.

In order to reduce the code at 0x900 by one instruction, we omit the
first HMT_MEDIUM.  On processors without SMT this will have no effect
since HMT_MEDIUM is a no-op there.  On POWER5 and RS64 machines this
will mean that the first few instructions take a little longer in the
case where a decrementer interrupt occurs when the hardware thread is
running at low SMT priority.  On POWER6 and later machines, the
hardware automatically boosts the thread priority when a decrementer
interrupt is taken if the thread priority was below medium, so this
change won't make any difference.

The alternative would be to branch out of line after saving the CFAR.
However, that would incur an extra overhead on all processors, whereas
the approach adopted here only adds overhead on older threaded processors.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2013-04-26 16:08:27 +10:00
..
alpha alpha: irq: remove deprecated use of IRQF_DISABLED 2013-04-07 12:59:30 -07:00
arc ARC: Add implicit compiler barrier to raw_local_irq* functions 2013-04-08 16:10:26 -07:00
arm Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm 2013-04-20 18:38:06 -07:00
arm64 Fix IS_ENABLED() usage typo (missing CONFIG_ prefix). 2013-03-28 13:45:49 -07:00
avr32 avr32: fix build error in atstk1006_defconfig 2013-04-17 16:10:44 -07:00
blackfin Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00
c6x add memory barrier to arch_local_irq_restore 2013-04-09 15:35:46 -04:00
cris Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00
frv Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00
h8300 Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00
hexagon Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-02-26 20:16:07 -08:00
ia64 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-04-09 12:22:49 -07:00
m32r UAPI: fix endianness conditionals in M32R's asm/stat.h 2013-03-13 15:21:49 -07:00
m68k m68k: define a local gpio_request_one() function 2013-04-09 15:15:31 +10:00
metag memblock: kill "config MAX_ACTIVE_REGIONS" 2013-04-18 13:03:53 +10:00
microblaze Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00
mips Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2013-04-05 12:23:12 -07:00
mn10300 Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00
openrisc openrisc: remove HAVE_VIRT_TO_BUS 2013-03-13 06:12:39 +01:00
parisc Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00
powerpc powerpc: Fix "attempt to move .org backwards" error 2013-04-26 16:08:27 +10:00
s390 s390: move dummy io_remap_pfn_range() to asm/pgtable.h 2013-04-17 08:46:19 -07:00
score Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00
sh memblock: kill "config MAX_ACTIVE_REGIONS" 2013-04-18 13:03:53 +10:00
sparc sparc64: Fix race in TLB batch processing. 2013-04-19 17:26:26 -04:00
tile tile: comment assumption about __insn_mtspr for <asm/irqflags.h> 2013-04-09 10:08:14 -07:00
um um: Use tty_port in SIGWINCH handler 2013-03-11 10:08:04 +01:00
unicore32 Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00
x86 Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-04-21 10:25:42 -07:00
xtensa Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00
.gitignore
Kconfig Select VIRT_TO_BUS directly where needed 2013-03-12 11:16:40 -07:00