diff options
Diffstat (limited to 'arch/powerpc/platforms/cell/spu_base.c')
-rw-r--r-- | arch/powerpc/platforms/cell/spu_base.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index 75b5af0a7e2..5f399313b47 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c @@ -425,6 +425,25 @@ static void spu_init_channels(struct spu *spu) } } +struct spu *spu_alloc_spu(struct spu *req_spu) +{ + struct spu *spu, *ret = NULL; + + mutex_lock(&spu_mutex); + list_for_each_entry(spu, &cbe_spu_info[req_spu->node].free_spus, list) { + if (spu == req_spu) { + list_del_init(&spu->list); + pr_debug("Got SPU %d %d\n", spu->number, spu->node); + spu_init_channels(spu); + ret = spu; + break; + } + } + mutex_unlock(&spu_mutex); + return ret; +} +EXPORT_SYMBOL_GPL(spu_alloc_spu); + struct spu *spu_alloc_node(int node) { struct spu *spu = NULL; |