|
@@ -768,42 +768,16 @@ qla2x00_alloc_fw_dump(scsi_qla_host_t *ha)
|
|
mem_size = (ha->fw_memory_size - 0x100000 + 1) *
|
|
mem_size = (ha->fw_memory_size - 0x100000 + 1) *
|
|
sizeof(uint32_t);
|
|
sizeof(uint32_t);
|
|
|
|
|
|
- /* Allocate memory for Extended Trace Buffer. */
|
|
|
|
- tc = dma_alloc_coherent(&ha->pdev->dev, EFT_SIZE, &tc_dma,
|
|
|
|
- GFP_KERNEL);
|
|
|
|
- if (!tc) {
|
|
|
|
- qla_printk(KERN_WARNING, ha, "Unable to allocate "
|
|
|
|
- "(%d KB) for EFT.\n", EFT_SIZE / 1024);
|
|
|
|
- goto cont_alloc;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- memset(tc, 0, EFT_SIZE);
|
|
|
|
- rval = qla2x00_enable_eft_trace(ha, tc_dma, EFT_NUM_BUFFERS);
|
|
|
|
- if (rval) {
|
|
|
|
- qla_printk(KERN_WARNING, ha, "Unable to initialize "
|
|
|
|
- "EFT (%d).\n", rval);
|
|
|
|
- dma_free_coherent(&ha->pdev->dev, EFT_SIZE, tc,
|
|
|
|
- tc_dma);
|
|
|
|
- goto cont_alloc;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- qla_printk(KERN_INFO, ha, "Allocated (%d KB) for EFT...\n",
|
|
|
|
- EFT_SIZE / 1024);
|
|
|
|
-
|
|
|
|
- eft_size = EFT_SIZE;
|
|
|
|
- ha->eft_dma = tc_dma;
|
|
|
|
- ha->eft = tc;
|
|
|
|
-
|
|
|
|
/* Allocate memory for Fibre Channel Event Buffer. */
|
|
/* Allocate memory for Fibre Channel Event Buffer. */
|
|
if (!IS_QLA25XX(ha))
|
|
if (!IS_QLA25XX(ha))
|
|
- goto cont_alloc;
|
|
|
|
|
|
+ goto try_eft;
|
|
|
|
|
|
tc = dma_alloc_coherent(&ha->pdev->dev, FCE_SIZE, &tc_dma,
|
|
tc = dma_alloc_coherent(&ha->pdev->dev, FCE_SIZE, &tc_dma,
|
|
GFP_KERNEL);
|
|
GFP_KERNEL);
|
|
if (!tc) {
|
|
if (!tc) {
|
|
qla_printk(KERN_WARNING, ha, "Unable to allocate "
|
|
qla_printk(KERN_WARNING, ha, "Unable to allocate "
|
|
"(%d KB) for FCE.\n", FCE_SIZE / 1024);
|
|
"(%d KB) for FCE.\n", FCE_SIZE / 1024);
|
|
- goto cont_alloc;
|
|
|
|
|
|
+ goto try_eft;
|
|
}
|
|
}
|
|
|
|
|
|
memset(tc, 0, FCE_SIZE);
|
|
memset(tc, 0, FCE_SIZE);
|
|
@@ -815,7 +789,7 @@ qla2x00_alloc_fw_dump(scsi_qla_host_t *ha)
|
|
dma_free_coherent(&ha->pdev->dev, FCE_SIZE, tc,
|
|
dma_free_coherent(&ha->pdev->dev, FCE_SIZE, tc,
|
|
tc_dma);
|
|
tc_dma);
|
|
ha->flags.fce_enabled = 0;
|
|
ha->flags.fce_enabled = 0;
|
|
- goto cont_alloc;
|
|
|
|
|
|
+ goto try_eft;
|
|
}
|
|
}
|
|
|
|
|
|
qla_printk(KERN_INFO, ha, "Allocated (%d KB) for FCE...\n",
|
|
qla_printk(KERN_INFO, ha, "Allocated (%d KB) for FCE...\n",
|
|
@@ -825,6 +799,32 @@ qla2x00_alloc_fw_dump(scsi_qla_host_t *ha)
|
|
ha->flags.fce_enabled = 1;
|
|
ha->flags.fce_enabled = 1;
|
|
ha->fce_dma = tc_dma;
|
|
ha->fce_dma = tc_dma;
|
|
ha->fce = tc;
|
|
ha->fce = tc;
|
|
|
|
+try_eft:
|
|
|
|
+ /* Allocate memory for Extended Trace Buffer. */
|
|
|
|
+ tc = dma_alloc_coherent(&ha->pdev->dev, EFT_SIZE, &tc_dma,
|
|
|
|
+ GFP_KERNEL);
|
|
|
|
+ if (!tc) {
|
|
|
|
+ qla_printk(KERN_WARNING, ha, "Unable to allocate "
|
|
|
|
+ "(%d KB) for EFT.\n", EFT_SIZE / 1024);
|
|
|
|
+ goto cont_alloc;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ memset(tc, 0, EFT_SIZE);
|
|
|
|
+ rval = qla2x00_enable_eft_trace(ha, tc_dma, EFT_NUM_BUFFERS);
|
|
|
|
+ if (rval) {
|
|
|
|
+ qla_printk(KERN_WARNING, ha, "Unable to initialize "
|
|
|
|
+ "EFT (%d).\n", rval);
|
|
|
|
+ dma_free_coherent(&ha->pdev->dev, EFT_SIZE, tc,
|
|
|
|
+ tc_dma);
|
|
|
|
+ goto cont_alloc;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ qla_printk(KERN_INFO, ha, "Allocated (%d KB) for EFT...\n",
|
|
|
|
+ EFT_SIZE / 1024);
|
|
|
|
+
|
|
|
|
+ eft_size = EFT_SIZE;
|
|
|
|
+ ha->eft_dma = tc_dma;
|
|
|
|
+ ha->eft = tc;
|
|
}
|
|
}
|
|
cont_alloc:
|
|
cont_alloc:
|
|
req_q_size = ha->request_q_length * sizeof(request_t);
|
|
req_q_size = ha->request_q_length * sizeof(request_t);
|
|
@@ -3286,17 +3286,6 @@ qla2x00_abort_isp(scsi_qla_host_t *ha)
|
|
ha->isp_abort_cnt = 0;
|
|
ha->isp_abort_cnt = 0;
|
|
clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
|
|
clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
|
|
|
|
|
|
- if (ha->eft) {
|
|
|
|
- memset(ha->eft, 0, EFT_SIZE);
|
|
|
|
- rval = qla2x00_enable_eft_trace(ha,
|
|
|
|
- ha->eft_dma, EFT_NUM_BUFFERS);
|
|
|
|
- if (rval) {
|
|
|
|
- qla_printk(KERN_WARNING, ha,
|
|
|
|
- "Unable to reinitialize EFT "
|
|
|
|
- "(%d).\n", rval);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (ha->fce) {
|
|
if (ha->fce) {
|
|
ha->flags.fce_enabled = 1;
|
|
ha->flags.fce_enabled = 1;
|
|
memset(ha->fce, 0,
|
|
memset(ha->fce, 0,
|
|
@@ -3311,6 +3300,17 @@ qla2x00_abort_isp(scsi_qla_host_t *ha)
|
|
ha->flags.fce_enabled = 0;
|
|
ha->flags.fce_enabled = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (ha->eft) {
|
|
|
|
+ memset(ha->eft, 0, EFT_SIZE);
|
|
|
|
+ rval = qla2x00_enable_eft_trace(ha,
|
|
|
|
+ ha->eft_dma, EFT_NUM_BUFFERS);
|
|
|
|
+ if (rval) {
|
|
|
|
+ qla_printk(KERN_WARNING, ha,
|
|
|
|
+ "Unable to reinitialize EFT "
|
|
|
|
+ "(%d).\n", rval);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
} else { /* failed the ISP abort */
|
|
} else { /* failed the ISP abort */
|
|
ha->flags.online = 1;
|
|
ha->flags.online = 1;
|
|
if (test_bit(ISP_ABORT_RETRY, &ha->dpc_flags)) {
|
|
if (test_bit(ISP_ABORT_RETRY, &ha->dpc_flags)) {
|