Commit 678b2ff1 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Arnd Bergmann

[POWERPC] spu sched: simplity spu_remove_from_active_list

If we call spu_remove_from_active_list that spu is always guaranteed
to be on the active list and in runnable state, so we can simply
do a list_del to remove it and unconditionally take the was_active
codepath.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarArnd Bergmann <arnd.bergmann@de.ibm.com>
parent 26bec673
...@@ -83,27 +83,14 @@ static void spu_add_to_active_list(struct spu *spu) ...@@ -83,27 +83,14 @@ static void spu_add_to_active_list(struct spu *spu)
/** /**
* spu_remove_from_active_list - remove spu from active list * spu_remove_from_active_list - remove spu from active list
* @spu: spu to remove from the active list * @spu: spu to remove from the active list
*
* This function removes an spu from the active list. If the spu was
* found on the active list the function returns 1, else it doesn't do
* anything and returns 0.
*/ */
static int spu_remove_from_active_list(struct spu *spu) static void spu_remove_from_active_list(struct spu *spu)
{ {
int node = spu->node; int node = spu->node;
struct spu *tmp;
int rc = 0;
mutex_lock(&spu_prio->active_mutex[node]); mutex_lock(&spu_prio->active_mutex[node]);
list_for_each_entry(tmp, &spu_prio->active_list[node], list) { list_del_init(&spu->list);
if (tmp == spu) {
list_del_init(&spu->list);
rc = 1;
break;
}
}
mutex_unlock(&spu_prio->active_mutex[node]); mutex_unlock(&spu_prio->active_mutex[node]);
return rc;
} }
static inline void mm_needs_global_tlbie(struct mm_struct *mm) static inline void mm_needs_global_tlbie(struct mm_struct *mm)
...@@ -167,16 +154,13 @@ static void spu_bind_context(struct spu *spu, struct spu_context *ctx) ...@@ -167,16 +154,13 @@ static void spu_bind_context(struct spu *spu, struct spu_context *ctx)
* spu_unbind_context - unbind spu context from physical spu * spu_unbind_context - unbind spu context from physical spu
* @spu: physical spu to unbind from * @spu: physical spu to unbind from
* @ctx: context to unbind * @ctx: context to unbind
*
* If the spu was on the active list the function returns 1, else 0.
*/ */
static int spu_unbind_context(struct spu *spu, struct spu_context *ctx) static void spu_unbind_context(struct spu *spu, struct spu_context *ctx)
{ {
int was_active = spu_remove_from_active_list(spu);
pr_debug("%s: unbind pid=%d SPU=%d NODE=%d\n", __FUNCTION__, pr_debug("%s: unbind pid=%d SPU=%d NODE=%d\n", __FUNCTION__,
spu->pid, spu->number, spu->node); spu->pid, spu->number, spu->node);
spu_remove_from_active_list(spu);
spu_switch_notify(spu, NULL); spu_switch_notify(spu, NULL);
spu_unmap_mappings(ctx); spu_unmap_mappings(ctx);
spu_save(&ctx->csa, spu); spu_save(&ctx->csa, spu);
...@@ -193,8 +177,6 @@ static int spu_unbind_context(struct spu *spu, struct spu_context *ctx) ...@@ -193,8 +177,6 @@ static int spu_unbind_context(struct spu *spu, struct spu_context *ctx)
ctx->spu = NULL; ctx->spu = NULL;
spu->flags = 0; spu->flags = 0;
spu->ctx = NULL; spu->ctx = NULL;
return was_active;
} }
/** /**
...@@ -340,17 +322,21 @@ int spu_activate(struct spu_context *ctx, unsigned long flags) ...@@ -340,17 +322,21 @@ int spu_activate(struct spu_context *ctx, unsigned long flags)
return -ERESTARTSYS; return -ERESTARTSYS;
} }
/**
* spu_deactivate - unbind a context from it's physical spu
* @ctx: spu context to unbind
*
* Unbind @ctx from the physical spu it is running on and schedule
* the highest priority context to run on the freed physical spu.
*/
void spu_deactivate(struct spu_context *ctx) void spu_deactivate(struct spu_context *ctx)
{ {
struct spu *spu; struct spu *spu = ctx->spu;
int was_active;
spu = ctx->spu; if (spu) {
if (!spu) spu_unbind_context(spu, ctx);
return;
was_active = spu_unbind_context(spu, ctx);
if (was_active)
spu_reschedule(spu); spu_reschedule(spu);
}
} }
void spu_yield(struct spu_context *ctx) void spu_yield(struct spu_context *ctx)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment