Index: sys/kern/kern_runq.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_runq.c,v retrieving revision 1.30 diff -u -r1.30 kern_runq.c --- sys/kern/kern_runq.c 3 Mar 2010 00:47:30 -0000 1.30 +++ sys/kern/kern_runq.c 8 Mar 2011 18:35:15 -0000 @@ -78,7 +78,7 @@ uint32_t r_bitmap[PRI_COUNT >> BITMAP_SHIFT]; /* Counters */ u_int r_count; /* Count of the threads */ - u_int r_avgcount; /* Average count of threads */ + u_int r_avgcount1; /* Average count of threads x 2 */ u_int r_mcount; /* Count of migratable threads */ /* Runqueues */ queue_t r_rt_queue[PRI_RT_COUNT]; @@ -474,7 +474,7 @@ KASSERT(l->l_stat == LSRUN); /* Look for threads, whose are allowed to migrate */ - if ((l->l_pflag & LP_BOUND) || lwp_cache_hot(l) || + if ((l->l_pflag & LP_BOUND) || !sched_migratable(l, curci)) { l = TAILQ_NEXT(l, l_runq); continue; @@ -523,12 +523,12 @@ ci_rq = ci->ci_schedstate.spc_sched_info; /* Average count of the threads */ - ci_rq->r_avgcount = (ci_rq->r_avgcount + ci_rq->r_mcount) >> 1; + ci_rq->r_avgcount1 = (ci_rq->r_avgcount1 + (ci_rq->r_mcount << 1)) >> 1; /* Look for CPU with the highest average */ - if (ci_rq->r_avgcount > highest) { + if (ci_rq->r_avgcount1 > highest) { hci = ci; - highest = ci_rq->r_avgcount; + highest = ci_rq->r_avgcount1; } } @@ -625,7 +625,7 @@ } /* Reset the counter, and call the balancer */ - ci_rq->r_avgcount = 0; + ci_rq->r_avgcount1 = 0; sched_balance(ci); tci = worker_ci; tspc = &tci->ci_schedstate; @@ -734,7 +734,7 @@ return NULL; /* Reset the counter, and call the balancer */ - ci_rq->r_avgcount = 0; + ci_rq->r_avgcount1 = 0; sched_balance(ci); cci = worker_ci; cspc = &cci->ci_schedstate; @@ -871,14 +871,14 @@ ci_rq = spc->spc_sched_info; (*pr)("Run-queue (CPU = %u):\n", ci->ci_index); - (*pr)(" pid.lid = %d.%d, r_count = %u, r_avgcount = %u, " + (*pr)(" pid.lid = %d.%d, r_count = %u, r_avgcount1 = %u, " "maxpri = %d, mlwp = %p\n", #ifdef MULTIPROCESSOR ci->ci_curlwp->l_proc->p_pid, ci->ci_curlwp->l_lid, #else curlwp->l_proc->p_pid, curlwp->l_lid, #endif - ci_rq->r_count, ci_rq->r_avgcount, spc->spc_maxpriority, + ci_rq->r_count, ci_rq->r_avgcount1, spc->spc_maxpriority, spc->spc_migrating); i = (PRI_COUNT >> BITMAP_SHIFT) - 1; do {