|
@@ -246,6 +246,17 @@ static int ib_uverbs_cleanup_ucontext(struct ib_uverbs_file *file,
|
|
|
kfree(uqp);
|
|
|
}
|
|
|
|
|
|
+ list_for_each_entry_safe(uobj, tmp, &context->srq_list, list) {
|
|
|
+ struct ib_srq *srq = uobj->object;
|
|
|
+ struct ib_uevent_object *uevent =
|
|
|
+ container_of(uobj, struct ib_uevent_object, uobject);
|
|
|
+
|
|
|
+ idr_remove_uobj(&ib_uverbs_srq_idr, uobj);
|
|
|
+ ib_destroy_srq(srq);
|
|
|
+ ib_uverbs_release_uevent(file, uevent);
|
|
|
+ kfree(uevent);
|
|
|
+ }
|
|
|
+
|
|
|
list_for_each_entry_safe(uobj, tmp, &context->cq_list, list) {
|
|
|
struct ib_cq *cq = uobj->object;
|
|
|
struct ib_uverbs_event_file *ev_file = cq->cq_context;
|
|
@@ -258,17 +269,6 @@ static int ib_uverbs_cleanup_ucontext(struct ib_uverbs_file *file,
|
|
|
kfree(ucq);
|
|
|
}
|
|
|
|
|
|
- list_for_each_entry_safe(uobj, tmp, &context->srq_list, list) {
|
|
|
- struct ib_srq *srq = uobj->object;
|
|
|
- struct ib_uevent_object *uevent =
|
|
|
- container_of(uobj, struct ib_uevent_object, uobject);
|
|
|
-
|
|
|
- idr_remove_uobj(&ib_uverbs_srq_idr, uobj);
|
|
|
- ib_destroy_srq(srq);
|
|
|
- ib_uverbs_release_uevent(file, uevent);
|
|
|
- kfree(uevent);
|
|
|
- }
|
|
|
-
|
|
|
list_for_each_entry_safe(uobj, tmp, &context->mr_list, list) {
|
|
|
struct ib_mr *mr = uobj->object;
|
|
|
|