Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Jan 2011 22:26:00 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r217079 - head/sys/kern
Message-ID:  <201101062226.p06MQ0fn030424@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Thu Jan  6 22:26:00 2011
New Revision: 217079
URL: http://svn.freebsd.org/changeset/base/217079

Log:
  - Properly initialize the base priority (td_base_pri) of thread0 to PVM
    to match the desired priority in td_priority.  Otherwise the first time
    thread0 used a borrowed priority it would drop down to PUSER instead of
    PVM.
  - Explicitly initialize the starting priority of new kprocs to PVM to
    avoid inheriting some random priority from thread0.
  
  MFC after:	2 weeks

Modified:
  head/sys/kern/init_main.c
  head/sys/kern/kern_kthread.c

Modified: head/sys/kern/init_main.c
==============================================================================
--- head/sys/kern/init_main.c	Thu Jan  6 22:24:00 2011	(r217078)
+++ head/sys/kern/init_main.c	Thu Jan  6 22:26:00 2011	(r217079)
@@ -462,7 +462,7 @@ proc0_init(void *dummy __unused)
 	td->td_base_user_pri = PUSER;
 	td->td_lend_user_pri = PRI_MAX;
 	td->td_priority = PVM;
-	td->td_base_pri = PUSER;
+	td->td_base_pri = PVM;
 	td->td_oncpu = 0;
 	td->td_flags = TDF_INMEM|TDP_KTHREAD;
 	td->td_cpuset = cpuset_thread0();

Modified: head/sys/kern/kern_kthread.c
==============================================================================
--- head/sys/kern/kern_kthread.c	Thu Jan  6 22:24:00 2011	(r217078)
+++ head/sys/kern/kern_kthread.c	Thu Jan  6 22:26:00 2011	(r217079)
@@ -117,14 +117,15 @@ kproc_create(void (*func)(void *), void 
 
 	/* call the processes' main()... */
 	cpu_set_fork_handler(td, func, arg);
+	thread_lock(td);
 	TD_SET_CAN_RUN(td);
+	sched_prio(td, PVM);
+	sched_user_prio(td, PUSER);
 
 	/* Delay putting it on the run queue until now. */
-	if (!(flags & RFSTOPPED)) {
-		thread_lock(td);
+	if (!(flags & RFSTOPPED))
 		sched_add(td, SRQ_BORING); 
-		thread_unlock(td);
-	}
+	thread_unlock(td);
 
 	return 0;
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201101062226.p06MQ0fn030424>