1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Copyright (C) 2016 Parav Pandit <pandit.parav@gmail.com> |
4 | */ |
5 | |
6 | #ifndef _CGROUP_RDMA_H |
7 | #define _CGROUP_RDMA_H |
8 | |
9 | #include <linux/cgroup.h> |
10 | |
11 | enum rdmacg_resource_type { |
12 | RDMACG_RESOURCE_HCA_HANDLE, |
13 | RDMACG_RESOURCE_HCA_OBJECT, |
14 | RDMACG_RESOURCE_MAX, |
15 | }; |
16 | |
17 | #ifdef CONFIG_CGROUP_RDMA |
18 | |
19 | struct rdma_cgroup { |
20 | struct cgroup_subsys_state css; |
21 | |
22 | /* |
23 | * head to keep track of all resource pools |
24 | * that belongs to this cgroup. |
25 | */ |
26 | struct list_head rpools; |
27 | }; |
28 | |
29 | struct rdmacg_device { |
30 | struct list_head dev_node; |
31 | struct list_head rpools; |
32 | char *name; |
33 | }; |
34 | |
35 | /* |
36 | * APIs for RDMA/IB stack to publish when a device wants to |
37 | * participate in resource accounting |
38 | */ |
39 | void rdmacg_register_device(struct rdmacg_device *device); |
40 | void rdmacg_unregister_device(struct rdmacg_device *device); |
41 | |
42 | /* APIs for RDMA/IB stack to charge/uncharge pool specific resources */ |
43 | int rdmacg_try_charge(struct rdma_cgroup **rdmacg, |
44 | struct rdmacg_device *device, |
45 | enum rdmacg_resource_type index); |
46 | void rdmacg_uncharge(struct rdma_cgroup *cg, |
47 | struct rdmacg_device *device, |
48 | enum rdmacg_resource_type index); |
49 | #endif /* CONFIG_CGROUP_RDMA */ |
50 | #endif /* _CGROUP_RDMA_H */ |
51 | |