[Cbe-oss-dev] (no subject)

adetsch at br.ibm.com adetsch at br.ibm.com
Thu Dec 11 06:03:08 EST 2008


>From 0a46b71f2caa52cfd2e6184112cb77deddbbb8bf Mon Sep 17 00:00:00 2001
In-Reply-To: <200812101654.05091.adetsch at br.ibm.com>
References: <200812101654.05091.adetsch at br.ibm.com>
From: Andre Detsch <adetsch at br.ibm.com>
Date: Wed, 10 Dec 2008 16:03:08 -0300
Subject: [PATCH 06/18] powerpc/spufs: Time slice lazily loaded contexts.
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Message-Id: <200812101703.08583.adetsch at br.ibm.com>

All SPUs are stopped.  All contexts are either executing library
code or they have major faulted in spu_run.

Signed-off-by: Luke Browning <lukebrowning at us.ibm.com>
Signed-off-by: Andre Detsch <adetsch at br.ibm.com>
---
 arch/powerpc/platforms/cell/spufs/sched.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/platforms/cell/spufs/sched.c 
b/arch/powerpc/platforms/cell/spufs/sched.c
index 3c83bd3..acd584e 100644
--- a/arch/powerpc/platforms/cell/spufs/sched.c
+++ b/arch/powerpc/platforms/cell/spufs/sched.c
@@ -1244,9 +1244,13 @@ static noinline int spusched_tick(struct spu_gang 
*gang,
 		goto out;
 
 	/*
-	 * If nrunnable is zero, then all of the contexts are in user mode.
+	 * If nrunnable is zero, then all of the contexts are in user mode
+	 * and by definition nfaulting is equal to zero.  Otherwise if they
+	 * are equal, all of the contexts in spu_run have faulted.  In both
+	 * cases, all spus are stopped and we should yield assuming there
+	 * is another gang on the runqueue.
 	 */
-	yield = !atomic_read(&gang->nrunnable);
+	yield = atomic_read(&gang->nrunnable) == atomic_read(&gang->nfaulting);
 
 	if (yield || ((ctx->policy != SCHED_FIFO) && (!--ctx->time_slice))) {
 		if (spu_prio->nr_waiting) {
-- 
1.5.4.3




More information about the cbe-oss-dev mailing list