Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 116915
b: refs/heads/master
c: 14f693e
h: refs/heads/master
i:
  116913: 0c75b18
  116911: 28ce50b
v: v3
  • Loading branch information
Jeremy Kerr committed Oct 21, 2008
1 parent 1957221 commit 5a74228
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f5ed0eb6fe131e8f3847323b4aa569a6f7b36f56
refs/heads/master: 14f693eeb5b16bc47ffa38d8b8838a654aedd53f
46 changes: 27 additions & 19 deletions trunk/arch/powerpc/platforms/cell/spufs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -2503,30 +2503,38 @@ static ssize_t spufs_switch_log_read(struct file *file, char __user *buf,
char tbuf[128];
int width;

if (file->f_flags & O_NONBLOCK) {
if (spufs_switch_log_used(ctx) == 0) {
if (spufs_switch_log_used(ctx) == 0) {
if (cnt > 0) {
/* If there's data ready to go, we can
* just return straight away */
break;

} else if (file->f_flags & O_NONBLOCK) {
error = -EAGAIN;
break;

} else {
/* spufs_wait will drop the mutex and
* re-acquire, but since we're in read(), the
* file cannot be _released (and so
* ctx->switch_log is stable).
*/
error = spufs_wait(ctx->switch_log->wait,
spufs_switch_log_used(ctx) > 0);

/* On error, spufs_wait returns without the
* state mutex held */
if (error)
return error;

/* We may have had entries read from underneath
* us while we dropped the mutex in spufs_wait,
* so re-check */
if (spufs_switch_log_used(ctx) == 0)
continue;
}
} else {
/* spufs_wait will drop the mutex and re-acquire,
* but since we're in read(), the file cannot be
* _released (and so ctx->switch_log is stable).
*/
error = spufs_wait(ctx->switch_log->wait,
spufs_switch_log_used(ctx) > 0);

/* On error, spufs_wait returns without the
* state mutex held */
if (error)
return error;
}

/* We may have had entries read from underneath us while we
* dropped the mutex in spufs_wait, so re-check */
if (ctx->switch_log->head == ctx->switch_log->tail)
continue;

width = switch_log_sprint(ctx, tbuf, sizeof(tbuf));
if (width < len)
ctx->switch_log->tail =
Expand Down

0 comments on commit 5a74228

Please sign in to comment.