forked from Minki/linux
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jk/spufs into merge
This commit is contained in:
commit
a8b87f609d
@ -160,13 +160,6 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
|
||||
|
||||
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;
|
||||
|
||||
switch(REGION_ID(ea)) {
|
||||
@ -226,11 +219,6 @@ static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr)
|
||||
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->dar = ea;
|
||||
spu->dsisr = dsisr;
|
||||
|
@ -234,6 +234,7 @@ static int spu_run_fini(struct spu_context *ctx, u32 *npc,
|
||||
*npc = ctx->ops->npc_read(ctx);
|
||||
|
||||
spuctx_switch_state(ctx, SPU_UTIL_IDLE_LOADED);
|
||||
ctx->policy = SCHED_IDLE;
|
||||
spu_release(ctx);
|
||||
|
||||
if (signal_pending(current))
|
||||
|
@ -856,21 +856,18 @@ static noinline void spusched_tick(struct spu_context *ctx)
|
||||
{
|
||||
struct spu_context *new = NULL;
|
||||
struct spu *spu = NULL;
|
||||
u32 status;
|
||||
|
||||
if (spu_acquire(ctx))
|
||||
BUG(); /* a kernel thread never has signals pending */
|
||||
|
||||
if (ctx->state != SPU_STATE_RUNNABLE)
|
||||
goto out;
|
||||
if (spu_stopped(ctx, &status))
|
||||
goto out;
|
||||
if (ctx->flags & SPU_CREATE_NOSCHED)
|
||||
goto out;
|
||||
if (ctx->policy == SCHED_FIFO)
|
||||
goto out;
|
||||
|
||||
if (--ctx->time_slice)
|
||||
if (--ctx->time_slice && ctx->policy != SCHED_IDLE)
|
||||
goto out;
|
||||
|
||||
spu = ctx->spu;
|
||||
@ -880,7 +877,8 @@ static noinline void spusched_tick(struct spu_context *ctx)
|
||||
new = grab_runnable_context(ctx->prio + 1, spu->node);
|
||||
if (new) {
|
||||
spu_unschedule(spu, ctx);
|
||||
spu_add_to_rq(ctx);
|
||||
if (ctx->policy != SCHED_IDLE)
|
||||
spu_add_to_rq(ctx);
|
||||
} else {
|
||||
spu_context_nospu_trace(spusched_tick__newslice, ctx);
|
||||
ctx->time_slice++;
|
||||
|
@ -720,8 +720,9 @@ static inline void set_switch_active(struct spu_state *csa, struct spu *spu)
|
||||
* Restore, Step 23.
|
||||
* Change the software context switch pending flag
|
||||
* 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);
|
||||
mb();
|
||||
}
|
||||
@ -1739,9 +1740,8 @@ static inline void reset_switch_active(struct spu_state *csa, struct spu *spu)
|
||||
{
|
||||
/* Restore, Step 74:
|
||||
* 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)
|
||||
|
@ -98,9 +98,8 @@
|
||||
#define MFC_PRIV_ATTN_EVENT 0x00000800
|
||||
#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_ACTIVE 1UL
|
||||
|
||||
struct spu_context;
|
||||
struct spu_runqueue;
|
||||
|
Loading…
Reference in New Issue
Block a user