xref: /linux-6.15/include/linux/cgroup_rdma.h (revision 7527a7b1)
139d3e758SParav Pandit /*
239d3e758SParav Pandit  * Copyright (C) 2016 Parav Pandit <[email protected]>
339d3e758SParav Pandit  *
439d3e758SParav Pandit  * This file is subject to the terms and conditions of version 2 of the GNU
539d3e758SParav Pandit  * General Public License. See the file COPYING in the main directory of the
639d3e758SParav Pandit  * Linux distribution for more details.
739d3e758SParav Pandit  */
839d3e758SParav Pandit 
939d3e758SParav Pandit #ifndef _CGROUP_RDMA_H
1039d3e758SParav Pandit #define _CGROUP_RDMA_H
1139d3e758SParav Pandit 
1239d3e758SParav Pandit #include <linux/cgroup.h>
1339d3e758SParav Pandit 
1439d3e758SParav Pandit enum rdmacg_resource_type {
1539d3e758SParav Pandit 	RDMACG_RESOURCE_HCA_HANDLE,
1639d3e758SParav Pandit 	RDMACG_RESOURCE_HCA_OBJECT,
1739d3e758SParav Pandit 	RDMACG_RESOURCE_MAX,
1839d3e758SParav Pandit };
1939d3e758SParav Pandit 
2039d3e758SParav Pandit #ifdef CONFIG_CGROUP_RDMA
2139d3e758SParav Pandit 
2239d3e758SParav Pandit struct rdma_cgroup {
2339d3e758SParav Pandit 	struct cgroup_subsys_state	css;
2439d3e758SParav Pandit 
2539d3e758SParav Pandit 	/*
2639d3e758SParav Pandit 	 * head to keep track of all resource pools
2739d3e758SParav Pandit 	 * that belongs to this cgroup.
2839d3e758SParav Pandit 	 */
2939d3e758SParav Pandit 	struct list_head		rpools;
3039d3e758SParav Pandit };
3139d3e758SParav Pandit 
3239d3e758SParav Pandit struct rdmacg_device {
3339d3e758SParav Pandit 	struct list_head	dev_node;
3439d3e758SParav Pandit 	struct list_head	rpools;
3539d3e758SParav Pandit 	char			*name;
3639d3e758SParav Pandit };
3739d3e758SParav Pandit 
3839d3e758SParav Pandit /*
3939d3e758SParav Pandit  * APIs for RDMA/IB stack to publish when a device wants to
4039d3e758SParav Pandit  * participate in resource accounting
4139d3e758SParav Pandit  */
42*7527a7b1SParav Pandit void rdmacg_register_device(struct rdmacg_device *device);
4339d3e758SParav Pandit void rdmacg_unregister_device(struct rdmacg_device *device);
4439d3e758SParav Pandit 
4539d3e758SParav Pandit /* APIs for RDMA/IB stack to charge/uncharge pool specific resources */
4639d3e758SParav Pandit int rdmacg_try_charge(struct rdma_cgroup **rdmacg,
4739d3e758SParav Pandit 		      struct rdmacg_device *device,
4839d3e758SParav Pandit 		      enum rdmacg_resource_type index);
4939d3e758SParav Pandit void rdmacg_uncharge(struct rdma_cgroup *cg,
5039d3e758SParav Pandit 		     struct rdmacg_device *device,
5139d3e758SParav Pandit 		     enum rdmacg_resource_type index);
5239d3e758SParav Pandit #endif	/* CONFIG_CGROUP_RDMA */
5339d3e758SParav Pandit #endif	/* _CGROUP_RDMA_H */
54