]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/core: Move flow related functions to ib_uverbs_support.ko
authorJason Gunthorpe <jgg@nvidia.com>
Tue, 26 May 2026 01:22:42 +0000 (22:22 -0300)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 26 May 2026 13:11:43 +0000 (10:11 -0300)
mlx5 uses these as part of the driver implementation, move them to the
support module instead.

Link: https://patch.msgid.link/r/6-v3-43aba1969751+1988-ib_uverbs_support_ko_jgg@nvidia.com
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/core/Makefile
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/uverbs_flow.c [new file with mode: 0644]

index 47f645cb76f69eb075749d4bc6f4f4f246398596..ab7a2197bc8635a421eb2edccebcbf8dc5090881 100644 (file)
@@ -49,4 +49,5 @@ ib_uverbs-y :=                        uverbs_main.o uverbs_cmd.o uverbs_marshall.o \
                                uverbs_std_types_qp.o
 
 ib_uverbs_support-y :=         rdma_core.o \
-                               ucaps.o
+                               ucaps.o \
+                               uverbs_flow.o
index 91a62d2ade4dd0ce402604ec283f8cdc70d2ef06..32914007bae66f33d262741b9362ab46f95de657 100644 (file)
@@ -2594,82 +2594,6 @@ out_put:
        return ret;
 }
 
-struct ib_uflow_resources *flow_resources_alloc(size_t num_specs)
-{
-       struct ib_uflow_resources *resources;
-
-       resources = kzalloc_obj(*resources);
-
-       if (!resources)
-               return NULL;
-
-       if (!num_specs)
-               goto out;
-
-       resources->counters =
-               kzalloc_objs(*resources->counters, num_specs);
-       resources->collection =
-               kzalloc_objs(*resources->collection, num_specs);
-
-       if (!resources->counters || !resources->collection)
-               goto err;
-
-out:
-       resources->max = num_specs;
-       return resources;
-
-err:
-       kfree(resources->counters);
-       kfree(resources);
-
-       return NULL;
-}
-EXPORT_SYMBOL(flow_resources_alloc);
-
-void ib_uverbs_flow_resources_free(struct ib_uflow_resources *uflow_res)
-{
-       unsigned int i;
-
-       if (!uflow_res)
-               return;
-
-       for (i = 0; i < uflow_res->collection_num; i++)
-               atomic_dec(&uflow_res->collection[i]->usecnt);
-
-       for (i = 0; i < uflow_res->counters_num; i++)
-               atomic_dec(&uflow_res->counters[i]->usecnt);
-
-       kfree(uflow_res->collection);
-       kfree(uflow_res->counters);
-       kfree(uflow_res);
-}
-EXPORT_SYMBOL(ib_uverbs_flow_resources_free);
-
-void flow_resources_add(struct ib_uflow_resources *uflow_res,
-                       enum ib_flow_spec_type type,
-                       void *ibobj)
-{
-       WARN_ON(uflow_res->num >= uflow_res->max);
-
-       switch (type) {
-       case IB_FLOW_SPEC_ACTION_HANDLE:
-               atomic_inc(&((struct ib_flow_action *)ibobj)->usecnt);
-               uflow_res->collection[uflow_res->collection_num++] =
-                       (struct ib_flow_action *)ibobj;
-               break;
-       case IB_FLOW_SPEC_ACTION_COUNT:
-               atomic_inc(&((struct ib_counters *)ibobj)->usecnt);
-               uflow_res->counters[uflow_res->counters_num++] =
-                       (struct ib_counters *)ibobj;
-               break;
-       default:
-               WARN_ON(1);
-       }
-
-       uflow_res->num++;
-}
-EXPORT_SYMBOL(flow_resources_add);
-
 static int kern_spec_to_ib_spec_action(struct uverbs_attr_bundle *attrs,
                                       struct ib_uverbs_flow_spec *kern_spec,
                                       union ib_flow_spec *ib_spec,
diff --git a/drivers/infiniband/core/uverbs_flow.c b/drivers/infiniband/core/uverbs_flow.c
new file mode 100644 (file)
index 0000000..1528a29
--- /dev/null
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
+#include "uverbs.h"
+
+struct ib_uflow_resources *flow_resources_alloc(size_t num_specs)
+{
+       struct ib_uflow_resources *resources;
+
+       resources = kzalloc_obj(*resources);
+
+       if (!resources)
+               return NULL;
+
+       if (!num_specs)
+               goto out;
+
+       resources->counters =
+               kzalloc_objs(*resources->counters, num_specs);
+       resources->collection =
+               kzalloc_objs(*resources->collection, num_specs);
+
+       if (!resources->counters || !resources->collection)
+               goto err;
+
+out:
+       resources->max = num_specs;
+       return resources;
+
+err:
+       kfree(resources->counters);
+       kfree(resources);
+
+       return NULL;
+}
+EXPORT_SYMBOL(flow_resources_alloc);
+
+void ib_uverbs_flow_resources_free(struct ib_uflow_resources *uflow_res)
+{
+       unsigned int i;
+
+       if (!uflow_res)
+               return;
+
+       for (i = 0; i < uflow_res->collection_num; i++)
+               atomic_dec(&uflow_res->collection[i]->usecnt);
+
+       for (i = 0; i < uflow_res->counters_num; i++)
+               atomic_dec(&uflow_res->counters[i]->usecnt);
+
+       kfree(uflow_res->collection);
+       kfree(uflow_res->counters);
+       kfree(uflow_res);
+}
+EXPORT_SYMBOL(ib_uverbs_flow_resources_free);
+
+void flow_resources_add(struct ib_uflow_resources *uflow_res,
+                       enum ib_flow_spec_type type,
+                       void *ibobj)
+{
+       WARN_ON(uflow_res->num >= uflow_res->max);
+
+       switch (type) {
+       case IB_FLOW_SPEC_ACTION_HANDLE:
+               atomic_inc(&((struct ib_flow_action *)ibobj)->usecnt);
+               uflow_res->collection[uflow_res->collection_num++] =
+                       (struct ib_flow_action *)ibobj;
+               break;
+       case IB_FLOW_SPEC_ACTION_COUNT:
+               atomic_inc(&((struct ib_counters *)ibobj)->usecnt);
+               uflow_res->counters[uflow_res->counters_num++] =
+                       (struct ib_counters *)ibobj;
+               break;
+       default:
+               WARN_ON(1);
+       }
+
+       uflow_res->num++;
+}
+EXPORT_SYMBOL(flow_resources_add);