Subject: spllower race
To: None <port-i386@netbsd.org, port-amd64@netbsd.org>
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
List: port-amd64
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;
 }
 
 /*