diff options
author | Brian King <brking@linux.vnet.ibm.com> | 2010-06-17 14:56:00 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-07-27 13:03:46 -0400 |
commit | 0f33ece5bc3d5a9567b65cfbc736e8f206ecfc7b (patch) | |
tree | 4b271d2c1373e1882ecffa8f4baf247a9f578c15 /drivers/scsi/ibmvscsi/ibmvscsi.h | |
parent | 06395193b20124663b83b2894da827aec7e9d920 (diff) |
[SCSI] ibmvscsi: Fix softlockup on resume
This fixes a softlockup seen on resume. During resume, the CRQ
must be reenabled. However, the H_ENABLE_CRQ hcall used to do
this may return H_BUSY or H_LONG_BUSY. When this happens, the
caller is expected to retry later. This patch changes a simple
loop, which was causing the softlockup, to a loop at task level
which sleeps between retries rather than simply spinning.
Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/ibmvscsi/ibmvscsi.h')
-rw-r--r-- | drivers/scsi/ibmvscsi/ibmvscsi.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.h b/drivers/scsi/ibmvscsi/ibmvscsi.h index 9cb7c6a773e1..02197a2b22b9 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.h +++ b/drivers/scsi/ibmvscsi/ibmvscsi.h | |||
@@ -91,12 +91,16 @@ struct event_pool { | |||
91 | struct ibmvscsi_host_data { | 91 | struct ibmvscsi_host_data { |
92 | atomic_t request_limit; | 92 | atomic_t request_limit; |
93 | int client_migrated; | 93 | int client_migrated; |
94 | int reset_crq; | ||
95 | int reenable_crq; | ||
94 | struct device *dev; | 96 | struct device *dev; |
95 | struct event_pool pool; | 97 | struct event_pool pool; |
96 | struct crq_queue queue; | 98 | struct crq_queue queue; |
97 | struct tasklet_struct srp_task; | 99 | struct tasklet_struct srp_task; |
98 | struct list_head sent; | 100 | struct list_head sent; |
99 | struct Scsi_Host *host; | 101 | struct Scsi_Host *host; |
102 | struct task_struct *work_thread; | ||
103 | wait_queue_head_t work_wait_q; | ||
100 | struct mad_adapter_info_data madapter_info; | 104 | struct mad_adapter_info_data madapter_info; |
101 | struct capabilities caps; | 105 | struct capabilities caps; |
102 | dma_addr_t caps_addr; | 106 | dma_addr_t caps_addr; |