android_kernel_samsung_msm8976/arch/mips/lib
Jim Quinlan e97c5b6098 MIPS: Make irqflags.h functions preempt-safe for non-mipsr2 cpus
For non MIPSr2 processors, such as the BMIPS 5000, calls to
arch_local_irq_disable() and others may be preempted, and in doing
so a stale value may be restored to c0_status.  This fix disables
preemption for such processors prior to the call and enables it
after the call.

Those functions that needed this fix have been "outlined" to
mips-atomic.c, as they are no longer good candidates for inlining.

This bug was observed in a BMIPS 5000, occuring once every few hours
in a continuous reboot test.  It was traced to the write_lock_irq()
function which was being invoked in release_task() in exit.c.
By placing a number of "nops" inbetween the mfc0/mtc0 pair in
arch_local_irq_disable(), which is called by write_lock_irq(), we
were able to greatly increase the occurance of this bug.  Similarly,
the application of this commit silenced the bug.

Signed-off-by: Jim Quinlan <jim2101024@gmail.com>
Cc: linux-mips@linux-mips.org
Cc: David Daney <ddaney.cavm@gmail.com>
Cc: Kevin Cernekee cernekee@gmail.com
Cc: Jim Quinlan <jim2101024@gmail.com>
Patchwork: https://patchwork.linux-mips.org/patch/4321/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2012-11-09 10:59:21 +01:00
..
ashldi3.c
ashrdi3.c
bitops.c
cmpdi2.c
csum_partial.S
delay.c
dump_tlb.c
iomap-pci.c
iomap.c
libgcc.h
lshrdi3.c
Makefile MIPS: Make irqflags.h functions preempt-safe for non-mipsr2 cpus 2012-11-09 10:59:21 +01:00
memcpy.S
memset.S
mips-atomic.c MIPS: Make irqflags.h functions preempt-safe for non-mipsr2 cpus 2012-11-09 10:59:21 +01:00
r3k_dump_tlb.c
strlen_user.S
strncpy_user.S
strnlen_user.S
ucmpdi2.c
uncached.c