int err;
        int port;
 
-       for (port = 1; port <= dev->num_ports; port++) {
+       for (port = 1; port <= ARRAY_SIZE(dev->mdev->port_caps); port++) {
                dev->mdev->port_caps[port - 1].has_smi = false;
                if (MLX5_CAP_GEN(dev->mdev, port_type) ==
                    MLX5_CAP_PORT_TYPE_IB) {
        if (!dprops)
                goto out;
 
-       err = set_has_smi_cap(dev);
-       if (err)
-               goto out;
-
        err = mlx5_ib_query_device(&dev->ib_dev, dprops, &uhw);
        if (err) {
                mlx5_ib_warn(dev, "query_device failed %d\n", err);
        if (err)
                return err;
 
+       err = set_has_smi_cap(dev);
+       if (err)
+               return err;
+
        if (!mlx5_core_mp_enabled(mdev)) {
                for (i = 1; i <= dev->num_ports; i++) {
                        err = get_port_caps(dev, i);