Commit aa45e256 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Arnd Bergmann

[POWERPC] spufs: various run.c cleanups

 - remove the spu_acquire_runnable from spu_run_init.  I need to
   opencode it in spufs_run_spu in the next patch
 - remove various inline attributes, we don't really want to inline
   long functions with multiple callsites
 - cleanup return values and runcntl_write calls in spu_run_init
 - use normal kernel codingstyle in spu_reacquire_runnable
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarArnd Bergmann <arnd.bergmann@de.ibm.com>
parent fe8a29db
...@@ -123,20 +123,15 @@ static int spu_setup_isolated(struct spu_context *ctx) ...@@ -123,20 +123,15 @@ static int spu_setup_isolated(struct spu_context *ctx)
return ret; return ret;
} }
static inline int spu_run_init(struct spu_context *ctx, u32 * npc) static int spu_run_init(struct spu_context *ctx, u32 * npc)
{ {
int ret;
unsigned long runcntl = SPU_RUNCNTL_RUNNABLE;
ret = spu_acquire_runnable(ctx, 0);
if (ret)
return ret;
if (ctx->flags & SPU_CREATE_ISOLATE) { if (ctx->flags & SPU_CREATE_ISOLATE) {
unsigned long runcntl;
if (!(ctx->ops->status_read(ctx) & SPU_STATUS_ISOLATED_STATE)) { if (!(ctx->ops->status_read(ctx) & SPU_STATUS_ISOLATED_STATE)) {
ret = spu_setup_isolated(ctx); int ret = spu_setup_isolated(ctx);
if (ret) if (ret)
spu_release(ctx); return ret;
} }
/* if userspace has set the runcntrl register (eg, to issue an /* if userspace has set the runcntrl register (eg, to issue an
...@@ -145,16 +140,17 @@ static inline int spu_run_init(struct spu_context *ctx, u32 * npc) ...@@ -145,16 +140,17 @@ static inline int spu_run_init(struct spu_context *ctx, u32 * npc)
(SPU_RUNCNTL_RUNNABLE | SPU_RUNCNTL_ISOLATE); (SPU_RUNCNTL_RUNNABLE | SPU_RUNCNTL_ISOLATE);
if (runcntl == 0) if (runcntl == 0)
runcntl = SPU_RUNCNTL_RUNNABLE; runcntl = SPU_RUNCNTL_RUNNABLE;
ctx->ops->runcntl_write(ctx, runcntl);
} else { } else {
spu_start_tick(ctx); spu_start_tick(ctx);
ctx->ops->npc_write(ctx, *npc); ctx->ops->npc_write(ctx, *npc);
ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_RUNNABLE);
} }
ctx->ops->runcntl_write(ctx, runcntl); return 0;
return ret;
} }
static inline int spu_run_fini(struct spu_context *ctx, u32 * npc, static int spu_run_fini(struct spu_context *ctx, u32 * npc,
u32 * status) u32 * status)
{ {
int ret = 0; int ret = 0;
...@@ -170,19 +166,27 @@ static inline int spu_run_fini(struct spu_context *ctx, u32 * npc, ...@@ -170,19 +166,27 @@ static inline int spu_run_fini(struct spu_context *ctx, u32 * npc,
return ret; return ret;
} }
static inline int spu_reacquire_runnable(struct spu_context *ctx, u32 *npc, static int spu_reacquire_runnable(struct spu_context *ctx, u32 *npc,
u32 *status) u32 *status)
{ {
int ret; int ret;
if ((ret = spu_run_fini(ctx, npc, status)) != 0) ret = spu_run_fini(ctx, npc, status);
if (ret)
return ret; return ret;
if (*status & (SPU_STATUS_STOPPED_BY_STOP |
SPU_STATUS_STOPPED_BY_HALT)) { if (*status & (SPU_STATUS_STOPPED_BY_STOP | SPU_STATUS_STOPPED_BY_HALT))
return *status; return *status;
}
if ((ret = spu_run_init(ctx, npc)) != 0) ret = spu_acquire_runnable(ctx, 0);
if (ret)
return ret; return ret;
ret = spu_run_init(ctx, npc);
if (ret) {
spu_release(ctx);
return ret;
}
return 0; return 0;
} }
...@@ -293,9 +297,16 @@ long spufs_run_spu(struct file *file, struct spu_context *ctx, ...@@ -293,9 +297,16 @@ long spufs_run_spu(struct file *file, struct spu_context *ctx,
ctx->ops->master_start(ctx); ctx->ops->master_start(ctx);
ctx->event_return = 0; ctx->event_return = 0;
ret = spu_run_init(ctx, npc);
ret = spu_acquire_runnable(ctx, 0);
if (ret) if (ret)
return ret;
ret = spu_run_init(ctx, npc);
if (ret) {
spu_release(ctx);
goto out; goto out;
}
do { do {
ret = spufs_wait(ctx->stop_wq, spu_stopped(ctx, &status)); ret = spufs_wait(ctx->stop_wq, spu_stopped(ctx, &status));
......
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