diff options
Diffstat (limited to 'drivers/net/qlge/qlge_mpi.c')
| -rw-r--r-- | drivers/net/qlge/qlge_mpi.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/net/qlge/qlge_mpi.c b/drivers/net/qlge/qlge_mpi.c index 99e58e3f8e22..aec05f266107 100644 --- a/drivers/net/qlge/qlge_mpi.c +++ b/drivers/net/qlge/qlge_mpi.c | |||
| @@ -470,7 +470,8 @@ end: | |||
| 470 | */ | 470 | */ |
| 471 | static int ql_mailbox_command(struct ql_adapter *qdev, struct mbox_params *mbcp) | 471 | static int ql_mailbox_command(struct ql_adapter *qdev, struct mbox_params *mbcp) |
| 472 | { | 472 | { |
| 473 | int status, count; | 473 | int status; |
| 474 | unsigned long count; | ||
| 474 | 475 | ||
| 475 | 476 | ||
| 476 | /* Begin polled mode for MPI */ | 477 | /* Begin polled mode for MPI */ |
| @@ -491,14 +492,14 @@ static int ql_mailbox_command(struct ql_adapter *qdev, struct mbox_params *mbcp) | |||
| 491 | /* Wait for the command to complete. We loop | 492 | /* Wait for the command to complete. We loop |
| 492 | * here because some AEN might arrive while | 493 | * here because some AEN might arrive while |
| 493 | * we're waiting for the mailbox command to | 494 | * we're waiting for the mailbox command to |
| 494 | * complete. If more than 5 arrive then we can | 495 | * complete. If more than 5 seconds expire we can |
| 495 | * assume something is wrong. */ | 496 | * assume something is wrong. */ |
| 496 | count = 5; | 497 | count = jiffies + HZ * MAILBOX_TIMEOUT; |
| 497 | do { | 498 | do { |
| 498 | /* Wait for the interrupt to come in. */ | 499 | /* Wait for the interrupt to come in. */ |
| 499 | status = ql_wait_mbx_cmd_cmplt(qdev); | 500 | status = ql_wait_mbx_cmd_cmplt(qdev); |
| 500 | if (status) | 501 | if (status) |
| 501 | goto end; | 502 | continue; |
| 502 | 503 | ||
| 503 | /* Process the event. If it's an AEN, it | 504 | /* Process the event. If it's an AEN, it |
| 504 | * will be handled in-line or a worker | 505 | * will be handled in-line or a worker |
| @@ -517,15 +518,15 @@ static int ql_mailbox_command(struct ql_adapter *qdev, struct mbox_params *mbcp) | |||
| 517 | MB_CMD_STS_GOOD) || | 518 | MB_CMD_STS_GOOD) || |
| 518 | ((mbcp->mbox_out[0] & 0x0000f000) == | 519 | ((mbcp->mbox_out[0] & 0x0000f000) == |
| 519 | MB_CMD_STS_INTRMDT)) | 520 | MB_CMD_STS_INTRMDT)) |
| 520 | break; | 521 | goto done; |
| 521 | } while (--count); | 522 | } while (time_before(jiffies, count)); |
| 522 | 523 | ||
| 523 | if (!count) { | 524 | QPRINTK(qdev, DRV, ERR, |
| 524 | QPRINTK(qdev, DRV, ERR, | 525 | "Timed out waiting for mailbox complete.\n"); |
| 525 | "Timed out waiting for mailbox complete.\n"); | 526 | status = -ETIMEDOUT; |
| 526 | status = -ETIMEDOUT; | 527 | goto end; |
| 527 | goto end; | 528 | |
| 528 | } | 529 | done: |
| 529 | 530 | ||
| 530 | /* Now we can clear the interrupt condition | 531 | /* Now we can clear the interrupt condition |
| 531 | * and look at our status. | 532 | * and look at our status. |
