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