Re: [PATCH 3/3] tcm_qla2xxx: Expose per endpoint dynamic_sessions attribute
Acked-by: Saurav Kashyap saurav.kash...@qlogic.com Thanks, ~Saurav From: Nicholas Bellinger n...@linux-iscsi.org This patch exposes a new ../qla2xxx*/$WWPN/$TPGT/dynamic_sessions attribute to dump the currently active sessions by FC initiator WWPN that have been created with dynamically generated se_node_acls. This information is useful so that user-space can optionally perform dynamic - explicit NodeACL conversion based on $INITIATOR_WWPN. Signed-off-by: Nicholas Bellinger n...@linux-iscsi.org --- drivers/scsi/qla2xxx/tcm_qla2xxx.c | 10 ++ 1 file changed, 10 insertions(+) diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index 99f43b7..c4f66f5 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -1082,8 +1082,18 @@ static ssize_t tcm_qla2xxx_tpg_store_enable( TF_TPG_BASE_ATTR(tcm_qla2xxx, enable, S_IRUGO | S_IWUSR); +static ssize_t tcm_qla2xxx_tpg_show_dynamic_sessions( + struct se_portal_group *se_tpg, + char *page) +{ + return target_show_dynamic_sessions(se_tpg, page); +} + +TF_TPG_BASE_ATTR_RO(tcm_qla2xxx, dynamic_sessions); + static struct configfs_attribute *tcm_qla2xxx_tpg_attrs[] = { tcm_qla2xxx_tpg_enable.attr, + tcm_qla2xxx_tpg_dynamic_sessions.attr, NULL, }; -- 1.9.1 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html attachment: winmail.dat
Re: [PATCH] qla2xxx: Fix trivial typos in ql_log message
Acked-by: Saurav Kashyap saurav.kash...@qlogic.com Change 'Fimware' to 'Firmware' Change 'enalbled' to 'enabled' Signed-off-by: Yannick Guerrini yguerr...@tomshardware.fr --- drivers/scsi/qla2xxx/qla_init.c | 4 ++-- drivers/scsi/qla2xxx/qla_mid.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index e59f25b..5bb57c5 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -5364,7 +5364,7 @@ qla2x00_load_risc(scsi_qla_host_t *vha, uint32_t *srisc_addr) blob = qla2x00_request_firmware(vha); if (!blob) { ql_log(ql_log_info, vha, 0x0083, - Fimware image unavailable.\n); + Firmware image unavailable.\n); ql_log(ql_log_info, vha, 0x0084, Firmware images can be retrieved from: QLA_FW_URL .\n); return QLA_FUNCTION_FAILED; @@ -5467,7 +5467,7 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr) blob = qla2x00_request_firmware(vha); if (!blob) { ql_log(ql_log_warn, vha, 0x0090, - Fimware image unavailable.\n); + Firmware image unavailable.\n); ql_log(ql_log_warn, vha, 0x0091, Firmware images can be retrieved from: QLA_FW_URL .\n); diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index 5c2e031..ca3804e 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c @@ -788,7 +788,7 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options, rsp-msix = ha-msix_entries[que_id + 1]; else ql_log(ql_log_warn, base_vha, 0x00e3, - MSIX not enalbled.\n); + MSIX not enabled.\n); ha-rsp_q_map[que_id] = rsp; rsp-rid = rid; -- 1.9.5.msysgit.0 attachment: winmail.dat
Re: [PATCH] qla2xxx: Remove use of 'struct timeval'
Acked-by: Saurav Kashyap saurav.kash...@qlogic.com struct register_host_info stores a 64-bit UTC system time timestamp. This patch removes the use of 'struct timeval' to obtain that timestamp as its tv_sec value will overflow on 32-bit systems in year 2038 beyond. The patch uses ktime_get_real_seconds() which returns a 64-bit seconds value. Signed-off-by: Tina Ruchandani ruchandani.t...@gmail.com --- drivers/scsi/qla2xxx/qla_mr.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_mr.c b/drivers/scsi/qla2xxx/qla_mr.c index 6d190b4..d64a64a 100644 --- a/drivers/scsi/qla2xxx/qla_mr.c +++ b/drivers/scsi/qla2xxx/qla_mr.c @@ -6,6 +6,7 @@ */ #include qla_def.h #include linux/delay.h +#include linux/ktime.h #include linux/pci.h #include linux/ratelimit.h #include linux/vmalloc.h @@ -1812,7 +1813,6 @@ qlafx00_fx_disc(scsi_qla_host_t *vha, fc_port_t *fcport, uint16_t fx_type) struct host_system_info *phost_info; struct register_host_info *preg_hsi; struct new_utsname *p_sysid = NULL; - struct timeval tv; sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); if (!sp) @@ -1886,8 +1886,7 @@ qlafx00_fx_disc(scsi_qla_host_t *vha, fc_port_t *fcport, uint16_t fx_type) p_sysid-domainname, DOMNAME_LENGTH); strncpy(phost_info-hostdriver, QLA2XXX_VERSION, VERSION_LENGTH); - do_gettimeofday(tv); - preg_hsi-utc = (uint64_t)tv.tv_sec; + preg_hsi-utc = (uint64_t)ktime_get_real_seconds(); ql_dbg(ql_dbg_init, vha, 0x0149, ISP%04X: Host registration with firmware\n, ha-pdev-device); -- 2.2.0.rc0.207.ga3a616c -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html attachment: winmail.dat
Re: [PATCH 0/10] qla2xxx: Fix various warnings reported by static source code analysis tools
Hi Bart, Changes are going through our 12 week regression cycle and we will update the status. Thanks, ~Saurav On 02/02/15 05:52, Saurav Kashyap wrote: Thanks for the patches. We will run regression with these changes and ack if everything goes through fine. Hello Saurav, That sounds great. Are there perhaps already any results available from the regression tests ? Thanks, Bart. attachment: winmail.dat
Re: [PATCH 0/10] qla2xxx: Fix various warnings reported by static source code analysis tools
Hi Bart, Thanks for the patches. We will run regression with these changes and ack if everything goes through fine. Thanks, ~Saurav This patch series addresses several warnings reported by static source code analysis tools for the qla2xxx driver (gcc (W=1), sparse (C=2) and smatch (C=2 CHECK=smatch -p=kernel)). The patches in this series are: 0001-qla2xxx-Report-both-rsp_info-and-rsp_info_len.patch 0002-qla2xxx-Declare-local-functions-static.patch 0003-qla2xxx-Remove-set-but-not-used-variables.patch 0004-qla2xxx-Replace-two-macros-with-an-inline-function.patch 0005-qla2xxx-Remove-__constant_-prefix.patch 0006-qla2xxx-Avoid-that-sparse-complains-about-duplicate-.patch 0007-qla2xxx-Fix-sparse-annotations.patch 0008-qla2xxx-Remove-a-superfluous-test.patch 0009-qla2xxx-Remove-dead-code.patch 0010-qla2xxx-Comment-out-dead-code.patch attachment: winmail.dat
Re: [PATCH] drivers: scsi: qla2xxx: Remove redundant declaration in 'qla_gbl.h'
Acked-by: Saurav Kashyap saurav.kash...@qlogic.com Remove 2 redundant extern inline functions: qla8044_set_qsnt_ready() and qla8044_need_reset_handler(). At present, within upstream next kernel source code, they are only used within drivers/scsi/qla2xxx/qla_nx2.c. The related error and warnings (with allmodconfig under tile): CC [M] drivers/scsi/qla2xxx/qla_nx2.o drivers/scsi/qla2xxx/qla_nx2.c:1633:1: error: static declaration of 'qla8044_need_reset_handler' follows non-static declaration qla8044_need_reset_handler(struct scsi_qla_host *vha) ^ In file included from drivers/scsi/qla2xxx/qla_def.h:3706:0, from drivers/scsi/qla2xxx/qla_nx2.c:11: drivers/scsi/qla2xxx/qla_gbl.h:756:20: note: previous declaration of 'qla8044_need_reset_handler' was here extern inline void qla8044_need_reset_handler(struct scsi_qla_host *vha); ^ drivers/scsi/qla2xxx/qla_gbl.h:756:20: warning: inline function 'qla8044_need_reset_handler' declared but never defined make[3]: *** [drivers/scsi/qla2xxx/qla_nx2.o] Error 1 make[2]: *** [drivers/scsi/qla2xxx] Error 2 make[1]: *** [drivers/scsi] Error 2 make: *** [drivers] Error 2 CC [M] drivers/scsi/qla2xxx/qla_tmpl.o In file included from drivers/scsi/qla2xxx/qla_def.h:3706:0, from drivers/scsi/qla2xxx/qla_tmpl.c:7: drivers/scsi/qla2xxx/qla_gbl.h:755:20: warning: inline function 'qla8044_set_qsnt_ready' declared but never defined extern inline void qla8044_set_qsnt_ready(struct scsi_qla_host *vha); ^ Signed-off-by: Chen Gang gang.chen.5...@gmail.com --- drivers/scsi/qla2xxx/qla_gbl.h | 2 -- drivers/scsi/qla2xxx/qla_nx2.c | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index b1865a7..7686bfe 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -752,8 +752,6 @@ extern void qla8044_set_idc_dontreset(struct scsi_qla_host *ha); extern int qla8044_rd_direct(struct scsi_qla_host *vha, const uint32_t crb_reg); extern void qla8044_wr_direct(struct scsi_qla_host *vha, const uint32_t crb_reg, const uint32_t value); -extern inline void qla8044_set_qsnt_ready(struct scsi_qla_host *vha); -extern inline void qla8044_need_reset_handler(struct scsi_qla_host *vha); extern int qla8044_device_state_handler(struct scsi_qla_host *vha); extern void qla8044_clear_qsnt_ready(struct scsi_qla_host *vha); extern void qla8044_clear_drv_active(struct qla_hw_data *); diff --git a/drivers/scsi/qla2xxx/qla_nx2.c b/drivers/scsi/qla2xxx/qla_nx2.c index 24a8528..ed4d6b6 100644 --- a/drivers/scsi/qla2xxx/qla_nx2.c +++ b/drivers/scsi/qla2xxx/qla_nx2.c @@ -238,7 +238,7 @@ qla8044_rmw_crb_reg(struct scsi_qla_host *vha, return; } -inline void +static inline void qla8044_set_qsnt_ready(struct scsi_qla_host *vha) { uint32_t qsnt_state; -- 1.9.3 attachment: winmail.dat
[PATCH 00/19] qla2xxx/target: Target bug fixes and enchancements.
Hi Nicholas/Christoph, Please apply the following patches at your earliest convenience. Thanks, ~Saurav Arun Easi (6): qla2xxx: Use correct offset to req-q-out for reserve calculation qla2xxx: Remove verbose messages in target mode. qla2xxx: Enable SLER conditionally in target mode. qla2xxx: Add Host reset handling in target mode. qla2xxx: Handle chip reset in target mode. qla2xxx: Host reset handling in ABTS path. Himanshu Madhani (6): qla2xxx: Fix sparse warnings in tcm_qla2xxx.c qla2xxx: fix kernel NULL pointer access qla2xxx: Increase room in request queue for sending priority packets qla2xxx: fix crash due to task mgmt cmd type qla2xxx: Do not send SS_RESIDUAL_UNDER with SAM_STAT_BUSY qla2xxx: Add memory barrier before ringing doorbell. Quinn Tran (3): qla2xxx: Add support for QFull throttling and Term Exchange retry qla2xxx: Fix hang due to cmd_kref not decrementing Target/transport: SCSI Status Respond being sent to Initiator twice. Saurav Kashyap (4): qla2xxx: Add counter for message qla2xxx: Increase the request queue size to 8K for ISP2031 qla2xxx: Add flags for tracing the target commands. target: Implement report lun data change unit attention. drivers/scsi/qla2xxx/qla_dbg.c |6 +- drivers/scsi/qla2xxx/qla_def.h | 19 + drivers/scsi/qla2xxx/qla_gbl.h |2 + drivers/scsi/qla2xxx/qla_init.c |4 + drivers/scsi/qla2xxx/qla_iocb.c | 15 +- drivers/scsi/qla2xxx/qla_os.c|6 +- drivers/scsi/qla2xxx/qla_target.c| 686 +++--- drivers/scsi/qla2xxx/qla_target.h| 31 ++ drivers/scsi/qla2xxx/tcm_qla2xxx.c | 45 ++- drivers/target/target_core_fabric_configfs.c | 28 + drivers/target/target_core_transport.c |3 +- 11 files changed, 648 insertions(+), 197 deletions(-) -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 01/19] qla2xxx: Fix sparse warnings in tcm_qla2xxx.c
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/tcm_qla2xxx.c | 12 ++-- 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index e2beab9..09d2931 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -50,8 +50,12 @@ #include qla_target.h #include tcm_qla2xxx.h -struct workqueue_struct *tcm_qla2xxx_free_wq; -struct workqueue_struct *tcm_qla2xxx_cmd_wq; +static struct workqueue_struct *tcm_qla2xxx_free_wq; +static struct workqueue_struct *tcm_qla2xxx_cmd_wq; + +/* Local pointer to allocated TCM configfs fabric module */ +static struct target_fabric_configfs *tcm_qla2xxx_fabric_configfs; +static struct target_fabric_configfs *tcm_qla2xxx_npiv_fabric_configfs; /* * Parse WWN. @@ -734,10 +738,6 @@ static void tcm_qla2xxx_aborted_task(struct se_cmd *se_cmd) cmd-sg_mapped = 0; } -/* Local pointer to allocated TCM configfs fabric module */ -struct target_fabric_configfs *tcm_qla2xxx_fabric_configfs; -struct target_fabric_configfs *tcm_qla2xxx_npiv_fabric_configfs; - static void tcm_qla2xxx_clear_sess_lookup(struct tcm_qla2xxx_lport *, struct tcm_qla2xxx_nacl *, struct qla_tgt_sess *); /* -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 03/19] qla2xxx: Use correct offset to req-q-out for reserve calculation
From: Arun Easi arun.e...@qlogic.com Cc: sta...@vger.kernel.org Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c |4 +--- 1 files changed, 1 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index e44fcb5..bcc449a 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1431,12 +1431,10 @@ static inline void qlt_unmap_sg(struct scsi_qla_host *vha, static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, uint32_t req_cnt) { - struct qla_hw_data *ha = vha-hw; - device_reg_t __iomem *reg = ha-iobase; uint32_t cnt; if (vha-req-cnt (req_cnt + 2)) { - cnt = (uint16_t)RD_REG_DWORD(reg-isp24.req_q_out); + cnt = (uint16_t)RD_REG_DWORD(vha-req-req_q_out); ql_dbg(ql_dbg_tgt, vha, 0xe00a, Request ring circled: cnt=%d, vha--ring_index=%d, -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 17/19] qla2xxx: Add memory barrier before ringing doorbell.
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 16 1 files changed, 16 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 137ad54..7abf2de 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1035,6 +1035,8 @@ static void qlt_send_notify_ack(struct scsi_qla_host *vha, qla_target(%d): Sending 24xx Notify Ack %d\n, vha-vp_idx, nack-u.isp24.status); + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); } @@ -1112,6 +1114,8 @@ static void qlt_24xx_send_abts_resp(struct scsi_qla_host *vha, vha-vha_tgt.qla_tgt-abts_resp_expected++; + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); } @@ -1157,6 +1161,8 @@ static void qlt_24xx_retry_term_exchange(struct scsi_qla_host *vha, CTIO7_FLAGS_TERMINATE); ctio-u.status1.ox_id = cpu_to_le16(entry-fcp_hdr_le.ox_id); + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); qlt_24xx_send_abts_resp(vha, (struct abts_recv_from_24xx *)entry, @@ -1328,6 +1334,8 @@ static void qlt_24xx_send_task_mgmt_ctio(struct scsi_qla_host *ha, ctio-u.status1.response_len = __constant_cpu_to_le16(8); ctio-u.status1.sense_data[0] = resp_code; + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(ha, ha-req); } @@ -2407,6 +2415,8 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type, cmd-state = QLA_TGT_STATE_PROCESSED; /* Mid-level is done processing */ cmd-cmd_sent_to_fw = 1; + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); spin_unlock_irqrestore(ha-hardware_lock, flags); @@ -2483,6 +2493,8 @@ int qlt_rdy_to_xfer(struct qla_tgt_cmd *cmd) cmd-state = QLA_TGT_STATE_NEED_DATA; cmd-cmd_sent_to_fw = 1; + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); spin_unlock_irqrestore(ha-hardware_lock, flags); @@ -2691,6 +2703,8 @@ static int __qlt_send_term_exchange(struct scsi_qla_host *vha, if (ctio24-u.status1.residual != 0) ctio24-u.status1.scsi_status |= SS_RESIDUAL_UNDER; + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); return ret; } @@ -4324,6 +4338,8 @@ static int __qlt_send_busy(struct scsi_qla_host *vha, */ ctio24-u.status1.ox_id = swab16(atio-u.isp24.fcp_hdr.ox_id); ctio24-u.status1.scsi_status = cpu_to_le16(status); + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); return 0; } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 08/19] qla2xxx: fix crash due to task mgmt cmd type
From: Himanshu Madhani himanshu.madh...@qlogic.com tcm_qla2xxx_get_task_tag incorrectly assume command is qla_tgt_cmd. Add check to see if it's a scsi cmd or task mgmt command. Signed-off-by: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/tcm_qla2xxx.c |9 +++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index 09d2931..9f95407 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -515,8 +515,13 @@ static void tcm_qla2xxx_set_default_node_attrs(struct se_node_acl *nacl) static u32 tcm_qla2xxx_get_task_tag(struct se_cmd *se_cmd) { - struct qla_tgt_cmd *cmd = container_of(se_cmd, - struct qla_tgt_cmd, se_cmd); + struct qla_tgt_cmd *cmd; + + /* check for task mgmt cmd */ + if (se_cmd-se_cmd_flags SCF_SCSI_TMR_CDB) + return 0x; + + cmd = container_of(se_cmd, struct qla_tgt_cmd, se_cmd); return cmd-tag; } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 09/19] qla2xxx: Add Host reset handling in target mode.
From: Arun Easi arun.e...@qlogic.com Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c|2 +- drivers/scsi/qla2xxx/qla_gbl.h|1 + drivers/scsi/qla2xxx/qla_os.c |2 + drivers/scsi/qla2xxx/qla_target.c | 74 + 4 files changed, 78 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index f3b6570..09b335e 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -68,7 +68,7 @@ * | || 0xd101-0xd1fe | * | || 0xd214-0xd2fe | * | Target Mode | 0xe078 || - * | Target Mode Management | 0xf072 | 0xf002-0xf003 | + * | Target Mode Management | 0xf072 | 0xf002 | * | || 0xf046-0xf049 | * | Target Mode Task Management | 0x1000b || * -- diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index cc9e088..8257a27 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -765,4 +765,5 @@ extern void qla82xx_mbx_completion(scsi_qla_host_t *, uint16_t); extern int qla8044_abort_isp(scsi_qla_host_t *); extern int qla8044_check_fw_alive(struct scsi_qla_host *); +extern void qlt_host_reset_handler(struct qla_hw_data *ha); #endif /* _QLA_GBL_H */ diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 70445bc..437dc90 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -1362,6 +1362,8 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) struct qla_hw_data *ha = vha-hw; struct req_que *req; + qlt_host_reset_handler(ha); + spin_lock_irqsave(ha-hardware_lock, flags); for (que = 0; que ha-max_req_queues; que++) { req = ha-req_q_map[que]; diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 4989bf7..edd9d1b 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -2838,6 +2838,80 @@ static struct qla_tgt_cmd *qlt_ctio_to_cmd(struct scsi_qla_host *vha, return cmd; } +/* hardware_lock should be held by caller. */ +static void +qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) +{ + struct qla_hw_data *ha = vha-hw; + uint32_t handle; + + if (cmd-sg_mapped) + qlt_unmap_sg(vha, cmd); + + handle = qlt_make_handle(vha); + + /* TODO: fix debug message type and ids. */ + if (cmd-state == QLA_TGT_STATE_PROCESSED) { + ql_dbg(ql_dbg_io, vha, 0xff00, + HOST-ABORT: handle=%d, state=PROCESSED.\n, handle); + } else if (cmd-state == QLA_TGT_STATE_NEED_DATA) { + cmd-write_data_transferred = 0; + cmd-state = QLA_TGT_STATE_DATA_IN; + + ql_dbg(ql_dbg_io, vha, 0xff01, + HOST-ABORT: handle=%d, state=DATA_IN.\n, handle); + + ha-tgt.tgt_ops-handle_data(cmd); + return; + } else if (cmd-state == QLA_TGT_STATE_ABORTED) { + ql_dbg(ql_dbg_io, vha, 0xff02, + HOST-ABORT: handle=%d, state=ABORTED.\n, handle); + } else { + ql_dbg(ql_dbg_io, vha, 0xff03, + HOST-ABORT: handle=%d, state=BAD(%d).\n, handle, + cmd-state); + dump_stack(); + } + + ha-tgt.tgt_ops-free_cmd(cmd); +} + +void +qlt_host_reset_handler(struct qla_hw_data *ha) +{ + struct qla_tgt_cmd *cmd; + unsigned long flags; + scsi_qla_host_t *base_vha = pci_get_drvdata(ha-pdev); + scsi_qla_host_t *vha = NULL; + struct qla_tgt *tgt = base_vha-vha_tgt.qla_tgt; + uint32_t i; + + if (!base_vha-hw-tgt.tgt_ops) + return; + + if (!tgt || qla_ini_mode_enabled(base_vha)) { + ql_dbg(ql_dbg_tgt_mgt, vha, 0xf003, + Target mode disabled\n); + return; + } + + ql_dbg(ql_dbg_tgt_mgt, vha, 0xff10, + HOST-ABORT-HNDLR: base_vha-dpc_flags=%lx.\n, + base_vha-dpc_flags); + + spin_lock_irqsave(ha-hardware_lock, flags); + for (i = 1; i DEFAULT_OUTSTANDING_COMMANDS + 1; i++) { + cmd = qlt_get_cmd(base_vha, i); + if (!cmd) + continue; + /* ha-tgt.cmds entry is cleared by qlt_get_cmd. */ + vha = cmd-vha; + qlt_abort_cmd_on_host_reset(vha, cmd); + } + spin_unlock_irqrestore(ha-hardware_lock, flags); +} + + /* * ha-hardware_lock supposed to be held
[PATCH 06/19] qla2xxx: Enable SLER conditionally in target mode.
From: Arun Easi arun.e...@qlogic.com Sequence level error recovery (aka FC Tape) is not really required for disk devices. On heavily loaded system, with slow turn around, a bunch of status enquiries using REC puts additional burden to the target, so just turn off SLER by default. Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 18 ++ 1 files changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index c64266a..2d4003f 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -5172,8 +5172,13 @@ qlt_24xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_24xx *nv) nv-firmware_options_1 = __constant_cpu_to_le32(~BIT_13); /* Enable initial LIP */ nv-firmware_options_1 = __constant_cpu_to_le32(~BIT_9); - /* Enable FC tapes support */ - nv-firmware_options_2 |= __constant_cpu_to_le32(BIT_12); +#ifdef QLT_ENABLE_TAPE + /* Enable FC Tape support */ + nv-firmware_options_2 |= cpu_to_le32(BIT_12); +#else + /* Disable FC Tape support */ + nv-firmware_options_2 = cpu_to_le32(~BIT_12); +#endif /* Disable Full Login after LIP */ nv-host_p = __constant_cpu_to_le32(~BIT_10); /* Enable target PRLI control */ @@ -5255,8 +5260,13 @@ qlt_81xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_81xx *nv) nv-firmware_options_1 = __constant_cpu_to_le32(~BIT_13); /* Enable initial LIP */ nv-firmware_options_1 = __constant_cpu_to_le32(~BIT_9); - /* Enable FC tapes support */ - nv-firmware_options_2 |= __constant_cpu_to_le32(BIT_12); +#ifdef QLT_ENABLE_TAPE + /* Enable FC tape support */ + nv-firmware_options_2 |= cpu_to_le32(BIT_12); +#else + /* Disable FC tape support */ + nv-firmware_options_2 = cpu_to_le32(~BIT_12); +#endif /* Disable Full Login after LIP */ nv-host_p = __constant_cpu_to_le32(~BIT_10); /* Enable target PRLI control */ -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 18/19] Target/transport: SCSI Status Respond being sent to Initiator twice.
From: Quinn Tran quinn.t...@qlogic.com During temporary resource starvation at lower transport layer, command is placed on queue full retry path, which expose this problem. The TCM Qfull handling send the same cmd twice to lower layer. The 1st time led to cmd normal free path. The 2nd time cause Null pointer access. Signed-off-by: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/target/target_core_transport.c |3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 7fa62fc..ab61014 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -1877,8 +1877,7 @@ static void transport_complete_qf(struct se_cmd *cmd) if (cmd-se_cmd_flags SCF_TRANSPORT_TASK_SENSE) { trace_target_cmd_complete(cmd); ret = cmd-se_tfo-queue_status(cmd); - if (ret) - goto out; + goto out; } switch (cmd-data_direction) { -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 14/19] qla2xxx: Do not send SS_RESIDUAL_UNDER with SAM_STAT_BUSY
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c |6 -- 1 files changed, 0 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index fed7fef..b07b180 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -4308,12 +4308,6 @@ static int __qlt_send_busy(struct scsi_qla_host *vha, */ ctio24-u.status1.ox_id = swab16(atio-u.isp24.fcp_hdr.ox_id); ctio24-u.status1.scsi_status = cpu_to_le16(status); - ctio24-u.status1.residual = get_unaligned((uint32_t *) - atio-u.isp24.fcp_cmnd.add_cdb[ - atio-u.isp24.fcp_cmnd.add_cdb_len]); - if (ctio24-u.status1.residual != 0) - ctio24-u.status1.scsi_status |= SS_RESIDUAL_UNDER; - qla2x00_start_iocbs(vha, vha-req); return 0; } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 10/19] qla2xxx: Handle chip reset in target mode.
From: Arun Easi arun.e...@qlogic.com A chip reset can occur after driver submits command to the stack. Abort command processing if a chip reset has occurred or in progress when you get a follow up for a command. Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_def.h|1 + drivers/scsi/qla2xxx/qla_gbl.h|1 + drivers/scsi/qla2xxx/qla_init.c |4 ++ drivers/scsi/qla2xxx/qla_iocb.c | 11 +++ drivers/scsi/qla2xxx/qla_target.c | 56 +++-- drivers/scsi/qla2xxx/qla_target.h |2 + 6 files changed, 72 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 509dbd5..c9fe4cf 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -3446,6 +3446,7 @@ struct qla_hw_data { struct work_struct board_disable; struct mr_data_fx00 mr; + uint32_t chip_reset; struct qlt_hw_data tgt; int allow_cna_fw_dump; diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index 8257a27..13591de 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -72,6 +72,7 @@ extern void qla2x00_async_logout_done(struct scsi_qla_host *, fc_port_t *, extern void qla2x00_async_adisc_done(struct scsi_qla_host *, fc_port_t *, uint16_t *); extern void *qla2x00_alloc_iocbs(struct scsi_qla_host *, srb_t *); +extern void *qla2x00_alloc_iocbs_ready(struct scsi_qla_host *, srb_t *); extern int qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *, fc_port_t *); extern fc_port_t * diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 1d66f2f..a4dde7e 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -4575,6 +4575,10 @@ qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha) /* Requeue all commands in outstanding command list. */ qla2x00_abort_all_cmds(vha, DID_RESET 16); } + + ha-chip_reset++; + /* memory barrier */ + wmb(); } /* diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index c787847..f0edb07 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c @@ -1858,6 +1858,17 @@ static void qla25xx_set_que(srb_t *sp, struct rsp_que **rsp) } /* Generic Control-SRB manipulation functions. */ + +/* hardware_lock assumed to be held. */ +void * +qla2x00_alloc_iocbs_ready(scsi_qla_host_t *vha, srb_t *sp) +{ + if (qla2x00_reset_active(vha)) + return NULL; + + return qla2x00_alloc_iocbs(vha, sp); +} + void * qla2x00_alloc_iocbs(scsi_qla_host_t *vha, srb_t *sp) { diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index edd9d1b..25af5b7 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -101,6 +101,8 @@ static void qlt_send_term_exchange(struct scsi_qla_host *ha, struct qla_tgt_cmd *cmd, struct atio_from_isp *atio, int ha_locked); static void qlt_reject_free_srr_imm(struct scsi_qla_host *ha, struct qla_tgt_srr_imm *imm, int ha_lock); +static void qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, + struct qla_tgt_cmd *cmd); /* * Global Variables */ @@ -1031,7 +1033,7 @@ static void qlt_24xx_send_abts_resp(struct scsi_qla_host *vha, if (qlt_issue_marker(vha, 1) != QLA_SUCCESS) return; - resp = (struct abts_resp_to_24xx *)qla2x00_alloc_iocbs(vha, NULL); + resp = (struct abts_resp_to_24xx *)qla2x00_alloc_iocbs_ready(vha, NULL); if (!resp) { ql_dbg(ql_dbg_tgt, vha, 0xe04a, qla_target(%d): %s failed: unable to allocate @@ -1102,7 +1104,7 @@ static void qlt_24xx_retry_term_exchange(struct scsi_qla_host *vha, if (qlt_issue_marker(vha, 1) != QLA_SUCCESS) return; - ctio = (struct ctio7_to_24xx *)qla2x00_alloc_iocbs(vha, NULL); + ctio = (struct ctio7_to_24xx *)qla2x00_alloc_iocbs_ready(vha, NULL); if (ctio == NULL) { ql_dbg(ql_dbg_tgt, vha, 0xe04b, qla_target(%d): %s failed: unable to allocate @@ -1321,6 +1323,21 @@ void qlt_xmit_tm_rsp(struct qla_tgt_mgmt_cmd *mcmd) mcmd, mcmd-fc_tm_rsp, mcmd-flags); spin_lock_irqsave(ha-hardware_lock, flags); + + if (qla2x00_reset_active(vha) || mcmd-reset_count != ha-chip_reset) { + /* +* Either a chip reset is active or this request was from +* previous life, just abort the processing. +*/ + ql_dbg(ql_dbg_async, vha, 0xe100, + RESET-TMR active/old-count/new-count = %d/%d/%d.\n, + qla2x00_reset_active(vha), mcmd-reset_count, + ha-chip_reset); + ha
[PATCH 19/19] target: Implement report lun data change unit attention.
Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com --- drivers/target/target_core_fabric_configfs.c | 28 ++ 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c index 7de9f04..f97866e 100644 --- a/drivers/target/target_core_fabric_configfs.c +++ b/drivers/target/target_core_fabric_configfs.c @@ -42,6 +42,7 @@ #include target_core_internal.h #include target_core_alua.h #include target_core_pr.h +#include target_core_ua.h #define TF_CIT_SETUP(_name, _item_ops, _group_ops, _attrs) \ static void target_fabric_setup_##_name##_cit(struct target_fabric_configfs *tf) \ @@ -326,6 +327,8 @@ static struct config_group *target_fabric_make_mappedlun( char *buf; unsigned long mapped_lun; int ret = 0; + struct se_lun *lun; + int i = 0; acl_ci = group-cg_item; if (!acl_ci) { @@ -400,6 +403,16 @@ static struct config_group *target_fabric_make_mappedlun( goto out; } target_stat_setup_mappedlun_default_groups(lacl); + spin_lock(se_tpg-tpg_lun_lock); + for (i = 0; i TRANSPORT_MAX_LUNS_PER_TPG; i++) { + lun = se_tpg-tpg_lun_list[i]; + if (lun-lun_status != TRANSPORT_LUN_STATUS_ACTIVE) + continue; + spin_unlock(se_tpg-tpg_lun_lock); + core_scsi3_ua_allocate(se_nacl, lun-unpacked_lun, 0x3f, 0xe); + spin_lock(se_tpg-tpg_lun_lock); + } + spin_unlock(se_tpg-tpg_lun_lock); kfree(buf); return lacl-se_lun_group; @@ -419,6 +432,8 @@ static void target_fabric_drop_mappedlun( struct config_item *df_item; struct config_group *lacl_cg = NULL, *ml_stat_grp = NULL; int i; + struct se_lun *lun; + struct se_portal_group *se_tpg = lacl-se_lun_nacl-se_tpg; ml_stat_grp = lacl-ml_stat_grps.stat_group; for (i = 0; ml_stat_grp-default_groups[i]; i++) { @@ -437,6 +452,19 @@ static void target_fabric_drop_mappedlun( kfree(lacl_cg-default_groups); config_item_put(item); + + spin_lock(se_tpg-tpg_lun_lock); + for (i = 0; i TRANSPORT_MAX_LUNS_PER_TPG; i++) { + lun = se_tpg-tpg_lun_list[i]; + if (lun-lun_status != TRANSPORT_LUN_STATUS_ACTIVE) + continue; + spin_unlock(se_tpg-tpg_lun_lock); + core_scsi3_ua_allocate(lacl-se_lun_nacl, lun-unpacked_lun, + 0x3f, 0xe); + spin_lock(se_tpg-tpg_lun_lock); + } + spin_unlock(se_tpg-tpg_lun_lock); + } static void target_fabric_nacl_base_release(struct config_item *item) -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 15/19] qla2xxx: Fix hang due to cmd_kref not decrementing
From: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 18 ++ drivers/scsi/qla2xxx/qla_target.h |1 + 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index b07b180..51aa888 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -2404,6 +2404,7 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type, cmd-state = QLA_TGT_STATE_PROCESSED; /* Mid-level is done processing */ + cmd-cmd_sent_to_fw = 1; qla2x00_start_iocbs(vha, vha-req); spin_unlock_irqrestore(ha-hardware_lock, flags); @@ -2479,6 +2480,7 @@ int qlt_rdy_to_xfer(struct qla_tgt_cmd *cmd) qlt_load_data_segments(prm, vha); cmd-state = QLA_TGT_STATE_NEED_DATA; + cmd-cmd_sent_to_fw = 1; qla2x00_start_iocbs(vha, vha-req); spin_unlock_irqrestore(ha-hardware_lock, flags); @@ -2712,19 +2714,10 @@ static void qlt_send_term_exchange(struct scsi_qla_host *vha, if (rc == -ENOMEM) qlt_alloc_qfull_cmd(vha, atio, 0, 0); spin_unlock_irqrestore(vha-hw-hardware_lock, flags); + done: - /* -* Terminate exchange will tell fw to release any active CTIO -* that's in FW posession and cleanup the exchange. -* -* cmd-state == QLA_TGT_STATE_ABORTED means CTIO is still -* down at FW. Free the cmd later when CTIO comes back later -* w/aborted(0x2) status. -* -* cmd-state != QLA_TGT_STATE_ABORTED means CTIO is already -* back w/some err. Free the cmd now. -*/ - if ((rc == 1) (cmd-state != QLA_TGT_STATE_ABORTED)) { + if (cmd ((cmd-state != QLA_TGT_STATE_ABORTED) || + !cmd-cmd_sent_to_fw)) { if (!ha_locked !in_interrupt()) msleep(250); /* just in case */ @@ -3066,6 +3059,7 @@ static void qlt_do_ctio_completion(struct scsi_qla_host *vha, uint32_t handle, se_cmd = cmd-se_cmd; tfo = se_cmd-se_tfo; + cmd-cmd_sent_to_fw = 0; if (cmd-sg_mapped) qlt_unmap_sg(vha, cmd); diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h index 0c768f5..b07b230 100644 --- a/drivers/scsi/qla2xxx/qla_target.h +++ b/drivers/scsi/qla2xxx/qla_target.h @@ -917,6 +917,7 @@ struct qla_tgt_cmd { unsigned int ctx_dsd_alloced:1; unsigned int q_full:1; unsigned int term_exchg:1; + unsigned int cmd_sent_to_fw:1; struct scatterlist *sg; /* cmd data buffer SG vector */ int sg_cnt; /* SG segments count */ -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 12/19] qla2xxx: Increase the request queue size to 8K for ISP2031
Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com --- drivers/scsi/qla2xxx/qla_def.h |1 + drivers/scsi/qla2xxx/qla_os.c |2 +- 2 files changed, 2 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index c9fe4cf..6e3b4f5 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -266,6 +266,7 @@ #define REQUEST_ENTRY_CNT_2100 128 /* Number of request entries. */ #define REQUEST_ENTRY_CNT_2200 2048/* Number of request entries. */ #define REQUEST_ENTRY_CNT_24XX 2048/* Number of request entries. */ +#define REQUEST_ENTRY_CNT_83XX 8192/* Number of request entries. */ #define RESPONSE_ENTRY_CNT_210064 /* Number of response entries.*/ #define RESPONSE_ENTRY_CNT_2300512 /* Number of response entries.*/ #define RESPONSE_ENTRY_CNT_MQ 128 /* Number of response entries.*/ diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 437dc90..366ccf4 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -2540,7 +2540,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) ha-portnum = PCI_FUNC(ha-pdev-devfn); ha-max_fibre_devices = MAX_FIBRE_DEVICES_2400; ha-mbx_count = MAILBOX_REGISTER_COUNT; - req_length = REQUEST_ENTRY_CNT_24XX; + req_length = REQUEST_ENTRY_CNT_83XX; rsp_length = RESPONSE_ENTRY_CNT_2300; ha-tgt.atio_q_length = ATIO_ENTRY_CNT_24XX; ha-max_loop_id = SNS_LAST_LOOP_ID_2300; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 13/19] qla2xxx: Add support for QFull throttling and Term Exchange retry
From: Quinn Tran quinn.t...@qlogic.com Through the qla target code, the qlt_send_term_exchange() routine is used in various different places to cleanup an exchange. For the case of IOCB request queue is full, the exchange is left unhandled/ dangling. Existing code does not have re-try logic to cleanup the exchange. This patch add retry logic to cleanup the exchange before letting new commands through. For the case of FW running out of exchanges, driver need to reply SAM_STAT_BUSY to the initiators. This patch add a pending queue for the busy reply in case IOCB queue is unable to handle the cmd. Cc: sta...@vger.kernel.org Signed-off-by: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c|4 +- drivers/scsi/qla2xxx/qla_def.h| 17 ++ drivers/scsi/qla2xxx/qla_os.c |2 + drivers/scsi/qla2xxx/qla_target.c | 297 - drivers/scsi/qla2xxx/qla_target.h |4 + 5 files changed, 316 insertions(+), 8 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 09b335e..1b5c7a6 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -19,7 +19,7 @@ * | Device Discovery | 0x2016 | 0x2020-0x2022, | * | || 0x2011-0x2012, | * | || 0x2099-0x20a4 | - * | Queue Command and IO tracing | 0x3059 | 0x3006-0x300b | + * | Queue Command and IO tracing | 0x3059 | 0x300b | * | || 0x3027-0x3028 | * | || 0x303d-0x3041 | * | || 0x302d,0x3033 | @@ -67,7 +67,7 @@ * | || 0xd031-0xd0ff | * | || 0xd101-0xd1fe | * | || 0xd214-0xd2fe | - * | Target Mode | 0xe078 || + * | Target Mode | 0xe079 || * | Target Mode Management | 0xf072 | 0xf002 | * | || 0xf046-0xf049 | * | Target Mode Task Management | 0x1000b || diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 6e3b4f5..bd4f1f3 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -2776,6 +2776,9 @@ struct qla_statistics { uint32_t control_requests; uint64_t jiffies_at_last_reset; + uint32_t stat_max_pend_cmds; + uint32_t stat_max_qfull_cmds_alloc; + uint32_t stat_max_qfull_cmds_dropped; }; struct bidi_statistics { @@ -2898,8 +2901,22 @@ struct qlt_hw_data { uint8_t saved_add_firmware_options[2]; uint8_t tgt_node_name[WWN_SIZE]; + + struct list_head q_full_list; + uint32_t num_pend_cmds; + uint32_t num_qfull_cmds_alloc; + uint32_t num_qfull_cmds_dropped; + spinlock_t q_full_lock; + uint32_t leak_exchg_thresh_hold; }; +#define MAX_QFULL_CMDS_ALLOC 8192 +#define Q_FULL_THRESH_HOLD_PERCENT 90 +#define Q_FULL_THRESH_HOLD(ha) \ + ((ha-fw_xcb_count/100) * Q_FULL_THRESH_HOLD_PERCENT) + +#define LEAK_EXCHG_THRESH_HOLD_PERCENT 75 /* 75 percent */ + /* * Qlogic host adapter specific data structure. */ diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 366ccf4..2485200 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -2397,6 +2397,8 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) Memory allocated for ha=%p.\n, ha); ha-pdev = pdev; ha-tgt.enable_class_2 = ql2xenableclass2; + INIT_LIST_HEAD(ha-tgt.q_full_list); + spin_lock_init(ha-tgt.q_full_lock); /* Clear our data area */ ha-bars = bars; diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 2c36b6c..fed7fef 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -54,6 +54,8 @@ MODULE_PARM_DESC(qlini_mode, int ql2x_ini_mode = QLA2XXX_INI_MODE_EXCLUSIVE; +static int temp_sam_status = SAM_STAT_BUSY; + /* * From scsi/fc/fc_fcp.h */ @@ -103,6 +105,8 @@ static void qlt_reject_free_srr_imm(struct scsi_qla_host *ha, struct qla_tgt_srr_imm *imm, int ha_lock); static void qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd); +static void qlt_alloc_qfull_cmd(struct scsi_qla_host *vha, + struct atio_from_isp *atio, uint16_t status, int qfull); /* * Global Variables */ @@ -180,6 +184,27 @@ struct scsi_qla_host *qlt_find_host_by_vp_idx(struct scsi_qla_host *vha
[PATCH 07/19] qla2xxx: Add counter for message
Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 10 +- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 2d4003f..4989bf7 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1429,10 +1429,11 @@ static inline void qlt_unmap_sg(struct scsi_qla_host *vha, static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, uint32_t req_cnt) { - uint32_t cnt; + uint32_t cnt, cnt_in; if (vha-req-cnt (req_cnt + 2)) { cnt = (uint16_t)RD_REG_DWORD(vha-req-req_q_out); + cnt_in = (uint16_t)RD_REG_DWORD(vha-req-req_q_in); if (vha-req-ring_index cnt) vha-req-cnt = cnt - vha-req-ring_index; @@ -1443,10 +1444,9 @@ static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, if (unlikely(vha-req-cnt (req_cnt + 2))) { ql_dbg(ql_dbg_io, vha, 0x305a, - qla_target(%d): There is no room in the - request ring: vha-req-ring_index=%d, vha-req-cnt=%d, - req_cnt=%d\n, vha-vp_idx, vha-req-ring_index, - vha-req-cnt, req_cnt); + qla_target(%d): There is no room in the request ring: vha-req-ring_index=%d, vha-req-cnt=%d, req_cnt=%d Req-out=%d Req-in=%d Req-Length=%d\n, + vha-vp_idx, vha-req-ring_index, + vha-req-cnt, req_cnt, cnt, cnt_in, vha-req-length); return -EAGAIN; } vha-req-cnt -= req_cnt; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 05/19] qla2xxx: Remove verbose messages in target mode.
From: Arun Easi arun.e...@qlogic.com Turning logging bits for target mode ON dumps quite a lot verbose messages, remove those and change some of the IO path logging to use IO bits. Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 154 - 1 files changed, 16 insertions(+), 138 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index bcc449a..c64266a 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1397,8 +1397,6 @@ static int qlt_pci_map_calc_cnt(struct qla_tgt_prm *prm) } } - ql_dbg(ql_dbg_tgt, prm-cmd-vha, 0xe009, seg_cnt=%d, req_cnt=%d\n, - prm-seg_cnt, prm-req_cnt); return 0; out_err: @@ -1436,10 +1434,6 @@ static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, if (vha-req-cnt (req_cnt + 2)) { cnt = (uint16_t)RD_REG_DWORD(vha-req-req_q_out); - ql_dbg(ql_dbg_tgt, vha, 0xe00a, - Request ring circled: cnt=%d, vha--ring_index=%d, - vha-req-cnt=%d, req_cnt=%d\n, cnt, - vha-req-ring_index, vha-req-cnt, req_cnt); if (vha-req-ring_index cnt) vha-req-cnt = cnt - vha-req-ring_index; else @@ -1448,7 +1442,7 @@ static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, } if (unlikely(vha-req-cnt (req_cnt + 2))) { - ql_dbg(ql_dbg_tgt, vha, 0xe00b, + ql_dbg(ql_dbg_io, vha, 0x305a, qla_target(%d): There is no room in the request ring: vha-req-ring_index=%d, vha-req-cnt=%d, req_cnt=%d\n, vha-vp_idx, vha-req-ring_index, @@ -1489,7 +1483,7 @@ static inline uint32_t qlt_make_handle(struct scsi_qla_host *vha) if (h DEFAULT_OUTSTANDING_COMMANDS) h = 1; /* 0 is QLA_TGT_NULL_HANDLE */ if (h == ha-tgt.current_handle) { - ql_dbg(ql_dbg_tgt, vha, 0xe04e, + ql_dbg(ql_dbg_io, vha, 0x305b, qla_target(%d): Ran out of empty cmd slots in ha %p\n, vha-vp_idx, ha); h = QLA_TGT_NULL_HANDLE; @@ -1546,9 +1540,6 @@ static int qlt_24xx_build_ctio_pkt(struct qla_tgt_prm *prm, pkt-u.status0.ox_id = cpu_to_le16(temp); pkt-u.status0.relative_offset = cpu_to_le32(prm-cmd-offset); - ql_dbg(ql_dbg_tgt, vha, 0xe00c, - qla_target(%d): handle(cmd) - %08x, timeout %d, ox_id %#x\n, - vha-vp_idx, pkt-handle, QLA_TGT_TIMEOUT, temp); return 0; } @@ -1606,14 +1597,6 @@ static void qlt_load_cont_data_segments(struct qla_tgt_prm *prm, } *dword_ptr++ = cpu_to_le32(sg_dma_len(prm-sg)); - ql_dbg(ql_dbg_tgt, vha, 0xe00d, - S/G Segment Cont. phys_addr=%llx:%llx, len=%d\n, - (long long unsigned int) - pci_dma_hi32(sg_dma_address(prm-sg)), - (long long unsigned int) - pci_dma_lo32(sg_dma_address(prm-sg)), - (int)sg_dma_len(prm-sg)); - prm-sg = sg_next(prm-sg); } } @@ -1631,11 +1614,6 @@ static void qlt_load_data_segments(struct qla_tgt_prm *prm, int enable_64bit_addressing = prm-tgt-tgt_enable_64bit_addr; struct ctio7_to_24xx *pkt24 = (struct ctio7_to_24xx *)prm-pkt; - ql_dbg(ql_dbg_tgt, vha, 0xe00e, - iocb-scsi_status=%x, iocb-flags=%x\n, - le16_to_cpu(pkt24-u.status0.scsi_status), - le16_to_cpu(pkt24-u.status0.flags)); - pkt24-u.status0.transfer_length = cpu_to_le32(prm-cmd-bufflen); /* Setup packet address segment pointer */ @@ -1653,7 +1631,6 @@ static void qlt_load_data_segments(struct qla_tgt_prm *prm, } /* If scatter gather */ - ql_dbg(ql_dbg_tgt, vha, 0xe00f, %s, Building S/G data segments...); /* Load command entry data segments */ for (cnt = 0; @@ -1668,14 +1645,6 @@ static void qlt_load_data_segments(struct qla_tgt_prm *prm, } *dword_ptr++ = cpu_to_le32(sg_dma_len(prm-sg)); - ql_dbg(ql_dbg_tgt, vha, 0xe010, - S/G Segment phys_addr=%llx:%llx, len=%d\n, - (long long unsigned int)pci_dma_hi32(sg_dma_address( - prm-sg)), - (long long unsigned int)pci_dma_lo32(sg_dma_address( - prm-sg)), - (int)sg_dma_len(prm-sg)); - prm-sg = sg_next(prm-sg); } @@ -1713,10 +1682,6 @@ static int qlt_pre_xmit_response(struct
[PATCH 04/19] qla2xxx: Increase room in request queue for sending priority packets
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_iocb.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index 6a6867d..c787847 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c @@ -1901,7 +1901,7 @@ qla2x00_alloc_iocbs(scsi_qla_host_t *vha, srb_t *sp) skip_cmd_array: /* Check for room on request queue. */ - if (req-cnt req_cnt) { + if (req-cnt req_cnt + 2) { if (ha-mqenable || IS_QLA83XX(ha) || IS_QLA27XX(ha)) cnt = RD_REG_DWORD(reg-isp25mq.req_q_out); else if (IS_P3P_TYPE(ha)) @@ -1920,7 +1920,7 @@ skip_cmd_array: req-cnt = req-length - (req-ring_index - cnt); } - if (req-cnt req_cnt) + if (req-cnt req_cnt + 2) goto queuing_error; /* Prep packet */ -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 16/19] qla2xxx: Add flags for tracing the target commands.
Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 30 ++ drivers/scsi/qla2xxx/qla_target.h | 24 drivers/scsi/qla2xxx/tcm_qla2xxx.c | 24 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 51aa888..137ad54 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1718,6 +1718,7 @@ static int qlt_pre_xmit_response(struct qla_tgt_cmd *cmd, se_cmd, cmd-tag); cmd-state = QLA_TGT_STATE_ABORTED; + cmd-cmd_flags |= BIT_6; qlt_send_term_exchange(vha, cmd, cmd-atio, 0); @@ -2784,10 +2785,13 @@ void qlt_free_cmd(struct qla_tgt_cmd *cmd) __func__, cmd-se_cmd, be16_to_cpu(cmd-atio.u.isp24.fcp_hdr.ox_id)); + BUG_ON(cmd-cmd_in_wq); + if (!cmd-q_full) qlt_decr_num_pend_cmds(cmd-vha); BUG_ON(cmd-sg_mapped); + cmd-jiffies_at_free = get_jiffies_64(); if (unlikely(cmd-free_sg)) kfree(cmd-sg); @@ -2795,6 +2799,7 @@ void qlt_free_cmd(struct qla_tgt_cmd *cmd) WARN_ON(1); return; } + cmd-jiffies_at_free = get_jiffies_64(); percpu_ida_free(sess-se_sess-sess_tag_pool, cmd-se_cmd.map_tag); } EXPORT_SYMBOL(qlt_free_cmd); @@ -2808,6 +2813,7 @@ static int qlt_prepare_srr_ctio(struct scsi_qla_host *vha, struct qla_tgt_srr_imm *imm; tgt-ctio_srr_id++; + cmd-cmd_flags |= BIT_15; ql_dbg(ql_dbg_tgt_mgt, vha, 0xf019, qla_target(%d): CTIO with SRR status received\n, vha-vp_idx); @@ -2993,6 +2999,7 @@ qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) dump_stack(); } + cmd-cmd_flags |= BIT_12; ha-tgt.tgt_ops-free_cmd(cmd); } @@ -3147,6 +3154,7 @@ static void qlt_do_ctio_completion(struct scsi_qla_host *vha, uint32_t handle, */ if ((cmd-state != QLA_TGT_STATE_NEED_DATA) (cmd-state != QLA_TGT_STATE_ABORTED)) { + cmd-cmd_flags |= BIT_13; if (qlt_term_ctio_exchange(vha, ctio, cmd, status)) return; } @@ -3235,6 +3243,8 @@ static void __qlt_do_work(struct qla_tgt_cmd *cmd) uint32_t data_length; int ret, fcp_task_attr, data_dir, bidi = 0; + cmd-cmd_in_wq = 0; + cmd-cmd_flags |= BIT_1; if (tgt-tgt_stop) goto out_term; @@ -3278,6 +3288,7 @@ out_term: * cmd has not sent to target yet, so pass NULL as the second * argument to qlt_send_term_exchange() and free the memory here. */ + cmd-cmd_flags |= BIT_2; spin_lock_irqsave(ha-hardware_lock, flags); qlt_send_term_exchange(vha, NULL, cmd-atio, 1); @@ -3425,8 +3436,13 @@ static int qlt_handle_cmd_for_atio(struct scsi_qla_host *vha, return -ENOMEM; } + cmd-cmd_flags = 0; + cmd-jiffies_at_alloc = get_jiffies_64(); + cmd-reset_count = vha-hw-chip_reset; + cmd-cmd_in_wq = 1; + cmd-cmd_flags |= BIT_0; INIT_WORK(cmd-work, qlt_do_work); queue_work(qla_tgt_wq, cmd-work); return 0; @@ -3888,8 +3904,10 @@ static void qlt_handle_srr(struct scsi_qla_host *vha, qlt_send_notify_ack(vha, ntfy, 0, 0, 0, NOTIFY_ACK_SRR_FLAGS_ACCEPT, 0, 0); spin_unlock_irqrestore(ha-hardware_lock, flags); - if (xmit_type QLA_TGT_XMIT_DATA) + if (xmit_type QLA_TGT_XMIT_DATA) { + cmd-cmd_flags |= BIT_8; qlt_rdy_to_xfer(cmd); + } } else { ql_dbg(ql_dbg_tgt_mgt, vha, 0xf066, qla_target(%d): SRR for out data for cmd @@ -3907,8 +3925,10 @@ static void qlt_handle_srr(struct scsi_qla_host *vha, } /* Transmit response in case of status and data-in cases */ - if (resp) + if (resp) { + cmd-cmd_flags |= BIT_7; qlt_xmit_response(cmd, xmit_type, se_cmd-scsi_status); + } return; @@ -3921,8 +3941,10 @@ out_reject: if (cmd-state == QLA_TGT_STATE_NEED_DATA) { cmd-state = QLA_TGT_STATE_DATA_IN; dump_stack(); - } else + } else { + cmd-cmd_flags |= BIT_9; qlt_send_term_exchange(vha, cmd, cmd-atio, 1); + } spin_unlock_irqrestore(ha-hardware_lock, flags); } @@ -4036,7 +4058,7 @@ static void qlt_prepare_srr_imm(struct scsi_qla_host *vha
[PATCH 02/19] qla2xxx: fix kernel NULL pointer access
From: Himanshu Madhani himanshu.madh...@qlogic.com This patch is to fix regression added by commit id 51a07f84649d2be206c4c2ad9a612956db0c2f8c. When allocating memory for new session original patch does not assign vha to op-vha resulting into NULL pointer access during qlt_create_sess_from_atio(). Cc: sta...@vger.kernel.org Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index e632e14..e44fcb5 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -3277,6 +3277,7 @@ static int qlt_handle_cmd_for_atio(struct scsi_qla_host *vha, return -ENOMEM; memcpy(op-atio, atio, sizeof(*atio)); + op-vha = vha; INIT_WORK(op-work, qlt_create_sess_from_atio); queue_work(qla_tgt_wq, op-work); return 0; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 11/19] qla2xxx: Host reset handling in ABTS path.
From: Arun Easi arun.e...@qlogic.com ABTS path takes path similar to regular task management, but reset_count was not initialized when allocating mcmd causing the response to get dropped in qlt_xmit_tm_rsp. Fix this by initializing reset_count correctly. Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 25af5b7..2c36b6c 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1180,6 +1180,7 @@ static int __qlt_24xx_handle_abts(struct scsi_qla_host *vha, mcmd-sess = sess; memcpy(mcmd-orig_iocb.abts, abts, sizeof(mcmd-orig_iocb.abts)); + mcmd-reset_count = vha-hw-chip_reset; rc = ha-tgt.tgt_ops-handle_tmr(mcmd, lun, TMR_ABORT_TASK, abts-exchange_addr_to_abort); @@ -3518,6 +3519,7 @@ static int __qlt_abort_task(struct scsi_qla_host *vha, lun = a-u.isp24.fcp_cmnd.lun; unpacked_lun = scsilun_to_int((struct scsi_lun *)lun); + mcmd-reset_count = vha-hw-chip_reset; rc = ha-tgt.tgt_ops-handle_tmr(mcmd, unpacked_lun, TMR_ABORT_TASK, le16_to_cpu(iocb-u.isp2x.seq_id)); -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 20/35] qla2xxx: Unload of qla2xxx driver crashes the machine.
Hi Christoph, I will rebase and send an updated patch set soon. Thanks, ~Saurav On Wed, Sep 24, 2014 at 09:41:25AM -0400, Joe Lawrence wrote: Hi Saurav, Will these changes conflict with those submitted in August [1] to Christoph's drivers-for-3.18 branch? It does cause conflicts when applying the patch at least. Chad, can you please resend the series against the drivers-for-3.18 branch of git://git.infradead.org/users/hch/scsi-queue.git ? Please do so today so that we don't miss the merge window. attachment: winmail.dat
Re: [PATCH 20/35] qla2xxx: Unload of qla2xxx driver crashes the machine.
On Thu, Sep 25, 2014 at 08:57:18AM +, Saurav Kashyap wrote: Hi Christoph, I will rebase and send an updated patch set soon. Thanks. Did you verify the target side series sits nicely on top of this one as well? I'd like to slurp in the qla2xxx patches as well if Nick is fine with them, although I'd prefer to leave the target core changes for his target tree. As far as I can tell there is no hard dependency of the qla2xxx changes on those two, right? Next time it might be good idea to send them as two separate series. Hi, I will check, if there are any conflicts, I will resend that patch set. Thanks, ~Saurav attachment: winmail.dat
[PATCH RESEND 11/35] qla2xxx: ISPFX00 avoid writing semaphore register in request_irqs().
From: Joe Carnuccio joe.carnuc...@qlogic.com Semaphore register does not exist for ISPFx00. Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_isr.c |5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index a0992bf..223c1a8 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -3098,10 +3098,11 @@ skip_msi: } clear_risc_ints: + if (IS_FWI2_CAPABLE(ha) || IS_QLAFX00(ha)) + goto fail; spin_lock_irq(ha-hardware_lock); - if (!IS_FWI2_CAPABLE(ha)) - WRT_REG_WORD(reg-isp.semaphore, 0); + WRT_REG_WORD(reg-isp.semaphore, 0); spin_unlock_irq(ha-hardware_lock); fail: -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 04/35] qla2xxx: ISP27xx fwdump template fix insertbuf() routine.
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_tmpl.c | 12 ++-- 1 files changed, 2 insertions(+), 10 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c index 6da9dd2..6f2f7b2 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.c +++ b/drivers/scsi/qla2xxx/qla_tmpl.c @@ -128,18 +128,10 @@ qla27xx_insert32(uint32_t value, void *buf, ulong *len) static inline void qla27xx_insertbuf(void *mem, ulong size, void *buf, ulong *len) { - ulong cnt = size; - if (buf mem) { + if (buf mem size) { buf += *len; - while (cnt = sizeof(uint32_t)) { - *(__le32 *)buf = cpu_to_le32p(mem); - buf += sizeof(uint32_t); - mem += sizeof(uint32_t); - cnt -= sizeof(uint32_t); - } - if (cnt) - memcpy(buf, mem, cnt); + memcpy(buf, mem, size); } *len += size; } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 22/35] qla2xxx: Declaration error cause stack corruption.
From: Quinn Tran quinn.t...@qlogic.com Declaration error of mb array in qla2x00_iidma_fcport cause data to be written beyond the array. This ends up causing stack corruption. Signed-off-by: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_init.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index d5b10ec..ab22ccf 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -3192,7 +3192,7 @@ static void qla2x00_iidma_fcport(scsi_qla_host_t *vha, fc_port_t *fcport) { int rval; - uint16_t mb[4]; + uint16_t mb[MAILBOX_REGISTER_COUNT]; struct qla_hw_data *ha = vha-hw; if (!IS_IIDMA_CAPABLE(ha)) -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 28/35] qla2xxx: Honor FCP_RSP retry delay timer field.
From: Chad Dupuis chad.dup...@qlogic.com Parse the retry delay timer field from the FCP response data and if: - It is not zero - The SCSI status is busy or queue full return SCSI_MLQUEUE_TARGET_BUSY for the number of milliseconds specified in the retry delay timer field. Signed-off-by: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_def.h|2 ++ drivers/scsi/qla2xxx/qla_fw.h |2 +- drivers/scsi/qla2xxx/qla_inline.h |8 drivers/scsi/qla2xxx/qla_isr.c| 12 drivers/scsi/qla2xxx/qla_os.c |9 + 5 files changed, 32 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index d9daad7..d529510 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -2023,6 +2023,8 @@ typedef struct fc_port { unsigned long last_ramp_up; uint16_t port_id; + + unsigned long retry_delay_timestamp; } fc_port_t; #include qla_mr.h diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index 7f2e1c7..42bb357 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h @@ -567,7 +567,7 @@ struct sts_entry_24xx { #define SF_TRANSFERRED_DATABIT_11 #define SF_FCP_RSP_DMA BIT_0 - uint16_t reserved_2; + uint16_t retry_delay; uint16_t scsi_status; /* SCSI status. */ #define SS_CONFIRMATION_REQBIT_12 diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h index b3b1d6f..fee9eb7 100644 --- a/drivers/scsi/qla2xxx/qla_inline.h +++ b/drivers/scsi/qla2xxx/qla_inline.h @@ -279,3 +279,11 @@ qla2x00_handle_mbx_completion(struct qla_hw_data *ha, int status) complete(ha-mbx_intr_comp); } } + +static inline void +qla2x00_set_retry_delay_timestamp(fc_port_t *fcport, uint16_t retry_delay) +{ + if (retry_delay) + fcport-retry_delay_timestamp = jiffies + + (retry_delay * HZ / 10); +} diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 550ffdf..f15f87e 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -1983,6 +1983,7 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) int logit = 1; int res = 0; uint16_t state_flags = 0; + uint16_t retry_delay = 0; sts = (sts_entry_t *) pkt; sts24 = (struct sts_entry_24xx *) pkt; @@ -2076,6 +2077,9 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) host_to_fcp_swap(sts24-data, sizeof(sts24-data)); ox_id = le16_to_cpu(sts24-ox_id); par_sense_len = sizeof(sts24-data); + /* Valid values of the retry delay timer are 0x1-0xffef */ + if (sts24-retry_delay 0 sts24-retry_delay 0xfff1) + retry_delay = sts24-retry_delay; } else { if (scsi_status SS_SENSE_LEN_VALID) sense_len = le16_to_cpu(sts-req_sense_length); @@ -2110,6 +2114,14 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) comp_status = CS_DATA_OVERRUN; /* +* Check retry_delay_timer value if we receive a busy or +* queue full. +*/ + if (lscsi_status == SAM_STAT_TASK_SET_FULL || + lscsi_status == SAM_STAT_BUSY) + qla2x00_set_retry_delay_timestamp(fcport, retry_delay); + + /* * Based on Host and scsi status generate status code for Linux */ switch (comp_status) { diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index e742890..daabf8c 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -731,6 +731,15 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) goto qc24_target_busy; } + /* +* Return target busy if we've received a non-zero retry_delay_timer +* in a FCP_RSP. +*/ + if (time_after(jiffies, fcport-retry_delay_timestamp)) + fcport-retry_delay_timestamp = 0; + else + goto qc24_target_busy; + sp = qla2x00_get_sp(vha, fcport, GFP_ATOMIC); if (!sp) goto qc24_host_busy; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 08/35] qla2xxx: ISP25xx multiqueue shadow register crash fix.
From: Joe Carnuccio joe.carnuc...@qlogic.com When creating request/response queues from qla25xx_setup_mode(), the shadow index register pointers were not being initialized to point at the registers. Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_mid.c |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index 8999824..5c2e031 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c @@ -702,6 +702,7 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options, req-req_q_in = reg-isp25mq.req_q_in; req-req_q_out = reg-isp25mq.req_q_out; req-max_q_depth = ha-req_q_map[0]-max_q_depth; + req-out_ptr = (void *)(req-ring + req-length); mutex_unlock(ha-vport_lock); ql_dbg(ql_dbg_multiq, base_vha, 0xc004, ring_ptr=%p ring_index=%d, @@ -811,6 +812,7 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options, reg = ISP_QUE_REG(ha, que_id); rsp-rsp_q_in = reg-isp25mq.rsp_q_in; rsp-rsp_q_out = reg-isp25mq.rsp_q_out; + rsp-in_ptr = (void *)(rsp-ring + rsp-length); mutex_unlock(ha-vport_lock); ql_dbg(ql_dbg_multiq, base_vha, 0xc00b, options=%x id=%d rsp_q_in=%p rsp_q_out=%p, -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 07/35] qla2xxx: Add endianizer to max_payload_size modifier.
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_fw.h |2 +- drivers/scsi/qla2xxx/qla_init.c | 12 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index eb8f572..c7d1c45 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h @@ -91,7 +91,7 @@ struct nvram_24xx { /* Firmware Initialization Control Block. */ uint16_t version; uint16_t reserved_1; - uint16_t frame_payload_size; + __le16 frame_payload_size; uint16_t execution_throttle; uint16_t exchange_count; uint16_t hard_address; diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 46990f4..748bd90 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -2596,18 +2596,18 @@ qla2x00_nvram_config(scsi_qla_host_t *vha) nv-firmware_options[1] = BIT_7 | BIT_5; nv-add_firmware_options[0] = BIT_5; nv-add_firmware_options[1] = BIT_5 | BIT_4; - nv-frame_payload_size = __constant_cpu_to_le16(2048); + nv-frame_payload_size = 2048; nv-special_options[1] = BIT_7; } else if (IS_QLA2200(ha)) { nv-firmware_options[0] = BIT_2 | BIT_1; nv-firmware_options[1] = BIT_7 | BIT_5; nv-add_firmware_options[0] = BIT_5; nv-add_firmware_options[1] = BIT_5 | BIT_4; - nv-frame_payload_size = __constant_cpu_to_le16(1024); + nv-frame_payload_size = 1024; } else if (IS_QLA2100(ha)) { nv-firmware_options[0] = BIT_3 | BIT_1; nv-firmware_options[1] = BIT_5; - nv-frame_payload_size = __constant_cpu_to_le16(1024); + nv-frame_payload_size = 1024; } nv-max_iocb_allocation = __constant_cpu_to_le16(256); @@ -2643,7 +2643,7 @@ qla2x00_nvram_config(scsi_qla_host_t *vha) * are valid. */ if (ia64_platform_is(sn2)) { - nv-frame_payload_size = __constant_cpu_to_le16(2048); + nv-frame_payload_size = 2048; if (IS_QLA23XX(ha)) nv-special_options[1] = BIT_7; } @@ -4958,7 +4958,7 @@ qla24xx_nvram_config(scsi_qla_host_t *vha) memset(nv, 0, ha-nvram_size); nv-nvram_version = __constant_cpu_to_le16(ICB_VERSION); nv-version = __constant_cpu_to_le16(ICB_VERSION); - nv-frame_payload_size = __constant_cpu_to_le16(2048); + nv-frame_payload_size = 2048; nv-execution_throttle = __constant_cpu_to_le16(0x); nv-exchange_count = __constant_cpu_to_le16(0); nv-hard_address = __constant_cpu_to_le16(124); @@ -5905,7 +5905,7 @@ qla81xx_nvram_config(scsi_qla_host_t *vha) memset(nv, 0, ha-nvram_size); nv-nvram_version = __constant_cpu_to_le16(ICB_VERSION); nv-version = __constant_cpu_to_le16(ICB_VERSION); - nv-frame_payload_size = __constant_cpu_to_le16(2048); + nv-frame_payload_size = 2048; nv-execution_throttle = __constant_cpu_to_le16(0x); nv-exchange_count = __constant_cpu_to_le16(0); nv-port_name[0] = 0x21; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 31/35] qla2xxx: Disable PCI device in shutdown handler.
From: Chad Dupuis chad.dup...@qlogic.com Disable the PCI device during shutdown to prevent any races with other PCI code such as the AER handling code. Signed-off-by: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_os.c |3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index daabf8c..2c3c6af 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -3032,6 +3032,9 @@ qla2x00_shutdown(struct pci_dev *pdev) qla2x00_free_irqs(vha); qla2x00_free_fw_dump(ha); + + pci_disable_pcie_error_reporting(pdev); + pci_disable_device(pdev); } /* Deletes all the virtual ports for a given ha */ -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 23/35] qla2xxx: Enable diagnostic port using NVRAM parameters.
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_def.h |1 + drivers/scsi/qla2xxx/qla_init.c |4 2 files changed, 5 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index c161d60..c29f465 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -3136,6 +3136,7 @@ struct qla_hw_data { #define IS_ATIO_MSIX_CAPABLE(ha) (IS_QLA83XX(ha)) #define IS_TGT_MODE_CAPABLE(ha)(ha-tgt.atio_q_length) #define IS_SHADOW_REG_CAPABLE(ha) (IS_QLA27XX(ha)) +#define IS_DPORT_CAPABLE(ha) (IS_QLA83XX(ha) || IS_QLA27XX(ha)) /* HBA serial number */ uint8_t serial0; diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index ab22ccf..1b91771 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -2196,6 +2196,10 @@ qla2x00_init_rings(scsi_qla_host_t *vha) mid_init_cb-options = __constant_cpu_to_le16(BIT_1); mid_init_cb-init_cb.execution_throttle = cpu_to_le16(ha-fw_xcb_count); + /* D-Port Status */ + if (IS_DPORT_CAPABLE(ha)) + mid_init_cb-init_cb.firmware_options_1 |= + cpu_to_le16(BIT_7); } rval = qla2x00_init_firmware(vha, ha-init_cb_size); -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 20/35] qla2xxx: Unload of qla2xxx driver crashes the machine.
From: Arun Easi arun.e...@qlogic.com Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_os.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 0f9dcf6..4880f0b 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -3193,10 +3193,10 @@ qla2x00_remove_one(struct pci_dev *pdev) qla2x00_free_device(base_vha); - scsi_host_put(base_vha-host); - qla2x00_clear_drv_active(ha); + scsi_host_put(base_vha-host); + qla2x00_unmap_iobases(ha); pci_release_selected_regions(ha-pdev, ha-bars); -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 02/35] qla2xxx: ISP27xx optimize fwdump entry table lookup.
From: Joe Carnuccio joe.carnuc...@qlogic.com Since the entry call array is sorted in order of entry type opcode, the search can be terminated as soon as the search key is exceeded. Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_tmpl.c | 10 ++ 1 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c index 252de5d..29271cc 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.c +++ b/drivers/scsi/qla2xxx/qla_tmpl.c @@ -726,7 +726,7 @@ qla27xx_fwdt_entry_other(struct scsi_qla_host *vha, } struct qla27xx_fwdt_entry_call { - int type; + uint type; int (*call)( struct scsi_qla_host *, struct qla27xx_fwdt_entry *, @@ -759,15 +759,17 @@ static struct qla27xx_fwdt_entry_call ql27xx_fwdt_entry_call_list[] = { { -1, qla27xx_fwdt_entry_other } }; -static inline int (*qla27xx_find_entry(int type)) +static inline int (*qla27xx_find_entry(uint type)) (struct scsi_qla_host *, struct qla27xx_fwdt_entry *, void *, ulong *) { struct qla27xx_fwdt_entry_call *list = ql27xx_fwdt_entry_call_list; - while (list-type != -1 list-type != type) + while (list-type type) list++; - return list-call; + if (list-type == type) + return list-call; + return qla27xx_fwdt_entry_other; } static inline void * -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 27/35] qla2xxx: Add missing ISP27xx checks to optrom code.
From: Alex Vechersky alex.vecher...@qlogic.com Signed-off-by: Alex Vechersky alex.vecher...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_attr.c |3 ++- drivers/scsi/qla2xxx/qla_bsg.c |2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 9391e4b..82b92c4 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -484,7 +484,8 @@ qla2x00_sysfs_write_optrom_ctl(struct file *filp, struct kobject *kobj, start == (ha-flt_region_fw * 4)) valid = 1; else if (IS_QLA24XX_TYPE(ha) || IS_QLA25XX(ha) - || IS_CNA_CAPABLE(ha) || IS_QLA2031(ha)) + || IS_CNA_CAPABLE(ha) || IS_QLA2031(ha) + || IS_QLA27XX(ha)) valid = 1; if (!valid) { ql_log(ql_log_warn, vha, 0x7065, diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c index 524f9eb..2e2bb6f 100644 --- a/drivers/scsi/qla2xxx/qla_bsg.c +++ b/drivers/scsi/qla2xxx/qla_bsg.c @@ -1390,7 +1390,7 @@ qla2x00_optrom_setup(struct fc_bsg_job *bsg_job, scsi_qla_host_t *vha, start == (ha-flt_region_fw * 4)) valid = 1; else if (IS_QLA24XX_TYPE(ha) || IS_QLA25XX(ha) || - IS_CNA_CAPABLE(ha) || IS_QLA2031(ha)) + IS_CNA_CAPABLE(ha) || IS_QLA2031(ha) || IS_QLA27XX(ha)) valid = 1; if (!valid) { ql_log(ql_log_warn, vha, 0x7058, -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 05/35] qla2xxx: Add ISP27xx fwdump template entry T275 (insert buffer).
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c |7 +++ drivers/scsi/qla2xxx/qla_tmpl.c | 27 +++ drivers/scsi/qla2xxx/qla_tmpl.h |6 ++ 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 61bd49f..fff8769 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -64,11 +64,10 @@ * | || 0xb13c-0xb140 | * | || 0xb149 | * | MultiQ | 0xc00c | | - * | Misc | 0xd212 | 0xd011-0xd017 | - * | || 0xd020 | - * | || 0xd030-0xd0ff | + * | Misc | 0xd213 | 0xd011-0xd017 | + * | || 0xd031-0xd0ff | * | || 0xd101-0xd1fe | - * | || 0xd213-0xd2fe | + * | || 0xd214-0xd2fe | * | Target Mode | 0xe078 || * | Target Mode Management | 0xf072 | 0xf002-0xf003 | * | || 0xf046-0xf049 | diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c index 6f2f7b2..d92ee06 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.c +++ b/drivers/scsi/qla2xxx/qla_tmpl.c @@ -690,6 +690,32 @@ qla27xx_fwdt_entry_t274(struct scsi_qla_host *vha, } static int +qla27xx_fwdt_entry_t275(struct scsi_qla_host *vha, + struct qla27xx_fwdt_entry *ent, void *buf, ulong *len) +{ + ulong offset = offsetof(typeof(*ent), t275.buffer); + + ql_dbg(ql_dbg_misc, vha, 0xd213, + %s: buffer(%x) [%lx]\n, __func__, ent-t275.length, *len); + if (!ent-t275.length) { + ql_dbg(ql_dbg_misc, vha, 0xd020, + %s: buffer zero length\n, __func__); + qla27xx_skip_entry(ent, buf); + goto done; + } + if (offset + ent-t275.length ent-hdr.entry_size) { + ql_dbg(ql_dbg_misc, vha, 0xd030, + %s: buffer overflow\n, __func__); + qla27xx_skip_entry(ent, buf); + goto done; + } + + qla27xx_insertbuf(ent-t275.buffer, ent-t275.length, buf, len); +done: + return false; +} + +static int qla27xx_fwdt_entry_other(struct scsi_qla_host *vha, struct qla27xx_fwdt_entry *ent, void *buf, ulong *len) { @@ -731,6 +757,7 @@ static struct qla27xx_fwdt_entry_call ql27xx_fwdt_entry_call_list[] = { { ENTRY_TYPE_RDREMRAM , qla27xx_fwdt_entry_t272 } , { ENTRY_TYPE_PCICFG , qla27xx_fwdt_entry_t273 } , { ENTRY_TYPE_GET_SHADOW , qla27xx_fwdt_entry_t274 } , + { ENTRY_TYPE_WRITE_BUF , qla27xx_fwdt_entry_t275 } , { -1, qla27xx_fwdt_entry_other } }; diff --git a/drivers/scsi/qla2xxx/qla_tmpl.h b/drivers/scsi/qla2xxx/qla_tmpl.h index 1967424..f19856b 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.h +++ b/drivers/scsi/qla2xxx/qla_tmpl.h @@ -53,6 +53,7 @@ struct __packed qla27xx_fwdt_template { #define ENTRY_TYPE_RDREMRAM272 #define ENTRY_TYPE_PCICFG 273 #define ENTRY_TYPE_GET_SHADOW 274 +#define ENTRY_TYPE_WRITE_BUF 275 #define CAPTURE_FLAG_PHYS_ONLY BIT_0 #define CAPTURE_FLAG_PHYS_VIRT BIT_1 @@ -193,6 +194,11 @@ struct __packed qla27xx_fwdt_entry { uint8_t queue_type; uint8_t reserved[3]; } t274; + + struct __packed { + uint32_t length; + uint8_t buffer[]; + } t275; }; }; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 06/35] qla2xxx: Enable fast flash access for ISP83xx.
From: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_sup.c |3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c index bca173e..04b3701 100644 --- a/drivers/scsi/qla2xxx/qla_sup.c +++ b/drivers/scsi/qla2xxx/qla_sup.c @@ -2580,7 +2580,8 @@ qla25xx_read_optrom_data(struct scsi_qla_host *vha, uint8_t *buf, uint32_t faddr, left, burst; struct qla_hw_data *ha = vha-hw; - if (IS_QLA25XX(ha) || IS_QLA81XX(ha) || IS_QLA27XX(ha)) + if (IS_QLA25XX(ha) || IS_QLA81XX(ha) || IS_QLA83XX(ha) || + IS_QLA27XX(ha)) goto try_fast; if (offset 0xfff) goto slow_read; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 09/35] qla2xxx: ISP27xx fwdump template error print simplification.
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c |3 +++ drivers/scsi/qla2xxx/qla_tmpl.c | 31 --- drivers/scsi/qla2xxx/qla_tmpl.h |2 ++ 3 files changed, 9 insertions(+), 27 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index fff8769..d60c1c6 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -65,6 +65,9 @@ * | || 0xb149 | * | MultiQ | 0xc00c | | * | Misc | 0xd213 | 0xd011-0xd017 | + * | || 0xd021,0xd024 | + * | || 0xd025,0xd029 | + * | || 0xd02a,0xd02e | * | || 0xd031-0xd0ff | * | || 0xd101-0xd1fe | * | || 0xd214-0xd2fe | diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c index d92ee06..a8c0c73 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.c +++ b/drivers/scsi/qla2xxx/qla_tmpl.c @@ -355,14 +355,9 @@ qla27xx_fwdt_entry_t262(struct scsi_qla_host *vha, ent-t262.start_addr = start; ent-t262.end_addr = end; } - } else if (ent-t262.ram_area == T262_RAM_AREA_DDR_RAM) { - ql_dbg(ql_dbg_misc, vha, 0xd021, - %s: unsupported ddr ram\n, __func__); - qla27xx_skip_entry(ent, buf); - goto done; } else { ql_dbg(ql_dbg_misc, vha, 0xd022, - %s: unknown area %u\n, __func__, ent-t262.ram_area); + %s: unknown area %x\n, __func__, ent-t262.ram_area); qla27xx_skip_entry(ent, buf); goto done; } @@ -377,8 +372,6 @@ qla27xx_fwdt_entry_t262(struct scsi_qla_host *vha, dwords = end - start + 1; if (buf) { - ql_dbg(ql_dbg_misc, vha, 0xd024, - %s: @%lx - (%lx dwords)\n, __func__, start, dwords); buf += *len; qla24xx_dump_ram(vha-hw, start, buf, dwords, buf); } @@ -423,13 +416,9 @@ qla27xx_fwdt_entry_t263(struct scsi_qla_host *vha, count++; } } - } else if (ent-t263.queue_type == T263_QUEUE_TYPE_ATIO) { - ql_dbg(ql_dbg_misc, vha, 0xd025, - %s: unsupported atio queue\n, __func__); - qla27xx_skip_entry(ent, buf); } else { ql_dbg(ql_dbg_misc, vha, 0xd026, - %s: unknown queue %u\n, __func__, ent-t263.queue_type); + %s: unknown queue %x\n, __func__, ent-t263.queue_type); qla27xx_skip_entry(ent, buf); } @@ -524,17 +513,9 @@ qla27xx_fwdt_entry_t268(struct scsi_qla_host *vha, %s: missing eft\n, __func__); qla27xx_skip_entry(ent, buf); } - } else if (ent-t268.buf_type == T268_BUF_TYPE_EXCH_BUFOFF) { - ql_dbg(ql_dbg_misc, vha, 0xd029, - %s: unsupported exchange offload buffer\n, __func__); - qla27xx_skip_entry(ent, buf); - } else if (ent-t268.buf_type == T268_BUF_TYPE_EXTD_LOGIN) { - ql_dbg(ql_dbg_misc, vha, 0xd02a, - %s: unsupported extended login buffer\n, __func__); - qla27xx_skip_entry(ent, buf); } else { ql_dbg(ql_dbg_misc, vha, 0xd02b, - %s: unknown buf %x\n, __func__, ent-t268.buf_type); + %s: unknown buffer %x\n, __func__, ent-t268.buf_type); qla27xx_skip_entry(ent, buf); } @@ -670,13 +651,9 @@ qla27xx_fwdt_entry_t274(struct scsi_qla_host *vha, count++; } } - } else if (ent-t274.queue_type == T274_QUEUE_TYPE_ATIO_SHAD) { - ql_dbg(ql_dbg_misc, vha, 0xd02e, - %s: unsupported atio queue\n, __func__); - qla27xx_skip_entry(ent, buf); } else { ql_dbg(ql_dbg_misc, vha, 0xd02f, - %s: unknown queue %u\n, __func__, ent-t274.queue_type); + %s: unknown queue %x\n, __func__, ent-t274.queue_type); qla27xx_skip_entry(ent, buf); } diff --git a/drivers/scsi/qla2xxx/qla_tmpl.h b/drivers/scsi/qla2xxx/qla_tmpl.h index f19856b..141c1c5 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.h +++ b/drivers/scsi/qla2xxx/qla_tmpl.h @@ -214,6 +214,8 @@ struct __packed
[PATCH RESEND 18/35] qla2xxx: Fix driver version string message.
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_sup.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c index 4788ecd0..b656a05 100644 --- a/drivers/scsi/qla2xxx/qla_sup.c +++ b/drivers/scsi/qla2xxx/qla_sup.c @@ -3092,7 +3092,7 @@ qla24xx_get_flash_version(scsi_qla_host_t *vha, void *mbuf) ha-fw_revision[2] = dcode[2]; ha-fw_revision[3] = dcode[3]; ql_dbg(ql_dbg_init, vha, 0x0060, - Firmware revision %d.%d.%d.%d.\n, + Firmware revision %d.%d.%d (%x).\n, ha-fw_revision[0], ha-fw_revision[1], ha-fw_revision[2], ha-fw_revision[3]); } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 13/35] qla2xxx: Incorrect linked list semantic in qlafx00_get_fcport().
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_mr.c |5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_mr.c b/drivers/scsi/qla2xxx/qla_mr.c index 8ecf6de..620e60a 100644 --- a/drivers/scsi/qla2xxx/qla_mr.c +++ b/drivers/scsi/qla2xxx/qla_mr.c @@ -1675,17 +1675,16 @@ qlafx00_get_fcport(struct scsi_qla_host *vha, int tgt_id) fc_port_t *fcport; /* Check for matching device in remote port list. */ - fcport = NULL; list_for_each_entry(fcport, vha-vp_fcports, list) { if (fcport-tgt_id == tgt_id) { ql_dbg(ql_dbg_async, vha, 0x5072, Matching fcport(%p) found with TGT-ID: 0x%x and Remote TGT_ID: 0x%x\n, fcport, fcport-tgt_id, tgt_id); - break; + return fcport; } } - return fcport; + return NULL; } static void -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 30/35] qla2xxx: Mark port lost when we receive an RSCN for it.
From: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_isr.c | 17 - 1 files changed, 16 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 696e4a2..a04a1b1 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -575,8 +575,9 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb) struct device_reg_2xxx __iomem *reg = ha-iobase-isp; struct device_reg_24xx __iomem *reg24 = ha-iobase-isp24; struct device_reg_82xx __iomem *reg82 = ha-iobase-isp82; - uint32_trscn_entry, host_pid; + uint32_trscn_entry, host_pid, tmp_pid; unsigned long flags; + fc_port_t *fcport = NULL; /* Setup to process RIO completion. */ handle_cnt = 0; @@ -979,6 +980,20 @@ skip_rio: if (qla2x00_is_a_vp_did(vha, rscn_entry)) break; + /* +* Search for the rport related to this RSCN entry and mark it +* as lost. +*/ + list_for_each_entry(fcport, vha-vp_fcports, list) { + if (atomic_read(fcport-state) != FCS_ONLINE) + continue; + tmp_pid = fcport-d_id.b24; + if (fcport-d_id.b24 == rscn_entry) { + qla2x00_mark_device_lost(vha, fcport, 0, 0); + break; + } + } + atomic_set(vha-loop_down_timer, 0); vha-flags.management_server_logged_in = 0; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 16/35] qla2xxx: Add FA-WWN functionality.
From: Joe Carnuccio joe.carnuc...@qlogic.com Add support for the FA-WWN (fabric assigned wwn) fabric switch feature. (Fabric Assigned World Wide Port Name) Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c |7 ++- drivers/scsi/qla2xxx/qla_fw.h |2 +- drivers/scsi/qla2xxx/qla_mbx.c | 36 +++- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 28442d0..b33eec0 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -15,11 +15,8 @@ * | || 0x0144,0x0146 | * | || 0x015b-0x0160 | * | || 0x016e-0x0170 | - * | Mailbox commands | 0x118d | 0x1018-0x1019 | - * | || 0x10ca | - * | || 0x1115-0x1116 | - * | || 0x111a-0x111b | - * | || 0x1155-0x1158 | + * | Mailbox commands | 0x118d | 0x1115-0x1116 | + * | || 0x111a-0x111b | * | Device Discovery | 0x2016 | 0x2020-0x2022, | * | || 0x2011-0x2012, | * | || 0x2099-0x20a4 | diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index c7d1c45..e8669aa 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h @@ -317,7 +317,7 @@ struct init_cb_24xx { * BIT 3 = Reserved * BIT 4 = Enable Target Mode * BIT 5 = Disable Initiator Mode -* BIT 6 = Reserved +* BIT 6 = Acquire FA-WWN * BIT 7 = Reserved * * BIT 8 = Reserved diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index ca7f4f0..2de901b 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -1085,6 +1085,8 @@ qla2x00_get_adapter_id(scsi_qla_host_t *vha, uint16_t *id, uint8_t *al_pa, mcp-in_mb = MBX_9|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; if (IS_CNA_CAPABLE(vha-hw)) mcp-in_mb |= MBX_13|MBX_12|MBX_11|MBX_10; + if (IS_FWI2_CAPABLE(vha-hw)) + mcp-in_mb |= MBX_19|MBX_18|MBX_17|MBX_16; mcp-tov = MBX_TOV_SECONDS; mcp-flags = 0; rval = qla2x00_mailbox_command(vha, mcp); @@ -1118,6 +1120,22 @@ qla2x00_get_adapter_id(scsi_qla_host_t *vha, uint16_t *id, uint8_t *al_pa, vha-fcoe_vn_port_mac[1] = mcp-mb[13] 8; vha-fcoe_vn_port_mac[0] = mcp-mb[13] 0xff; } + /* If FA-WWN supported */ + if (mcp-mb[7] BIT_14) { + vha-port_name[0] = MSB(mcp-mb[16]); + vha-port_name[1] = LSB(mcp-mb[16]); + vha-port_name[2] = MSB(mcp-mb[17]); + vha-port_name[3] = LSB(mcp-mb[17]); + vha-port_name[4] = MSB(mcp-mb[18]); + vha-port_name[5] = LSB(mcp-mb[18]); + vha-port_name[6] = MSB(mcp-mb[19]); + vha-port_name[7] = LSB(mcp-mb[19]); + fc_host_port_name(vha-host) = + wwn_to_u64(vha-port_name); + ql_dbg(ql_dbg_mbx, vha, 0x10ca, + FA-WWN acquired %016llx\n, + wwn_to_u64(vha-port_name)); + } } return rval; @@ -3328,8 +3346,24 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, rptid_entry-port_id[2], rptid_entry-port_id[1], rptid_entry-port_id[0]); + /* FA-WWN is only for physical port */ + if (!vp_idx) { + void *wwpn = ha-init_cb-port_name; + + if (!MSB(stat)) { + if (rptid_entry-vp_idx_map[1] BIT_6) + wwpn = rptid_entry-reserved_4 + 8; + } + memcpy(vha-port_name, wwpn, WWN_SIZE); + fc_host_port_name(vha-host) = + wwn_to_u64(vha-port_name); + ql_dbg(ql_dbg_mbx, vha, 0x1018, + FA-WWN portname %016llx (%x)\n, + fc_host_port_name(vha-host), MSB(stat)); + } + vp = vha; - if (vp_idx == 0 (MSB(stat) != 1)) + if (vp_idx == 0) goto reg_needed
[PATCH RESEND 03/35] qla2xxx: ISP27xx fwdump template remove high frequency debug logs.
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c |2 +- drivers/scsi/qla2xxx/qla_tmpl.c | 17 - 2 files changed, 1 insertions(+), 18 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 55edaa2..61bd49f 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -64,7 +64,7 @@ * | || 0xb13c-0xb140 | * | || 0xb149 | * | MultiQ | 0xc00c | | - * | Misc | 0xd212 | 0xd017 | + * | Misc | 0xd212 | 0xd011-0xd017 | * | || 0xd020 | * | || 0xd030-0xd0ff | * | || 0xd101-0xd1fe | diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c index 29271cc..6da9dd2 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.c +++ b/drivers/scsi/qla2xxx/qla_tmpl.c @@ -151,8 +151,6 @@ qla27xx_read8(void *window, void *buf, ulong *len) if (buf) { value = RD_REG_BYTE((__iomem void *)window); - ql_dbg(ql_dbg_misc, NULL, 0xd011, - %s: - %x\n, __func__, value); } qla27xx_insert32(value, buf, len); } @@ -164,8 +162,6 @@ qla27xx_read16(void *window, void *buf, ulong *len) if (buf) { value = RD_REG_WORD((__iomem void *)window); - ql_dbg(ql_dbg_misc, NULL, 0xd012, - %s: - %x\n, __func__, value); } qla27xx_insert32(value, buf, len); } @@ -177,8 +173,6 @@ qla27xx_read32(void *window, void *buf, ulong *len) if (buf) { value = RD_REG_DWORD((__iomem void *)window); - ql_dbg(ql_dbg_misc, NULL, 0xd013, - %s: - %x\n, __func__, value); } qla27xx_insert32(value, buf, len); } @@ -197,10 +191,6 @@ qla27xx_read_reg(__iomem struct device_reg_24xx *reg, { void *window = (void *)reg + offset; - if (buf) { - ql_dbg(ql_dbg_misc, NULL, 0xd014, - %s: @%x\n, __func__, offset); - } qla27xx_read32(window, buf, len); } @@ -211,8 +201,6 @@ qla27xx_write_reg(__iomem struct device_reg_24xx *reg, __iomem void *window = reg + offset; if (buf) { - ql_dbg(ql_dbg_misc, NULL, 0xd015, - %s: @%x - %x\n, __func__, offset, data); WRT_REG_DWORD(window, data); } } @@ -225,11 +213,6 @@ qla27xx_read_window(__iomem struct device_reg_24xx *reg, void *window = (void *)reg + offset; void (*readn)(void *, void *, ulong *) = qla27xx_read_vector(width); - if (buf) { - ql_dbg(ql_dbg_misc, NULL, 0xd016, - %s: base=%x offset=%x count=%x width=%x\n, - __func__, addr, offset, count, width); - } qla27xx_write_reg(reg, IOBASE_ADDR, addr, buf); while (count--) { qla27xx_insert32(addr, buf, len); -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 29/35] qla2xxx: Restore WWPN in case of Loop Dead.
From: Himanshu Madhani himanshu.madh...@qlogic.com For FA-WWPN capable device, ISP2031 and ISP27XX, when loop dead is detected by a driver, restore WWPN from NVRAM. Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c |3 +-- drivers/scsi/qla2xxx/qla_def.h |3 ++- drivers/scsi/qla2xxx/qla_init.c |5 + drivers/scsi/qla2xxx/qla_isr.c | 10 ++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index b21adb3..5f25cf0 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -11,8 +11,7 @@ * -- * | Level| Last Value Used | Holes | * -- - * | Module Init and Probe| 0x017d | 0x0141 | - * | || 0x0144,0x0146 | + * | Module Init and Probe| 0x017d | 0x0144,0x0146 | * | || 0x015b-0x0160 | * | || 0x016e-0x0170 | * | Mailbox commands | 0x118d | 0x1115-0x1116 | diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index d529510..a3bab3a 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -2945,7 +2945,8 @@ struct qla_hw_data { uint32_tmr_reset_hdlr_active:1; uint32_tmr_intr_valid:1; - /* 34 bits */ + uint32_tfawwpn_enabled:1; + /* 35 bits */ } flags; /* This spinlock is used to protect io transactions, you must diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 51cabb9..23f12dd 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -2202,6 +2202,11 @@ qla2x00_init_rings(scsi_qla_host_t *vha) if (IS_DPORT_CAPABLE(ha)) mid_init_cb-init_cb.firmware_options_1 |= cpu_to_le16(BIT_7); + /* Enable FA-WWPN */ + ha-flags.fawwpn_enabled = + (mid_init_cb-init_cb.firmware_options_1 BIT_6) ? 1 : 0; + ql_dbg(ql_dbg_init, vha, 0x0141, FA-WWPN Support: %s.\n, + (ha-flags.fawwpn_enabled) ? enabled : disabled); } rval = qla2x00_init_firmware(vha, ha-init_cb_size); diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index f15f87e..696e4a2 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -752,6 +752,16 @@ skip_rio: if (atomic_read(vha-loop_state) != LOOP_DOWN) { atomic_set(vha-loop_state, LOOP_DOWN); atomic_set(vha-loop_down_timer, LOOP_DOWN_TIME); + /* +* In case of loop down, restore WWPN from +* NVRAM in case of FA-WWPN capable ISP +*/ + if (ha-flags.fawwpn_enabled) { + void *wwpn = ha-init_cb-port_name; + + memcpy(vha-port_name, wwpn, WWN_SIZE); + } + vha-device_flags |= DFLG_NO_CABLE; qla2x00_mark_all_devices_lost(vha, 1); } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 12/35] qla2xxx: Incorrect debug level on mailbox command print 0x1111.
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_mbx.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index a7a373f..ca7f4f0 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -117,7 +117,7 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp) command = mcp-mb[0]; mboxes = mcp-out_mb; - ql_dbg(ql_dbg_mbx + ql_dbg_buffer, vha, 0x, + ql_dbg(ql_dbg_mbx, vha, 0x, Mailbox registers (OUT):\n); for (cnt = 0; cnt ha-mbx_count; cnt++) { if (IS_QLA2200(ha) cnt == 8) -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 10/35] qla2xxx: Fix potential return count bug in qla2xxx_get_vpd_field().
From: Joe Carnuccio joe.carnuc...@qlogic.com Call scnprintf() instead of snprintf() since the latter may return an incorrect count in cases where the write is truncated to fit. scnprintf() returns the count of what was actually written; snprintf() returns the count of what would have been written. Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_sup.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c index 04b3701..4788ecd0 100644 --- a/drivers/scsi/qla2xxx/qla_sup.c +++ b/drivers/scsi/qla2xxx/qla_sup.c @@ -3163,7 +3163,7 @@ qla2xxx_get_vpd_field(scsi_qla_host_t *vha, char *key, char *str, size_t size) } if (pos end - len *pos != 0x78) - return snprintf(str, size, %.*s, len, pos + 3); + return scnprintf(str, size, %.*s, len, pos + 3); return 0; } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 14/35] qla2xxx: ISPFx00 unexpected resets during adapter boot sequence.
From: Jan Kulich jan.kul...@qlogic.com Signed-off-by: Jan Kulich jan.kul...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_mr.c |5 - 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_mr.c b/drivers/scsi/qla2xxx/qla_mr.c index 620e60a..c54a53d 100644 --- a/drivers/scsi/qla2xxx/qla_mr.c +++ b/drivers/scsi/qla2xxx/qla_mr.c @@ -1551,7 +1551,10 @@ qlafx00_timer_routine(scsi_qla_host_t *vha) ha-mr.fw_reset_timer_tick = QLAFX00_MAX_RESET_INTERVAL; } - ha-mr.old_aenmbx0_state = aenmbx0; + if (ha-mr.old_aenmbx0_state != aenmbx0) { + ha-mr.old_aenmbx0_state = aenmbx0; + ha-mr.fw_reset_timer_tick = QLAFX00_RESET_INTERVAL; + } ha-mr.fw_reset_timer_tick--; } if (test_bit(FX00_CRITEMP_RECOVERY, vha-dpc_flags)) { -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 26/35] qla2xxx: Force use of mailbox interface for flash access commands for ISP27xx.
From: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_init.c |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 1b91771..51cabb9 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -1848,7 +1848,9 @@ enable_82xx_npiv: spin_unlock_irqrestore(ha-hardware_lock, flags); } - if (rval == QLA_SUCCESS IS_FAC_REQUIRED(ha)) { + if (IS_QLA27XX(ha)) + ha-flags.fac_supported = 1; + else if (rval == QLA_SUCCESS IS_FAC_REQUIRED(ha)) { uint32_t size; rval = qla81xx_fac_get_sector_size(vha, size); -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 00/35] qla2xxx: Patches for 3.18 scsi misc branch.
Hi James, Christoph, Please apply the following patches to the scsi tree, misc branch at your earliest convenience. This patch set is rebased on drivers-for-3.18 branch of git://git.infradead.org/users/hch/scsi-queue.git. Thanks, ~Saurav Alex Vechersky (1): qla2xxx: Add missing ISP27xx checks to optrom code. Arun Easi (1): qla2xxx: Unload of qla2xxx driver crashes the machine. Chad Dupuis (6): qla2xxx: Enable fast flash access for ISP83xx. qla2xxx: Force use of mailbox interface for flash access commands for ISP27xx. qla2xxx: Honor FCP_RSP retry delay timer field. qla2xxx: Mark port lost when we receive an RSCN for it. qla2xxx: Disable PCI device in shutdown handler. qla2xxx: Fail adapter initialization on load ram failure. Himanshu Madhani (6): qla2xxx: Add FDMI-2 functionality. qla2xxx: Fix driver version string message. qla2xxx: Allow user to change ql2xfdmienable value. qla2xxx: Enable diagnostic port using NVRAM parameters. qla2xxx: Disable laser for ISP2031 while unloading driver. qla2xxx: Restore WWPN in case of Loop Dead. Jan Kulich (1): qla2xxx: ISPFx00 unexpected resets during adapter boot sequence. Joe Carnuccio (15): qla2xxx: ISP27xx add tests for incomplete template. qla2xxx: ISP27xx optimize fwdump entry table lookup. qla2xxx: ISP27xx fwdump template remove high frequency debug logs. qla2xxx: ISP27xx fwdump template fix insertbuf() routine. qla2xxx: Add ISP27xx fwdump template entry T275 (insert buffer). qla2xxx: Add endianizer to max_payload_size modifier. qla2xxx: ISP25xx multiqueue shadow register crash fix. qla2xxx: ISP27xx fwdump template error print simplification. qla2xxx: Fix potential return count bug in qla2xxx_get_vpd_field(). qla2xxx: ISPFX00 avoid writing semaphore register in request_irqs(). qla2xxx: Incorrect debug level on mailbox command print 0x. qla2xxx: Incorrect linked list semantic in qlafx00_get_fcport(). qla2xxx: Add FA-WWN functionality. qla2xxx: Add diagnostic port functionality. qla2xxx: Fix sparse warning in qla_iocb.c file. Nigel Kirkland (1): qla2xxx: Free sysfs attributes for ISP27xx. Quinn Tran (1): qla2xxx: Declaration error cause stack corruption. Saurav Kashyap (1): qla2xxx: Update the driver version to 8.07.00.16-k. Sawan Chandak (2): qla2xxx: Add fix in driver unload for pending activity. qla2xxx: Move warning message to debug level. drivers/scsi/qla2xxx/qla_attr.c| 16 +- drivers/scsi/qla2xxx/qla_bsg.c |2 +- drivers/scsi/qla2xxx/qla_dbg.c | 26 +- drivers/scsi/qla2xxx/qla_def.h | 167 ++- drivers/scsi/qla2xxx/qla_fw.h |8 +- drivers/scsi/qla2xxx/qla_gbl.h |4 +- drivers/scsi/qla2xxx/qla_gs.c | 943 +++- drivers/scsi/qla2xxx/qla_init.c| 37 +- drivers/scsi/qla2xxx/qla_inline.h |8 + drivers/scsi/qla2xxx/qla_iocb.c|2 +- drivers/scsi/qla2xxx/qla_isr.c | 52 ++- drivers/scsi/qla2xxx/qla_mbx.c | 41 ++- drivers/scsi/qla2xxx/qla_mid.c |2 + drivers/scsi/qla2xxx/qla_mr.c | 14 +- drivers/scsi/qla2xxx/qla_nx.c |2 +- drivers/scsi/qla2xxx/qla_os.c | 68 +++- drivers/scsi/qla2xxx/qla_sup.c |7 +- drivers/scsi/qla2xxx/qla_tmpl.c| 106 ++--- drivers/scsi/qla2xxx/qla_tmpl.h|8 + drivers/scsi/qla2xxx/qla_version.h |2 +- 20 files changed, 1241 insertions(+), 274 deletions(-) -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 32/35] qla2xxx: Fail adapter initialization on load ram failure.
From: Chad Dupuis chad.dup...@qlogic.com If we fail to load one of the segments of firmware fail the operation instead of trying to continue which will lead to a system crash since the pointers to the next segment will not be updated correctly. Signed-off-by: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_init.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 23f12dd..1d66f2f 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -5236,7 +5236,7 @@ qla24xx_load_risc_flash(scsi_qla_host_t *vha, uint32_t *srisc_addr, ql_log(ql_log_fatal, vha, 0x008f, Failed to load segment %d of firmware.\n, fragment); - break; + return QLA_FUNCTION_FAILED; } faddr += dlen; @@ -5539,7 +5539,7 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr) ql_log(ql_log_fatal, vha, 0x0098, Failed to load segment %d of firmware.\n, fragment); - break; + return QLA_FUNCTION_FAILED; } fwcode += dlen; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 01/35] qla2xxx: ISP27xx add tests for incomplete template.
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c |2 +- drivers/scsi/qla2xxx/qla_tmpl.c |9 + 2 files changed, 10 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 41117b3..55edaa2 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -64,7 +64,7 @@ * | || 0xb13c-0xb140 | * | || 0xb149 | * | MultiQ | 0xc00c | | - * | Misc | 0xd212 | 0xd017-0xd019 | + * | Misc | 0xd212 | 0xd017 | * | || 0xd020 | * | || 0xd030-0xd0ff | * | || 0xd101-0xd1fe | diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c index cb9a0c4..252de5d 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.c +++ b/drivers/scsi/qla2xxx/qla_tmpl.c @@ -792,6 +792,15 @@ qla27xx_walk_template(struct scsi_qla_host *vha, break; ent = qla27xx_next_entry(ent); } + + if (count) + ql_dbg(ql_dbg_misc, vha, 0xd018, + %s: residual count (%lx)\n, __func__, count); + + if (ent-hdr.entry_type != ENTRY_TYPE_TMP_END) + ql_dbg(ql_dbg_misc, vha, 0xd019, + %s: missing end (%lx)\n, __func__, count); + ql_dbg(ql_dbg_misc, vha, 0xd01b, %s: len=%lx\n, __func__, *len); } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 17/35] qla2xxx: Add diagnostic port functionality.
From: Joe Carnuccio joe.carnuc...@qlogic.com Add support for the D-port (diagnostic port) fabric switch feature. (Fabric Switch initiates loopback style port testing) Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_attr.c |6 +++--- drivers/scsi/qla2xxx/qla_dbg.c |2 +- drivers/scsi/qla2xxx/qla_def.h |2 ++ drivers/scsi/qla2xxx/qla_fw.h |2 +- drivers/scsi/qla2xxx/qla_init.c |6 +++--- drivers/scsi/qla2xxx/qla_isr.c |8 drivers/scsi/qla2xxx/qla_mbx.c |3 ++- 7 files changed, 20 insertions(+), 9 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 868f4e5..677239f 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -1440,7 +1440,7 @@ qla2x00_fw_state_show(struct device *dev, struct device_attribute *attr, { scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); int rval = QLA_FUNCTION_FAILED; - uint16_t state[5]; + uint16_t state[6]; uint32_t pstate; if (IS_QLAFX00(vha-hw)) { @@ -1456,8 +1456,8 @@ qla2x00_fw_state_show(struct device *dev, struct device_attribute *attr, if (rval != QLA_SUCCESS) memset(state, -1, sizeof(state)); - return scnprintf(buf, PAGE_SIZE, 0x%x 0x%x 0x%x 0x%x 0x%x\n, state[0], - state[1], state[2], state[3], state[4]); + return scnprintf(buf, PAGE_SIZE, 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n, + state[0], state[1], state[2], state[3], state[4], state[5]); } static ssize_t diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index b33eec0..2d5610b 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -28,7 +28,7 @@ * | || 0x303a | * | DPC Thread | 0x4023 | 0x4002,0x4013 | * | Async Events | 0x5087 | 0x502b-0x502f | - * | || 0x5047,0x5052 | + * | || 0x5047 | * | || 0x5084,0x5075 | * | || 0x503d,0x5044 | * | || 0x507b,0x505f | diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index e5baead..c161d60 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -803,6 +803,7 @@ struct mbx_cmd_32 { #define MBA_FW_RESTART_CMPLT 0x8060 /* Firmware restart complete */ #define MBA_INIT_REQUIRED 0x8061 /* Initialization required */ #define MBA_SHUTDOWN_REQUESTED 0x8062 /* Shutdown Requested */ +#define MBA_DPORT_DIAGNOSTICS 0x8080 /* D-port Diagnostics */ #define MBA_FW_INIT_FAILURE0x8401 /* Firmware initialization failure */ #define MBA_MIRROR_LUN_CHANGE 0x8402 /* Mirror LUN State Change Notification */ @@ -948,6 +949,7 @@ struct mbx_cmd_32 { #define MBC_WRITE_SFP 0x30/* Write SFP Data. */ #define MBC_READ_SFP 0x31/* Read SFP Data. */ #define MBC_SET_TIMEOUT_PARAMS 0x32/* Set FW timeouts. */ +#define MBC_DPORT_DIAGNOSTICS 0x47/* D-Port Diagnostics */ #define MBC_MID_INITIALIZE_FIRMWARE0x48/* MID Initialize firmware. */ #define MBC_MID_GET_VP_DATABASE0x49/* MID Get VP Database. */ #define MBC_MID_GET_VP_ENTRY 0x4a/* MID Get VP Entry. */ diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index e8669aa..7f2e1c7 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h @@ -318,7 +318,7 @@ struct init_cb_24xx { * BIT 4 = Enable Target Mode * BIT 5 = Disable Initiator Mode * BIT 6 = Acquire FA-WWN -* BIT 7 = Reserved +* BIT 7 = Enable D-port Diagnostics * * BIT 8 = Reserved * BIT 9 = Non Participating LIP diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 748bd90..d5b10ec 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -2224,7 +2224,7 @@ qla2x00_fw_ready(scsi_qla_host_t *vha) unsigned long wtime, mtime, cs84xx_time; uint16_tmin_wait; /* Minimum wait time if loop is down */ uint16_twait_time; /* Wait time if loop is coming ready */ - uint16_tstate[5]; + uint16_tstate[6]; struct qla_hw_data *ha = vha-hw; if (IS_QLAFX00(vha-hw)) @@ -2329,8 +2329,8 @@ qla2x00_fw_ready(scsi_qla_host_t *vha) } while (1); ql_dbg(ql_dbg_taskm, vha, 0x803a, - fw_state=%x (%x, %x, %x, %x) curr time=%lx.\n, state[0
[PATCH RESEND 19/35] qla2xxx: Allow user to change ql2xfdmienable value.
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_os.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 1b9864c..0f9dcf6 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -105,7 +105,7 @@ MODULE_PARM_DESC(ql2xshiftctondsd, based on total number of SG elements.); int ql2xfdmienable=1; -module_param(ql2xfdmienable, int, S_IRUGO); +module_param(ql2xfdmienable, int, S_IRUGO|S_IWUSR); MODULE_PARM_DESC(ql2xfdmienable, Enables FDMI registrations. 0 - no FDMI. Default is 1 - perform FDMI.); -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 24/35] qla2xxx: Disable laser for ISP2031 while unloading driver.
From: Himanshu Madhani himanshu.madh...@qlogic.com Nameserver data on FC switch is not refreshed when qla2xxx driver is unloaded. Disabling laser for ISP2031 will force FC switch to rescan ports and clear fdmi entries from Nameserver. Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c |2 +- drivers/scsi/qla2xxx/qla_def.h |5 + drivers/scsi/qla2xxx/qla_os.c | 31 +++ 3 files changed, 37 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 2d5610b..b21adb3 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -11,7 +11,7 @@ * -- * | Level| Last Value Used | Holes | * -- - * | Module Init and Probe| 0x017d | 0x004b,0x0141 | + * | Module Init and Probe| 0x017d | 0x0141 | * | || 0x0144,0x0146 | * | || 0x015b-0x0160 | * | || 0x016e-0x0170 | diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index c29f465..d9daad7 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -191,6 +191,11 @@ * reset-recovery completion is * second */ +/* ISP2031: Values for laser on/off */ +#define PORT_0_20310x00201340 +#define PORT_1_20310x00201350 +#define LASER_ON_2031 0x01800100 +#define LASER_OFF_2031 0x01800180 /* * The ISP2312 v2 chip cannot access the FLASH/GPIO registers via MMIO in an diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 72b94f9..e742890 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -240,6 +240,7 @@ static int qla2x00_change_queue_depth(struct scsi_device *, int, int); static int qla2x00_change_queue_type(struct scsi_device *, int); static void qla2x00_clear_drv_active(struct qla_hw_data *); static void qla2x00_free_device(scsi_qla_host_t *); +static void qla83xx_disable_laser(scsi_qla_host_t *vha); struct scsi_host_template qla2xxx_driver_template = { .module = THIS_MODULE, @@ -3177,6 +3178,10 @@ qla2x00_remove_one(struct pci_dev *pdev) qla84xx_put_chip(base_vha); + /* Laser should be disabled only for ISP2031 */ + if (IS_QLA2031(ha)) + qla83xx_disable_laser(base_vha); + /* Disable timer */ if (base_vha-timer_active) qla2x00_stop_timer(base_vha); @@ -5701,6 +5706,32 @@ qla2xxx_pci_resume(struct pci_dev *pdev) ha-flags.eeh_busy = 0; } +static void +qla83xx_disable_laser(scsi_qla_host_t *vha) +{ + uint32_t reg, data, fn; + struct qla_hw_data *ha = vha-hw; + struct device_reg_24xx __iomem *isp_reg = ha-iobase-isp24; + + /* pci func #/port # */ + ql_dbg(ql_dbg_init, vha, 0x004b, + Disabling Laser for hba: %p\n, vha); + + fn = (RD_REG_DWORD(isp_reg-ctrl_status) + (BIT_15|BIT_14|BIT_13|BIT_12)); + + fn = (fn 12); + + if (fn 1) + reg = PORT_1_2031; + else + reg = PORT_0_2031; + + data = LASER_OFF_2031; + + qla83xx_wr_reg(vha, reg, data); +} + static const struct pci_error_handlers qla2xxx_err_handler = { .error_detected = qla2xxx_pci_error_detected, .mmio_enabled = qla2xxx_pci_mmio_enabled, -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 21/35] qla2xxx: Add fix in driver unload for pending activity.
From: Sawan Chandak sawan.chan...@qlogic.com Signed-off-by: Sawan Chandak sawan.chan...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_os.c |6 -- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 4880f0b..72b94f9 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -860,8 +860,10 @@ qla2x00_wait_for_hba_ready(scsi_qla_host_t *vha) { struct qla_hw_data *ha = vha-hw; - while ((!(vha-flags.online) || ha-dpc_active || - ha-flags.mbox_busy)) + while (((qla2x00_reset_active(vha)) || ha-dpc_active || + ha-flags.mbox_busy) || + test_bit(FX00_RESET_RECOVERY, vha-dpc_flags) || + test_bit(FX00_TARGET_SCAN, vha-dpc_flags)) msleep(1000); } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 35/35] qla2xxx: Update the driver version to 8.07.00.16-k.
Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_version.h |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h index 4d2c98c..d88b862 100644 --- a/drivers/scsi/qla2xxx/qla_version.h +++ b/drivers/scsi/qla2xxx/qla_version.h @@ -7,7 +7,7 @@ /* * Driver version */ -#define QLA2XXX_VERSION 8.07.00.08-k +#define QLA2XXX_VERSION 8.07.00.16-k #define QLA_DRIVER_MAJOR_VER 8 #define QLA_DRIVER_MINOR_VER 7 -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 33/35] qla2xxx: Move warning message to debug level.
From: Sawan Chandak sawan.chan...@qlogic.com Signed-off-by: Sawan Chandak sawan.chan...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_nx.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c index 2562600..54cb2ac 100644 --- a/drivers/scsi/qla2xxx/qla_nx.c +++ b/drivers/scsi/qla2xxx/qla_nx.c @@ -857,7 +857,7 @@ qla82xx_rom_lock(struct qla_hw_data *ha) break; if (timeout = qla82xx_rom_lock_timeout) { lock_owner = qla82xx_rd_32(ha, QLA82XX_ROM_LOCK_ID); - ql_log(ql_log_warn, vha, 0xb157, + ql_dbg(ql_dbg_p3p, vha, 0xb157, %s: Simultaneous flash access by following ports, active port = %d: accessing port = %d, __func__, ha-portnum, lock_owner); return -1; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 34/35] qla2xxx: Fix sparse warning in qla_iocb.c file.
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_iocb.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index 150529d..6a6867d 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c @@ -2648,7 +2648,7 @@ queuing_error: return QLA_FUNCTION_FAILED; } -void +static void qla24xx_abort_iocb(srb_t *sp, struct abort_entry_24xx *abt_iocb) { struct srb_iocb *aio = sp-u.iocb_cmd; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 15/35] qla2xxx: Add FDMI-2 functionality.
From: Himanshu Madhani himanshu.madh...@qlogic.com Add support for the FDMI-2 fabric switch feature. Since FDMI-2 uses code from FDMI-1, some of the existing code needed to be repaired to prevent fields from being overflowed. Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_attr.c |5 +- drivers/scsi/qla2xxx/qla_dbg.c |4 +- drivers/scsi/qla2xxx/qla_def.h | 154 ++-- drivers/scsi/qla2xxx/qla_gbl.h |4 +- drivers/scsi/qla2xxx/qla_gs.c | 943 ++- drivers/scsi/qla2xxx/qla_mr.c |4 +- drivers/scsi/qla2xxx/qla_os.c | 13 +- 7 files changed, 967 insertions(+), 160 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 16fe519..868f4e5 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -1014,7 +1014,7 @@ qla2x00_fw_version_show(struct device *dev, char fw_str[128]; return scnprintf(buf, PAGE_SIZE, %s\n, - ha-isp_ops-fw_version_str(vha, fw_str)); + ha-isp_ops-fw_version_str(vha, fw_str, sizeof(fw_str))); } static ssize_t @@ -1924,7 +1924,8 @@ qla2x00_get_host_symbolic_name(struct Scsi_Host *shost) { scsi_qla_host_t *vha = shost_priv(shost); - qla2x00_get_sym_node_name(vha, fc_host_symbolic_name(shost)); + qla2x00_get_sym_node_name(vha, fc_host_symbolic_name(shost), + sizeof(fc_host_symbolic_name(shost))); } static void diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index d60c1c6..28442d0 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -20,9 +20,9 @@ * | || 0x1115-0x1116 | * | || 0x111a-0x111b | * | || 0x1155-0x1158 | - * | Device Discovery | 0x2095 | 0x2020-0x2022, | + * | Device Discovery | 0x2016 | 0x2020-0x2022, | * | || 0x2011-0x2012, | - * | || 0x2016 | + * | || 0x2099-0x20a4 | * | Queue Command and IO tracing | 0x3059 | 0x3006-0x300b | * | || 0x3027-0x3028 | * | || 0x303d-0x3041 | diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index de5a9c4..e5baead 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -2056,10 +2056,21 @@ static const char * const port_state_str[] = { #define CT_REJECT_RESPONSE 0x8001 #define CT_ACCEPT_RESPONSE 0x8002 -#define CT_REASON_INVALID_COMMAND_CODE 0x01 -#define CT_REASON_CANNOT_PERFORM 0x09 -#define CT_REASON_COMMAND_UNSUPPORTED 0x0b -#define CT_EXPL_ALREADY_REGISTERED 0x10 +#define CT_REASON_INVALID_COMMAND_CODE 0x01 +#define CT_REASON_CANNOT_PERFORM 0x09 +#define CT_REASON_COMMAND_UNSUPPORTED 0x0b +#define CT_EXPL_ALREADY_REGISTERED 0x10 +#define CT_EXPL_HBA_ATTR_NOT_REGISTERED0x11 +#define CT_EXPL_MULTIPLE_HBA_ATTR 0x12 +#define CT_EXPL_INVALID_HBA_BLOCK_LENGTH 0x13 +#define CT_EXPL_MISSING_REQ_HBA_ATTR 0x14 +#define CT_EXPL_PORT_NOT_REGISTERED_ 0x15 +#define CT_EXPL_MISSING_HBA_ID_PORT_LIST 0x16 +#define CT_EXPL_HBA_NOT_REGISTERED 0x17 +#define CT_EXPL_PORT_ATTR_NOT_REGISTERED 0x20 +#define CT_EXPL_PORT_NOT_REGISTERED0x21 +#define CT_EXPL_MULTIPLE_PORT_ATTR 0x22 +#define CT_EXPL_INVALID_PORT_BLOCK_LENGTH 0x23 #define NS_N_PORT_TYPE 0x01 #define NS_NL_PORT_TYPE0x02 @@ -2116,33 +2127,40 @@ static const char * const port_state_str[] = { * HBA attribute types. */ #define FDMI_HBA_ATTR_COUNT9 -#define FDMI_HBA_NODE_NAME 1 -#define FDMI_HBA_MANUFACTURER 2 -#define FDMI_HBA_SERIAL_NUMBER 3 -#define FDMI_HBA_MODEL 4 -#define FDMI_HBA_MODEL_DESCRIPTION 5 -#define FDMI_HBA_HARDWARE_VERSION 6 -#define FDMI_HBA_DRIVER_VERSION7 -#define FDMI_HBA_OPTION_ROM_VERSION8 -#define FDMI_HBA_FIRMWARE_VERSION 9 +#define FDMIV2_HBA_ATTR_COUNT 17 +#define FDMI_HBA_NODE_NAME 0x1 +#define FDMI_HBA_MANUFACTURER 0x2 +#define FDMI_HBA_SERIAL_NUMBER 0x3 +#define FDMI_HBA_MODEL 0x4 +#define FDMI_HBA_MODEL_DESCRIPTION 0x5 +#define FDMI_HBA_HARDWARE_VERSION 0x6 +#define FDMI_HBA_DRIVER_VERSION0x7
[PATCH RESEND 25/35] qla2xxx: Free sysfs attributes for ISP27xx.
From: Nigel Kirkland nigel.kirkl...@qlogic.com Signed-off-by: Nigel Kirkland nigel.kirkl...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_attr.c |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 677239f..9391e4b 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -987,6 +987,8 @@ qla2x00_free_sysfs_attr(scsi_qla_host_t *vha, bool stop_beacon) continue; if (iter-is4GBp_only == 3 !(IS_CNA_CAPABLE(vha-hw))) continue; + if (iter-is4GBp_only == 0x27 !IS_QLA27XX(vha-hw)) + continue; sysfs_remove_bin_file(host-shost_gendev.kobj, iter-attr); -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 06/19] qla2xxx: Enable SLER conditionally in target mode.
Hi Christoph, Thanks for the feedback. Let me make necessary changes and resubmit the patch set. As suggested by you, I will also do the separate submission for qla2xxx and tcm-lio. Thanks, ~Saurav On Thu, Sep 25, 2014 at 04:09:59AM -0400, Saurav Kashyap wrote: From: Arun Easi arun.e...@qlogic.com Sequence level error recovery (aka FC Tape) is not really required for disk devices. On heavily loaded system, with slow turn around, a bunch of status enquiries using REC puts additional burden to the target, so just turn off SLER by default. I don't think a new compile time flag for this is a good idea. I can put this in under the assumption that it will basically #if 0 out the code, but a module or sysfs parameter would be more useful if your intent is that users ever enable it. attachment: winmail.dat
[PATCH RESEND 02/17] qla2xxx: fix kernel NULL pointer access
From: Himanshu Madhani himanshu.madh...@qlogic.com This patch is to fix regression added by commit id 51a07f84649d2be206c4c2ad9a612956db0c2f8c. When allocating memory for new session original patch does not assign vha to op-vha resulting into NULL pointer access during qlt_create_sess_from_atio(). Cc: sta...@vger.kernel.org Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index aebe62c..43f9177 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -3277,6 +3277,7 @@ static int qlt_handle_cmd_for_atio(struct scsi_qla_host *vha, return -ENOMEM; memcpy(op-atio, atio, sizeof(*atio)); + op-vha = vha; INIT_WORK(op-work, qlt_create_sess_from_atio); queue_work(qla_tgt_wq, op-work); return 0; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 01/17] qla2xxx: Fix sparse warnings in tcm_qla2xxx.c
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/tcm_qla2xxx.c | 12 ++-- 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index e2beab9..09d2931 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -50,8 +50,12 @@ #include qla_target.h #include tcm_qla2xxx.h -struct workqueue_struct *tcm_qla2xxx_free_wq; -struct workqueue_struct *tcm_qla2xxx_cmd_wq; +static struct workqueue_struct *tcm_qla2xxx_free_wq; +static struct workqueue_struct *tcm_qla2xxx_cmd_wq; + +/* Local pointer to allocated TCM configfs fabric module */ +static struct target_fabric_configfs *tcm_qla2xxx_fabric_configfs; +static struct target_fabric_configfs *tcm_qla2xxx_npiv_fabric_configfs; /* * Parse WWN. @@ -734,10 +738,6 @@ static void tcm_qla2xxx_aborted_task(struct se_cmd *se_cmd) cmd-sg_mapped = 0; } -/* Local pointer to allocated TCM configfs fabric module */ -struct target_fabric_configfs *tcm_qla2xxx_fabric_configfs; -struct target_fabric_configfs *tcm_qla2xxx_npiv_fabric_configfs; - static void tcm_qla2xxx_clear_sess_lookup(struct tcm_qla2xxx_lport *, struct tcm_qla2xxx_nacl *, struct qla_tgt_sess *); /* -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 04/17] qla2xxx: Increase room in request queue for sending priority packets
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_iocb.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index 6a6867d..c787847 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c @@ -1901,7 +1901,7 @@ qla2x00_alloc_iocbs(scsi_qla_host_t *vha, srb_t *sp) skip_cmd_array: /* Check for room on request queue. */ - if (req-cnt req_cnt) { + if (req-cnt req_cnt + 2) { if (ha-mqenable || IS_QLA83XX(ha) || IS_QLA27XX(ha)) cnt = RD_REG_DWORD(reg-isp25mq.req_q_out); else if (IS_P3P_TYPE(ha)) @@ -1920,7 +1920,7 @@ skip_cmd_array: req-cnt = req-length - (req-ring_index - cnt); } - if (req-cnt req_cnt) + if (req-cnt req_cnt + 2) goto queuing_error; /* Prep packet */ -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 13/17] qla2xxx: Add support for QFull throttling and Term Exchange retry
From: Quinn Tran quinn.t...@qlogic.com Through the qla target code, the qlt_send_term_exchange() routine is used in various different places to cleanup an exchange. For the case of IOCB request queue is full, the exchange is left unhandled/ dangling. Existing code does not have re-try logic to cleanup the exchange. This patch add retry logic to cleanup the exchange before letting new commands through. For the case of FW running out of exchanges, driver need to reply SAM_STAT_BUSY to the initiators. This patch add a pending queue for the busy reply in case IOCB queue is unable to handle the cmd. Cc: sta...@vger.kernel.org Signed-off-by: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c|4 +- drivers/scsi/qla2xxx/qla_def.h| 17 ++ drivers/scsi/qla2xxx/qla_os.c |2 + drivers/scsi/qla2xxx/qla_target.c | 297 - drivers/scsi/qla2xxx/qla_target.h |4 + 5 files changed, 316 insertions(+), 8 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 83d47ab..d77fe43 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -19,7 +19,7 @@ * | Device Discovery | 0x2016 | 0x2020-0x2022, | * | || 0x2011-0x2012, | * | || 0x2099-0x20a4 | - * | Queue Command and IO tracing | 0x3059 | 0x3006-0x300b | + * | Queue Command and IO tracing | 0x3059 | 0x300b | * | || 0x3027-0x3028 | * | || 0x303d-0x3041 | * | || 0x302d,0x3033 | @@ -67,7 +67,7 @@ * | || 0xd031-0xd0ff | * | || 0xd101-0xd1fe | * | || 0xd214-0xd2fe | - * | Target Mode | 0xe078 || + * | Target Mode | 0xe079 || * | Target Mode Management | 0xf072 | 0xf002 | * | || 0xf046-0xf049 | * | Target Mode Task Management | 0x1000b || diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index b048841..5f6b296 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -2776,6 +2776,9 @@ struct qla_statistics { uint32_t control_requests; uint64_t jiffies_at_last_reset; + uint32_t stat_max_pend_cmds; + uint32_t stat_max_qfull_cmds_alloc; + uint32_t stat_max_qfull_cmds_dropped; }; struct bidi_statistics { @@ -2898,8 +2901,22 @@ struct qlt_hw_data { uint8_t saved_add_firmware_options[2]; uint8_t tgt_node_name[WWN_SIZE]; + + struct list_head q_full_list; + uint32_t num_pend_cmds; + uint32_t num_qfull_cmds_alloc; + uint32_t num_qfull_cmds_dropped; + spinlock_t q_full_lock; + uint32_t leak_exchg_thresh_hold; }; +#define MAX_QFULL_CMDS_ALLOC 8192 +#define Q_FULL_THRESH_HOLD_PERCENT 90 +#define Q_FULL_THRESH_HOLD(ha) \ + ((ha-fw_xcb_count/100) * Q_FULL_THRESH_HOLD_PERCENT) + +#define LEAK_EXCHG_THRESH_HOLD_PERCENT 75 /* 75 percent */ + /* * Qlogic host adapter specific data structure. */ diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 34e56e2..dabd254 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -2398,6 +2398,8 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) Memory allocated for ha=%p.\n, ha); ha-pdev = pdev; ha-tgt.enable_class_2 = ql2xenableclass2; + INIT_LIST_HEAD(ha-tgt.q_full_list); + spin_lock_init(ha-tgt.q_full_lock); /* Clear our data area */ ha-bars = bars; diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index ccd0ca2..9f248e7 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -59,6 +59,8 @@ MODULE_PARM_DESC(qlini_mode, int ql2x_ini_mode = QLA2XXX_INI_MODE_EXCLUSIVE; +static int temp_sam_status = SAM_STAT_BUSY; + /* * From scsi/fc/fc_fcp.h */ @@ -108,6 +110,8 @@ static void qlt_reject_free_srr_imm(struct scsi_qla_host *ha, struct qla_tgt_srr_imm *imm, int ha_lock); static void qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd); +static void qlt_alloc_qfull_cmd(struct scsi_qla_host *vha, + struct atio_from_isp *atio, uint16_t status, int qfull); /* * Global Variables */ @@ -185,6 +189,27 @@ struct scsi_qla_host *qlt_find_host_by_vp_idx(struct scsi_qla_host *vha
[PATCH RESEND 06/17] qla2xxx: Enable SLER conditionally in target mode.
From: Arun Easi arun.e...@qlogic.com Sequence level error recovery (aka FC Tape) is not really required for disk devices. On heavily loaded system, with slow turn around, a bunch of status enquiries using REC puts additional burden to the target, so just turn off SLER by default. Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 23 +++ 1 files changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 1503cf4..85587fc 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -42,6 +42,11 @@ #include qla_def.h #include qla_target.h +static int ql2xtgt_tape_enable; +module_param(ql2xtgt_tape_enable, int, S_IRUGO|S_IWUSR); +MODULE_PARM_DESC(ql2xtgt_tape_enable, + Enables Sequence level error recovery (aka FC Tape). Default is 0 - no SLER. 1 - Enable SLER.); + static char *qlini_mode = QLA2XXX_INI_MODE_STR_ENABLED; module_param(qlini_mode, charp, S_IRUGO); MODULE_PARM_DESC(qlini_mode, @@ -5172,8 +5177,13 @@ qlt_24xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_24xx *nv) nv-firmware_options_1 = __constant_cpu_to_le32(~BIT_13); /* Enable initial LIP */ nv-firmware_options_1 = __constant_cpu_to_le32(~BIT_9); - /* Enable FC tapes support */ - nv-firmware_options_2 |= __constant_cpu_to_le32(BIT_12); + if (ql2xtgt_tape_enable) + /* Enable FC Tape support */ + nv-firmware_options_2 |= cpu_to_le32(BIT_12); + else + /* Disable FC Tape support */ + nv-firmware_options_2 = cpu_to_le32(~BIT_12); + /* Disable Full Login after LIP */ nv-host_p = __constant_cpu_to_le32(~BIT_10); /* Enable target PRLI control */ @@ -5255,8 +5265,13 @@ qlt_81xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_81xx *nv) nv-firmware_options_1 = __constant_cpu_to_le32(~BIT_13); /* Enable initial LIP */ nv-firmware_options_1 = __constant_cpu_to_le32(~BIT_9); - /* Enable FC tapes support */ - nv-firmware_options_2 |= __constant_cpu_to_le32(BIT_12); + if (ql2xtgt_tape_enable) + /* Enable FC tape support */ + nv-firmware_options_2 |= cpu_to_le32(BIT_12); + else + /* Disable FC tape support */ + nv-firmware_options_2 = cpu_to_le32(~BIT_12); + /* Disable Full Login after LIP */ nv-host_p = __constant_cpu_to_le32(~BIT_10); /* Enable target PRLI control */ -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 15/17] qla2xxx: Fix hang due to cmd_kref not decrementing
From: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 18 ++ drivers/scsi/qla2xxx/qla_target.h |1 + 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 94b726e..2ba4433 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -2409,6 +2409,7 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type, cmd-state = QLA_TGT_STATE_PROCESSED; /* Mid-level is done processing */ + cmd-cmd_sent_to_fw = 1; qla2x00_start_iocbs(vha, vha-req); spin_unlock_irqrestore(ha-hardware_lock, flags); @@ -2484,6 +2485,7 @@ int qlt_rdy_to_xfer(struct qla_tgt_cmd *cmd) qlt_load_data_segments(prm, vha); cmd-state = QLA_TGT_STATE_NEED_DATA; + cmd-cmd_sent_to_fw = 1; qla2x00_start_iocbs(vha, vha-req); spin_unlock_irqrestore(ha-hardware_lock, flags); @@ -2717,19 +2719,10 @@ static void qlt_send_term_exchange(struct scsi_qla_host *vha, if (rc == -ENOMEM) qlt_alloc_qfull_cmd(vha, atio, 0, 0); spin_unlock_irqrestore(vha-hw-hardware_lock, flags); + done: - /* -* Terminate exchange will tell fw to release any active CTIO -* that's in FW posession and cleanup the exchange. -* -* cmd-state == QLA_TGT_STATE_ABORTED means CTIO is still -* down at FW. Free the cmd later when CTIO comes back later -* w/aborted(0x2) status. -* -* cmd-state != QLA_TGT_STATE_ABORTED means CTIO is already -* back w/some err. Free the cmd now. -*/ - if ((rc == 1) (cmd-state != QLA_TGT_STATE_ABORTED)) { + if (cmd ((cmd-state != QLA_TGT_STATE_ABORTED) || + !cmd-cmd_sent_to_fw)) { if (!ha_locked !in_interrupt()) msleep(250); /* just in case */ @@ -3071,6 +3064,7 @@ static void qlt_do_ctio_completion(struct scsi_qla_host *vha, uint32_t handle, se_cmd = cmd-se_cmd; tfo = se_cmd-se_tfo; + cmd-cmd_sent_to_fw = 0; if (cmd-sg_mapped) qlt_unmap_sg(vha, cmd); diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h index 0c768f5..b07b230 100644 --- a/drivers/scsi/qla2xxx/qla_target.h +++ b/drivers/scsi/qla2xxx/qla_target.h @@ -917,6 +917,7 @@ struct qla_tgt_cmd { unsigned int ctx_dsd_alloced:1; unsigned int q_full:1; unsigned int term_exchg:1; + unsigned int cmd_sent_to_fw:1; struct scatterlist *sg; /* cmd data buffer SG vector */ int sg_cnt; /* SG segments count */ -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 12/17] qla2xxx: Increase the request queue size to 8K for ISP2031
Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com --- drivers/scsi/qla2xxx/qla_def.h |1 + drivers/scsi/qla2xxx/qla_os.c |2 +- 2 files changed, 2 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index e3643df..b048841 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -266,6 +266,7 @@ #define REQUEST_ENTRY_CNT_2100 128 /* Number of request entries. */ #define REQUEST_ENTRY_CNT_2200 2048/* Number of request entries. */ #define REQUEST_ENTRY_CNT_24XX 2048/* Number of request entries. */ +#define REQUEST_ENTRY_CNT_83XX 8192/* Number of request entries. */ #define RESPONSE_ENTRY_CNT_210064 /* Number of response entries.*/ #define RESPONSE_ENTRY_CNT_2300512 /* Number of response entries.*/ #define RESPONSE_ENTRY_CNT_MQ 128 /* Number of response entries.*/ diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 08e5bbb..34e56e2 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -2541,7 +2541,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) ha-portnum = PCI_FUNC(ha-pdev-devfn); ha-max_fibre_devices = MAX_FIBRE_DEVICES_2400; ha-mbx_count = MAILBOX_REGISTER_COUNT; - req_length = REQUEST_ENTRY_CNT_24XX; + req_length = REQUEST_ENTRY_CNT_83XX; rsp_length = RESPONSE_ENTRY_CNT_2300; ha-tgt.atio_q_length = ATIO_ENTRY_CNT_24XX; ha-max_loop_id = SNS_LAST_LOOP_ID_2300; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 10/17] qla2xxx: Handle chip reset in target mode.
From: Arun Easi arun.e...@qlogic.com A chip reset can occur after driver submits command to the stack. Abort command processing if a chip reset has occurred or in progress when you get a follow up for a command. Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_def.h|1 + drivers/scsi/qla2xxx/qla_gbl.h|1 + drivers/scsi/qla2xxx/qla_init.c |4 ++ drivers/scsi/qla2xxx/qla_iocb.c | 11 +++ drivers/scsi/qla2xxx/qla_target.c | 56 +++-- drivers/scsi/qla2xxx/qla_target.h |2 + 6 files changed, 72 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index a3bab3a..e3643df 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -3446,6 +3446,7 @@ struct qla_hw_data { struct work_struct board_disable; struct mr_data_fx00 mr; + uint32_t chip_reset; struct qlt_hw_data tgt; int allow_cna_fw_dump; diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index 42ea447..b1865a7 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -72,6 +72,7 @@ extern void qla2x00_async_logout_done(struct scsi_qla_host *, fc_port_t *, extern void qla2x00_async_adisc_done(struct scsi_qla_host *, fc_port_t *, uint16_t *); extern void *qla2x00_alloc_iocbs(struct scsi_qla_host *, srb_t *); +extern void *qla2x00_alloc_iocbs_ready(struct scsi_qla_host *, srb_t *); extern int qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *, fc_port_t *); extern fc_port_t * diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 1d66f2f..a4dde7e 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -4575,6 +4575,10 @@ qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha) /* Requeue all commands in outstanding command list. */ qla2x00_abort_all_cmds(vha, DID_RESET 16); } + + ha-chip_reset++; + /* memory barrier */ + wmb(); } /* diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index c787847..f0edb07 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c @@ -1858,6 +1858,17 @@ static void qla25xx_set_que(srb_t *sp, struct rsp_que **rsp) } /* Generic Control-SRB manipulation functions. */ + +/* hardware_lock assumed to be held. */ +void * +qla2x00_alloc_iocbs_ready(scsi_qla_host_t *vha, srb_t *sp) +{ + if (qla2x00_reset_active(vha)) + return NULL; + + return qla2x00_alloc_iocbs(vha, sp); +} + void * qla2x00_alloc_iocbs(scsi_qla_host_t *vha, srb_t *sp) { diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index de45126..38f3f1f 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -106,6 +106,8 @@ static void qlt_send_term_exchange(struct scsi_qla_host *ha, struct qla_tgt_cmd *cmd, struct atio_from_isp *atio, int ha_locked); static void qlt_reject_free_srr_imm(struct scsi_qla_host *ha, struct qla_tgt_srr_imm *imm, int ha_lock); +static void qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, + struct qla_tgt_cmd *cmd); /* * Global Variables */ @@ -1036,7 +1038,7 @@ static void qlt_24xx_send_abts_resp(struct scsi_qla_host *vha, if (qlt_issue_marker(vha, 1) != QLA_SUCCESS) return; - resp = (struct abts_resp_to_24xx *)qla2x00_alloc_iocbs(vha, NULL); + resp = (struct abts_resp_to_24xx *)qla2x00_alloc_iocbs_ready(vha, NULL); if (!resp) { ql_dbg(ql_dbg_tgt, vha, 0xe04a, qla_target(%d): %s failed: unable to allocate @@ -1107,7 +1109,7 @@ static void qlt_24xx_retry_term_exchange(struct scsi_qla_host *vha, if (qlt_issue_marker(vha, 1) != QLA_SUCCESS) return; - ctio = (struct ctio7_to_24xx *)qla2x00_alloc_iocbs(vha, NULL); + ctio = (struct ctio7_to_24xx *)qla2x00_alloc_iocbs_ready(vha, NULL); if (ctio == NULL) { ql_dbg(ql_dbg_tgt, vha, 0xe04b, qla_target(%d): %s failed: unable to allocate @@ -1326,6 +1328,21 @@ void qlt_xmit_tm_rsp(struct qla_tgt_mgmt_cmd *mcmd) mcmd, mcmd-fc_tm_rsp, mcmd-flags); spin_lock_irqsave(ha-hardware_lock, flags); + + if (qla2x00_reset_active(vha) || mcmd-reset_count != ha-chip_reset) { + /* +* Either a chip reset is active or this request was from +* previous life, just abort the processing. +*/ + ql_dbg(ql_dbg_async, vha, 0xe100, + RESET-TMR active/old-count/new-count = %d/%d/%d.\n, + qla2x00_reset_active(vha), mcmd-reset_count, + ha-chip_reset); + ha
[PATCH RESEND 17/17] qla2xxx: Add memory barrier before ringing doorbell.
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 16 1 files changed, 16 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index f3287e1..829752c 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1040,6 +1040,8 @@ static void qlt_send_notify_ack(struct scsi_qla_host *vha, qla_target(%d): Sending 24xx Notify Ack %d\n, vha-vp_idx, nack-u.isp24.status); + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); } @@ -1117,6 +1119,8 @@ static void qlt_24xx_send_abts_resp(struct scsi_qla_host *vha, vha-vha_tgt.qla_tgt-abts_resp_expected++; + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); } @@ -1162,6 +1166,8 @@ static void qlt_24xx_retry_term_exchange(struct scsi_qla_host *vha, CTIO7_FLAGS_TERMINATE); ctio-u.status1.ox_id = cpu_to_le16(entry-fcp_hdr_le.ox_id); + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); qlt_24xx_send_abts_resp(vha, (struct abts_recv_from_24xx *)entry, @@ -1333,6 +1339,8 @@ static void qlt_24xx_send_task_mgmt_ctio(struct scsi_qla_host *ha, ctio-u.status1.response_len = __constant_cpu_to_le16(8); ctio-u.status1.sense_data[0] = resp_code; + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(ha, ha-req); } @@ -2412,6 +2420,8 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type, cmd-state = QLA_TGT_STATE_PROCESSED; /* Mid-level is done processing */ cmd-cmd_sent_to_fw = 1; + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); spin_unlock_irqrestore(ha-hardware_lock, flags); @@ -2488,6 +2498,8 @@ int qlt_rdy_to_xfer(struct qla_tgt_cmd *cmd) cmd-state = QLA_TGT_STATE_NEED_DATA; cmd-cmd_sent_to_fw = 1; + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); spin_unlock_irqrestore(ha-hardware_lock, flags); @@ -2696,6 +2708,8 @@ static int __qlt_send_term_exchange(struct scsi_qla_host *vha, if (ctio24-u.status1.residual != 0) ctio24-u.status1.scsi_status |= SS_RESIDUAL_UNDER; + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); return ret; } @@ -4329,6 +4343,8 @@ static int __qlt_send_busy(struct scsi_qla_host *vha, */ ctio24-u.status1.ox_id = swab16(atio-u.isp24.fcp_hdr.ox_id); ctio24-u.status1.scsi_status = cpu_to_le16(status); + /* Memory Barrier */ + wmb(); qla2x00_start_iocbs(vha, vha-req); return 0; } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 09/17] qla2xxx: Add Host reset handling in target mode.
From: Arun Easi arun.e...@qlogic.com Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c|2 +- drivers/scsi/qla2xxx/qla_gbl.h|1 + drivers/scsi/qla2xxx/qla_os.c |2 + drivers/scsi/qla2xxx/qla_target.c | 74 + 4 files changed, 78 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 5f25cf0..83d47ab 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -68,7 +68,7 @@ * | || 0xd101-0xd1fe | * | || 0xd214-0xd2fe | * | Target Mode | 0xe078 || - * | Target Mode Management | 0xf072 | 0xf002-0xf003 | + * | Target Mode Management | 0xf072 | 0xf002 | * | || 0xf046-0xf049 | * | Target Mode Task Management | 0x1000b || * -- diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index 0f851de..42ea447 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -766,4 +766,5 @@ extern void qla82xx_mbx_completion(scsi_qla_host_t *, uint16_t); extern int qla8044_abort_isp(scsi_qla_host_t *); extern int qla8044_check_fw_alive(struct scsi_qla_host *); +extern void qlt_host_reset_handler(struct qla_hw_data *ha); #endif /* _QLA_GBL_H */ diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 2c3c6af..08e5bbb 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -1363,6 +1363,8 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) struct qla_hw_data *ha = vha-hw; struct req_que *req; + qlt_host_reset_handler(ha); + spin_lock_irqsave(ha-hardware_lock, flags); for (que = 0; que ha-max_req_queues; que++) { req = ha-req_q_map[que]; diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 1a546bc..de45126 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -2843,6 +2843,80 @@ static struct qla_tgt_cmd *qlt_ctio_to_cmd(struct scsi_qla_host *vha, return cmd; } +/* hardware_lock should be held by caller. */ +static void +qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) +{ + struct qla_hw_data *ha = vha-hw; + uint32_t handle; + + if (cmd-sg_mapped) + qlt_unmap_sg(vha, cmd); + + handle = qlt_make_handle(vha); + + /* TODO: fix debug message type and ids. */ + if (cmd-state == QLA_TGT_STATE_PROCESSED) { + ql_dbg(ql_dbg_io, vha, 0xff00, + HOST-ABORT: handle=%d, state=PROCESSED.\n, handle); + } else if (cmd-state == QLA_TGT_STATE_NEED_DATA) { + cmd-write_data_transferred = 0; + cmd-state = QLA_TGT_STATE_DATA_IN; + + ql_dbg(ql_dbg_io, vha, 0xff01, + HOST-ABORT: handle=%d, state=DATA_IN.\n, handle); + + ha-tgt.tgt_ops-handle_data(cmd); + return; + } else if (cmd-state == QLA_TGT_STATE_ABORTED) { + ql_dbg(ql_dbg_io, vha, 0xff02, + HOST-ABORT: handle=%d, state=ABORTED.\n, handle); + } else { + ql_dbg(ql_dbg_io, vha, 0xff03, + HOST-ABORT: handle=%d, state=BAD(%d).\n, handle, + cmd-state); + dump_stack(); + } + + ha-tgt.tgt_ops-free_cmd(cmd); +} + +void +qlt_host_reset_handler(struct qla_hw_data *ha) +{ + struct qla_tgt_cmd *cmd; + unsigned long flags; + scsi_qla_host_t *base_vha = pci_get_drvdata(ha-pdev); + scsi_qla_host_t *vha = NULL; + struct qla_tgt *tgt = base_vha-vha_tgt.qla_tgt; + uint32_t i; + + if (!base_vha-hw-tgt.tgt_ops) + return; + + if (!tgt || qla_ini_mode_enabled(base_vha)) { + ql_dbg(ql_dbg_tgt_mgt, vha, 0xf003, + Target mode disabled\n); + return; + } + + ql_dbg(ql_dbg_tgt_mgt, vha, 0xff10, + HOST-ABORT-HNDLR: base_vha-dpc_flags=%lx.\n, + base_vha-dpc_flags); + + spin_lock_irqsave(ha-hardware_lock, flags); + for (i = 1; i DEFAULT_OUTSTANDING_COMMANDS + 1; i++) { + cmd = qlt_get_cmd(base_vha, i); + if (!cmd) + continue; + /* ha-tgt.cmds entry is cleared by qlt_get_cmd. */ + vha = cmd-vha; + qlt_abort_cmd_on_host_reset(vha, cmd); + } + spin_unlock_irqrestore(ha-hardware_lock, flags); +} + + /* * ha-hardware_lock supposed to be held
[PATCH RESEND 11/17] qla2xxx: Host reset handling in ABTS path.
From: Arun Easi arun.e...@qlogic.com ABTS path takes path similar to regular task management, but reset_count was not initialized when allocating mcmd causing the response to get dropped in qlt_xmit_tm_rsp. Fix this by initializing reset_count correctly. Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 38f3f1f..ccd0ca2 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1185,6 +1185,7 @@ static int __qlt_24xx_handle_abts(struct scsi_qla_host *vha, mcmd-sess = sess; memcpy(mcmd-orig_iocb.abts, abts, sizeof(mcmd-orig_iocb.abts)); + mcmd-reset_count = vha-hw-chip_reset; rc = ha-tgt.tgt_ops-handle_tmr(mcmd, lun, TMR_ABORT_TASK, abts-exchange_addr_to_abort); @@ -3523,6 +3524,7 @@ static int __qlt_abort_task(struct scsi_qla_host *vha, lun = a-u.isp24.fcp_cmnd.lun; unpacked_lun = scsilun_to_int((struct scsi_lun *)lun); + mcmd-reset_count = vha-hw-chip_reset; rc = ha-tgt.tgt_ops-handle_tmr(mcmd, unpacked_lun, TMR_ABORT_TASK, le16_to_cpu(iocb-u.isp2x.seq_id)); -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 07/17] qla2xxx: Add counter for message
Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 10 +- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 85587fc..1a546bc 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1434,10 +1434,11 @@ static inline void qlt_unmap_sg(struct scsi_qla_host *vha, static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, uint32_t req_cnt) { - uint32_t cnt; + uint32_t cnt, cnt_in; if (vha-req-cnt (req_cnt + 2)) { cnt = (uint16_t)RD_REG_DWORD(vha-req-req_q_out); + cnt_in = (uint16_t)RD_REG_DWORD(vha-req-req_q_in); if (vha-req-ring_index cnt) vha-req-cnt = cnt - vha-req-ring_index; @@ -1448,10 +1449,9 @@ static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, if (unlikely(vha-req-cnt (req_cnt + 2))) { ql_dbg(ql_dbg_io, vha, 0x305a, - qla_target(%d): There is no room in the - request ring: vha-req-ring_index=%d, vha-req-cnt=%d, - req_cnt=%d\n, vha-vp_idx, vha-req-ring_index, - vha-req-cnt, req_cnt); + qla_target(%d): There is no room in the request ring: vha-req-ring_index=%d, vha-req-cnt=%d, req_cnt=%d Req-out=%d Req-in=%d Req-Length=%d\n, + vha-vp_idx, vha-req-ring_index, + vha-req-cnt, req_cnt, cnt, cnt_in, vha-req-length); return -EAGAIN; } vha-req-cnt -= req_cnt; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 14/17] qla2xxx: Do not send SS_RESIDUAL_UNDER with SAM_STAT_BUSY
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c |6 -- 1 files changed, 0 insertions(+), 6 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 9f248e7..94b726e 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -4313,12 +4313,6 @@ static int __qlt_send_busy(struct scsi_qla_host *vha, */ ctio24-u.status1.ox_id = swab16(atio-u.isp24.fcp_hdr.ox_id); ctio24-u.status1.scsi_status = cpu_to_le16(status); - ctio24-u.status1.residual = get_unaligned((uint32_t *) - atio-u.isp24.fcp_cmnd.add_cdb[ - atio-u.isp24.fcp_cmnd.add_cdb_len]); - if (ctio24-u.status1.residual != 0) - ctio24-u.status1.scsi_status |= SS_RESIDUAL_UNDER; - qla2x00_start_iocbs(vha, vha-req); return 0; } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 16/17] qla2xxx: Add flags for tracing the target commands.
Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 30 ++ drivers/scsi/qla2xxx/qla_target.h | 24 drivers/scsi/qla2xxx/tcm_qla2xxx.c | 24 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 2ba4433..f3287e1 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1723,6 +1723,7 @@ static int qlt_pre_xmit_response(struct qla_tgt_cmd *cmd, se_cmd, cmd-tag); cmd-state = QLA_TGT_STATE_ABORTED; + cmd-cmd_flags |= BIT_6; qlt_send_term_exchange(vha, cmd, cmd-atio, 0); @@ -2789,10 +2790,13 @@ void qlt_free_cmd(struct qla_tgt_cmd *cmd) __func__, cmd-se_cmd, be16_to_cpu(cmd-atio.u.isp24.fcp_hdr.ox_id)); + BUG_ON(cmd-cmd_in_wq); + if (!cmd-q_full) qlt_decr_num_pend_cmds(cmd-vha); BUG_ON(cmd-sg_mapped); + cmd-jiffies_at_free = get_jiffies_64(); if (unlikely(cmd-free_sg)) kfree(cmd-sg); @@ -2800,6 +2804,7 @@ void qlt_free_cmd(struct qla_tgt_cmd *cmd) WARN_ON(1); return; } + cmd-jiffies_at_free = get_jiffies_64(); percpu_ida_free(sess-se_sess-sess_tag_pool, cmd-se_cmd.map_tag); } EXPORT_SYMBOL(qlt_free_cmd); @@ -2813,6 +2818,7 @@ static int qlt_prepare_srr_ctio(struct scsi_qla_host *vha, struct qla_tgt_srr_imm *imm; tgt-ctio_srr_id++; + cmd-cmd_flags |= BIT_15; ql_dbg(ql_dbg_tgt_mgt, vha, 0xf019, qla_target(%d): CTIO with SRR status received\n, vha-vp_idx); @@ -2998,6 +3004,7 @@ qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) dump_stack(); } + cmd-cmd_flags |= BIT_12; ha-tgt.tgt_ops-free_cmd(cmd); } @@ -3152,6 +3159,7 @@ static void qlt_do_ctio_completion(struct scsi_qla_host *vha, uint32_t handle, */ if ((cmd-state != QLA_TGT_STATE_NEED_DATA) (cmd-state != QLA_TGT_STATE_ABORTED)) { + cmd-cmd_flags |= BIT_13; if (qlt_term_ctio_exchange(vha, ctio, cmd, status)) return; } @@ -3240,6 +3248,8 @@ static void __qlt_do_work(struct qla_tgt_cmd *cmd) uint32_t data_length; int ret, fcp_task_attr, data_dir, bidi = 0; + cmd-cmd_in_wq = 0; + cmd-cmd_flags |= BIT_1; if (tgt-tgt_stop) goto out_term; @@ -3283,6 +3293,7 @@ out_term: * cmd has not sent to target yet, so pass NULL as the second * argument to qlt_send_term_exchange() and free the memory here. */ + cmd-cmd_flags |= BIT_2; spin_lock_irqsave(ha-hardware_lock, flags); qlt_send_term_exchange(vha, NULL, cmd-atio, 1); @@ -3430,8 +3441,13 @@ static int qlt_handle_cmd_for_atio(struct scsi_qla_host *vha, return -ENOMEM; } + cmd-cmd_flags = 0; + cmd-jiffies_at_alloc = get_jiffies_64(); + cmd-reset_count = vha-hw-chip_reset; + cmd-cmd_in_wq = 1; + cmd-cmd_flags |= BIT_0; INIT_WORK(cmd-work, qlt_do_work); queue_work(qla_tgt_wq, cmd-work); return 0; @@ -3893,8 +3909,10 @@ static void qlt_handle_srr(struct scsi_qla_host *vha, qlt_send_notify_ack(vha, ntfy, 0, 0, 0, NOTIFY_ACK_SRR_FLAGS_ACCEPT, 0, 0); spin_unlock_irqrestore(ha-hardware_lock, flags); - if (xmit_type QLA_TGT_XMIT_DATA) + if (xmit_type QLA_TGT_XMIT_DATA) { + cmd-cmd_flags |= BIT_8; qlt_rdy_to_xfer(cmd); + } } else { ql_dbg(ql_dbg_tgt_mgt, vha, 0xf066, qla_target(%d): SRR for out data for cmd @@ -3912,8 +3930,10 @@ static void qlt_handle_srr(struct scsi_qla_host *vha, } /* Transmit response in case of status and data-in cases */ - if (resp) + if (resp) { + cmd-cmd_flags |= BIT_7; qlt_xmit_response(cmd, xmit_type, se_cmd-scsi_status); + } return; @@ -3926,8 +3946,10 @@ out_reject: if (cmd-state == QLA_TGT_STATE_NEED_DATA) { cmd-state = QLA_TGT_STATE_DATA_IN; dump_stack(); - } else + } else { + cmd-cmd_flags |= BIT_9; qlt_send_term_exchange(vha, cmd, cmd-atio, 1); + } spin_unlock_irqrestore(ha-hardware_lock, flags); } @@ -4041,7 +4063,7 @@ static void qlt_prepare_srr_imm(struct scsi_qla_host *vha
[PATCH RESEND 08/17] qla2xxx: fix crash due to task mgmt cmd type
From: Himanshu Madhani himanshu.madh...@qlogic.com tcm_qla2xxx_get_task_tag incorrectly assume command is qla_tgt_cmd. Add check to see if it's a scsi cmd or task mgmt command. Signed-off-by: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/tcm_qla2xxx.c |9 +++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index 09d2931..9f95407 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -515,8 +515,13 @@ static void tcm_qla2xxx_set_default_node_attrs(struct se_node_acl *nacl) static u32 tcm_qla2xxx_get_task_tag(struct se_cmd *se_cmd) { - struct qla_tgt_cmd *cmd = container_of(se_cmd, - struct qla_tgt_cmd, se_cmd); + struct qla_tgt_cmd *cmd; + + /* check for task mgmt cmd */ + if (se_cmd-se_cmd_flags SCF_SCSI_TMR_CDB) + return 0x; + + cmd = container_of(se_cmd, struct qla_tgt_cmd, se_cmd); return cmd-tag; } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 00/17] qla2xxx: Target bug fixes and enchancements.
Hi Nicholas/Christoph, Please apply the following patches at your earliest convenience. This patchset have target related changes to qla2xxx. I will submit the target (TCM-LIO) patches in different patch set. Thanks, ~Saurav Arun Easi (6): qla2xxx: Use correct offset to req-q-out for reserve calculation qla2xxx: Remove verbose messages in target mode. qla2xxx: Enable SLER conditionally in target mode. qla2xxx: Add Host reset handling in target mode. qla2xxx: Handle chip reset in target mode. qla2xxx: Host reset handling in ABTS path. Himanshu Madhani (6): qla2xxx: Fix sparse warnings in tcm_qla2xxx.c qla2xxx: fix kernel NULL pointer access qla2xxx: Increase room in request queue for sending priority packets qla2xxx: fix crash due to task mgmt cmd type qla2xxx: Do not send SS_RESIDUAL_UNDER with SAM_STAT_BUSY qla2xxx: Add memory barrier before ringing doorbell. Quinn Tran (2): qla2xxx: Add support for QFull throttling and Term Exchange retry qla2xxx: Fix hang due to cmd_kref not decrementing Saurav Kashyap (3): qla2xxx: Add counter for message qla2xxx: Increase the request queue size to 8K for ISP2031 qla2xxx: Add flags for tracing the target commands. drivers/scsi/qla2xxx/qla_dbg.c |6 +- drivers/scsi/qla2xxx/qla_def.h | 19 + drivers/scsi/qla2xxx/qla_gbl.h |2 + drivers/scsi/qla2xxx/qla_init.c|4 + drivers/scsi/qla2xxx/qla_iocb.c| 15 +- drivers/scsi/qla2xxx/qla_os.c |6 +- drivers/scsi/qla2xxx/qla_target.c | 691 ++-- drivers/scsi/qla2xxx/qla_target.h | 31 ++ drivers/scsi/qla2xxx/tcm_qla2xxx.c | 45 ++- 9 files changed, 624 insertions(+), 195 deletions(-) -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 05/17] qla2xxx: Remove verbose messages in target mode.
From: Arun Easi arun.e...@qlogic.com Turning logging bits for target mode ON dumps quite a lot verbose messages, remove those and change some of the IO path logging to use IO bits. Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c | 154 - 1 files changed, 16 insertions(+), 138 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 2fe6da3..1503cf4 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1397,8 +1397,6 @@ static int qlt_pci_map_calc_cnt(struct qla_tgt_prm *prm) } } - ql_dbg(ql_dbg_tgt, prm-cmd-vha, 0xe009, seg_cnt=%d, req_cnt=%d\n, - prm-seg_cnt, prm-req_cnt); return 0; out_err: @@ -1436,10 +1434,6 @@ static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, if (vha-req-cnt (req_cnt + 2)) { cnt = (uint16_t)RD_REG_DWORD(vha-req-req_q_out); - ql_dbg(ql_dbg_tgt, vha, 0xe00a, - Request ring circled: cnt=%d, vha--ring_index=%d, - vha-req-cnt=%d, req_cnt=%d\n, cnt, - vha-req-ring_index, vha-req-cnt, req_cnt); if (vha-req-ring_index cnt) vha-req-cnt = cnt - vha-req-ring_index; else @@ -1448,7 +1442,7 @@ static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, } if (unlikely(vha-req-cnt (req_cnt + 2))) { - ql_dbg(ql_dbg_tgt, vha, 0xe00b, + ql_dbg(ql_dbg_io, vha, 0x305a, qla_target(%d): There is no room in the request ring: vha-req-ring_index=%d, vha-req-cnt=%d, req_cnt=%d\n, vha-vp_idx, vha-req-ring_index, @@ -1489,7 +1483,7 @@ static inline uint32_t qlt_make_handle(struct scsi_qla_host *vha) if (h DEFAULT_OUTSTANDING_COMMANDS) h = 1; /* 0 is QLA_TGT_NULL_HANDLE */ if (h == ha-tgt.current_handle) { - ql_dbg(ql_dbg_tgt, vha, 0xe04e, + ql_dbg(ql_dbg_io, vha, 0x305b, qla_target(%d): Ran out of empty cmd slots in ha %p\n, vha-vp_idx, ha); h = QLA_TGT_NULL_HANDLE; @@ -1546,9 +1540,6 @@ static int qlt_24xx_build_ctio_pkt(struct qla_tgt_prm *prm, pkt-u.status0.ox_id = cpu_to_le16(temp); pkt-u.status0.relative_offset = cpu_to_le32(prm-cmd-offset); - ql_dbg(ql_dbg_tgt, vha, 0xe00c, - qla_target(%d): handle(cmd) - %08x, timeout %d, ox_id %#x\n, - vha-vp_idx, pkt-handle, QLA_TGT_TIMEOUT, temp); return 0; } @@ -1606,14 +1597,6 @@ static void qlt_load_cont_data_segments(struct qla_tgt_prm *prm, } *dword_ptr++ = cpu_to_le32(sg_dma_len(prm-sg)); - ql_dbg(ql_dbg_tgt, vha, 0xe00d, - S/G Segment Cont. phys_addr=%llx:%llx, len=%d\n, - (long long unsigned int) - pci_dma_hi32(sg_dma_address(prm-sg)), - (long long unsigned int) - pci_dma_lo32(sg_dma_address(prm-sg)), - (int)sg_dma_len(prm-sg)); - prm-sg = sg_next(prm-sg); } } @@ -1631,11 +1614,6 @@ static void qlt_load_data_segments(struct qla_tgt_prm *prm, int enable_64bit_addressing = prm-tgt-tgt_enable_64bit_addr; struct ctio7_to_24xx *pkt24 = (struct ctio7_to_24xx *)prm-pkt; - ql_dbg(ql_dbg_tgt, vha, 0xe00e, - iocb-scsi_status=%x, iocb-flags=%x\n, - le16_to_cpu(pkt24-u.status0.scsi_status), - le16_to_cpu(pkt24-u.status0.flags)); - pkt24-u.status0.transfer_length = cpu_to_le32(prm-cmd-bufflen); /* Setup packet address segment pointer */ @@ -1653,7 +1631,6 @@ static void qlt_load_data_segments(struct qla_tgt_prm *prm, } /* If scatter gather */ - ql_dbg(ql_dbg_tgt, vha, 0xe00f, %s, Building S/G data segments...); /* Load command entry data segments */ for (cnt = 0; @@ -1668,14 +1645,6 @@ static void qlt_load_data_segments(struct qla_tgt_prm *prm, } *dword_ptr++ = cpu_to_le32(sg_dma_len(prm-sg)); - ql_dbg(ql_dbg_tgt, vha, 0xe010, - S/G Segment phys_addr=%llx:%llx, len=%d\n, - (long long unsigned int)pci_dma_hi32(sg_dma_address( - prm-sg)), - (long long unsigned int)pci_dma_lo32(sg_dma_address( - prm-sg)), - (int)sg_dma_len(prm-sg)); - prm-sg = sg_next(prm-sg); } @@ -1713,10 +1682,6 @@ static int qlt_pre_xmit_response(struct
[PATCH RESEND 03/17] qla2xxx: Use correct offset to req-q-out for reserve calculation
From: Arun Easi arun.e...@qlogic.com Cc: sta...@vger.kernel.org Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_target.c |4 +--- 1 files changed, 1 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 43f9177..2fe6da3 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -1431,12 +1431,10 @@ static inline void qlt_unmap_sg(struct scsi_qla_host *vha, static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, uint32_t req_cnt) { - struct qla_hw_data *ha = vha-hw; - device_reg_t __iomem *reg = ha-iobase; uint32_t cnt; if (vha-req-cnt (req_cnt + 2)) { - cnt = (uint16_t)RD_REG_DWORD(reg-isp24.req_q_out); + cnt = (uint16_t)RD_REG_DWORD(vha-req-req_q_out); ql_dbg(ql_dbg_tgt, vha, 0xe00a, Request ring circled: cnt=%d, vha--ring_index=%d, -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 0/2] target: target bug fix and enchancement.
Hi Nicholas/Christoph, Please apply the following patches at your earliest convenience. Thanks, ~Saurav Quinn Tran (1): Target/transport: SCSI Status Respond being sent to Initiator twice. Saurav Kashyap (1): target: Implement report lun data change unit attention. drivers/target/target_core_fabric_configfs.c | 28 ++ drivers/target/target_core_transport.c |3 +- 2 files changed, 29 insertions(+), 2 deletions(-) -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 2/2] target: Implement report lun data change unit attention.
Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com --- drivers/target/target_core_fabric_configfs.c | 28 ++ 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c index 7de9f04..f97866e 100644 --- a/drivers/target/target_core_fabric_configfs.c +++ b/drivers/target/target_core_fabric_configfs.c @@ -42,6 +42,7 @@ #include target_core_internal.h #include target_core_alua.h #include target_core_pr.h +#include target_core_ua.h #define TF_CIT_SETUP(_name, _item_ops, _group_ops, _attrs) \ static void target_fabric_setup_##_name##_cit(struct target_fabric_configfs *tf) \ @@ -326,6 +327,8 @@ static struct config_group *target_fabric_make_mappedlun( char *buf; unsigned long mapped_lun; int ret = 0; + struct se_lun *lun; + int i = 0; acl_ci = group-cg_item; if (!acl_ci) { @@ -400,6 +403,16 @@ static struct config_group *target_fabric_make_mappedlun( goto out; } target_stat_setup_mappedlun_default_groups(lacl); + spin_lock(se_tpg-tpg_lun_lock); + for (i = 0; i TRANSPORT_MAX_LUNS_PER_TPG; i++) { + lun = se_tpg-tpg_lun_list[i]; + if (lun-lun_status != TRANSPORT_LUN_STATUS_ACTIVE) + continue; + spin_unlock(se_tpg-tpg_lun_lock); + core_scsi3_ua_allocate(se_nacl, lun-unpacked_lun, 0x3f, 0xe); + spin_lock(se_tpg-tpg_lun_lock); + } + spin_unlock(se_tpg-tpg_lun_lock); kfree(buf); return lacl-se_lun_group; @@ -419,6 +432,8 @@ static void target_fabric_drop_mappedlun( struct config_item *df_item; struct config_group *lacl_cg = NULL, *ml_stat_grp = NULL; int i; + struct se_lun *lun; + struct se_portal_group *se_tpg = lacl-se_lun_nacl-se_tpg; ml_stat_grp = lacl-ml_stat_grps.stat_group; for (i = 0; ml_stat_grp-default_groups[i]; i++) { @@ -437,6 +452,19 @@ static void target_fabric_drop_mappedlun( kfree(lacl_cg-default_groups); config_item_put(item); + + spin_lock(se_tpg-tpg_lun_lock); + for (i = 0; i TRANSPORT_MAX_LUNS_PER_TPG; i++) { + lun = se_tpg-tpg_lun_list[i]; + if (lun-lun_status != TRANSPORT_LUN_STATUS_ACTIVE) + continue; + spin_unlock(se_tpg-tpg_lun_lock); + core_scsi3_ua_allocate(lacl-se_lun_nacl, lun-unpacked_lun, + 0x3f, 0xe); + spin_lock(se_tpg-tpg_lun_lock); + } + spin_unlock(se_tpg-tpg_lun_lock); + } static void target_fabric_nacl_base_release(struct config_item *item) -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH RESEND 1/2] Target/transport: SCSI Status Respond being sent to Initiator twice.
From: Quinn Tran quinn.t...@qlogic.com During temporary resource starvation at lower transport layer, command is placed on queue full retry path, which expose this problem. The TCM Qfull handling send the same cmd twice to lower layer. The 1st time led to cmd normal free path. The 2nd time cause Null pointer access. Signed-off-by: Quinn Tran quinn.t...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/target/target_core_transport.c |3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 7fa62fc..ab61014 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -1877,8 +1877,7 @@ static void transport_complete_qf(struct se_cmd *cmd) if (cmd-se_cmd_flags SCF_TRANSPORT_TASK_SENSE) { trace_target_cmd_complete(cmd); ret = cmd-se_tfo-queue_status(cmd); - if (ret) - goto out; + goto out; } switch (cmd-data_direction) { -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 08/35] qla2xxx: ISP25xx multiqueue shadow register crash fix.
From: Joe Carnuccio joe.carnuc...@qlogic.com When creating request/response queues from qla25xx_setup_mode(), the shadow index register pointers were not being initialized to point at the registers. Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_mid.c |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index 8999824..5c2e031 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c @@ -702,6 +702,7 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options, req-req_q_in = reg-isp25mq.req_q_in; req-req_q_out = reg-isp25mq.req_q_out; req-max_q_depth = ha-req_q_map[0]-max_q_depth; + req-out_ptr = (void *)(req-ring + req-length); mutex_unlock(ha-vport_lock); ql_dbg(ql_dbg_multiq, base_vha, 0xc004, ring_ptr=%p ring_index=%d, @@ -811,6 +812,7 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options, reg = ISP_QUE_REG(ha, que_id); rsp-rsp_q_in = reg-isp25mq.rsp_q_in; rsp-rsp_q_out = reg-isp25mq.rsp_q_out; + rsp-in_ptr = (void *)(rsp-ring + rsp-length); mutex_unlock(ha-vport_lock); ql_dbg(ql_dbg_multiq, base_vha, 0xc00b, options=%x id=%d rsp_q_in=%p rsp_q_out=%p, -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 00/35] qla2xxx: Patches for 3.18 scsi misc branch.
Hi James, Christoph, Please apply the following patches to the scsi tree, misc branch at your earliest convenience. Thanks, ~Saurav Alex Vechersky (1): qla2xxx: Add missing ISP27xx checks to optrom code. Arun Easi (1): qla2xxx: Unload of qla2xxx driver crashes the machine. Chad Dupuis (6): qla2xxx: Enable fast flash access for ISP83xx. qla2xxx: Force use of mailbox interface for flash access commands for ISP27xx. qla2xxx: Honor FCP_RSP retry delay timer field. qla2xxx: Mark port lost when we receive an RSCN for it. qla2xxx: Disable PCI device in shutdown handler. qla2xxx: Fail adapter initialization on load ram failure. Himanshu Madhani (6): qla2xxx: Add FDMI-2 functionality. qla2xxx: Fix driver version string message. qla2xxx: Allow user to change ql2xfdmienable value. qla2xxx: Enable diagnostic port using NVRAM parameters. qla2xxx: Disable laser for ISP2031 while unloading driver. qla2xxx: Restore WWPN in case of Loop Dead. Jan Kulich (1): qla2xxx: ISPFx00 unexpected resets during adapter boot sequence. Joe Carnuccio (15): qla2xxx: ISP27xx add tests for incomplete template. qla2xxx: ISP27xx optimize fwdump entry table lookup. qla2xxx: ISP27xx fwdump template remove high frequency debug logs. qla2xxx: ISP27xx fwdump template fix insertbuf() routine. qla2xxx: Add ISP27xx fwdump template entry T275 (insert buffer). qla2xxx: Add endianizer to max_payload_size modifier. qla2xxx: ISP25xx multiqueue shadow register crash fix. qla2xxx: ISP27xx fwdump template error print simplification. qla2xxx: Fix potential return count bug in qla2xxx_get_vpd_field(). qla2xxx: ISPFX00 avoid writing semaphore register in request_irqs(). qla2xxx: Incorrect debug level on mailbox command print 0x. qla2xxx: Incorrect linked list semantic in qlafx00_get_fcport(). qla2xxx: Add FA-WWN functionality. qla2xxx: Add diagnostic port functionality. qla2xxx: Fix sparse warning in qla_iocb.c file. Nigel Kirkland (1): qla2xxx: Free sysfs attributes for ISP27xx. Quinn Tran (1): qla2xxx: Declaration error cause stack corruption. Saurav Kashyap (1): qla2xxx: Update the driver version to 8.07.00.16-k. Sawan Chandak (2): qla2xxx: Add fix in driver unload for pending activity. qla2xxx: Move warning message to debug level. drivers/scsi/qla2xxx/qla_attr.c| 16 +- drivers/scsi/qla2xxx/qla_bsg.c |2 +- drivers/scsi/qla2xxx/qla_dbg.c | 26 +- drivers/scsi/qla2xxx/qla_def.h | 167 ++- drivers/scsi/qla2xxx/qla_fw.h |8 +- drivers/scsi/qla2xxx/qla_gbl.h |4 +- drivers/scsi/qla2xxx/qla_gs.c | 943 +++- drivers/scsi/qla2xxx/qla_init.c| 37 +- drivers/scsi/qla2xxx/qla_inline.h |8 + drivers/scsi/qla2xxx/qla_iocb.c|2 +- drivers/scsi/qla2xxx/qla_isr.c | 51 ++- drivers/scsi/qla2xxx/qla_mbx.c | 41 ++- drivers/scsi/qla2xxx/qla_mid.c |2 + drivers/scsi/qla2xxx/qla_mr.c | 14 +- drivers/scsi/qla2xxx/qla_nx.c |2 +- drivers/scsi/qla2xxx/qla_os.c | 68 +++- drivers/scsi/qla2xxx/qla_sup.c |7 +- drivers/scsi/qla2xxx/qla_tmpl.c| 106 ++--- drivers/scsi/qla2xxx/qla_tmpl.h|8 + drivers/scsi/qla2xxx/qla_version.h |2 +- 20 files changed, 1240 insertions(+), 274 deletions(-) -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 13/35] qla2xxx: Incorrect linked list semantic in qlafx00_get_fcport().
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_mr.c |5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_mr.c b/drivers/scsi/qla2xxx/qla_mr.c index 4775baa..274707d 100644 --- a/drivers/scsi/qla2xxx/qla_mr.c +++ b/drivers/scsi/qla2xxx/qla_mr.c @@ -1675,17 +1675,16 @@ qlafx00_get_fcport(struct scsi_qla_host *vha, int tgt_id) fc_port_t *fcport; /* Check for matching device in remote port list. */ - fcport = NULL; list_for_each_entry(fcport, vha-vp_fcports, list) { if (fcport-tgt_id == tgt_id) { ql_dbg(ql_dbg_async, vha, 0x5072, Matching fcport(%p) found with TGT-ID: 0x%x and Remote TGT_ID: 0x%x\n, fcport, fcport-tgt_id, tgt_id); - break; + return fcport; } } - return fcport; + return NULL; } static void -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 35/35] qla2xxx: Update the driver version to 8.07.00.16-k.
Signed-off-by: Giridhar Malavali giridhar.malav...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_version.h |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h index 4d2c98c..d88b862 100644 --- a/drivers/scsi/qla2xxx/qla_version.h +++ b/drivers/scsi/qla2xxx/qla_version.h @@ -7,7 +7,7 @@ /* * Driver version */ -#define QLA2XXX_VERSION 8.07.00.08-k +#define QLA2XXX_VERSION 8.07.00.16-k #define QLA_DRIVER_MAJOR_VER 8 #define QLA_DRIVER_MINOR_VER 7 -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 10/35] qla2xxx: Fix potential return count bug in qla2xxx_get_vpd_field().
From: Joe Carnuccio joe.carnuc...@qlogic.com Call scnprintf() instead of snprintf() since the latter may return an incorrect count in cases where the write is truncated to fit. scnprintf() returns the count of what was actually written; snprintf() returns the count of what would have been written. Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_sup.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c index 04b3701..4788ecd0 100644 --- a/drivers/scsi/qla2xxx/qla_sup.c +++ b/drivers/scsi/qla2xxx/qla_sup.c @@ -3163,7 +3163,7 @@ qla2xxx_get_vpd_field(scsi_qla_host_t *vha, char *key, char *str, size_t size) } if (pos end - len *pos != 0x78) - return snprintf(str, size, %.*s, len, pos + 3); + return scnprintf(str, size, %.*s, len, pos + 3); return 0; } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 09/35] qla2xxx: ISP27xx fwdump template error print simplification.
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c |3 +++ drivers/scsi/qla2xxx/qla_tmpl.c | 31 --- drivers/scsi/qla2xxx/qla_tmpl.h |2 ++ 3 files changed, 9 insertions(+), 27 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 3c5119a..9876a6f 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -65,6 +65,9 @@ * | || 0xb149 | * | MultiQ | 0xc00c | | * | Misc | 0xd213 | 0xd011-0xd017 | + * | || 0xd021,0xd024 | + * | || 0xd025,0xd029 | + * | || 0xd02a,0xd02e | * | || 0xd031-0xd0ff | * | || 0xd101-0xd1fe | * | || 0xd214-0xd2fe | diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c index d92ee06..a8c0c73 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.c +++ b/drivers/scsi/qla2xxx/qla_tmpl.c @@ -355,14 +355,9 @@ qla27xx_fwdt_entry_t262(struct scsi_qla_host *vha, ent-t262.start_addr = start; ent-t262.end_addr = end; } - } else if (ent-t262.ram_area == T262_RAM_AREA_DDR_RAM) { - ql_dbg(ql_dbg_misc, vha, 0xd021, - %s: unsupported ddr ram\n, __func__); - qla27xx_skip_entry(ent, buf); - goto done; } else { ql_dbg(ql_dbg_misc, vha, 0xd022, - %s: unknown area %u\n, __func__, ent-t262.ram_area); + %s: unknown area %x\n, __func__, ent-t262.ram_area); qla27xx_skip_entry(ent, buf); goto done; } @@ -377,8 +372,6 @@ qla27xx_fwdt_entry_t262(struct scsi_qla_host *vha, dwords = end - start + 1; if (buf) { - ql_dbg(ql_dbg_misc, vha, 0xd024, - %s: @%lx - (%lx dwords)\n, __func__, start, dwords); buf += *len; qla24xx_dump_ram(vha-hw, start, buf, dwords, buf); } @@ -423,13 +416,9 @@ qla27xx_fwdt_entry_t263(struct scsi_qla_host *vha, count++; } } - } else if (ent-t263.queue_type == T263_QUEUE_TYPE_ATIO) { - ql_dbg(ql_dbg_misc, vha, 0xd025, - %s: unsupported atio queue\n, __func__); - qla27xx_skip_entry(ent, buf); } else { ql_dbg(ql_dbg_misc, vha, 0xd026, - %s: unknown queue %u\n, __func__, ent-t263.queue_type); + %s: unknown queue %x\n, __func__, ent-t263.queue_type); qla27xx_skip_entry(ent, buf); } @@ -524,17 +513,9 @@ qla27xx_fwdt_entry_t268(struct scsi_qla_host *vha, %s: missing eft\n, __func__); qla27xx_skip_entry(ent, buf); } - } else if (ent-t268.buf_type == T268_BUF_TYPE_EXCH_BUFOFF) { - ql_dbg(ql_dbg_misc, vha, 0xd029, - %s: unsupported exchange offload buffer\n, __func__); - qla27xx_skip_entry(ent, buf); - } else if (ent-t268.buf_type == T268_BUF_TYPE_EXTD_LOGIN) { - ql_dbg(ql_dbg_misc, vha, 0xd02a, - %s: unsupported extended login buffer\n, __func__); - qla27xx_skip_entry(ent, buf); } else { ql_dbg(ql_dbg_misc, vha, 0xd02b, - %s: unknown buf %x\n, __func__, ent-t268.buf_type); + %s: unknown buffer %x\n, __func__, ent-t268.buf_type); qla27xx_skip_entry(ent, buf); } @@ -670,13 +651,9 @@ qla27xx_fwdt_entry_t274(struct scsi_qla_host *vha, count++; } } - } else if (ent-t274.queue_type == T274_QUEUE_TYPE_ATIO_SHAD) { - ql_dbg(ql_dbg_misc, vha, 0xd02e, - %s: unsupported atio queue\n, __func__); - qla27xx_skip_entry(ent, buf); } else { ql_dbg(ql_dbg_misc, vha, 0xd02f, - %s: unknown queue %u\n, __func__, ent-t274.queue_type); + %s: unknown queue %x\n, __func__, ent-t274.queue_type); qla27xx_skip_entry(ent, buf); } diff --git a/drivers/scsi/qla2xxx/qla_tmpl.h b/drivers/scsi/qla2xxx/qla_tmpl.h index f19856b..141c1c5 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.h +++ b/drivers/scsi/qla2xxx/qla_tmpl.h @@ -214,6 +214,8 @@ struct __packed
[PATCH 14/35] qla2xxx: ISPFx00 unexpected resets during adapter boot sequence.
From: Jan Kulich jan.kul...@qlogic.com Signed-off-by: Jan Kulich jan.kul...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_mr.c |5 - 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_mr.c b/drivers/scsi/qla2xxx/qla_mr.c index 274707d..698be01 100644 --- a/drivers/scsi/qla2xxx/qla_mr.c +++ b/drivers/scsi/qla2xxx/qla_mr.c @@ -1551,7 +1551,10 @@ qlafx00_timer_routine(scsi_qla_host_t *vha) ha-mr.fw_reset_timer_tick = QLAFX00_MAX_RESET_INTERVAL; } - ha-mr.old_aenmbx0_state = aenmbx0; + if (ha-mr.old_aenmbx0_state != aenmbx0) { + ha-mr.old_aenmbx0_state = aenmbx0; + ha-mr.fw_reset_timer_tick = QLAFX00_RESET_INTERVAL; + } ha-mr.fw_reset_timer_tick--; } if (test_bit(FX00_CRITEMP_RECOVERY, vha-dpc_flags)) { -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 27/35] qla2xxx: Add missing ISP27xx checks to optrom code.
From: Alex Vechersky alex.vecher...@qlogic.com Signed-off-by: Alex Vechersky alex.vecher...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_attr.c |3 ++- drivers/scsi/qla2xxx/qla_bsg.c |2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 9391e4b..82b92c4 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -484,7 +484,8 @@ qla2x00_sysfs_write_optrom_ctl(struct file *filp, struct kobject *kobj, start == (ha-flt_region_fw * 4)) valid = 1; else if (IS_QLA24XX_TYPE(ha) || IS_QLA25XX(ha) - || IS_CNA_CAPABLE(ha) || IS_QLA2031(ha)) + || IS_CNA_CAPABLE(ha) || IS_QLA2031(ha) + || IS_QLA27XX(ha)) valid = 1; if (!valid) { ql_log(ql_log_warn, vha, 0x7065, diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c index 524f9eb..2e2bb6f 100644 --- a/drivers/scsi/qla2xxx/qla_bsg.c +++ b/drivers/scsi/qla2xxx/qla_bsg.c @@ -1390,7 +1390,7 @@ qla2x00_optrom_setup(struct fc_bsg_job *bsg_job, scsi_qla_host_t *vha, start == (ha-flt_region_fw * 4)) valid = 1; else if (IS_QLA24XX_TYPE(ha) || IS_QLA25XX(ha) || - IS_CNA_CAPABLE(ha) || IS_QLA2031(ha)) + IS_CNA_CAPABLE(ha) || IS_QLA2031(ha) || IS_QLA27XX(ha)) valid = 1; if (!valid) { ql_log(ql_log_warn, vha, 0x7058, -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 18/35] qla2xxx: Fix driver version string message.
From: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_sup.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c index 4788ecd0..b656a05 100644 --- a/drivers/scsi/qla2xxx/qla_sup.c +++ b/drivers/scsi/qla2xxx/qla_sup.c @@ -3092,7 +3092,7 @@ qla24xx_get_flash_version(scsi_qla_host_t *vha, void *mbuf) ha-fw_revision[2] = dcode[2]; ha-fw_revision[3] = dcode[3]; ql_dbg(ql_dbg_init, vha, 0x0060, - Firmware revision %d.%d.%d.%d.\n, + Firmware revision %d.%d.%d (%x).\n, ha-fw_revision[0], ha-fw_revision[1], ha-fw_revision[2], ha-fw_revision[3]); } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 32/35] qla2xxx: Fail adapter initialization on load ram failure.
From: Chad Dupuis chad.dup...@qlogic.com If we fail to load one of the segments of firmware fail the operation instead of trying to continue which will lead to a system crash since the pointers to the next segment will not be updated correctly. Signed-off-by: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_init.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 23f12dd..1d66f2f 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -5236,7 +5236,7 @@ qla24xx_load_risc_flash(scsi_qla_host_t *vha, uint32_t *srisc_addr, ql_log(ql_log_fatal, vha, 0x008f, Failed to load segment %d of firmware.\n, fragment); - break; + return QLA_FUNCTION_FAILED; } faddr += dlen; @@ -5539,7 +5539,7 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr) ql_log(ql_log_fatal, vha, 0x0098, Failed to load segment %d of firmware.\n, fragment); - break; + return QLA_FUNCTION_FAILED; } fwcode += dlen; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 25/35] qla2xxx: Free sysfs attributes for ISP27xx.
From: Nigel Kirkland nigel.kirkl...@qlogic.com Signed-off-by: Nigel Kirkland nigel.kirkl...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_attr.c |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 677239f..9391e4b 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -987,6 +987,8 @@ qla2x00_free_sysfs_attr(scsi_qla_host_t *vha, bool stop_beacon) continue; if (iter-is4GBp_only == 3 !(IS_CNA_CAPABLE(vha-hw))) continue; + if (iter-is4GBp_only == 0x27 !IS_QLA27XX(vha-hw)) + continue; sysfs_remove_bin_file(host-shost_gendev.kobj, iter-attr); -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 24/35] qla2xxx: Disable laser for ISP2031 while unloading driver.
From: Himanshu Madhani himanshu.madh...@qlogic.com Nameserver data on FC switch is not refreshed when qla2xxx driver is unloaded. Disabling laser for ISP2031 will force FC switch to rescan ports and clear fdmi entries from Nameserver. Signed-off-by: Himanshu Madhani himanshu.madh...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c |2 +- drivers/scsi/qla2xxx/qla_def.h |5 + drivers/scsi/qla2xxx/qla_os.c | 31 +++ 3 files changed, 37 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 6e52a45..1a43228 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -11,7 +11,7 @@ * -- * | Level| Last Value Used | Holes | * -- - * | Module Init and Probe| 0x017d | 0x004b,0x0141 | + * | Module Init and Probe| 0x017d | 0x0141 | * | || 0x0144,0x0146 | * | || 0x015b-0x0160 | * | || 0x016e-0x0170 | diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index f416c5b..62c902c 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -191,6 +191,11 @@ * reset-recovery completion is * second */ +/* ISP2031: Values for laser on/off */ +#define PORT_0_20310x00201340 +#define PORT_1_20310x00201350 +#define LASER_ON_2031 0x01800100 +#define LASER_OFF_2031 0x01800180 /* * The ISP2312 v2 chip cannot access the FLASH/GPIO registers via MMIO in an diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index b9523dc..bf78127 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -239,6 +239,7 @@ static int qla2xxx_eh_host_reset(struct scsi_cmnd *); static int qla2x00_change_queue_depth(struct scsi_device *, int, int); static int qla2x00_change_queue_type(struct scsi_device *, int); static void qla2x00_free_device(scsi_qla_host_t *); +static void qla83xx_disable_laser(scsi_qla_host_t *vha); struct scsi_host_template qla2xxx_driver_template = { .module = THIS_MODULE, @@ -3174,6 +3175,10 @@ qla2x00_remove_one(struct pci_dev *pdev) qla84xx_put_chip(base_vha); + /* Laser should be disabled only for ISP2031 */ + if (IS_QLA2031(ha)) + qla83xx_disable_laser(base_vha); + /* Disable timer */ if (base_vha-timer_active) qla2x00_stop_timer(base_vha); @@ -5707,6 +5712,32 @@ qla2xxx_pci_resume(struct pci_dev *pdev) ha-flags.eeh_busy = 0; } +static void +qla83xx_disable_laser(scsi_qla_host_t *vha) +{ + uint32_t reg, data, fn; + struct qla_hw_data *ha = vha-hw; + struct device_reg_24xx __iomem *isp_reg = ha-iobase-isp24; + + /* pci func #/port # */ + ql_dbg(ql_dbg_init, vha, 0x004b, + Disabling Laser for hba: %p\n, vha); + + fn = (RD_REG_DWORD(isp_reg-ctrl_status) + (BIT_15|BIT_14|BIT_13|BIT_12)); + + fn = (fn 12); + + if (fn 1) + reg = PORT_1_2031; + else + reg = PORT_0_2031; + + data = LASER_OFF_2031; + + qla83xx_wr_reg(vha, reg, data); +} + static const struct pci_error_handlers qla2xxx_err_handler = { .error_detected = qla2xxx_pci_error_detected, .mmio_enabled = qla2xxx_pci_mmio_enabled, -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 01/35] qla2xxx: ISP27xx add tests for incomplete template.
From: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Joe Carnuccio joe.carnuc...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c |2 +- drivers/scsi/qla2xxx/qla_tmpl.c |9 + 2 files changed, 10 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index c72ee97b..2ac81e0 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -64,7 +64,7 @@ * | || 0xb13c-0xb140 | * | || 0xb149 | * | MultiQ | 0xc00c | | - * | Misc | 0xd212 | 0xd017-0xd019 | + * | Misc | 0xd212 | 0xd017 | * | || 0xd020 | * | || 0xd030-0xd0ff | * | || 0xd101-0xd1fe | diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c index cb9a0c4..252de5d 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.c +++ b/drivers/scsi/qla2xxx/qla_tmpl.c @@ -792,6 +792,15 @@ qla27xx_walk_template(struct scsi_qla_host *vha, break; ent = qla27xx_next_entry(ent); } + + if (count) + ql_dbg(ql_dbg_misc, vha, 0xd018, + %s: residual count (%lx)\n, __func__, count); + + if (ent-hdr.entry_type != ENTRY_TYPE_TMP_END) + ql_dbg(ql_dbg_misc, vha, 0xd019, + %s: missing end (%lx)\n, __func__, count); + ql_dbg(ql_dbg_misc, vha, 0xd01b, %s: len=%lx\n, __func__, *len); } -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 06/35] qla2xxx: Enable fast flash access for ISP83xx.
From: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Chad Dupuis chad.dup...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_sup.c |3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c index bca173e..04b3701 100644 --- a/drivers/scsi/qla2xxx/qla_sup.c +++ b/drivers/scsi/qla2xxx/qla_sup.c @@ -2580,7 +2580,8 @@ qla25xx_read_optrom_data(struct scsi_qla_host *vha, uint8_t *buf, uint32_t faddr, left, burst; struct qla_hw_data *ha = vha-hw; - if (IS_QLA25XX(ha) || IS_QLA81XX(ha) || IS_QLA27XX(ha)) + if (IS_QLA25XX(ha) || IS_QLA81XX(ha) || IS_QLA83XX(ha) || + IS_QLA27XX(ha)) goto try_fast; if (offset 0xfff) goto slow_read; -- 1.7.7 -- To unsubscribe from this list: send the line unsubscribe linux-scsi in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html