> Hugo Fiennes writes:
> > The 2.2 kernels seemed to do this, the 2.4-pre8 wasn't doing it - and it
> > died in the MMU setup as the atomic increment/decrement/etc functions
don't
> > do a save flags & restore - they were reenabling FIQs on exit and the
ICIP
> > was showing a FIQ pending.
>
> They shouldn't have been; they are protected by save_flags_cli() and
> restore_flags() which preserve the F bit, not cli() and sti().  This
> hasn't changed in 2.2 kernels.
>
> Can you explain further with an example of the asm which caused this
> please?

In include/asm-arm/proc-armv/assembler.h, the save_and_disable_irqs macro
assumes FIQs are enabled - it doesn't OR in the I_BIT, it just does a MOV
with the new CPU state (I_BIT|MOVE_SVC). This is used by the
test/set/clear/etc bit macros, which appear to first be used when setting up
the memory map (pre-IRQ initialisation).

If FIQs were disabled before, this enables them and causes a fall-over which
took a little while to find. The SA1100 had never done this to me (though
obviously I should have been more careful before calling the kernel) and so
when the SA1110 failed to start in maybe 70-80% of the attempts I was most
confused....

Hugo



_______________________________________________
http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm

Reply via email to