lkml.org 
[lkml]   [2014]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v3 3/5] arm: fiq: Replace default FIQ handler
On Mon, 8 Sep 2014, Daniel Thompson wrote:

> +@
> +@ Taking a FIQ in abort mode is similar to taking a FIQ in SVC mode
> +@ and reuses the same macros. However in abort mode we must also
> +@ save/restore lr_abt and spsr_abt to make nested aborts safe.
> +@
> + .align 5
> +__fiq_abt:
> + svc_entry 0, 0
> +
> + ARM( msr cpsr_c, #ABT_MODE | PSR_I_BIT | PSR_F_BIT )
> + THUMB( mov r0, #ABT_MODE | PSR_I_BIT | PSR_F_BIT )
> + THUMB( msr cpsr_c, r0 )
> + mov r1, lr @ Save lr_abt
> + mrs r2, spsr @ Save spsr_abt, abort is now safe
> + ARM( msr cpsr_c, #SVC_MODE | PSR_I_BIT | PSR_F_BIT )
> + THUMB( mov r0, #SVC_MODE | PSR_I_BIT | PSR_F_BIT )
> + THUMB( msr cpsr_c, r0 )
> + push {r1 - r2}

stmfd sp!, {r1 - r2}

> +
> + sub r0, sp, #8 @ struct pt_regs *regs
> + bl handle_fiq_as_nmi
> +
> + pop {r1 - r2}

ldmfd sp!, {r1 - r2}

... so that old binutils we still accept to compile the kernel (in ARM
mode) are happy.

Otherwise...

Acked-by: Nicolas Pitre <nico@linaro.org>


Nicolas


\
 
 \ /
  Last update: 2014-09-08 18:01    [W:0.393 / U:1.024 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site