xref: /linux/drivers/infiniband/core/cgroup.c (revision 570f7e331f5febb30f1384817463c7e42b65ca7d)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2016 Parav Pandit <pandit.parav@gmail.com>
4  */
5 
6 #include "core_priv.h"
7 
8 /**
9  * ib_device_register_rdmacg - register with rdma cgroup.
10  * @device: device to register to participate in resource
11  *          accounting by rdma cgroup.
12  *
13  * Register with the rdma cgroup. Should be called before
14  * exposing rdma device to user space applications to avoid
15  * resource accounting leak.
16  */
17 void ib_device_register_rdmacg(struct ib_device *device)
18 {
19 	device->cg_device.name = device->name;
20 	device->cg_device.index = device->index;
21 	rdmacg_register_device(&device->cg_device);
22 }
23 
24 /**
25  * ib_device_unregister_rdmacg - unregister with rdma cgroup.
26  * @device: device to unregister.
27  *
28  * Unregister with the rdma cgroup. Should be called after
29  * all the resources are deallocated, and after a stage when any
30  * other resource allocation by user application cannot be done
31  * for this device to avoid any leak in accounting.
32  */
33 void ib_device_unregister_rdmacg(struct ib_device *device)
34 {
35 	rdmacg_unregister_device(&device->cg_device);
36 }
37 
38 int ib_rdmacg_try_charge(struct ib_rdmacg_object *cg_obj,
39 			 struct ib_device *device,
40 			 enum rdmacg_resource_type resource_index)
41 {
42 	return rdmacg_try_charge(&cg_obj->cg, &device->cg_device,
43 				 resource_index);
44 }
45 EXPORT_SYMBOL(ib_rdmacg_try_charge);
46 
47 void ib_rdmacg_uncharge(struct ib_rdmacg_object *cg_obj,
48 			struct ib_device *device,
49 			enum rdmacg_resource_type resource_index)
50 {
51 	rdmacg_uncharge(cg_obj->cg, &device->cg_device,
52 			resource_index);
53 }
54 EXPORT_SYMBOL(ib_rdmacg_uncharge);
55