mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
ARM: 9292/1: vfp: Pass thread_info pointer to vfp_support_entry
Instead of dereferencing thread_info in do_vfp, pass the thread_info pointer to vfp_support_entry via R1. That way, we only use a single caller save register, which makes it easier to convert do_vfp to C code in a subsequent patch. Note that, unlike the CPU number, which can change due to preemption, passing the thread_info pointer can safely be done with preemption enabled. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Tested-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
This commit is contained in:
parent
197b6b60ae
commit
dae904d96a
|
|
@ -22,15 +22,12 @@
|
|||
@ IRQs enabled.
|
||||
@
|
||||
ENTRY(do_vfp)
|
||||
local_bh_disable r10, r4
|
||||
mov r1, r10
|
||||
ldr r4, .LCvfp
|
||||
ldr r11, [r10, #TI_CPU] @ CPU number
|
||||
add r10, r10, #TI_VFPSTATE @ r10 = workspace
|
||||
ldr pc, [r4] @ call VFP entry point
|
||||
ENDPROC(do_vfp)
|
||||
|
||||
ENTRY(vfp_null_entry)
|
||||
local_bh_enable_ti r10, r4
|
||||
ret lr
|
||||
ENDPROC(vfp_null_entry)
|
||||
|
||||
|
|
|
|||
|
|
@ -6,9 +6,9 @@
|
|||
* Written by Deep Blue Solutions Limited.
|
||||
*
|
||||
* This code is called from the kernel's undefined instruction trap.
|
||||
* r1 holds the thread_info pointer
|
||||
* r9 holds the return address for successful handling.
|
||||
* lr holds the return address for unrecognised instructions.
|
||||
* r10 points at the start of the private FP workspace in the thread structure
|
||||
* sp points to a struct pt_regs (as defined in include/asm/proc/ptrace.h)
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
|
|
@ -69,13 +69,17 @@
|
|||
@ VFP hardware support entry point.
|
||||
@
|
||||
@ r0 = instruction opcode (32-bit ARM or two 16-bit Thumb)
|
||||
@ r1 = thread_info pointer
|
||||
@ r2 = PC value to resume execution after successful emulation
|
||||
@ r9 = normal "successful" return address
|
||||
@ r10 = vfp_state union
|
||||
@ r11 = CPU number
|
||||
@ lr = unrecognised instruction return address
|
||||
@ IRQs enabled.
|
||||
ENTRY(vfp_support_entry)
|
||||
local_bh_disable r1, r4
|
||||
|
||||
ldr r11, [r1, #TI_CPU] @ CPU number
|
||||
add r10, r1, #TI_VFPSTATE @ r10 = workspace
|
||||
|
||||
DBGSTR3 "instr %08x pc %08x state %p", r0, r2, r10
|
||||
|
||||
.fpu vfpv2
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user