mutex_init(&context->db_page_mutex);
 
        resp.tot_bfregs = req.total_num_bfregs;
-       resp.num_ports = MLX5_CAP_GEN(dev->mdev, num_ports);
+       resp.num_ports = dev->num_ports;
 
        if (field_avail(typeof(resp), cqe_version, udata->outlen))
                resp.response_length += sizeof(resp.cqe_version);
                return ERR_PTR(-ENOMEM);
 
        if (domain != IB_FLOW_DOMAIN_USER ||
-           flow_attr->port > MLX5_CAP_GEN(dev->mdev, num_ports) ||
+           flow_attr->port > dev->num_ports ||
            (flow_attr->flags & ~IB_FLOW_ATTR_FLAGS_DONT_TRAP))
                return ERR_PTR(-EINVAL);
 
        int err;
        int port;
 
-       for (port = 1; port <= MLX5_CAP_GEN(dev->mdev, num_ports); port++) {
+       for (port = 1; port <= dev->num_ports; port++) {
                dev->mdev->port_caps[port - 1].has_smi = false;
                if (MLX5_CAP_GEN(dev->mdev, port_type) ==
                    MLX5_CAP_PORT_TYPE_IB) {
 {
        int port;
 
-       for (port = 1; port <= MLX5_CAP_GEN(dev->mdev, num_ports); port++)
+       for (port = 1; port <= dev->num_ports; port++)
                mlx5_query_ext_port_caps(dev, port);
 }
 
                goto out;
        }
 
-       for (port = 1; port <= MLX5_CAP_GEN(dev->mdev, num_ports); port++) {
+       for (port = 1; port <= dev->num_ports; port++) {
                memset(pprops, 0, sizeof(*pprops));
                err = mlx5_ib_query_port(&dev->ib_dev, port, pprops);
                if (err) {
        const char *name;
        int err;
 
-       dev->port = kcalloc(MLX5_CAP_GEN(mdev, num_ports), sizeof(*dev->port),
+       dev->port = kcalloc(dev->num_ports, sizeof(*dev->port),
                            GFP_KERNEL);
        if (!dev->port)
                return -ENOMEM;
        dev->ib_dev.owner               = THIS_MODULE;
        dev->ib_dev.node_type           = RDMA_NODE_IB_CA;
        dev->ib_dev.local_dma_lkey      = 0 /* not supported for now */;
-       dev->num_ports          = MLX5_CAP_GEN(mdev, num_ports);
-       dev->ib_dev.phys_port_cnt     = dev->num_ports;
+       dev->ib_dev.phys_port_cnt       = dev->num_ports;
        dev->ib_dev.num_comp_vectors    =
                dev->mdev->priv.eq_table.num_comp_vectors;
        dev->ib_dev.dev.parent          = &mdev->pdev->dev;
                return NULL;
 
        dev->mdev = mdev;
+       dev->num_ports = MLX5_CAP_GEN(mdev, num_ports);
 
        for (i = 0; i < MLX5_IB_STAGE_MAX; i++) {
                if (profile->stage[i].init) {
 
 
        if ((attr_mask & IB_QP_PORT) &&
            (attr->port_num == 0 ||
-            attr->port_num > MLX5_CAP_GEN(dev->mdev, num_ports))) {
+            attr->port_num > dev->num_ports)) {
                mlx5_ib_dbg(dev, "invalid port number %d. number of ports is %d\n",
                            attr->port_num, dev->num_ports);
                goto out;
                            struct rdma_ah_attr *ah_attr,
                            struct mlx5_qp_path *path)
 {
-       struct mlx5_core_dev *dev = ibdev->mdev;
 
        memset(ah_attr, 0, sizeof(*ah_attr));
 
        ah_attr->type = rdma_ah_find_type(&ibdev->ib_dev, path->port);
        rdma_ah_set_port_num(ah_attr, path->port);
        if (rdma_ah_get_port_num(ah_attr) == 0 ||
-           rdma_ah_get_port_num(ah_attr) > MLX5_CAP_GEN(dev, num_ports))
+           rdma_ah_get_port_num(ah_attr) > ibdev->num_ports)
                return;
 
        rdma_ah_set_port_num(ah_attr, path->port);