(set|rem)runqueue and splhigh

Matthew Dillon dillon at apollo.backplane.com
Wed Dec 31 11:24:18 PST 2003


:This is a multi-part message in MIME format.
:--------------050005040308050403080504
:Content-Type: text/plain; charset=ISO-8859-15; format=flowed
:Content-Transfer-Encoding: 8bit
:
: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

    The comment is not correct.  setrunqueue() already enters a critical
    section (see the crit_enter() and crit_exit() in setrunqueue()), which
    is equivalent to splhigh().  So the following is not needed.

					-Matt
					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>
:
:-- 
:<peter.kadau at xxxxxxxxxxxxxxxx>
:
:Campus der Max-Planck-Institute Tübingen
:Netzwerk- und Systemadministration
:
:Tel: +49 7071 601 598
:Fax: +49 7071 601 616
:
:--------------050005040308050403080504
:Content-Type: text/plain;
: name="Xrunqueue.patch"
:Content-Transfer-Encoding: 7bit
:Content-Disposition: inline;
: filename="Xrunqueue.patch"
:
: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
:
:--------------050005040308050403080504--
:






More information about the Submit mailing list