[POWERPC] spufs: spu_find_victim may choose wrong victim
authorLuke Browning <lukebr@linux.vnet.ibm.com>
Thu, 20 Dec 2007 07:39:59 +0000 (16:39 +0900)
committerPaul Mackerras <paulus@samba.org>
Fri, 21 Dec 2007 08:46:20 +0000 (19:46 +1100)
Need to re-check priority after dropping lock.  Otherwise, a
more favored context may be preempted.

Signed-off-by: Luke Browning <lukebr@linux.vnet.ibm.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/cell/spufs/sched.c

index ef0e5e230fbb2f0f35bb5df5bf010bbd93872871..54b338f8363fbe3a4569e3de27374f5ebfd511c8 100644 (file)
@@ -626,10 +626,10 @@ static struct spu *find_victim(struct spu_context *ctx)
                        }
 
                        spu = victim->spu;
-                       if (!spu) {
+                       if (!spu || victim->prio <= ctx->prio) {
                                /*
                                 * This race can happen because we've dropped
-                                * the active list mutex.  No a problem, just
+                                * the active list mutex.  Not a problem, just
                                 * restart the search.
                                 */
                                mutex_unlock(&victim->state_mutex);