Re: [PATCH v2 04/17] qla2xxx: Include Exchange offload/Extended Login into FW dump

2017-06-01 Thread Madhani, Himanshu

> On May 31, 2017, at 4:12 PM, Bart Van Assche  
> wrote:
> 
> On Tue, 2017-05-30 at 10:54 -0700, Himanshu Madhani wrote:
>> static inline void *
>> +qla25xx_copy_exlogin(struct qla_hw_data *ha, void *ptr, uint32_t 
>> **last_chain)
>> +{
>> +struct qla2xxx_offld_chain *c = ptr;
>> +
>> +if (!ha->exlogin_buf)
>> +return ptr;
>> +
>> +*last_chain = >type;
>> +
>> +c->type = htonl(DUMP_CHAIN_EXLOGIN);
>> +c->chain_size = htonl(sizeof(struct qla2xxx_offld_chain) +
>> +ha->exlogin_size);
>> +c->size = htonl(ha->exlogin_size);
> 
> Since this is not networking code, why is this code using htonl() instead of 
> cpu_to_be32()?
> 
>> +c->addr_l = htonl(LSD(ha->exlogin_buf_dma));
>> +c->addr_h = htonl(MSD(ha->exlogin_buf_dma));
> 
> Please use cpu_to_be64() instead of this weird construct.
> 
>> +uint32_t addr_l;
>> +uint32_t addr_h;
> 
> Please declare this as a single 64-bit variable instead of using this weird
> split into two 32-bit variables.
> 
> Thanks,
> 
> Bart.

Sure. Will update patch with the correct construct. 

Thanks,
- Himanshu



Re: [PATCH v2 04/17] qla2xxx: Include Exchange offload/Extended Login into FW dump

2017-05-31 Thread Bart Van Assche
On Tue, 2017-05-30 at 10:54 -0700, Himanshu Madhani wrote:
>  static inline void *
> +qla25xx_copy_exlogin(struct qla_hw_data *ha, void *ptr, uint32_t 
> **last_chain)
> +{
> + struct qla2xxx_offld_chain *c = ptr;
> +
> + if (!ha->exlogin_buf)
> + return ptr;
> +
> + *last_chain = >type;
> +
> + c->type = htonl(DUMP_CHAIN_EXLOGIN);
> + c->chain_size = htonl(sizeof(struct qla2xxx_offld_chain) +
> + ha->exlogin_size);
> + c->size = htonl(ha->exlogin_size);

Since this is not networking code, why is this code using htonl() instead of 
cpu_to_be32()?

> + c->addr_l = htonl(LSD(ha->exlogin_buf_dma));
> + c->addr_h = htonl(MSD(ha->exlogin_buf_dma));

Please use cpu_to_be64() instead of this weird construct.

> + uint32_t addr_l;
> + uint32_t addr_h;

Please declare this as a single 64-bit variable instead of using this weird
split into two 32-bit variables.

Thanks,

Bart.

[PATCH v2 04/17] qla2xxx: Include Exchange offload/Extended Login into FW dump

2017-05-30 Thread Himanshu Madhani
From: Quinn Tran 

Add missing memory dump of Exchange Offload and Extended
login into FW dump.

Cc: 
Signed-off-by: Quinn Tran 
Signed-off-by: Himanshu Madhani 
---
 drivers/scsi/qla2xxx/qla_dbg.c  | 51 +
 drivers/scsi/qla2xxx/qla_dbg.h  | 12 ++
 drivers/scsi/qla2xxx/qla_init.c |  7 ++
 drivers/scsi/qla2xxx/qla_os.c   |  3 ---
 4 files changed, 70 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 88748a6ab73f..108499837e5d 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -498,6 +498,52 @@ qla25xx_copy_fce(struct qla_hw_data *ha, void *ptr, 
uint32_t **last_chain)
 }
 
 static inline void *
+qla25xx_copy_exlogin(struct qla_hw_data *ha, void *ptr, uint32_t **last_chain)
+{
+   struct qla2xxx_offld_chain *c = ptr;
+
+   if (!ha->exlogin_buf)
+   return ptr;
+
+   *last_chain = >type;
+
+   c->type = htonl(DUMP_CHAIN_EXLOGIN);
+   c->chain_size = htonl(sizeof(struct qla2xxx_offld_chain) +
+   ha->exlogin_size);
+   c->size = htonl(ha->exlogin_size);
+   c->addr_l = htonl(LSD(ha->exlogin_buf_dma));
+   c->addr_h = htonl(MSD(ha->exlogin_buf_dma));
+
+   ptr += sizeof(struct qla2xxx_offld_chain);
+   memcpy(ptr, ha->exlogin_buf, ha->exlogin_size);
+
+   return (char *)ptr + ntohl(c->size);
+}
+
+static inline void *
+qla81xx_copy_exchoffld(struct qla_hw_data *ha, void *ptr, uint32_t 
**last_chain)
+{
+   struct qla2xxx_offld_chain *c = ptr;
+
+   if (!ha->exchoffld_buf)
+   return ptr;
+
+   *last_chain = >type;
+
+   c->type = htonl(DUMP_CHAIN_EXCHG);
+   c->chain_size = htonl(sizeof(struct qla2xxx_offld_chain) +
+   ha->exchoffld_size);
+   c->size = htonl(ha->exchoffld_size);
+   c->addr_l = htonl(LSD(ha->exchoffld_buf_dma));
+   c->addr_h = htonl(MSD(ha->exchoffld_buf_dma));
+
+   ptr += sizeof(struct qla2xxx_offld_chain);
+   memcpy(ptr, ha->exchoffld_buf, ha->exchoffld_size);
+
+   return (char *)ptr + ntohl(c->size);
+}
+
+static inline void *
 qla2xxx_copy_atioqueues(struct qla_hw_data *ha, void *ptr,
uint32_t **last_chain)
 {
@@ -1606,6 +1652,7 @@ qla25xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
nxt_chain = qla25xx_copy_fce(ha, nxt_chain, _chain);
nxt_chain = qla25xx_copy_mqueues(ha, nxt_chain, _chain);
nxt_chain = qla2xxx_copy_atioqueues(ha, nxt_chain, _chain);
+   nxt_chain = qla25xx_copy_exlogin(ha, nxt_chain, _chain);
if (last_chain) {
ha->fw_dump->version |= htonl(DUMP_CHAIN_VARIANT);
*last_chain |= htonl(DUMP_CHAIN_LAST);
@@ -1932,6 +1979,8 @@ qla81xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
nxt_chain = qla25xx_copy_fce(ha, nxt_chain, _chain);
nxt_chain = qla25xx_copy_mqueues(ha, nxt_chain, _chain);
nxt_chain = qla2xxx_copy_atioqueues(ha, nxt_chain, _chain);
+   nxt_chain = qla25xx_copy_exlogin(ha, nxt_chain, _chain);
+   nxt_chain = qla81xx_copy_exchoffld(ha, nxt_chain, _chain);
if (last_chain) {
ha->fw_dump->version |= htonl(DUMP_CHAIN_VARIANT);
*last_chain |= htonl(DUMP_CHAIN_LAST);
@@ -2443,6 +2492,8 @@ qla83xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
nxt_chain = qla25xx_copy_fce(ha, nxt_chain, _chain);
nxt_chain = qla25xx_copy_mqueues(ha, nxt_chain, _chain);
nxt_chain = qla2xxx_copy_atioqueues(ha, nxt_chain, _chain);
+   nxt_chain = qla25xx_copy_exlogin(ha, nxt_chain, _chain);
+   nxt_chain = qla81xx_copy_exchoffld(ha, nxt_chain, _chain);
if (last_chain) {
ha->fw_dump->version |= htonl(DUMP_CHAIN_VARIANT);
*last_chain |= htonl(DUMP_CHAIN_LAST);
diff --git a/drivers/scsi/qla2xxx/qla_dbg.h b/drivers/scsi/qla2xxx/qla_dbg.h
index c6bffe929fe7..c4b1bb76cf48 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.h
+++ b/drivers/scsi/qla2xxx/qla_dbg.h
@@ -232,6 +232,16 @@ struct qla2xxx_fce_chain {
uint32_t eregs[8];
 };
 
+/* used by exchange off load and extended login offload */
+struct qla2xxx_offld_chain {
+   uint32_t type;
+   uint32_t chain_size;
+
+   uint32_t size;
+   uint32_t addr_l;
+   uint32_t addr_h;
+};
+
 struct qla2xxx_mq_chain {
uint32_t type;
uint32_t chain_size;
@@ -258,6 +268,8 @@ struct qla2xxx_mqueue_chain {
 #define DUMP_CHAIN_FCE 0x7AF0
 #define DUMP_CHAIN_MQ  0x7AF1
 #define DUMP_CHAIN_QUEUE   0x7AF2
+#define DUMP_CHAIN_EXLOGIN 0x7AF3
+#define DUMP_CHAIN_EXCHG   0x7AF4
 #define DUMP_CHAIN_LAST0x8000
 
 struct qla2xxx_fw_dump {
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index e4876f4220e4..2d23885083b0 100644
---