diff options
Diffstat (limited to 'drivers/scsi/bfa/bfa_core.c')
-rw-r--r-- | drivers/scsi/bfa/bfa_core.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/drivers/scsi/bfa/bfa_core.c b/drivers/scsi/bfa/bfa_core.c index 4c9e83803cb6..0dbdd2da5b48 100644 --- a/drivers/scsi/bfa/bfa_core.c +++ b/drivers/scsi/bfa/bfa_core.c | |||
@@ -248,7 +248,7 @@ bfa_intx(struct bfa_s *bfa) | |||
248 | writel(qintr, bfa->iocfc.bfa_regs.intr_status); | 248 | writel(qintr, bfa->iocfc.bfa_regs.intr_status); |
249 | 249 | ||
250 | for (queue = 0; queue < BFI_IOC_MAX_CQS_ASIC; queue++) { | 250 | for (queue = 0; queue < BFI_IOC_MAX_CQS_ASIC; queue++) { |
251 | if (intr & (__HFN_INT_RME_Q0 << queue)) | 251 | if ((intr & (__HFN_INT_RME_Q0 << queue)) && bfa->queue_process) |
252 | bfa_isr_rspq(bfa, queue & (BFI_IOC_MAX_CQS - 1)); | 252 | bfa_isr_rspq(bfa, queue & (BFI_IOC_MAX_CQS - 1)); |
253 | } | 253 | } |
254 | intr &= ~qintr; | 254 | intr &= ~qintr; |
@@ -262,7 +262,7 @@ bfa_intx(struct bfa_s *bfa) | |||
262 | writel(qintr, bfa->iocfc.bfa_regs.intr_status); | 262 | writel(qintr, bfa->iocfc.bfa_regs.intr_status); |
263 | 263 | ||
264 | for (queue = 0; queue < BFI_IOC_MAX_CQS_ASIC; queue++) { | 264 | for (queue = 0; queue < BFI_IOC_MAX_CQS_ASIC; queue++) { |
265 | if (intr & (__HFN_INT_CPE_Q0 << queue)) | 265 | if ((intr & (__HFN_INT_CPE_Q0 << queue)) && bfa->queue_process) |
266 | bfa_isr_reqq(bfa, queue & (BFI_IOC_MAX_CQS - 1)); | 266 | bfa_isr_reqq(bfa, queue & (BFI_IOC_MAX_CQS - 1)); |
267 | } | 267 | } |
268 | intr &= ~qintr; | 268 | intr &= ~qintr; |
@@ -282,7 +282,7 @@ bfa_isr_enable(struct bfa_s *bfa) | |||
282 | 282 | ||
283 | bfa_trc(bfa, pci_func); | 283 | bfa_trc(bfa, pci_func); |
284 | 284 | ||
285 | bfa_msix_install(bfa); | 285 | bfa_msix_ctrl_install(bfa); |
286 | 286 | ||
287 | if (bfa_asic_id_ct2(bfa->ioc.pcidev.device_id)) { | 287 | if (bfa_asic_id_ct2(bfa->ioc.pcidev.device_id)) { |
288 | umsk = __HFN_INT_ERR_MASK_CT2; | 288 | umsk = __HFN_INT_ERR_MASK_CT2; |
@@ -326,9 +326,6 @@ bfa_isr_unhandled(struct bfa_s *bfa, struct bfi_msg_s *m) | |||
326 | void | 326 | void |
327 | bfa_msix_rspq(struct bfa_s *bfa, int vec) | 327 | bfa_msix_rspq(struct bfa_s *bfa, int vec) |
328 | { | 328 | { |
329 | if (!bfa->rme_process) | ||
330 | return; | ||
331 | |||
332 | bfa_isr_rspq(bfa, vec - bfa->iocfc.hwif.rme_vec_q0); | 329 | bfa_isr_rspq(bfa, vec - bfa->iocfc.hwif.rme_vec_q0); |
333 | } | 330 | } |
334 | 331 | ||
@@ -512,7 +509,8 @@ bfa_iocfc_init_mem(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg, | |||
512 | iocfc->hwif.hw_reqq_ack = bfa_hwct_reqq_ack; | 509 | iocfc->hwif.hw_reqq_ack = bfa_hwct_reqq_ack; |
513 | iocfc->hwif.hw_rspq_ack = bfa_hwct_rspq_ack; | 510 | iocfc->hwif.hw_rspq_ack = bfa_hwct_rspq_ack; |
514 | iocfc->hwif.hw_msix_init = bfa_hwct_msix_init; | 511 | iocfc->hwif.hw_msix_init = bfa_hwct_msix_init; |
515 | iocfc->hwif.hw_msix_install = bfa_hwct_msix_install; | 512 | iocfc->hwif.hw_msix_ctrl_install = bfa_hwct_msix_ctrl_install; |
513 | iocfc->hwif.hw_msix_queue_install = bfa_hwct_msix_queue_install; | ||
516 | iocfc->hwif.hw_msix_uninstall = bfa_hwct_msix_uninstall; | 514 | iocfc->hwif.hw_msix_uninstall = bfa_hwct_msix_uninstall; |
517 | iocfc->hwif.hw_isr_mode_set = bfa_hwct_isr_mode_set; | 515 | iocfc->hwif.hw_isr_mode_set = bfa_hwct_isr_mode_set; |
518 | iocfc->hwif.hw_msix_getvecs = bfa_hwct_msix_getvecs; | 516 | iocfc->hwif.hw_msix_getvecs = bfa_hwct_msix_getvecs; |
@@ -524,7 +522,8 @@ bfa_iocfc_init_mem(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg, | |||
524 | iocfc->hwif.hw_reqq_ack = bfa_hwcb_reqq_ack; | 522 | iocfc->hwif.hw_reqq_ack = bfa_hwcb_reqq_ack; |
525 | iocfc->hwif.hw_rspq_ack = bfa_hwcb_rspq_ack; | 523 | iocfc->hwif.hw_rspq_ack = bfa_hwcb_rspq_ack; |
526 | iocfc->hwif.hw_msix_init = bfa_hwcb_msix_init; | 524 | iocfc->hwif.hw_msix_init = bfa_hwcb_msix_init; |
527 | iocfc->hwif.hw_msix_install = bfa_hwcb_msix_install; | 525 | iocfc->hwif.hw_msix_ctrl_install = bfa_hwcb_msix_ctrl_install; |
526 | iocfc->hwif.hw_msix_queue_install = bfa_hwcb_msix_queue_install; | ||
528 | iocfc->hwif.hw_msix_uninstall = bfa_hwcb_msix_uninstall; | 527 | iocfc->hwif.hw_msix_uninstall = bfa_hwcb_msix_uninstall; |
529 | iocfc->hwif.hw_isr_mode_set = bfa_hwcb_isr_mode_set; | 528 | iocfc->hwif.hw_isr_mode_set = bfa_hwcb_isr_mode_set; |
530 | iocfc->hwif.hw_msix_getvecs = bfa_hwcb_msix_getvecs; | 529 | iocfc->hwif.hw_msix_getvecs = bfa_hwcb_msix_getvecs; |
@@ -640,7 +639,7 @@ bfa_iocfc_start_submod(struct bfa_s *bfa) | |||
640 | { | 639 | { |
641 | int i; | 640 | int i; |
642 | 641 | ||
643 | bfa->rme_process = BFA_TRUE; | 642 | bfa->queue_process = BFA_TRUE; |
644 | for (i = 0; i < BFI_IOC_MAX_CQS; i++) | 643 | for (i = 0; i < BFI_IOC_MAX_CQS; i++) |
645 | bfa->iocfc.hwif.hw_rspq_ack(bfa, i); | 644 | bfa->iocfc.hwif.hw_rspq_ack(bfa, i); |
646 | 645 | ||
@@ -743,6 +742,11 @@ bfa_iocfc_cfgrsp(struct bfa_s *bfa) | |||
743 | bfa_iocfc_qreg(bfa, &cfgrsp->qreg); | 742 | bfa_iocfc_qreg(bfa, &cfgrsp->qreg); |
744 | 743 | ||
745 | /* | 744 | /* |
745 | * Install MSIX queue handlers | ||
746 | */ | ||
747 | bfa_msix_queue_install(bfa); | ||
748 | |||
749 | /* | ||
746 | * Configuration is complete - initialize/start submodules | 750 | * Configuration is complete - initialize/start submodules |
747 | */ | 751 | */ |
748 | bfa_fcport_init(bfa); | 752 | bfa_fcport_init(bfa); |
@@ -813,7 +817,7 @@ bfa_iocfc_hbfail_cbfn(void *bfa_arg) | |||
813 | { | 817 | { |
814 | struct bfa_s *bfa = bfa_arg; | 818 | struct bfa_s *bfa = bfa_arg; |
815 | 819 | ||
816 | bfa->rme_process = BFA_FALSE; | 820 | bfa->queue_process = BFA_FALSE; |
817 | 821 | ||
818 | bfa_isr_disable(bfa); | 822 | bfa_isr_disable(bfa); |
819 | bfa_iocfc_disable_submod(bfa); | 823 | bfa_iocfc_disable_submod(bfa); |
@@ -917,7 +921,7 @@ bfa_iocfc_stop(struct bfa_s *bfa) | |||
917 | { | 921 | { |
918 | bfa->iocfc.action = BFA_IOCFC_ACT_STOP; | 922 | bfa->iocfc.action = BFA_IOCFC_ACT_STOP; |
919 | 923 | ||
920 | bfa->rme_process = BFA_FALSE; | 924 | bfa->queue_process = BFA_FALSE; |
921 | bfa_ioc_disable(&bfa->ioc); | 925 | bfa_ioc_disable(&bfa->ioc); |
922 | } | 926 | } |
923 | 927 | ||
@@ -1017,7 +1021,7 @@ bfa_iocfc_disable(struct bfa_s *bfa) | |||
1017 | "IOC Disable"); | 1021 | "IOC Disable"); |
1018 | bfa->iocfc.action = BFA_IOCFC_ACT_DISABLE; | 1022 | bfa->iocfc.action = BFA_IOCFC_ACT_DISABLE; |
1019 | 1023 | ||
1020 | bfa->rme_process = BFA_FALSE; | 1024 | bfa->queue_process = BFA_FALSE; |
1021 | bfa_ioc_disable(&bfa->ioc); | 1025 | bfa_ioc_disable(&bfa->ioc); |
1022 | } | 1026 | } |
1023 | 1027 | ||