|
@@ -564,10 +564,10 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
|
|
|
* functioning because an interrupt routing or other
|
|
|
* hardware failure has occurred.
|
|
|
*/
|
|
|
- unsigned long count = 36000000L; /* 3 minutes */
|
|
|
+ unsigned long timeout = jiffies + (180 * HZ); /* 3 minutes */
|
|
|
while (down_trylock(&fibptr->event_wait)) {
|
|
|
int blink;
|
|
|
- if (--count == 0) {
|
|
|
+ if (time_is_before_eq_jiffies(timeout)) {
|
|
|
struct aac_queue * q = &dev->queues->queue[AdapNormCmdQueue];
|
|
|
spin_lock_irqsave(q->lock, qflags);
|
|
|
q->numpending--;
|
|
@@ -588,7 +588,10 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size,
|
|
|
}
|
|
|
return -EFAULT;
|
|
|
}
|
|
|
- udelay(5);
|
|
|
+ /* We used to udelay() here but that absorbed
|
|
|
+ * a CPU when a timeout occured. Not very
|
|
|
+ * useful. */
|
|
|
+ cpu_relax();
|
|
|
}
|
|
|
} else if (down_interruptible(&fibptr->event_wait)) {
|
|
|
/* Do nothing ... satisfy
|