1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2017-2019 Mellanox Technologies. All rights reserved. 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef _RDMA_CORE_RESTRACK_H_ 7*4882a593Smuzhiyun #define _RDMA_CORE_RESTRACK_H_ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/mutex.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /** 12*4882a593Smuzhiyun * struct rdma_restrack_root - main resource tracking management 13*4882a593Smuzhiyun * entity, per-device 14*4882a593Smuzhiyun */ 15*4882a593Smuzhiyun struct rdma_restrack_root { 16*4882a593Smuzhiyun /** 17*4882a593Smuzhiyun * @xa: Array of XArray structure to hold restrack entries. 18*4882a593Smuzhiyun */ 19*4882a593Smuzhiyun struct xarray xa; 20*4882a593Smuzhiyun /** 21*4882a593Smuzhiyun * @next_id: Next ID to support cyclic allocation 22*4882a593Smuzhiyun */ 23*4882a593Smuzhiyun u32 next_id; 24*4882a593Smuzhiyun }; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun int rdma_restrack_init(struct ib_device *dev); 27*4882a593Smuzhiyun void rdma_restrack_clean(struct ib_device *dev); 28*4882a593Smuzhiyun void rdma_restrack_add(struct rdma_restrack_entry *res); 29*4882a593Smuzhiyun void rdma_restrack_del(struct rdma_restrack_entry *res); 30*4882a593Smuzhiyun void rdma_restrack_new(struct rdma_restrack_entry *res, 31*4882a593Smuzhiyun enum rdma_restrack_type type); 32*4882a593Smuzhiyun void rdma_restrack_set_name(struct rdma_restrack_entry *res, 33*4882a593Smuzhiyun const char *caller); 34*4882a593Smuzhiyun void rdma_restrack_parent_name(struct rdma_restrack_entry *dst, 35*4882a593Smuzhiyun const struct rdma_restrack_entry *parent); 36*4882a593Smuzhiyun #endif /* _RDMA_CORE_RESTRACK_H_ */ 37