]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
IB/core: Delegate IB_QP_RATE_LIMIT validation to drivers
authorMaher Sanalla <msanalla@nvidia.com>
Sun, 24 May 2026 15:38:09 +0000 (18:38 +0300)
committerLeon Romanovsky <leon@kernel.org>
Thu, 11 Jun 2026 11:02:05 +0000 (07:02 -0400)
Remove IB_QP_RATE_LIMIT from the qp_state_table and instead
pass it through ib_modify_qp_is_ok() unconditionally. This
delegates rate limit attribute validation to the individual
drivers that support it.

As rate limit support expands to additional QP types and transitions
across different vendors, centralizing this policy in the core becomes
impractical. Each driver is better positioned to enforce its own
supported QP types and transitions over non-standard attributes.

Future support for non-standard attributes will be handled per vendor
driver instead of in generic IB core qp_state_table.

Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
Signed-off-by: Edward Srouji <edwards@nvidia.com>
Link: https://patch.msgid.link/20260524-packet-pacing-v1-8-3d79439f8d08@nvidia.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/core/verbs.c

index c0ba517297b8f0ada31db224bc52c9b9846d3709..3b613b57e269781e94e9d63ea75c7dcc46b1dacb 100644 (file)
@@ -1540,8 +1540,7 @@ static const struct {
                                                 IB_QP_PKEY_INDEX),
                                 [IB_QPT_RC]  = (IB_QP_ALT_PATH                 |
                                                 IB_QP_ACCESS_FLAGS             |
-                                                IB_QP_PKEY_INDEX               |
-                                                IB_QP_RATE_LIMIT),
+                                                IB_QP_PKEY_INDEX),
                                 [IB_QPT_XRC_INI] = (IB_QP_ALT_PATH             |
                                                 IB_QP_ACCESS_FLAGS             |
                                                 IB_QP_PKEY_INDEX),
@@ -1589,8 +1588,7 @@ static const struct {
                                                 IB_QP_ALT_PATH                 |
                                                 IB_QP_ACCESS_FLAGS             |
                                                 IB_QP_MIN_RNR_TIMER            |
-                                                IB_QP_PATH_MIG_STATE           |
-                                                IB_QP_RATE_LIMIT),
+                                                IB_QP_PATH_MIG_STATE),
                                 [IB_QPT_XRC_INI] = (IB_QP_CUR_STATE            |
                                                 IB_QP_ALT_PATH                 |
                                                 IB_QP_ACCESS_FLAGS             |
@@ -1604,7 +1602,6 @@ static const struct {
                                                 IB_QP_QKEY),
                                 [IB_QPT_GSI] = (IB_QP_CUR_STATE                |
                                                 IB_QP_QKEY),
-                                [IB_QPT_RAW_PACKET] = IB_QP_RATE_LIMIT,
                         }
                }
        },
@@ -1624,8 +1621,7 @@ static const struct {
                                                IB_QP_ACCESS_FLAGS              |
                                                IB_QP_ALT_PATH                  |
                                                IB_QP_PATH_MIG_STATE            |
-                                               IB_QP_MIN_RNR_TIMER             |
-                                               IB_QP_RATE_LIMIT),
+                                               IB_QP_MIN_RNR_TIMER),
                                [IB_QPT_XRC_INI] = (IB_QP_CUR_STATE             |
                                                IB_QP_ACCESS_FLAGS              |
                                                IB_QP_ALT_PATH                  |
@@ -1639,7 +1635,6 @@ static const struct {
                                                IB_QP_QKEY),
                                [IB_QPT_GSI] = (IB_QP_CUR_STATE                 |
                                                IB_QP_QKEY),
-                               [IB_QPT_RAW_PACKET] = IB_QP_RATE_LIMIT,
                        }
                },
                [IB_QPS_SQD]   = {
@@ -1777,7 +1772,7 @@ bool ib_modify_qp_is_ok(enum ib_qp_state cur_state, enum ib_qp_state next_state,
        if ((mask & req_param) != req_param)
                return false;
 
-       if (mask & ~(req_param | opt_param | IB_QP_STATE))
+       if (mask & ~(req_param | opt_param | IB_QP_STATE | IB_QP_RATE_LIMIT))
                return false;
 
        return true;