diff options
author | Arun Easi <arun.easi@qlogic.com> | 2011-08-16 14:29:23 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2011-08-27 10:13:52 -0400 |
commit | e02587d777bfb398f70709fd3a92fa0154959003 (patch) | |
tree | 41f590c4cce0d636c70ab265ea7313abed833f6c /drivers/scsi | |
parent | 8cb2049c744809193ed3707a37c09676a24599ee (diff) |
[SCSI] qla2xxx: T10 DIF - Fix incorrect error reporting.
This fix:
- Disables app tag peeking; correct tag check will be added when the
SCSI API is available.
- Always derive ref_tag from scsi_get_lba()
- Removes incorrect swap of FCP_LUN in FCP_CMND
- Moves app-tag error check before ref-tag check. The reason being,
currently there is no interface in SCSI to retrieve the app-tag
for protection I/Os, so driver puts zero for app-tag in the
firmware interface, but requests not to validate it, but when a
ref-tag error is detected by firmware, it would put
expected/actual tags for all the protection tags (guard/app/ref).
As driver checks for app tag error first, a ref-tag error is
incorrectly flagged as app-tag error.
- Convert HBA specific checks to capability based.
Signed-off-by: Arun Easi <arun.easi@qlogic.com>
Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_attr.c | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_dbg.c | 36 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_def.h | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_inline.h | 12 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_iocb.c | 55 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 13 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mid.c | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 4 |
8 files changed, 62 insertions, 64 deletions
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 810067099801..a31e05f3bfd4 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c | |||
@@ -1786,7 +1786,7 @@ qla24xx_vport_create(struct fc_vport *fc_vport, bool disable) | |||
1786 | fc_vport_set_state(fc_vport, FC_VPORT_LINKDOWN); | 1786 | fc_vport_set_state(fc_vport, FC_VPORT_LINKDOWN); |
1787 | } | 1787 | } |
1788 | 1788 | ||
1789 | if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && ql2xenabledif) { | 1789 | if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif) { |
1790 | if (ha->fw_attributes & BIT_4) { | 1790 | if (ha->fw_attributes & BIT_4) { |
1791 | int prot = 0; | 1791 | int prot = 0; |
1792 | vha->flags.difdix_supported = 1; | 1792 | vha->flags.difdix_supported = 1; |
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 2155071f3100..d79cd8a5f831 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c | |||
@@ -8,24 +8,24 @@ | |||
8 | /* | 8 | /* |
9 | * Table for showing the current message id in use for particular level | 9 | * Table for showing the current message id in use for particular level |
10 | * Change this table for addition of log/debug messages. | 10 | * Change this table for addition of log/debug messages. |
11 | * ----------------------------------------------------- | 11 | * ---------------------------------------------------------------------- |
12 | * | Level | Last Value Used | | 12 | * | Level | Last Value Used | Holes | |
13 | * ----------------------------------------------------- | 13 | * ---------------------------------------------------------------------- |
14 | * | Module Init and Probe | 0x0116 | | 14 | * | Module Init and Probe | 0x0116 | | |
15 | * | Mailbox commands | 0x111e | | 15 | * | Mailbox commands | 0x1126 | | |
16 | * | Device Discovery | 0x2083 | | 16 | * | Device Discovery | 0x2083 | | |
17 | * | Queue Command and IO tracing | 0x302e | | 17 | * | Queue Command and IO tracing | 0x302e | 0x3008 | |
18 | * | DPC Thread | 0x401c | | 18 | * | DPC Thread | 0x401c | | |
19 | * | Async Events | 0x5059 | | 19 | * | Async Events | 0x5059 | | |
20 | * | Timer Routines | 0x600d | | 20 | * | Timer Routines | 0x600d | | |
21 | * | User Space Interactions | 0x709c | | 21 | * | User Space Interactions | 0x709d | | |
22 | * | Task Management | 0x8043 | | 22 | * | Task Management | 0x8041 | | |
23 | * | AER/EEH | 0x900f | | 23 | * | AER/EEH | 0x900f | | |
24 | * | Virtual Port | 0xa007 | | 24 | * | Virtual Port | 0xa007 | | |
25 | * | ISP82XX Specific | 0xb027 | | 25 | * | ISP82XX Specific | 0xb04f | | |
26 | * | MultiQ | 0xc00b | | 26 | * | MultiQ | 0xc00b | | |
27 | * | Misc | 0xd00b | | 27 | * | Misc | 0xd00b | | |
28 | * ----------------------------------------------------- | 28 | * ---------------------------------------------------------------------- |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include "qla_def.h" | 31 | #include "qla_def.h" |
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index cc5a79259d33..a03eaf40f377 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
@@ -2529,6 +2529,7 @@ struct qla_hw_data { | |||
2529 | #define DT_ISP8021 BIT_14 | 2529 | #define DT_ISP8021 BIT_14 |
2530 | #define DT_ISP_LAST (DT_ISP8021 << 1) | 2530 | #define DT_ISP_LAST (DT_ISP8021 << 1) |
2531 | 2531 | ||
2532 | #define DT_T10_PI BIT_25 | ||
2532 | #define DT_IIDMA BIT_26 | 2533 | #define DT_IIDMA BIT_26 |
2533 | #define DT_FWI2 BIT_27 | 2534 | #define DT_FWI2 BIT_27 |
2534 | #define DT_ZIO_SUPPORTED BIT_28 | 2535 | #define DT_ZIO_SUPPORTED BIT_28 |
@@ -2572,6 +2573,7 @@ struct qla_hw_data { | |||
2572 | #define IS_NOCACHE_VPD_TYPE(ha) (IS_QLA81XX(ha)) | 2573 | #define IS_NOCACHE_VPD_TYPE(ha) (IS_QLA81XX(ha)) |
2573 | #define IS_ALOGIO_CAPABLE(ha) (IS_QLA23XX(ha) || IS_FWI2_CAPABLE(ha)) | 2574 | #define IS_ALOGIO_CAPABLE(ha) (IS_QLA23XX(ha) || IS_FWI2_CAPABLE(ha)) |
2574 | 2575 | ||
2576 | #define IS_T10_PI_CAPABLE(ha) ((ha)->device_type & DT_T10_PI) | ||
2575 | #define IS_IIDMA_CAPABLE(ha) ((ha)->device_type & DT_IIDMA) | 2577 | #define IS_IIDMA_CAPABLE(ha) ((ha)->device_type & DT_IIDMA) |
2576 | #define IS_FWI2_CAPABLE(ha) ((ha)->device_type & DT_FWI2) | 2578 | #define IS_FWI2_CAPABLE(ha) ((ha)->device_type & DT_FWI2) |
2577 | #define IS_ZIO_SUPPORTED(ha) ((ha)->device_type & DT_ZIO_SUPPORTED) | 2579 | #define IS_ZIO_SUPPORTED(ha) ((ha)->device_type & DT_ZIO_SUPPORTED) |
diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h index c06e5f9b431e..9902834e0b74 100644 --- a/drivers/scsi/qla2xxx/qla_inline.h +++ b/drivers/scsi/qla2xxx/qla_inline.h | |||
@@ -104,9 +104,17 @@ qla2x00_set_fcport_state(fc_port_t *fcport, int state) | |||
104 | } | 104 | } |
105 | 105 | ||
106 | static inline int | 106 | static inline int |
107 | qla2x00_hba_err_chk_enabled(unsigned char op) | 107 | qla2x00_hba_err_chk_enabled(srb_t *sp) |
108 | { | 108 | { |
109 | switch (op) { | 109 | /* |
110 | * Uncomment when corresponding SCSI changes are done. | ||
111 | * | ||
112 | if (!sp->cmd->prot_chk) | ||
113 | return 0; | ||
114 | * | ||
115 | */ | ||
116 | |||
117 | switch (scsi_get_prot_op(sp->cmd)) { | ||
110 | case SCSI_PROT_READ_STRIP: | 118 | case SCSI_PROT_READ_STRIP: |
111 | case SCSI_PROT_WRITE_INSERT: | 119 | case SCSI_PROT_WRITE_INSERT: |
112 | if (ql2xenablehba_err_chk >= 1) | 120 | if (ql2xenablehba_err_chk >= 1) |
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index 09ad3ce60064..dbec89622a0f 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c | |||
@@ -709,12 +709,11 @@ struct fw_dif_context { | |||
709 | * | 709 | * |
710 | */ | 710 | */ |
711 | static inline void | 711 | static inline void |
712 | qla24xx_set_t10dif_tags(struct scsi_cmnd *cmd, struct fw_dif_context *pkt, | 712 | qla24xx_set_t10dif_tags(srb_t *sp, struct fw_dif_context *pkt, |
713 | unsigned int protcnt) | 713 | unsigned int protcnt) |
714 | { | 714 | { |
715 | struct sd_dif_tuple *spt; | 715 | struct scsi_cmnd *cmd = sp->cmd; |
716 | scsi_qla_host_t *vha = shost_priv(cmd->device->host); | 716 | scsi_qla_host_t *vha = shost_priv(cmd->device->host); |
717 | unsigned char op = scsi_get_prot_op(cmd); | ||
718 | 717 | ||
719 | switch (scsi_get_prot_type(cmd)) { | 718 | switch (scsi_get_prot_type(cmd)) { |
720 | case SCSI_PROT_DIF_TYPE0: | 719 | case SCSI_PROT_DIF_TYPE0: |
@@ -724,6 +723,10 @@ qla24xx_set_t10dif_tags(struct scsi_cmnd *cmd, struct fw_dif_context *pkt, | |||
724 | */ | 723 | */ |
725 | pkt->ref_tag = cpu_to_le32((uint32_t) | 724 | pkt->ref_tag = cpu_to_le32((uint32_t) |
726 | (0xffffffff & scsi_get_lba(cmd))); | 725 | (0xffffffff & scsi_get_lba(cmd))); |
726 | |||
727 | if (!qla2x00_hba_err_chk_enabled(sp)) | ||
728 | break; | ||
729 | |||
727 | pkt->ref_tag_mask[0] = 0xff; | 730 | pkt->ref_tag_mask[0] = 0xff; |
728 | pkt->ref_tag_mask[1] = 0xff; | 731 | pkt->ref_tag_mask[1] = 0xff; |
729 | pkt->ref_tag_mask[2] = 0xff; | 732 | pkt->ref_tag_mask[2] = 0xff; |
@@ -735,20 +738,16 @@ qla24xx_set_t10dif_tags(struct scsi_cmnd *cmd, struct fw_dif_context *pkt, | |||
735 | * match LBA in CDB + N | 738 | * match LBA in CDB + N |
736 | */ | 739 | */ |
737 | case SCSI_PROT_DIF_TYPE2: | 740 | case SCSI_PROT_DIF_TYPE2: |
738 | if (!qla2x00_hba_err_chk_enabled(op)) | 741 | pkt->app_tag = __constant_cpu_to_le16(0); |
739 | break; | 742 | pkt->app_tag_mask[0] = 0x0; |
740 | 743 | pkt->app_tag_mask[1] = 0x0; | |
741 | if (scsi_prot_sg_count(cmd)) { | ||
742 | spt = page_address(sg_page(scsi_prot_sglist(cmd))) + | ||
743 | scsi_prot_sglist(cmd)[0].offset; | ||
744 | pkt->app_tag = swab32(spt->app_tag); | ||
745 | pkt->app_tag_mask[0] = 0xff; | ||
746 | pkt->app_tag_mask[1] = 0xff; | ||
747 | } | ||
748 | 744 | ||
749 | pkt->ref_tag = cpu_to_le32((uint32_t) | 745 | pkt->ref_tag = cpu_to_le32((uint32_t) |
750 | (0xffffffff & scsi_get_lba(cmd))); | 746 | (0xffffffff & scsi_get_lba(cmd))); |
751 | 747 | ||
748 | if (!qla2x00_hba_err_chk_enabled(sp)) | ||
749 | break; | ||
750 | |||
752 | /* enable ALL bytes of the ref tag */ | 751 | /* enable ALL bytes of the ref tag */ |
753 | pkt->ref_tag_mask[0] = 0xff; | 752 | pkt->ref_tag_mask[0] = 0xff; |
754 | pkt->ref_tag_mask[1] = 0xff; | 753 | pkt->ref_tag_mask[1] = 0xff; |
@@ -768,26 +767,15 @@ qla24xx_set_t10dif_tags(struct scsi_cmnd *cmd, struct fw_dif_context *pkt, | |||
768 | * 16 bit app tag. | 767 | * 16 bit app tag. |
769 | */ | 768 | */ |
770 | case SCSI_PROT_DIF_TYPE1: | 769 | case SCSI_PROT_DIF_TYPE1: |
771 | if (!qla2x00_hba_err_chk_enabled(op)) | 770 | pkt->ref_tag = cpu_to_le32((uint32_t) |
771 | (0xffffffff & scsi_get_lba(cmd))); | ||
772 | pkt->app_tag = __constant_cpu_to_le16(0); | ||
773 | pkt->app_tag_mask[0] = 0x0; | ||
774 | pkt->app_tag_mask[1] = 0x0; | ||
775 | |||
776 | if (!qla2x00_hba_err_chk_enabled(sp)) | ||
772 | break; | 777 | break; |
773 | 778 | ||
774 | if (protcnt && (op == SCSI_PROT_WRITE_STRIP || | ||
775 | op == SCSI_PROT_WRITE_PASS)) { | ||
776 | spt = page_address(sg_page(scsi_prot_sglist(cmd))) + | ||
777 | scsi_prot_sglist(cmd)[0].offset; | ||
778 | ql_dbg(ql_dbg_io, vha, 0x3008, | ||
779 | "LBA from user %p, lba = 0x%x for cmd=%p.\n", | ||
780 | spt, (int)spt->ref_tag, cmd); | ||
781 | pkt->ref_tag = swab32(spt->ref_tag); | ||
782 | pkt->app_tag_mask[0] = 0x0; | ||
783 | pkt->app_tag_mask[1] = 0x0; | ||
784 | } else { | ||
785 | pkt->ref_tag = cpu_to_le32((uint32_t) | ||
786 | (0xffffffff & scsi_get_lba(cmd))); | ||
787 | pkt->app_tag = __constant_cpu_to_le16(0); | ||
788 | pkt->app_tag_mask[0] = 0x0; | ||
789 | pkt->app_tag_mask[1] = 0x0; | ||
790 | } | ||
791 | /* enable ALL bytes of the ref tag */ | 779 | /* enable ALL bytes of the ref tag */ |
792 | pkt->ref_tag_mask[0] = 0xff; | 780 | pkt->ref_tag_mask[0] = 0xff; |
793 | pkt->ref_tag_mask[1] = 0xff; | 781 | pkt->ref_tag_mask[1] = 0xff; |
@@ -1208,7 +1196,7 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt, | |||
1208 | 1196 | ||
1209 | INIT_LIST_HEAD(&crc_ctx_pkt->dsd_list); | 1197 | INIT_LIST_HEAD(&crc_ctx_pkt->dsd_list); |
1210 | 1198 | ||
1211 | qla24xx_set_t10dif_tags(cmd, (struct fw_dif_context *) | 1199 | qla24xx_set_t10dif_tags(sp, (struct fw_dif_context *) |
1212 | &crc_ctx_pkt->ref_tag, tot_prot_dsds); | 1200 | &crc_ctx_pkt->ref_tag, tot_prot_dsds); |
1213 | 1201 | ||
1214 | cmd_pkt->crc_context_address[0] = cpu_to_le32(LSD(crc_ctx_dma)); | 1202 | cmd_pkt->crc_context_address[0] = cpu_to_le32(LSD(crc_ctx_dma)); |
@@ -1237,7 +1225,6 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt, | |||
1237 | fcp_cmnd->additional_cdb_len |= 2; | 1225 | fcp_cmnd->additional_cdb_len |= 2; |
1238 | 1226 | ||
1239 | int_to_scsilun(sp->cmd->device->lun, &fcp_cmnd->lun); | 1227 | int_to_scsilun(sp->cmd->device->lun, &fcp_cmnd->lun); |
1240 | host_to_fcp_swap((uint8_t *)&fcp_cmnd->lun, sizeof(fcp_cmnd->lun)); | ||
1241 | memcpy(fcp_cmnd->cdb, cmd->cmnd, cmd->cmd_len); | 1228 | memcpy(fcp_cmnd->cdb, cmd->cmnd, cmd->cmd_len); |
1242 | cmd_pkt->fcp_cmnd_dseg_len = cpu_to_le16(fcp_cmnd_len); | 1229 | cmd_pkt->fcp_cmnd_dseg_len = cpu_to_le16(fcp_cmnd_len); |
1243 | cmd_pkt->fcp_cmnd_dseg_address[0] = cpu_to_le32( | 1230 | cmd_pkt->fcp_cmnd_dseg_address[0] = cpu_to_le32( |
@@ -1289,7 +1276,7 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt, | |||
1289 | BUG(); | 1276 | BUG(); |
1290 | } | 1277 | } |
1291 | 1278 | ||
1292 | if (!qla2x00_hba_err_chk_enabled(scsi_get_prot_op(cmd))) | 1279 | if (!qla2x00_hba_err_chk_enabled(sp)) |
1293 | fw_prot_opts |= 0x10; /* Disable Guard tag checking */ | 1280 | fw_prot_opts |= 0x10; /* Disable Guard tag checking */ |
1294 | 1281 | ||
1295 | if (!bundling) { | 1282 | if (!bundling) { |
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 53339f10a598..ec53e87781a5 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -1534,25 +1534,26 @@ qla2x00_handle_dif_error(srb_t *sp, struct sts_entry_24xx *sts24) | |||
1534 | return 1; | 1534 | return 1; |
1535 | } | 1535 | } |
1536 | 1536 | ||
1537 | /* check appl tag */ | 1537 | /* check ref tag */ |
1538 | if (e_app_tag != a_app_tag) { | 1538 | if (e_ref_tag != a_ref_tag) { |
1539 | scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST, | 1539 | scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST, |
1540 | 0x10, 0x2); | 1540 | 0x10, 0x3); |
1541 | set_driver_byte(cmd, DRIVER_SENSE); | 1541 | set_driver_byte(cmd, DRIVER_SENSE); |
1542 | set_host_byte(cmd, DID_ABORT); | 1542 | set_host_byte(cmd, DID_ABORT); |
1543 | cmd->result |= SAM_STAT_CHECK_CONDITION << 1; | 1543 | cmd->result |= SAM_STAT_CHECK_CONDITION << 1; |
1544 | return 1; | 1544 | return 1; |
1545 | } | 1545 | } |
1546 | 1546 | ||
1547 | /* check ref tag */ | 1547 | /* check appl tag */ |
1548 | if (e_ref_tag != a_ref_tag) { | 1548 | if (e_app_tag != a_app_tag) { |
1549 | scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST, | 1549 | scsi_build_sense_buffer(1, cmd->sense_buffer, ILLEGAL_REQUEST, |
1550 | 0x10, 0x3); | 1550 | 0x10, 0x2); |
1551 | set_driver_byte(cmd, DRIVER_SENSE); | 1551 | set_driver_byte(cmd, DRIVER_SENSE); |
1552 | set_host_byte(cmd, DID_ABORT); | 1552 | set_host_byte(cmd, DID_ABORT); |
1553 | cmd->result |= SAM_STAT_CHECK_CONDITION << 1; | 1553 | cmd->result |= SAM_STAT_CHECK_CONDITION << 1; |
1554 | return 1; | 1554 | return 1; |
1555 | } | 1555 | } |
1556 | |||
1556 | return 1; | 1557 | return 1; |
1557 | } | 1558 | } |
1558 | 1559 | ||
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index c706ed370000..f488cc69fc79 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c | |||
@@ -472,7 +472,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport) | |||
472 | host->can_queue = base_vha->req->length + 128; | 472 | host->can_queue = base_vha->req->length + 128; |
473 | host->this_id = 255; | 473 | host->this_id = 255; |
474 | host->cmd_per_lun = 3; | 474 | host->cmd_per_lun = 3; |
475 | if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && ql2xenabledif) | 475 | if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif) |
476 | host->max_cmd_len = 32; | 476 | host->max_cmd_len = 32; |
477 | else | 477 | else |
478 | host->max_cmd_len = MAX_CMDSZ; | 478 | host->max_cmd_len = MAX_CMDSZ; |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index d65a3005b439..f57c292845a5 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -2255,7 +2255,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
2255 | host->this_id = 255; | 2255 | host->this_id = 255; |
2256 | host->cmd_per_lun = 3; | 2256 | host->cmd_per_lun = 3; |
2257 | host->unique_id = host->host_no; | 2257 | host->unique_id = host->host_no; |
2258 | if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && ql2xenabledif) | 2258 | if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif) |
2259 | host->max_cmd_len = 32; | 2259 | host->max_cmd_len = 32; |
2260 | else | 2260 | else |
2261 | host->max_cmd_len = MAX_CMDSZ; | 2261 | host->max_cmd_len = MAX_CMDSZ; |
@@ -2382,7 +2382,7 @@ skip_dpc: | |||
2382 | "Detected hba at address=%p.\n", | 2382 | "Detected hba at address=%p.\n", |
2383 | ha); | 2383 | ha); |
2384 | 2384 | ||
2385 | if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) && ql2xenabledif) { | 2385 | if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif) { |
2386 | if (ha->fw_attributes & BIT_4) { | 2386 | if (ha->fw_attributes & BIT_4) { |
2387 | int prot = 0; | 2387 | int prot = 0; |
2388 | base_vha->flags.difdix_supported = 1; | 2388 | base_vha->flags.difdix_supported = 1; |