[POWERPC] avoid SPU_ACTIVATE_NOWAKE optimization
This optimization was added recently but is still buggy, so back it out for now. Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
This commit is contained in:
parent
aa0ed2bdb6
commit
50b520d4ef
3 changed files with 6 additions and 11 deletions
|
@ -143,7 +143,7 @@ static inline int spu_run_init(struct spu_context *ctx, u32 * npc)
|
|||
int ret;
|
||||
unsigned long runcntl = SPU_RUNCNTL_RUNNABLE;
|
||||
|
||||
ret = spu_acquire_runnable(ctx, SPU_ACTIVATE_NOWAKE);
|
||||
ret = spu_acquire_runnable(ctx, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -155,7 +155,7 @@ static inline int spu_run_init(struct spu_context *ctx, u32 * npc)
|
|||
spu_release(ctx);
|
||||
ret = spu_setup_isolated(ctx);
|
||||
if (!ret)
|
||||
ret = spu_acquire_runnable(ctx, SPU_ACTIVATE_NOWAKE);
|
||||
ret = spu_acquire_runnable(ctx, 0);
|
||||
}
|
||||
|
||||
/* if userspace has set the runcntrl register (eg, to issue an
|
||||
|
|
|
@ -263,7 +263,6 @@ static void spu_prio_wait(struct spu_context *ctx)
|
|||
{
|
||||
DEFINE_WAIT(wait);
|
||||
|
||||
set_bit(SPU_SCHED_WAKE, &ctx->sched_flags);
|
||||
prepare_to_wait_exclusive(&ctx->stop_wq, &wait, TASK_INTERRUPTIBLE);
|
||||
if (!signal_pending(current)) {
|
||||
mutex_unlock(&ctx->state_mutex);
|
||||
|
@ -272,7 +271,6 @@ static void spu_prio_wait(struct spu_context *ctx)
|
|||
}
|
||||
__set_current_state(TASK_RUNNING);
|
||||
remove_wait_queue(&ctx->stop_wq, &wait);
|
||||
clear_bit(SPU_SCHED_WAKE, &ctx->sched_flags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -292,7 +290,7 @@ static void spu_reschedule(struct spu *spu)
|
|||
best = sched_find_first_bit(spu_prio->bitmap);
|
||||
if (best < MAX_PRIO) {
|
||||
struct spu_context *ctx = spu_grab_context(best);
|
||||
if (ctx && test_bit(SPU_SCHED_WAKE, &ctx->sched_flags))
|
||||
if (ctx)
|
||||
wake_up(&ctx->stop_wq);
|
||||
}
|
||||
spin_unlock(&spu_prio->runq_lock);
|
||||
|
@ -414,8 +412,7 @@ int spu_activate(struct spu_context *ctx, unsigned long flags)
|
|||
}
|
||||
|
||||
spu_add_to_rq(ctx);
|
||||
if (!(flags & SPU_ACTIVATE_NOWAKE))
|
||||
spu_prio_wait(ctx);
|
||||
spu_prio_wait(ctx);
|
||||
spu_del_from_rq(ctx);
|
||||
} while (!signal_pending(current));
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ struct spu_gang;
|
|||
|
||||
/* ctx->sched_flags */
|
||||
enum {
|
||||
SPU_SCHED_WAKE = 0,
|
||||
SPU_SCHED_WAKE = 0, /* currently unused */
|
||||
};
|
||||
|
||||
struct spu_context {
|
||||
|
@ -191,9 +191,7 @@ void spu_forget(struct spu_context *ctx);
|
|||
int spu_acquire_runnable(struct spu_context *ctx, unsigned long flags);
|
||||
void spu_acquire_saved(struct spu_context *ctx);
|
||||
int spu_acquire_exclusive(struct spu_context *ctx);
|
||||
enum {
|
||||
SPU_ACTIVATE_NOWAKE = 1,
|
||||
};
|
||||
|
||||
int spu_activate(struct spu_context *ctx, unsigned long flags);
|
||||
void spu_deactivate(struct spu_context *ctx);
|
||||
void spu_yield(struct spu_context *ctx);
|
||||
|
|
Loading…
Reference in a new issue