scsi: qla2xxx: Fix memory size truncation
authorQuinn Tran <qutran@marvell.com>
Fri, 4 Sep 2020 04:51:21 +0000 (21:51 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 22 Sep 2020 22:42:42 +0000 (18:42 -0400)
Memory size calculations for Extended Login used in hardware offload got
truncated. Fix this by changing definition of exlogin_size to use uint32_t.

Link: https://lore.kernel.org/r/20200904045128.23631-7-njavali@marvell.com
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Quinn Tran <qutran@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_mbx.c
drivers/scsi/qla2xxx/qla_os.c

index 6d6d74e3546c7100477c6ba892c57d3dd2ecc94a..23438fc8f5629d2fd035072ec79b34eacf5e3ecd 100644 (file)
@@ -4216,7 +4216,7 @@ struct qla_hw_data {
        /* Extended Logins  */
        void            *exlogin_buf;
        dma_addr_t      exlogin_buf_dma;
-       int             exlogin_size;
+       uint32_t        exlogin_size;
 
 #define ENABLE_EXCHANGE_OFFLD  BIT_2
 
index 53c7321787465b5d41357433c933dd8cfc9e9ac2..062ded1ee2e8a8522a845e1dd5e6e93373ae4fc0 100644 (file)
@@ -845,7 +845,7 @@ qla_get_exlogin_status(scsi_qla_host_t *vha, uint16_t *buf_sz,
  * Context:
  *     Kernel context.
  */
-#define CONFIG_XLOGINS_MEM     0x3
+#define CONFIG_XLOGINS_MEM     0x9
 int
 qla_set_exlogin_mem_cfg(scsi_qla_host_t *vha, dma_addr_t phys_addr)
 {
@@ -872,8 +872,9 @@ qla_set_exlogin_mem_cfg(scsi_qla_host_t *vha, dma_addr_t phys_addr)
        mcp->flags = 0;
        rval = qla2x00_mailbox_command(vha, mcp);
        if (rval != QLA_SUCCESS) {
-               /*EMPTY*/
-               ql_dbg(ql_dbg_mbx, vha, 0x111b, "Failed=%x.\n", rval);
+               ql_dbg(ql_dbg_mbx, vha, 0x111b,
+                      "EXlogin Failed=%x. MB0=%x MB11=%x\n",
+                      rval, mcp->mb[0], mcp->mb[11]);
        } else {
                ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x118c,
                    "Done %s.\n", __func__);
index 74e6a04850c0e0c48477763b5115778979ac6a1a..31bfc0c088b7b048eff07f117cc2fd794a31fe15 100644 (file)
@@ -4379,11 +4379,12 @@ int
 qla2x00_set_exlogins_buffer(scsi_qla_host_t *vha)
 {
        int rval;
-       uint16_t        size, max_cnt, temp;
+       uint16_t        size, max_cnt;
+       uint32_t temp;
        struct qla_hw_data *ha = vha->hw;
 
        /* Return if we don't need to alloacate any extended logins */
-       if (!ql2xexlogins)
+       if (ql2xexlogins <= MAX_FIBRE_DEVICES_2400)
                return QLA_SUCCESS;
 
        if (!IS_EXLOGIN_OFFLD_CAPABLE(ha))