Subject: CVS commit: src/sys/arch/powerpc/powerpc
To: None <source-changes@NetBSD.org>
From: Jachym Holecek <freza@netbsd.org>
List: source-changes
Date: 01/30/2007 05:25:15
Module Name:	src
Committed By:	freza
Date:		Tue Jan 30 05:25:15 UTC 2007

Modified Files:
	src/sys/arch/powerpc/powerpc: softintr.c

Log Message:
Protect softintr queues by direct manipulation of PSL_EE because PowerPC
ports have different IPL hierarchies. On macppc, IPL_VM is below IPL_AUDIO
and IPL_SERIAL so the queues got corrupted due to priority inversion.
Also fix a race condition in softintr_schedule() when testing "si_refs > 1",
it can lead to queue corruption and subsequent panic (below). As a side
effect, using PSL_EE directly is faster than going via spl*()/splx().

This is supposed to fix (XXX I don't have the hw):

  Panic: kernel diagnostic assert "si->si_refs > 0" failed: file
  "[...]arch/powerpc/powerpc/softintr.c" line 116

reported for example in:

  http://mail-index.netbsd.org/port-macppc/2007/01/25/0001.html

Discussed with briggs@ and macallan@.


To generate a diff of this commit:
cvs rdiff -r1.5 -r1.6 src/sys/arch/powerpc/powerpc/softintr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.