Subject: spllower race
To: None <port-i386@netbsd.org, port-amd64@netbsd.org>
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
List: port-i386
Date: 12/22/2003 09:20:02
hi,
is it ok to check in the following diff?
otherwise, interrupts gotten between
"if (ci->ci_ipending & IUNMASK(ci,nlevel))" and
"ci->ci_ilevel = nlevel" will be left pending until the next interrupt.
YAMAMOTO Takashi
Index: arch/x86/include/intr.h
===================================================================
--- arch/x86/include/intr.h (revision 421)
+++ arch/x86/include/intr.h (revision 422)
@@ -163,10 +163,9 @@ spllower(int nlevel)
* the XOR below should only show interrupts that
* are being unmasked.
*/
+ ci->ci_ilevel = nlevel;
if (ci->ci_ipending & IUNMASK(ci,nlevel))
Xspllower(nlevel);
- else
- ci->ci_ilevel = nlevel;
}
/*