On Tue, 06 Feb 2007 16:53:27 +0100, Franck Bui-Huu <vagabon.xyz@gmail.com>
wrote:
> This patch makes these routines a lot more readable whatever
> the value of CONFIG_PREEMPT.
>
> It also moves one branch instruction from ret_from_irq()
> to ret_from_exception(). Therefore we favour the return
> from irq path which should be more common than the other
> one.
After this patch, entry.S becomes:
FEXPORT(ret_from_exception)
#ifndef CONFIG_PREEMPT
local_irq_disable # preempt stop
#endif
b _ret_from_irq
FEXPORT(ret_from_irq)
LONG_S s0, TI_REGS($28)
FEXPORT(_ret_from_irq)
Apparently your patch add an additional branch in critical path in
CONFIG_PREEMPT=y case.
Maybe this would be better?
#ifdef CONFIG_PREEMPT
FEXPORT(ret_from_irq)
LONG_S s0, TI_REGS($28)
FEXPORT(ret_from_exception)
#else
FEXPORT(ret_from_exception)
local_irq_disable # preempt stop
b _ret_from_irq
FEXPORT(ret_from_irq)
LONG_S s0, TI_REGS($28)
#endif
FEXPORT(_ret_from_irq)
---
Atsushi Nemoto
|