aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla4xxx/ql4_isr.c
diff options
context:
space:
mode:
authorNilesh Javali <nilesh.javali@qlogic.com>2013-08-16 07:03:03 -0400
committerJames Bottomley <JBottomley@Parallels.com>2013-09-03 10:27:54 -0400
commit7ab284c9fb8b2e9d6e8e16ebde9c1b015ba607cb (patch)
tree246cdec652b9e3e1034b6c238790a4d02c4ee8d1 /drivers/scsi/qla4xxx/ql4_isr.c
parentb37ca4183c287448ad0096381d030ca5fc788059 (diff)
[SCSI] qla4xxx: Implementation of ACB configuration during Loopback for ISP8042
While loopback diagnostic is in progress, disable the ACB which resets all the active connections to target. Disable ACB would filter out all the DHCP multicast and broadcast packets which otherwise cause the diagnostic test to take longer time to complete or failures in some other cases. Signed-off-by: Nilesh Javali <nilesh.javali@qlogic.com> Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/qla4xxx/ql4_isr.c')
-rw-r--r--drivers/scsi/qla4xxx/ql4_isr.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/drivers/scsi/qla4xxx/ql4_isr.c b/drivers/scsi/qla4xxx/ql4_isr.c
index fbd415db5a52..4fefa3429a5f 100644
--- a/drivers/scsi/qla4xxx/ql4_isr.c
+++ b/drivers/scsi/qla4xxx/ql4_isr.c
@@ -745,17 +745,23 @@ static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha,
745 * mbox_sts[3] = new ACB state */ 745 * mbox_sts[3] = new ACB state */
746 if ((mbox_sts[3] == ACB_STATE_VALID) && 746 if ((mbox_sts[3] == ACB_STATE_VALID) &&
747 ((mbox_sts[2] == ACB_STATE_TENTATIVE) || 747 ((mbox_sts[2] == ACB_STATE_TENTATIVE) ||
748 (mbox_sts[2] == ACB_STATE_ACQUIRING))) 748 (mbox_sts[2] == ACB_STATE_ACQUIRING))) {
749 set_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags); 749 set_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags);
750 else if ((mbox_sts[3] == ACB_STATE_ACQUIRING) && 750 } else if ((mbox_sts[3] == ACB_STATE_ACQUIRING) &&
751 (mbox_sts[2] == ACB_STATE_VALID)) { 751 (mbox_sts[2] == ACB_STATE_VALID)) {
752 if (is_qla80XX(ha)) 752 if (is_qla80XX(ha))
753 set_bit(DPC_RESET_HA_FW_CONTEXT, 753 set_bit(DPC_RESET_HA_FW_CONTEXT,
754 &ha->dpc_flags); 754 &ha->dpc_flags);
755 else 755 else
756 set_bit(DPC_RESET_HA, &ha->dpc_flags); 756 set_bit(DPC_RESET_HA, &ha->dpc_flags);
757 } else if ((mbox_sts[3] == ACB_STATE_UNCONFIGURED)) 757 } else if (mbox_sts[3] == ACB_STATE_DISABLING) {
758 ql4_printk(KERN_INFO, ha, "scsi%ld: %s: ACB in disabling state\n",
759 ha->host_no, __func__);
760 } else if ((mbox_sts[3] == ACB_STATE_UNCONFIGURED)) {
758 complete(&ha->disable_acb_comp); 761 complete(&ha->disable_acb_comp);
762 ql4_printk(KERN_INFO, ha, "scsi%ld: %s: ACB state unconfigured\n",
763 ha->host_no, __func__);
764 }
759 break; 765 break;
760 766
761 case MBOX_ASTS_MAC_ADDRESS_CHANGED: 767 case MBOX_ASTS_MAC_ADDRESS_CHANGED:
@@ -869,10 +875,15 @@ static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha,
869 "scsi:%ld: AEN %04x IDC Complete notification\n", 875 "scsi:%ld: AEN %04x IDC Complete notification\n",
870 ha->host_no, mbox_sts[0])); 876 ha->host_no, mbox_sts[0]));
871 877
872 if (qla4_83xx_loopback_in_progress(ha)) 878 if (qla4_83xx_loopback_in_progress(ha)) {
873 set_bit(AF_LOOPBACK, &ha->flags); 879 set_bit(AF_LOOPBACK, &ha->flags);
874 else 880 } else {
875 clear_bit(AF_LOOPBACK, &ha->flags); 881 clear_bit(AF_LOOPBACK, &ha->flags);
882 if (ha->saved_acb)
883 set_bit(DPC_RESTORE_ACB,
884 &ha->dpc_flags);
885 }
886 qla4xxx_wake_dpc(ha);
876 } 887 }
877 break; 888 break;
878 889
@@ -887,6 +898,17 @@ static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha,
887 ha->host_no, mbox_sts[0])); 898 ha->host_no, mbox_sts[0]));
888 break; 899 break;
889 900
901 case MBOX_ASTS_IDC_TIME_EXTEND_NOTIFICATION:
902 DEBUG2(ql4_printk(KERN_INFO, ha,
903 "scsi%ld: AEN %04x, mbox_sts[1]=%08x, mbox_sts[2]=%08x, mbox_sts[3]=%08x, mbox_sts[4]=%08x mbox_sts[5]=%08x\n",
904 ha->host_no, mbox_sts[0], mbox_sts[1],
905 mbox_sts[2], mbox_sts[3], mbox_sts[4],
906 mbox_sts[5]));
907 DEBUG2(ql4_printk(KERN_INFO, ha,
908 "scsi%ld: AEN %04x Received IDC Extend Timeout notification\n",
909 ha->host_no, mbox_sts[0]));
910 break;
911
890 case MBOX_ASTS_INITIALIZATION_FAILED: 912 case MBOX_ASTS_INITIALIZATION_FAILED:
891 DEBUG2(ql4_printk(KERN_INFO, ha, 913 DEBUG2(ql4_printk(KERN_INFO, ha,
892 "scsi%ld: AEN %04x, mbox_sts[3]=%08x\n", 914 "scsi%ld: AEN %04x, mbox_sts[3]=%08x\n",