Pull asus into release branch
[pandora-kernel.git] / arch / powerpc / platforms / cell / spufs / run.c
index 1acc2ff..f95a611 100644 (file)
@@ -133,7 +133,7 @@ out_drop_priv:
        spu_mfc_sr1_set(ctx->spu, sr1);
 
 out_unlock:
-       spu_release_exclusive(ctx);
+       spu_release(ctx);
 out:
        return ret;
 }
@@ -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);
+       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);
+                               ret = spu_acquire_runnable(ctx, 0);
                }
 
                /* if userspace has set the runcntrl register (eg, to issue an
@@ -164,8 +164,10 @@ static inline int spu_run_init(struct spu_context *ctx, u32 * npc)
                        (SPU_RUNCNTL_RUNNABLE | SPU_RUNCNTL_ISOLATE);
                if (runcntl == 0)
                        runcntl = SPU_RUNCNTL_RUNNABLE;
-       } else
+       } else {
+               spu_start_tick(ctx);
                ctx->ops->npc_write(ctx, *npc);
+       }
 
        ctx->ops->runcntl_write(ctx, runcntl);
        return ret;
@@ -176,6 +178,7 @@ static inline int spu_run_fini(struct spu_context *ctx, u32 * npc,
 {
        int ret = 0;
 
+       spu_stop_tick(ctx);
        *status = ctx->ops->status_read(ctx);
        *npc = ctx->ops->npc_read(ctx);
        spu_release(ctx);
@@ -329,8 +332,10 @@ long spufs_run_spu(struct file *file, struct spu_context *ctx,
                }
                if (unlikely(ctx->state != SPU_STATE_RUNNABLE)) {
                        ret = spu_reacquire_runnable(ctx, npc, &status);
-                       if (ret)
+                       if (ret) {
+                               spu_stop_tick(ctx);
                                goto out2;
+                       }
                        continue;
                }
                ret = spu_process_events(ctx);
@@ -361,4 +366,3 @@ out:
        up(&ctx->run_sema);
        return ret;
 }
-