diff options
Diffstat (limited to 'drivers/scsi/be2iscsi/be_main.c')
-rw-r--r-- | drivers/scsi/be2iscsi/be_main.c | 49 |
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) | |||
3871 | static int beiscsi_get_boot_info(struct beiscsi_hba *phba) | 3867 | static 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: |