aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/be2iscsi/be_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/be2iscsi/be_main.c')
-rw-r--r--drivers/scsi/be2iscsi/be_main.c49
1 files changed, 20 insertions, 29 deletions
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index d3632d5cb248..73a29b2c18ba 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -267,11 +267,9 @@ static int beiscsi_eh_abort(struct scsi_cmnd *sc)
267 nonemb_cmd.va, nonemb_cmd.dma); 267 nonemb_cmd.va, nonemb_cmd.dma);
268 268
269 return FAILED; 269 return FAILED;
270 } else {
271 wait_event_interruptible(phba->ctrl.mcc_wait[tag],
272 phba->ctrl.mcc_numtag[tag]);
273 free_mcc_tag(&phba->ctrl, tag);
274 } 270 }
271
272 beiscsi_mccq_compl(phba, tag, NULL, nonemb_cmd.va);
275 pci_free_consistent(phba->ctrl.pdev, nonemb_cmd.size, 273 pci_free_consistent(phba->ctrl.pdev, nonemb_cmd.size,
276 nonemb_cmd.va, nonemb_cmd.dma); 274 nonemb_cmd.va, nonemb_cmd.dma);
277 return iscsi_eh_abort(sc); 275 return iscsi_eh_abort(sc);
@@ -342,11 +340,9 @@ static int beiscsi_eh_device_reset(struct scsi_cmnd *sc)
342 pci_free_consistent(phba->ctrl.pdev, nonemb_cmd.size, 340 pci_free_consistent(phba->ctrl.pdev, nonemb_cmd.size,
343 nonemb_cmd.va, nonemb_cmd.dma); 341 nonemb_cmd.va, nonemb_cmd.dma);
344 return FAILED; 342 return FAILED;
345 } else {
346 wait_event_interruptible(phba->ctrl.mcc_wait[tag],
347 phba->ctrl.mcc_numtag[tag]);
348 free_mcc_tag(&phba->ctrl, tag);
349 } 343 }
344
345 beiscsi_mccq_compl(phba, tag, NULL, nonemb_cmd.va);
350 pci_free_consistent(phba->ctrl.pdev, nonemb_cmd.size, 346 pci_free_consistent(phba->ctrl.pdev, nonemb_cmd.size,
351 nonemb_cmd.va, nonemb_cmd.dma); 347 nonemb_cmd.va, nonemb_cmd.dma);
352 return iscsi_eh_device_reset(sc); 348 return iscsi_eh_device_reset(sc);
@@ -3871,12 +3867,9 @@ static void hwi_disable_intr(struct beiscsi_hba *phba)
3871static int beiscsi_get_boot_info(struct beiscsi_hba *phba) 3867static int beiscsi_get_boot_info(struct beiscsi_hba *phba)
3872{ 3868{
3873 struct be_cmd_get_session_resp *session_resp; 3869 struct be_cmd_get_session_resp *session_resp;
3874 struct be_mcc_wrb *wrb;
3875 struct be_dma_mem nonemb_cmd; 3870 struct be_dma_mem nonemb_cmd;
3876 unsigned int tag, wrb_num; 3871 unsigned int tag;
3877 unsigned short status, extd_status;
3878 unsigned int s_handle; 3872 unsigned int s_handle;
3879 struct be_queue_info *mccq = &phba->ctrl.mcc_obj.q;
3880 int ret = -ENOMEM; 3873 int ret = -ENOMEM;
3881 3874
3882 /* Get the session handle of the boot target */ 3875 /* Get the session handle of the boot target */
@@ -3909,25 +3902,16 @@ static int beiscsi_get_boot_info(struct beiscsi_hba *phba)
3909 " Failed\n"); 3902 " Failed\n");
3910 3903
3911 goto boot_freemem; 3904 goto boot_freemem;
3912 } else 3905 }
3913 wait_event_interruptible(phba->ctrl.mcc_wait[tag],
3914 phba->ctrl.mcc_numtag[tag]);
3915 3906
3916 wrb_num = (phba->ctrl.mcc_numtag[tag] & 0x00FF0000) >> 16; 3907 ret = beiscsi_mccq_compl(phba, tag, NULL, nonemb_cmd.va);
3917 extd_status = (phba->ctrl.mcc_numtag[tag] & 0x0000FF00) >> 8; 3908 if (ret) {
3918 status = phba->ctrl.mcc_numtag[tag] & 0x000000FF;
3919 if (status || extd_status) {
3920 beiscsi_log(phba, KERN_ERR, 3909 beiscsi_log(phba, KERN_ERR,
3921 BEISCSI_LOG_INIT | BEISCSI_LOG_CONFIG, 3910 BEISCSI_LOG_INIT | BEISCSI_LOG_CONFIG,
3922 "BM_%d : beiscsi_get_session_info Failed" 3911 "BM_%d : beiscsi_get_session_info Failed");
3923 " status = %d extd_status = %d\n",
3924 status, extd_status);
3925
3926 free_mcc_tag(&phba->ctrl, tag);
3927 goto boot_freemem; 3912 goto boot_freemem;
3928 } 3913 }
3929 wrb = queue_get_wrb(mccq, wrb_num); 3914
3930 free_mcc_tag(&phba->ctrl, tag);
3931 session_resp = nonemb_cmd.va ; 3915 session_resp = nonemb_cmd.va ;
3932 3916
3933 memcpy(&phba->boot_sess, &session_resp->session_info, 3917 memcpy(&phba->boot_sess, &session_resp->session_info,
@@ -4643,9 +4627,13 @@ static int beiscsi_bsg_request(struct bsg_job *job)
4643 pci_free_consistent(phba->ctrl.pdev, nonemb_cmd.size, 4627 pci_free_consistent(phba->ctrl.pdev, nonemb_cmd.size,
4644 nonemb_cmd.va, nonemb_cmd.dma); 4628 nonemb_cmd.va, nonemb_cmd.dma);
4645 return -EAGAIN; 4629 return -EAGAIN;
4646 } else 4630 }
4647 wait_event_interruptible(phba->ctrl.mcc_wait[tag], 4631
4648 phba->ctrl.mcc_numtag[tag]); 4632 rc = wait_event_interruptible_timeout(
4633 phba->ctrl.mcc_wait[tag],
4634 phba->ctrl.mcc_numtag[tag],
4635 msecs_to_jiffies(
4636 BEISCSI_HOST_MBX_TIMEOUT));
4649 extd_status = (phba->ctrl.mcc_numtag[tag] & 0x0000FF00) >> 8; 4637 extd_status = (phba->ctrl.mcc_numtag[tag] & 0x0000FF00) >> 8;
4650 status = phba->ctrl.mcc_numtag[tag] & 0x000000FF; 4638 status = phba->ctrl.mcc_numtag[tag] & 0x000000FF;
4651 free_mcc_tag(&phba->ctrl, tag); 4639 free_mcc_tag(&phba->ctrl, tag);
@@ -4807,6 +4795,9 @@ static int __devinit beiscsi_dev_probe(struct pci_dev *pcidev,
4807 /* Initialize Driver configuration Paramters */ 4795 /* Initialize Driver configuration Paramters */
4808 beiscsi_hba_attrs_init(phba); 4796 beiscsi_hba_attrs_init(phba);
4809 4797
4798 phba->fw_timeout = false;
4799
4800
4810 switch (pcidev->device) { 4801 switch (pcidev->device) {
4811 case BE_DEVICE_ID1: 4802 case BE_DEVICE_ID1:
4812 case OC_DEVICE_ID1: 4803 case OC_DEVICE_ID1: