aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/platforms/cell/spu_base.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/platforms/cell/spu_base.c')
-rw-r--r--arch/powerpc/platforms/cell/spu_base.c19
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;