Commit f027faa2 authored by Jeremy Kerr's avatar Jeremy Kerr

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: default avatarJeremy Kerr <jk@ozlabs.org>
parent 14f693ee
...@@ -548,6 +548,11 @@ spufs_regs_read(struct file *file, char __user *buffer, ...@@ -548,6 +548,11 @@ spufs_regs_read(struct file *file, char __user *buffer,
int ret; int ret;
struct spu_context *ctx = file->private_data; 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); ret = spu_acquire_saved(ctx);
if (ret) if (ret)
return ret; return ret;
......
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