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