DragonFly submit List (threaded) for 2003-12
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]
(set|rem)runqueue and splhigh
Hi !
Is it still true that (set|rem)runqueue have to be called with splhigh ?
If yes, I have a short fix, since there are paths where they may be
called with other masks set.
I just bracket them in acquire_curproc and resetpriority thusly avoiding
to chase each and every caller.
I'm not sure what to do with the "broken out from setrunqueue" stuff in
acquire_curproc either.
Cheers and
Happy New Year
Peter
--
<peter.kadau@xxxxxxxxxxxxxxxx>
Campus der Max-Planck-Institute Tübingen
Netzwerk- und Systemadministration
Tel: +49 7071 601 598
Fax: +49 7071 601 616
Index: kern/kern_switch.c
===================================================================
RCS file: /local/dragonfly/src/sys/kern/kern_switch.c,v
retrieving revision 1.16
diff -u -r1.16 kern_switch.c
--- kern/kern_switch.c 30 Dec 2003 03:19:02 -0000 1.16
+++ kern/kern_switch.c 30 Dec 2003 19:54:29 -0000
@@ -524,6 +524,7 @@
{
int cpuid;
struct proc *np;
+ int s;
/*
* Short cut, we've already acquired the designation or we never
@@ -588,7 +589,9 @@
}
lwkt_deschedule_self();
p->p_flag &= ~P_CP_RELEASED;
+ s = splhigh();
setrunqueue(p);
+ splx(s);
lwkt_switch(); /* CPU CAN CHANGE DUE TO SETRUNQUEUE() */
KASSERT((p->p_flag & (P_ONRUNQ|P_CURPROC|P_CP_RELEASED)) == P_CURPROC, ("unexpected p_flag %08x acquiring P_CURPROC\n", p->p_flag));
}
Index: kern/kern_synch.c
===================================================================
RCS file: /local/dragonfly/src/sys/kern/kern_synch.c,v
retrieving revision 1.25
diff -u -r1.25 kern_synch.c
--- kern/kern_synch.c 17 Oct 2003 07:30:42 -0000 1.25
+++ kern/kern_synch.c 30 Dec 2003 19:43:15 -0000
@@ -763,6 +763,7 @@
unsigned int newpriority;
int opq;
int npq;
+ int s;
/*
* Set p_priority for general process comparisons
@@ -795,9 +796,11 @@
/*
* We have to move the process to another queue
*/
+ s = splhigh();
remrunqueue(p);
p->p_priority = PRIBASE_NORMAL + newpriority;
setrunqueue(p);
+ splx(s);
} else {
/*
* We can just adjust the priority and it will be picked
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]