Commit a8b87f60 authored by Paul Mackerras's avatar Paul Mackerras

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jk/spufs into merge

parents 9c033852 61b36fc1
...@@ -160,13 +160,6 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea) ...@@ -160,13 +160,6 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
pr_debug("%s\n", __FUNCTION__); pr_debug("%s\n", __FUNCTION__);
if (test_bit(SPU_CONTEXT_SWITCH_ACTIVE, &spu->flags)) {
/* SLBs are pre-loaded for context switch, so
* we should never get here!
*/
printk("%s: invalid access during switch!\n", __func__);
return 1;
}
slb.esid = (ea & ESID_MASK) | SLB_ESID_V; slb.esid = (ea & ESID_MASK) | SLB_ESID_V;
switch(REGION_ID(ea)) { switch(REGION_ID(ea)) {
...@@ -226,11 +219,6 @@ static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr) ...@@ -226,11 +219,6 @@ static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr)
return 0; return 0;
} }
if (test_bit(SPU_CONTEXT_SWITCH_ACTIVE, &spu->flags)) {
printk("%s: invalid access during switch!\n", __func__);
return 1;
}
spu->class_0_pending = 0; spu->class_0_pending = 0;
spu->dar = ea; spu->dar = ea;
spu->dsisr = dsisr; spu->dsisr = dsisr;
......
...@@ -234,6 +234,7 @@ static int spu_run_fini(struct spu_context *ctx, u32 *npc, ...@@ -234,6 +234,7 @@ static int spu_run_fini(struct spu_context *ctx, u32 *npc,
*npc = ctx->ops->npc_read(ctx); *npc = ctx->ops->npc_read(ctx);
spuctx_switch_state(ctx, SPU_UTIL_IDLE_LOADED); spuctx_switch_state(ctx, SPU_UTIL_IDLE_LOADED);
ctx->policy = SCHED_IDLE;
spu_release(ctx); spu_release(ctx);
if (signal_pending(current)) if (signal_pending(current))
......
...@@ -856,21 +856,18 @@ static noinline void spusched_tick(struct spu_context *ctx) ...@@ -856,21 +856,18 @@ static noinline void spusched_tick(struct spu_context *ctx)
{ {
struct spu_context *new = NULL; struct spu_context *new = NULL;
struct spu *spu = NULL; struct spu *spu = NULL;
u32 status;
if (spu_acquire(ctx)) if (spu_acquire(ctx))
BUG(); /* a kernel thread never has signals pending */ BUG(); /* a kernel thread never has signals pending */
if (ctx->state != SPU_STATE_RUNNABLE) if (ctx->state != SPU_STATE_RUNNABLE)
goto out; goto out;
if (spu_stopped(ctx, &status))
goto out;
if (ctx->flags & SPU_CREATE_NOSCHED) if (ctx->flags & SPU_CREATE_NOSCHED)
goto out; goto out;
if (ctx->policy == SCHED_FIFO) if (ctx->policy == SCHED_FIFO)
goto out; goto out;
if (--ctx->time_slice) if (--ctx->time_slice && ctx->policy != SCHED_IDLE)
goto out; goto out;
spu = ctx->spu; spu = ctx->spu;
...@@ -880,6 +877,7 @@ static noinline void spusched_tick(struct spu_context *ctx) ...@@ -880,6 +877,7 @@ static noinline void spusched_tick(struct spu_context *ctx)
new = grab_runnable_context(ctx->prio + 1, spu->node); new = grab_runnable_context(ctx->prio + 1, spu->node);
if (new) { if (new) {
spu_unschedule(spu, ctx); spu_unschedule(spu, ctx);
if (ctx->policy != SCHED_IDLE)
spu_add_to_rq(ctx); spu_add_to_rq(ctx);
} else { } else {
spu_context_nospu_trace(spusched_tick__newslice, ctx); spu_context_nospu_trace(spusched_tick__newslice, ctx);
......
...@@ -720,8 +720,9 @@ static inline void set_switch_active(struct spu_state *csa, struct spu *spu) ...@@ -720,8 +720,9 @@ static inline void set_switch_active(struct spu_state *csa, struct spu *spu)
* Restore, Step 23. * Restore, Step 23.
* Change the software context switch pending flag * Change the software context switch pending flag
* to context switch active. * to context switch active.
*
* This implementation does not uses a switch active flag.
*/ */
set_bit(SPU_CONTEXT_SWITCH_ACTIVE, &spu->flags);
clear_bit(SPU_CONTEXT_SWITCH_PENDING, &spu->flags); clear_bit(SPU_CONTEXT_SWITCH_PENDING, &spu->flags);
mb(); mb();
} }
...@@ -1739,9 +1740,8 @@ static inline void reset_switch_active(struct spu_state *csa, struct spu *spu) ...@@ -1739,9 +1740,8 @@ static inline void reset_switch_active(struct spu_state *csa, struct spu *spu)
{ {
/* Restore, Step 74: /* Restore, Step 74:
* Reset the "context switch active" flag. * Reset the "context switch active" flag.
* Not performed by this implementation.
*/ */
clear_bit(SPU_CONTEXT_SWITCH_ACTIVE, &spu->flags);
mb();
} }
static inline void reenable_interrupts(struct spu_state *csa, struct spu *spu) static inline void reenable_interrupts(struct spu_state *csa, struct spu *spu)
......
...@@ -98,9 +98,8 @@ ...@@ -98,9 +98,8 @@
#define MFC_PRIV_ATTN_EVENT 0x00000800 #define MFC_PRIV_ATTN_EVENT 0x00000800
#define MFC_MULTI_SRC_EVENT 0x00001000 #define MFC_MULTI_SRC_EVENT 0x00001000
/* Flags indicating progress during context switch. */ /* Flag indicating progress during context switch. */
#define SPU_CONTEXT_SWITCH_PENDING 0UL #define SPU_CONTEXT_SWITCH_PENDING 0UL
#define SPU_CONTEXT_SWITCH_ACTIVE 1UL
struct spu_context; struct spu_context;
struct spu_runqueue; struct spu_runqueue;
......
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