mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-25 05:34:00 +08:00
RDMA/uverbs: Move flow resources initialization
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>
This commit is contained in:
parent
70cd20aed0
commit
86e1d464a8
@ -219,12 +219,6 @@ struct ib_ucq_object {
|
|||||||
u32 async_events_reported;
|
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;
|
extern const struct file_operations uverbs_event_fops;
|
||||||
void ib_uverbs_init_event_queue(struct ib_uverbs_event_queue *ev_queue);
|
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,
|
struct file *ib_uverbs_alloc_async_event_file(struct ib_uverbs_file *uverbs_file,
|
||||||
|
@ -2747,15 +2747,6 @@ out_put:
|
|||||||
return ret ? ret : in_len;
|
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)
|
static struct ib_uflow_resources *flow_resources_alloc(size_t num_specs)
|
||||||
{
|
{
|
||||||
struct ib_uflow_resources *resources;
|
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 cmd;
|
||||||
struct ib_uverbs_create_flow_resp resp;
|
struct ib_uverbs_create_flow_resp resp;
|
||||||
struct ib_uobject *uobj;
|
struct ib_uobject *uobj;
|
||||||
struct ib_uflow_object *uflow;
|
|
||||||
struct ib_flow *flow_id;
|
struct ib_flow *flow_id;
|
||||||
struct ib_uverbs_flow_attr *kern_flow_attr;
|
struct ib_uverbs_flow_attr *kern_flow_attr;
|
||||||
struct ib_flow_attr *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);
|
err = PTR_ERR(flow_id);
|
||||||
goto err_free;
|
goto err_free;
|
||||||
}
|
}
|
||||||
atomic_inc(&qp->usecnt);
|
|
||||||
flow_id->qp = qp;
|
ib_set_flow(uobj, flow_id, qp, qp->device, uflow_res);
|
||||||
flow_id->device = qp->device;
|
|
||||||
flow_id->uobject = uobj;
|
|
||||||
uobj->object = flow_id;
|
|
||||||
uflow = container_of(uobj, typeof(*uflow), uobject);
|
|
||||||
uflow->resources = uflow_res;
|
|
||||||
|
|
||||||
memset(&resp, 0, sizeof(resp));
|
memset(&resp, 0, sizeof(resp));
|
||||||
resp.flow_handle = uobj->id;
|
resp.flow_handle = uobj->id;
|
||||||
|
@ -128,7 +128,7 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
|
|||||||
if (IS_ERR(flow_handler))
|
if (IS_ERR(flow_handler))
|
||||||
return PTR_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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -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
|
* rdma_roce_rescan_device - Rescan all of the network devices in the system
|
||||||
* and add their gids, as needed, to the relevant RoCE devices.
|
* and add their gids, as needed, to the relevant RoCE devices.
|
||||||
|
@ -152,5 +152,38 @@ static inline void uverbs_flow_action_fill_action(struct ib_flow_action *action,
|
|||||||
uobj->object = 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
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user