]> git.ipfire.org Git - thirdparty/linux.git/blob - drivers/infiniband/core/uverbs_std_types_async_fd.c
io_uring: reset -EBUSY error when io sq thread is waken up
[thirdparty/linux.git] / drivers / infiniband / core / uverbs_std_types_async_fd.c
1 // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
2 /*
3 * Copyright (c) 2019, Mellanox Technologies inc. All rights reserved.
4 */
5
6 #include <rdma/uverbs_std_types.h>
7 #include <rdma/uverbs_ioctl.h>
8 #include "rdma_core.h"
9 #include "uverbs.h"
10
11 static int UVERBS_HANDLER(UVERBS_METHOD_ASYNC_EVENT_ALLOC)(
12 struct uverbs_attr_bundle *attrs)
13 {
14 struct ib_uobject *uobj =
15 uverbs_attr_get_uobject(attrs, UVERBS_METHOD_ASYNC_EVENT_ALLOC);
16
17 ib_uverbs_init_async_event_file(
18 container_of(uobj, struct ib_uverbs_async_event_file, uobj));
19 return 0;
20 }
21
22 static int uverbs_async_event_destroy_uobj(struct ib_uobject *uobj,
23 enum rdma_remove_reason why)
24 {
25 struct ib_uverbs_async_event_file *event_file =
26 container_of(uobj, struct ib_uverbs_async_event_file, uobj);
27
28 ib_unregister_event_handler(&event_file->event_handler);
29 ib_uverbs_free_event_queue(&event_file->ev_queue);
30 return 0;
31 }
32
33 DECLARE_UVERBS_NAMED_METHOD(
34 UVERBS_METHOD_ASYNC_EVENT_ALLOC,
35 UVERBS_ATTR_FD(UVERBS_ATTR_ASYNC_EVENT_ALLOC_FD_HANDLE,
36 UVERBS_OBJECT_ASYNC_EVENT,
37 UVERBS_ACCESS_NEW,
38 UA_MANDATORY));
39
40 DECLARE_UVERBS_NAMED_OBJECT(
41 UVERBS_OBJECT_ASYNC_EVENT,
42 UVERBS_TYPE_ALLOC_FD(sizeof(struct ib_uverbs_async_event_file),
43 uverbs_async_event_destroy_uobj,
44 &uverbs_async_event_fops,
45 "[infinibandevent]",
46 O_RDONLY),
47 &UVERBS_METHOD(UVERBS_METHOD_ASYNC_EVENT_ALLOC));
48
49 const struct uapi_definition uverbs_def_obj_async_fd[] = {
50 UAPI_DEF_CHAIN_OBJ_TREE_NAMED(UVERBS_OBJECT_ASYNC_EVENT),
51 {}
52 };