ARM11MPcore: tlb_ops_need_broadcast causes deadlock

Will Deacon will.deacon at arm.com
Fri Mar 23 13:30:55 EDT 2012


Hi Peter,

Thanks for the detailed explanation. However, there's one bit I'm not sure
that I follow:

On Thu, Mar 22, 2012 at 12:24:47PM +0000, EXTERNAL Waechtler Peter (Fa. TCP, CM-AI/PJ-CF31) wrote:
> The cpuB executes some user code hitting that page and because the PTE
> is marked "inaccessible", so that the attempt can be stored, it results
> in a page fault.

Shouldn't this trigger a prefetch abort rather than a data abort?

> Unluckily the kswapd calls tlb_flush and that is configured to inform all
> cpus about that change via IPIs. cpuB is in an user abort handler (__dabt_usr)
> and the disaster takes its course:
> 
> For checking if it's a thumb instruction that caused the fault the abort handler
> accesses the page resulting into another fault - but now entering svc abort handler
> (__dabt_svc) and that turns off interrupts!

This is where I'm confused - why are we in the data abort handler due to an
I-side fault?

Thanks,

Will



More information about the linux-arm-kernel mailing list