OSDN Git Service

RDMA/bnxt_re: Limit max_pkey to 16 bit value
authorDevesh Sharma <devesh.sharma@broadcom.com>
Mon, 8 Oct 2018 10:28:02 +0000 (03:28 -0700)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 16 Oct 2018 06:03:51 +0000 (00:03 -0600)
Some FW versios return pkey values more than 0xFFFF. pkey_tbl_len of
ib_port_attr is 16bit value. So restricting max_pkeys to 0xFFFF.

Signed-off-by: Devesh Sharma <devesh.sharma@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/bnxt_re/qplib_sp.c

index 14e2b3c..5216b5f 100644 (file)
@@ -137,8 +137,16 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
        attr->max_srq = le16_to_cpu(sb->max_srq);
        attr->max_srq_wqes = le32_to_cpu(sb->max_srq_wr) - 1;
        attr->max_srq_sges = sb->max_srq_sge;
-       /* Bono only reports 1 PKEY for now, but it can support > 1 */
        attr->max_pkey = le32_to_cpu(sb->max_pkeys);
+       /*
+        * Some versions of FW reports more than 0xFFFF.
+        * Restrict it for now to 0xFFFF to avoid
+        * reporting trucated value
+        */
+       if (attr->max_pkey > 0xFFFF) {
+               /* ib_port_attr::pkey_tbl_len is u16 */
+               attr->max_pkey = 0xFFFF;
+       }
 
        attr->max_inline_data = le32_to_cpu(sb->max_inline_data);
        attr->l2_db_size = (sb->l2_db_space_size + 1) *