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 6d6d74e..23438fc 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 53c7321..062ded1 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 74e6a04..31bfc0c 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))