xref: /openbmc/linux/include/linux/cgroup_rdma.h (revision f85d2086)
1f85d2086SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
239d3e758SParav Pandit /*
339d3e758SParav Pandit  * Copyright (C) 2016 Parav Pandit <pandit.parav@gmail.com>
439d3e758SParav Pandit  */
539d3e758SParav Pandit 
639d3e758SParav Pandit #ifndef _CGROUP_RDMA_H
739d3e758SParav Pandit #define _CGROUP_RDMA_H
839d3e758SParav Pandit 
939d3e758SParav Pandit #include <linux/cgroup.h>
1039d3e758SParav Pandit 
1139d3e758SParav Pandit enum rdmacg_resource_type {
1239d3e758SParav Pandit 	RDMACG_RESOURCE_HCA_HANDLE,
1339d3e758SParav Pandit 	RDMACG_RESOURCE_HCA_OBJECT,
1439d3e758SParav Pandit 	RDMACG_RESOURCE_MAX,
1539d3e758SParav Pandit };
1639d3e758SParav Pandit 
1739d3e758SParav Pandit #ifdef CONFIG_CGROUP_RDMA
1839d3e758SParav Pandit 
1939d3e758SParav Pandit struct rdma_cgroup {
2039d3e758SParav Pandit 	struct cgroup_subsys_state	css;
2139d3e758SParav Pandit 
2239d3e758SParav Pandit 	/*
2339d3e758SParav Pandit 	 * head to keep track of all resource pools
2439d3e758SParav Pandit 	 * that belongs to this cgroup.
2539d3e758SParav Pandit 	 */
2639d3e758SParav Pandit 	struct list_head		rpools;
2739d3e758SParav Pandit };
2839d3e758SParav Pandit 
2939d3e758SParav Pandit struct rdmacg_device {
3039d3e758SParav Pandit 	struct list_head	dev_node;
3139d3e758SParav Pandit 	struct list_head	rpools;
3239d3e758SParav Pandit 	char			*name;
3339d3e758SParav Pandit };
3439d3e758SParav Pandit 
3539d3e758SParav Pandit /*
3639d3e758SParav Pandit  * APIs for RDMA/IB stack to publish when a device wants to
3739d3e758SParav Pandit  * participate in resource accounting
3839d3e758SParav Pandit  */
397527a7b1SParav Pandit void rdmacg_register_device(struct rdmacg_device *device);
4039d3e758SParav Pandit void rdmacg_unregister_device(struct rdmacg_device *device);
4139d3e758SParav Pandit 
4239d3e758SParav Pandit /* APIs for RDMA/IB stack to charge/uncharge pool specific resources */
4339d3e758SParav Pandit int rdmacg_try_charge(struct rdma_cgroup **rdmacg,
4439d3e758SParav Pandit 		      struct rdmacg_device *device,
4539d3e758SParav Pandit 		      enum rdmacg_resource_type index);
4639d3e758SParav Pandit void rdmacg_uncharge(struct rdma_cgroup *cg,
4739d3e758SParav Pandit 		     struct rdmacg_device *device,
4839d3e758SParav Pandit 		     enum rdmacg_resource_type index);
4939d3e758SParav Pandit #endif	/* CONFIG_CGROUP_RDMA */
5039d3e758SParav Pandit #endif	/* _CGROUP_RDMA_H */
51