]> git.baikalelectronics.ru Git - kernel.git/commit
powerpc/booke64: Use SPRG7 for VDSO
authorScott Wood <scottwood@freescale.com>
Mon, 10 Mar 2014 22:29:38 +0000 (17:29 -0500)
committerScott Wood <scottwood@freescale.com>
Thu, 20 Mar 2014 00:57:14 +0000 (19:57 -0500)
commit5b820a219305af0479ef9606d1e8403439ed777d
tree8790aa68cd0944e031b35eb63f5be14ec678be2d
parent69c3ac9cd3a28fcd73c2446ac2768299b6dda1e9
powerpc/booke64: Use SPRG7 for VDSO

Previously SPRG3 was marked for use by both VDSO and critical
interrupts (though critical interrupts were not fully implemented).

In commit b76f96689c62612af7eeb6fb9f3001692a4aab58 ("powerpc/booke64:
Use SPRG0/3 scratch for bolted TLB miss & crit int"), Mihai Caraman
made an attempt to resolve this conflict by restoring the VDSO value
early in the critical interrupt, but this has some issues:

 - It's incompatible with EXCEPTION_COMMON which restores r13 from the
   by-then-overwritten scratch (this cost me some debugging time).
 - It forces critical exceptions to be a special case handled
   differently from even machine check and debug level exceptions.
 - It didn't occur to me that it was possible to make this work at all
   (by doing a final "ld r13, PACA_EXCRIT+EX_R13(r13)") until after
   I made (most of) this patch. :-)

It might be worth investigating using a load rather than SPRG on return
from all exceptions (except TLB misses where the scratch never leaves
the SPRG) -- it could save a few cycles.  Until then, let's stick with
SPRG for all exceptions.

Since we cannot use SPRG4-7 for scratch without corrupting the state of
a KVM guest, move VDSO to SPRG7 on book3e.  Since neither SPRG4-7 nor
critical interrupts exist on book3s, SPRG3 is still used for VDSO
there.

Signed-off-by: Scott Wood <scottwood@freescale.com>
Cc: Mihai Caraman <mihai.caraman@freescale.com>
Cc: Anton Blanchard <anton@samba.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: kvm-ppc@vger.kernel.org
12 files changed:
arch/powerpc/include/asm/exception-64e.h
arch/powerpc/include/asm/kvm_booke_hv_asm.h
arch/powerpc/include/asm/paca.h
arch/powerpc/include/asm/reg.h
arch/powerpc/kernel/asm-offsets.c
arch/powerpc/kernel/exceptions-64e.S
arch/powerpc/kernel/vdso.c
arch/powerpc/kernel/vdso32/getcpu.S
arch/powerpc/kernel/vdso64/getcpu.S
arch/powerpc/kvm/book3s_hv_rmhandlers.S
arch/powerpc/kvm/book3s_interrupts.S
arch/powerpc/kvm/bookehv_interrupts.S