MIPS: Make local_irq_disable macro safe for non-Mipsr2
authorJim Quinlan <jim2101024@gmail.com>
Wed, 27 Nov 2013 20:34:50 +0000 (15:34 -0500)
committerRalf Baechle <ralf@linux-mips.org>
Thu, 20 Mar 2014 12:46:15 +0000 (13:46 +0100)
commit71ca75888953166b72cf7a65b4c2b6a50fc0ce3b
tree3b74c1898d1c6772c7c23c9eab21d3b6a99c39c9
parent2eddb708d83ead02b5d41c65bfb26bab5afc8210
MIPS: Make local_irq_disable macro safe for non-Mipsr2

For non-mipsr2 processors, the local_irq_disable contains an mfc0-mtc0
pair with instructions inbetween.  With preemption enabled, this sequence
may get preempted and effect a stale value of CP0_STATUS when executing
the mtc0 instruction.  This commit avoids this scenario by incrementing
the preempt count before the mfc0 and decrementing it after the mtc9.

[ralf@linux-mips.org: This patch is sorting out the part that were missed
by e97c5b6098 [MIPS: Make irqflags.h functions preempt-safe for non-mipsr2
cpus.]  I also re-enabled the inclusion of <asm/asm-offsets.h> at the top
of <asm/asmmacro.h>].

Signed-off-by: Jim Quinlan <jim2101024@gmail.com>
Cc: linux-mips@linux-mips.org
Cc: cernekee@gmail.com
Patchwork: https://patchwork.linux-mips.org/patch/6164/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/asmmacro.h