Skip to content

Commit

Permalink
[CELL] spufs: integration of SPE affinity with the scheduller
Browse files Browse the repository at this point in the history
This patch makes the scheduller honor affinity information for each
context being scheduled. If the context has no affinity information,
behaviour is unchanged. If there are affinity information, context is
schedulled to be run on the exact spu recommended by the affinity
placement algorithm.

Signed-off-by: Andre Detsch <adetsch@br.ibm.com>
Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
  • Loading branch information
Arnd Bergmann authored and Arnd Bergmann committed Jul 20, 2007
1 parent c5fc8d2 commit cbc23d3
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
19 changes: 19 additions & 0 deletions arch/powerpc/platforms/cell/spu_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions arch/powerpc/platforms/cell/spufs/sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,10 @@ static struct spu *spu_get_idle(struct spu_context *ctx)
int node = cpu_to_node(raw_smp_processor_id());
int n;

spu = affinity_check(ctx);
if (spu)
return spu_alloc_spu(spu);

for (n = 0; n < MAX_NUMNODES; n++, node++) {
node = (node < MAX_NUMNODES) ? node : 0;
if (!node_allowed(ctx, node))
Expand Down

0 comments on commit cbc23d3

Please sign in to comment.