diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2008-10-16 11:11:12 +1100 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2008-10-21 11:13:43 +1100 |
commit | f027faa231f38c02e949352735eac76f29090809 (patch) | |
tree | 1d26e6f406d473f7eee9cb224dcffca613f6d1b9 | |
parent | 14f693eeb5b16bc47ffa38d8b8838a654aedd53f (diff) | |
download | linux-f027faa231f38c02e949352735eac76f29090809.tar.gz linux-f027faa231f38c02e949352735eac76f29090809.tar.bz2 linux-f027faa231f38c02e949352735eac76f29090809.zip |
powerpc/spufs: Don't spu_acquire_saved unnecessarily in regs read
With most file readers (eg cat, dd), reading a context's regs file will
result in two reads: the first to read the data, and the second to
return EOF. Because each read performs a spu_acquire_saved, we end up
descheduling and re-scheduling the context twice.
This change does a simple check to see if we'd return EOF before
calling spu_acquire_saved(), saving the extra schedule operation.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-rw-r--r-- | arch/powerpc/platforms/cell/spufs/file.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c index f139cd8b594d..b6f7b917b56c 100644 --- a/arch/powerpc/platforms/cell/spufs/file.c +++ b/arch/powerpc/platforms/cell/spufs/file.c @@ -548,6 +548,11 @@ spufs_regs_read(struct file *file, char __user *buffer, int ret; struct spu_context *ctx = file->private_data; + /* pre-check for file position: if we'd return EOF, there's no point + * causing a deschedule */ + if (*pos >= sizeof(ctx->csa.lscsa->gprs)) + return 0; + ret = spu_acquire_saved(ctx); if (ret) return ret; |