OSDN Git Service

RDMA/uverbs: Move flow resources initialization
authorMark Bloch <markb@mellanox.com>
Thu, 6 Sep 2018 14:27:02 +0000 (17:27 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 11 Sep 2018 15:28:06 +0000 (09:28 -0600)
Use ib_set_flow() when initializing flow related resources.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Reviewed-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/uverbs.h
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/hw/mlx5/flow.c
include/rdma/ib_verbs.h
include/rdma/uverbs_std_types.h

index 7199c27..717ab35 100644 (file)
@@ -219,12 +219,6 @@ struct ib_ucq_object {
        u32                     async_events_reported;
 };
 
-struct ib_uflow_resources;
-struct ib_uflow_object {
-       struct ib_uobject               uobject;
-       struct ib_uflow_resources       *resources;
-};
-
 extern const struct file_operations uverbs_event_fops;
 void ib_uverbs_init_event_queue(struct ib_uverbs_event_queue *ev_queue);
 struct file *ib_uverbs_alloc_async_event_file(struct ib_uverbs_file *uverbs_file,
index 4b72851..c054d65 100644 (file)
@@ -2747,15 +2747,6 @@ out_put:
        return ret ? ret : in_len;
 }
 
-struct ib_uflow_resources {
-       size_t                  max;
-       size_t                  num;
-       size_t                  collection_num;
-       size_t                  counters_num;
-       struct ib_counters      **counters;
-       struct ib_flow_action   **collection;
-};
-
 static struct ib_uflow_resources *flow_resources_alloc(size_t num_specs)
 {
        struct ib_uflow_resources *resources;
@@ -3462,7 +3453,6 @@ int ib_uverbs_ex_create_flow(struct ib_uverbs_file *file,
        struct ib_uverbs_create_flow      cmd;
        struct ib_uverbs_create_flow_resp resp;
        struct ib_uobject                 *uobj;
-       struct ib_uflow_object            *uflow;
        struct ib_flow                    *flow_id;
        struct ib_uverbs_flow_attr        *kern_flow_attr;
        struct ib_flow_attr               *flow_attr;
@@ -3601,13 +3591,8 @@ int ib_uverbs_ex_create_flow(struct ib_uverbs_file *file,
                err = PTR_ERR(flow_id);
                goto err_free;
        }
-       atomic_inc(&qp->usecnt);
-       flow_id->qp = qp;
-       flow_id->device = qp->device;
-       flow_id->uobject = uobj;
-       uobj->object = flow_id;
-       uflow = container_of(uobj, typeof(*uflow), uobject);
-       uflow->resources = uflow_res;
+
+       ib_set_flow(uobj, flow_id, qp, qp->device, uflow_res);
 
        memset(&resp, 0, sizeof(resp));
        resp.flow_handle = uobj->id;
index 5750a65..12abbc0 100644 (file)
@@ -128,7 +128,7 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
        if (IS_ERR(flow_handler))
                return PTR_ERR(flow_handler);
 
-       ib_set_flow(uobj, &flow_handler->ibflow, qp, &dev->ib_dev);
+       ib_set_flow(uobj, &flow_handler->ibflow, qp, &dev->ib_dev, NULL);
 
        return 0;
 }
index f687faa..6076c9b 100644 (file)
@@ -4162,20 +4162,6 @@ ib_get_vector_affinity(struct ib_device *device, int comp_vector)
 
 }
 
-static inline void ib_set_flow(struct ib_uobject *uobj, struct ib_flow *ibflow,
-                              struct ib_qp *qp, struct ib_device *device)
-{
-       uobj->object = ibflow;
-       ibflow->uobject = uobj;
-
-       if (qp) {
-               atomic_inc(&qp->usecnt);
-               ibflow->qp = qp;
-       }
-
-       ibflow->device = device;
-}
-
 /**
  * rdma_roce_rescan_device - Rescan all of the network devices in the system
  * and add their gids, as needed, to the relevant RoCE devices.
index 526d918..dfd6d35 100644 (file)
@@ -152,5 +152,38 @@ static inline void uverbs_flow_action_fill_action(struct ib_flow_action *action,
        uobj->object = action;
 }
 
+struct ib_uflow_resources {
+       size_t                  max;
+       size_t                  num;
+       size_t                  collection_num;
+       size_t                  counters_num;
+       struct ib_counters      **counters;
+       struct ib_flow_action   **collection;
+};
+
+struct ib_uflow_object {
+       struct ib_uobject               uobject;
+       struct ib_uflow_resources       *resources;
+};
+
+static inline void ib_set_flow(struct ib_uobject *uobj, struct ib_flow *ibflow,
+                              struct ib_qp *qp, struct ib_device *device,
+                              struct ib_uflow_resources *uflow_res)
+{
+       struct ib_uflow_object *uflow;
+
+       uobj->object = ibflow;
+       ibflow->uobject = uobj;
+
+       if (qp) {
+               atomic_inc(&qp->usecnt);
+               ibflow->qp = qp;
+       }
+
+       ibflow->device = device;
+       uflow = container_of(uobj, typeof(*uflow), uobject);
+       uflow->resources = uflow_res;
+}
+
 #endif