RDMA/core: Fail early if unsupported QP is provided
authorParav Pandit <parav@mellanox.com>
Tue, 28 Aug 2018 11:45:28 +0000 (14:45 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 6 Sep 2018 19:35:15 +0000 (13:35 -0600)
When requested QP type is not supported for a {device, port}, return the
error right away before validating all parameters during mad agent
registration time.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Reviewed-by: Daniel Jurgens <danielj@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/mad.c

index b8977c3db5f392ad93f3254bf16bc0610a579d77..43343c4e033eb7b8a4fdecf0829106802ccf6ca2 100644 (file)
@@ -220,6 +220,10 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device,
        int ret2, qpn;
        u8 mgmt_class, vclass;
 
+       if ((qp_type == IB_QPT_SMI && !rdma_cap_ib_smi(device, port_num)) ||
+           (qp_type == IB_QPT_GSI && !rdma_cap_ib_cm(device, port_num)))
+               return ERR_PTR(-EPROTONOSUPPORT);
+
        /* Validate parameters */
        qpn = get_spl_qp_index(qp_type);
        if (qpn == -1) {