18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2016 Parav Pandit <pandit.parav@gmail.com> 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef _CGROUP_RDMA_H 78c2ecf20Sopenharmony_ci#define _CGROUP_RDMA_H 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/cgroup.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cienum rdmacg_resource_type { 128c2ecf20Sopenharmony_ci RDMACG_RESOURCE_HCA_HANDLE, 138c2ecf20Sopenharmony_ci RDMACG_RESOURCE_HCA_OBJECT, 148c2ecf20Sopenharmony_ci RDMACG_RESOURCE_MAX, 158c2ecf20Sopenharmony_ci}; 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci#ifdef CONFIG_CGROUP_RDMA 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistruct rdma_cgroup { 208c2ecf20Sopenharmony_ci struct cgroup_subsys_state css; 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci /* 238c2ecf20Sopenharmony_ci * head to keep track of all resource pools 248c2ecf20Sopenharmony_ci * that belongs to this cgroup. 258c2ecf20Sopenharmony_ci */ 268c2ecf20Sopenharmony_ci struct list_head rpools; 278c2ecf20Sopenharmony_ci}; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cistruct rdmacg_device { 308c2ecf20Sopenharmony_ci struct list_head dev_node; 318c2ecf20Sopenharmony_ci struct list_head rpools; 328c2ecf20Sopenharmony_ci char *name; 338c2ecf20Sopenharmony_ci}; 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci/* 368c2ecf20Sopenharmony_ci * APIs for RDMA/IB stack to publish when a device wants to 378c2ecf20Sopenharmony_ci * participate in resource accounting 388c2ecf20Sopenharmony_ci */ 398c2ecf20Sopenharmony_civoid rdmacg_register_device(struct rdmacg_device *device); 408c2ecf20Sopenharmony_civoid rdmacg_unregister_device(struct rdmacg_device *device); 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci/* APIs for RDMA/IB stack to charge/uncharge pool specific resources */ 438c2ecf20Sopenharmony_ciint rdmacg_try_charge(struct rdma_cgroup **rdmacg, 448c2ecf20Sopenharmony_ci struct rdmacg_device *device, 458c2ecf20Sopenharmony_ci enum rdmacg_resource_type index); 468c2ecf20Sopenharmony_civoid rdmacg_uncharge(struct rdma_cgroup *cg, 478c2ecf20Sopenharmony_ci struct rdmacg_device *device, 488c2ecf20Sopenharmony_ci enum rdmacg_resource_type index); 498c2ecf20Sopenharmony_ci#endif /* CONFIG_CGROUP_RDMA */ 508c2ecf20Sopenharmony_ci#endif /* _CGROUP_RDMA_H */ 51