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