]> www.infradead.org Git - users/hch/misc.git/commitdiff
net/mlx5: DR, select MSIX vector 0 for completion queue creation
authorShahar Shitrit <shshitrit@nvidia.com>
Fri, 20 Dec 2024 08:15:02 +0000 (10:15 +0200)
committerJakub Kicinski <kuba@kernel.org>
Mon, 23 Dec 2024 18:54:01 +0000 (10:54 -0800)
When creating a software steering completion queue (CQ), an arbitrary
MSIX vector n is selected. This results in the CQ sharing the same
Ethernet traffic channel n associated with the chosen vector. However,
the value of n is often unpredictable, which can introduce complications
for interrupt monitoring and verification tools.

Moreover, SW steering uses polling rather than event-driven interrupts.
Therefore, there is no need to select any MSIX vector other than the
existing vector 0 for CQ creation.

In light of these factors, and to enhance predictability, we modify the
code to consistently select MSIX vector 0 for CQ creation.

Fixes: 297cccebdc5a ("net/mlx5: DR, Expose an internal API to issue RDMA operations")
Signed-off-by: Shahar Shitrit <shshitrit@nvidia.com>
Reviewed-by: Yevgeny Kliteynik <kliteyn@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/20241220081505.1286093-2-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_send.c

index 6fa06ba2d346532a6e0c7ffd24cd8fb127b9d219..f57c84e5128bc710f04d6e21b0462916a4b2fda2 100644 (file)
@@ -1067,7 +1067,6 @@ static struct mlx5dr_cq *dr_create_cq(struct mlx5_core_dev *mdev,
        int inlen, err, eqn;
        void *cqc, *in;
        __be64 *pas;
-       int vector;
        u32 i;
 
        cq = kzalloc(sizeof(*cq), GFP_KERNEL);
@@ -1096,8 +1095,7 @@ static struct mlx5dr_cq *dr_create_cq(struct mlx5_core_dev *mdev,
        if (!in)
                goto err_cqwq;
 
-       vector = raw_smp_processor_id() % mlx5_comp_vectors_max(mdev);
-       err = mlx5_comp_eqn_get(mdev, vector, &eqn);
+       err = mlx5_comp_eqn_get(mdev, 0, &eqn);
        if (err) {
                kvfree(in);
                goto err_cqwq;