6679853 fix for 6647542 causes machines with separate root and /usr to fail boot
authorraf
Wed, 26 Mar 2008 17:37:28 -0700
changeset 6296 b2fd3d371933
parent 6295 53d59d41395b
child 6297 410df87bc54b
6679853 fix for 6647542 causes machines with separate root and /usr to fail boot
usr/src/lib/libc/port/rt/sched.c
usr/src/lib/libc/port/threads/pthread.c
usr/src/lib/libc/port/threads/thr.c
--- a/usr/src/lib/libc/port/rt/sched.c	Wed Mar 26 15:33:06 2008 -0700
+++ b/usr/src/lib/libc/port/rt/sched.c	Wed Mar 26 17:37:28 2008 -0700
@@ -609,6 +609,7 @@
 		break;
 	case SCHED_FIFO:
 	case SCHED_RR:
+		self->ul_rtclassid = pccp->pcc_info.pc_cid;
 		priority = ((rtparms_t *)pcparm.pc_clparms)->rt_pri;
 		policy =
 		    ((rtparms_t *)pcparm.pc_clparms)->rt_tqnsecs == RT_TQINF?
--- a/usr/src/lib/libc/port/threads/pthread.c	Wed Mar 26 15:33:06 2008 -0700
+++ b/usr/src/lib/libc/port/threads/pthread.c	Wed Mar 26 17:37:28 2008 -0700
@@ -57,7 +57,6 @@
 	} else {
 		if (policy == ulwp->ul_policy &&
 		    (policy == SCHED_FIFO || policy == SCHED_RR) &&
-		    ulwp->ul_cid == ulwp->ul_rtclassid &&
 		    ulwp->ul_epri != 0) {
 			/*
 			 * Don't change the ceiling priority,
@@ -70,6 +69,8 @@
 		} else if ((cid = setparam(P_LWPID, tid, policy, prio)) == -1) {
 			error = errno;
 		} else {
+			if (policy == SCHED_FIFO || policy == SCHED_RR)
+				ulwp->ul_rtclassid = cid;
 			ulwp->ul_cid = cid;
 			ulwp->ul_pri = prio;
 			_membar_producer();
@@ -214,6 +215,8 @@
 			 */
 			param->sched_priority = ulwp->ul_pri;
 		} else {
+			if (*policy == SCHED_FIFO || *policy == SCHED_RR)
+				ulwp->ul_rtclassid = cid;
 			ulwp->ul_cid = cid;
 			ulwp->ul_pri = param->sched_priority;
 			_membar_producer();
--- a/usr/src/lib/libc/port/threads/thr.c	Wed Mar 26 15:33:06 2008 -0700
+++ b/usr/src/lib/libc/port/threads/thr.c	Wed Mar 26 17:37:28 2008 -0700
@@ -1320,6 +1320,7 @@
 	self->ul_policy = -1;		/* initialize only when needed */
 	self->ul_pri = 0;
 	self->ul_cid = 0;
+	self->ul_rtclassid = -1;
 	self->ul_uberdata = udp;
 	if (oldself != NULL) {
 		int i;
@@ -1397,7 +1398,6 @@
 		/* tls_size was zero when oldself was allocated */
 		lfree(oldself, sizeof (ulwp_t));
 	}
-	self->ul_rtclassid = get_info_by_policy(SCHED_FIFO)->pcc_info.pc_cid;
 	mutex_setup();
 	atfork_init();
 	signal_init();