diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2008-09-02 11:57:09 +1000 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2008-09-05 10:51:00 +1000 |
commit | 9f43e3914dceb0f8191875b3cdf4325b48d0d70a (patch) | |
tree | 4a8636e5a353cc4e5e8f29b0c8f6ad14c0b379d0 | |
parent | 7888bc2b4778fda267a6e6422c4497dba865a47a (diff) | |
download | linux-9f43e3914dceb0f8191875b3cdf4325b48d0d70a.tar.gz linux-9f43e3914dceb0f8191875b3cdf4325b48d0d70a.tar.bz2 linux-9f43e3914dceb0f8191875b3cdf4325b48d0d70a.zip |
powerpc/spufs: Fix multiple get_spu_context()
Commit 8d5636fbca202f61fdb808fc9e20c0142291d802 introduced a reference
count on SPU contexts during find_victim, but this may cause a leak in
the reference count if we later find a better contender for a context to
unschedule.
Change the reference to after we've found our victim context, so we
don't do the extra get_spu_context().
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-rw-r--r-- | arch/powerpc/platforms/cell/spufs/sched.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c index 1c1b627ee843..9bb45c6b839c 100644 --- a/arch/powerpc/platforms/cell/spufs/sched.c +++ b/arch/powerpc/platforms/cell/spufs/sched.c @@ -643,9 +643,10 @@ static struct spu *find_victim(struct spu_context *ctx) !(tmp->flags & SPU_CREATE_NOSCHED) && (!victim || tmp->prio > victim->prio)) { victim = spu->ctx; - get_spu_context(victim); } } + if (victim) + get_spu_context(victim); mutex_unlock(&cbe_spu_info[node].list_mutex); if (victim) { |