On Fri, Sep 12, 2014 at 06:03:07PM +0100, Russell King - ARM Linux wrote:
On Thu, Sep 11, 2014 at 12:31:14PM +0100, Daniel Thompson wrote:
- .macro svc_entry, stack_hole=0
- .macro svc_entry, stack_hole=0, call_trace=1 UNWIND(.fnstart ) UNWIND(.save {r0 - pc} ) sub sp, sp, #(S_FRAME_SIZE + \stack_hole - 4)
@@ -183,7 +183,9 @@ ENDPROC(__und_invalid) stmia r7, {r2 - r6} #ifdef CONFIG_TRACE_IRQFLAGS
- .if \call_trace bl trace_hardirqs_off
- .endif
#endif
Good, you picked this up from my patch. But what about the call into lockdep from usr_entry?
Yes, it should be safe if we're entering from user mode, because by definition, the kernel can't be holding any locks at that point. However, I'd much prefer to keep to a set of simple rules here: avoid lockdep in FIQ code altogether.
That's much easier to understand than "we can call into lockdep provided we've been entered from user mode".
The other thing you miss is that /potentially/ call into the scheduler as well from a FIQ. Do we /really/ want to do that kind of work here?
Not happy.
And you're also missing a .cantunwind for __fiq_usr, which means that the Dwarf doesn't contain an explicit point to stop unwinding.
Lastly, don't thread your new patches to the old ones. I utterly hate that behaviour. It makes subject lines totally pointless because all I end up seeing is "[PAT" on the very right hand of the screen. Far from useful.