Module Name: src
Committed By: cliff
Date: Mon Sep 20 19:40:11 UTC 2010
Modified Files:
src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixl_spl.S
Log Message:
- .set noreorder up top to avoid instruction reordering
- adopt bugfix suggested by Manuel Boyer for mips/spl.S:
in _splraise and _splsw_splhigh, reload L_CPU in case we were
preempted prior to interrupts being blocked (thanks).
To generate a diff of this commit:
cvs rdiff -u -r1.1.2.4 -r1.1.2.5 src/sys/arch/mips/rmi/rmixl_spl.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/mips/rmi/rmixl_spl.S
diff -u src/sys/arch/mips/rmi/rmixl_spl.S:1.1.2.4 src/sys/arch/mips/rmi/rmixl_spl.S:1.1.2.5
--- src/sys/arch/mips/rmi/rmixl_spl.S:1.1.2.4 Fri May 28 22:14:53 2010
+++ src/sys/arch/mips/rmi/rmixl_spl.S Mon Sep 20 19:40:11 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: rmixl_spl.S,v 1.1.2.4 2010/05/28 22:14:53 cliff Exp $ */
+/* $NetBSD: rmixl_spl.S,v 1.1.2.5 2010/09/20 19:40:11 cliff Exp $ */
/*-
* Copyright (c) 2009, 2010 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
#include <mips/asm.h>
#include <mips/cpuregs.h>
-RCSID("$NetBSD: rmixl_spl.S,v 1.1.2.4 2010/05/28 22:14:53 cliff Exp $");
+RCSID("$NetBSD: rmixl_spl.S,v 1.1.2.5 2010/09/20 19:40:11 cliff Exp $");
#include "assym.h"
@@ -50,6 +50,7 @@
#define RMIXL_COP_0_EIRR _(9), 6
#define RMIXL_COP_0_EIMR _(9), 7
+ .set noreorder
/*
* Array of mask of bits to set in the EIMR when we go to a
@@ -111,6 +112,8 @@
bnez v1, 2f # yes, don't change.
nop
dmtc0 zero, RMIXL_COP_0_EIMR ## disable all interrupts
+ PTR_L a3, L_CPU(MIPS_CURLWP) ## reload L_CPU in case we were
+ ## preempted and moved...
INT_S a1, CPU_INFO_CPL(a3) ## save IPL in cpu_info
dmtc0 a0, RMIXL_COP_0_EIMR ## set new EIMR
#ifdef PARANOIA
@@ -226,6 +229,8 @@
beq v0, a1, 1f # don't do anything if IPL_HIGH
nop
dmtc0 zero, RMIXL_COP_0_EIMR ## disable all interrupts
+ PTR_L a3, L_CPU(MIPS_CURLWP) ## reload L_CPU in case we were
+ ## preempted and moved...
INT_S a1, CPU_INFO_CPL(a3) ## save IPL in cpu_info
## interrupts remain disabled!
#ifdef PARANOIA