From: Jeremy Kerr Date: Thu, 16 Oct 2008 00:11:12 +0000 (+1100) Subject: powerpc/spufs: Don't spu_acquire_saved unnecessarily in regs read X-Git-Tag: v2.6.28-rc1~58^2~33 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=f027faa231f38c02e949352735eac76f29090809;p=linux-2.6-omap-h63xx.git 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 --- diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c index f139cd8b594..b6f7b917b56 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;