diff options
author | Jack Steiner <steiner@sgi.com> | 2009-06-17 19:28:29 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-18 16:04:03 -0400 |
commit | d6e2fbce0d70c2072a1c478dbd37b34d27129d74 (patch) | |
tree | a5751ae55607dae0e9d394bf09857d15ea72c028 /drivers/misc | |
parent | d5826dd6002f23940458860701ce22fba9df2614 (diff) |
gru: fix automatic retry of gru instruction failures
Fix bug in automatic retry of GRU instruction failures. CBR substatus
(message queue failure) was being checked incorrectly.
Signed-off-by: Jack Steiner <steiner@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/sgi-gru/grukservices.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/misc/sgi-gru/grukservices.c b/drivers/misc/sgi-gru/grukservices.c index 5078f57da882..eedbf9c32760 100644 --- a/drivers/misc/sgi-gru/grukservices.c +++ b/drivers/misc/sgi-gru/grukservices.c | |||
@@ -436,11 +436,10 @@ static int gru_retry_exception(void *cb) | |||
436 | int retry = EXCEPTION_RETRY_LIMIT; | 436 | int retry = EXCEPTION_RETRY_LIMIT; |
437 | 437 | ||
438 | while (1) { | 438 | while (1) { |
439 | if (gru_get_cb_message_queue_substatus(cb)) | ||
440 | break; | ||
441 | if (gru_wait_idle_or_exception(gen) == CBS_IDLE) | 439 | if (gru_wait_idle_or_exception(gen) == CBS_IDLE) |
442 | return CBS_IDLE; | 440 | return CBS_IDLE; |
443 | 441 | if (gru_get_cb_message_queue_substatus(cb)) | |
442 | return CBS_EXCEPTION; | ||
444 | gru_get_cb_exception_detail(cb, &excdet); | 443 | gru_get_cb_exception_detail(cb, &excdet); |
445 | if ((excdet.ecause & ~EXCEPTION_RETRY_BITS) || | 444 | if ((excdet.ecause & ~EXCEPTION_RETRY_BITS) || |
446 | (excdet.cbrexecstatus & CBR_EXS_ABORT_OCC)) | 445 | (excdet.cbrexecstatus & CBR_EXS_ABORT_OCC)) |