Re: [PATCH 3/3] tcm_qla2xxx: Expose per endpoint dynamic_sessions attribute

2015-03-09 Thread Saurav Kashyap
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

2015-02-26 Thread Saurav Kashyap
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'

2015-02-25 Thread Saurav Kashyap
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

2015-02-24 Thread Saurav Kashyap
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

2015-02-01 Thread Saurav Kashyap
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'

2014-11-02 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap


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().

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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).

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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().

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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().

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-25 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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().

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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().

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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.

2014-09-24 Thread Saurav Kashyap
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


  1   2   3   4   5   >