1/* 2 * Copyright (C) 2016 Parav Pandit <pandit.parav@gmail.com> 3 * 4 * This file is subject to the terms and conditions of version 2 of the GNU 5 * General Public License. See the file COPYING in the main directory of the 6 * Linux distribution for more details. 7 */ 8 9#ifndef _CGROUP_RDMA_H 10#define _CGROUP_RDMA_H 11 12#include <linux/cgroup.h> 13 14enum rdmacg_resource_type { 15 RDMACG_RESOURCE_HCA_HANDLE, 16 RDMACG_RESOURCE_HCA_OBJECT, 17 RDMACG_RESOURCE_MAX, 18}; 19 20#ifdef CONFIG_CGROUP_RDMA 21 22struct rdma_cgroup { 23 struct cgroup_subsys_state css; 24 25 /* 26 * head to keep track of all resource pools 27 * that belongs to this cgroup. 28 */ 29 struct list_head rpools; 30}; 31 32struct rdmacg_device { 33 struct list_head dev_node; 34 struct list_head rpools; 35 char *name; 36}; 37 38/* 39 * APIs for RDMA/IB stack to publish when a device wants to 40 * participate in resource accounting 41 */ 42int rdmacg_register_device(struct rdmacg_device *device); 43void rdmacg_unregister_device(struct rdmacg_device *device); 44 45/* APIs for RDMA/IB stack to charge/uncharge pool specific resources */ 46int rdmacg_try_charge(struct rdma_cgroup **rdmacg, 47 struct rdmacg_device *device, 48 enum rdmacg_resource_type index); 49void rdmacg_uncharge(struct rdma_cgroup *cg, 50 struct rdmacg_device *device, 51 enum rdmacg_resource_type index); 52#endif /* CONFIG_CGROUP_RDMA */ 53#endif /* _CGROUP_RDMA_H */ 54