~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/rdma/restrack.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
  2 /*
  3  * Copyright (c) 2017-2018 Mellanox Technologies. All rights reserved.
  4  */
  5 
  6 #ifndef _RDMA_RESTRACK_H_
  7 #define _RDMA_RESTRACK_H_
  8 
  9 #include <linux/typecheck.h>
 10 #include <linux/sched.h>
 11 #include <linux/kref.h>
 12 #include <linux/completion.h>
 13 #include <linux/sched/task.h>
 14 #include <uapi/rdma/rdma_netlink.h>
 15 #include <linux/xarray.h>
 16 
 17 /* Mark entry as containing driver specific details, it is used to provide QP subtype for now */
 18 #define RESTRACK_DD XA_MARK_1
 19 
 20 struct ib_device;
 21 struct sk_buff;
 22 
 23 /**
 24  * enum rdma_restrack_type - HW objects to track
 25  */
 26 enum rdma_restrack_type {
 27         /**
 28          * @RDMA_RESTRACK_PD: Protection domain (PD)
 29          */
 30         RDMA_RESTRACK_PD,
 31         /**
 32          * @RDMA_RESTRACK_CQ: Completion queue (CQ)
 33          */
 34         RDMA_RESTRACK_CQ,
 35         /**
 36          * @RDMA_RESTRACK_QP: Queue pair (QP)
 37          */
 38         RDMA_RESTRACK_QP,
 39         /**
 40          * @RDMA_RESTRACK_CM_ID: Connection Manager ID (CM_ID)
 41          */
 42         RDMA_RESTRACK_CM_ID,
 43         /**
 44          * @RDMA_RESTRACK_MR: Memory Region (MR)
 45          */
 46         RDMA_RESTRACK_MR,
 47         /**
 48          * @RDMA_RESTRACK_CTX: Verbs contexts (CTX)
 49          */
 50         RDMA_RESTRACK_CTX,
 51         /**
 52          * @RDMA_RESTRACK_COUNTER: Statistic Counter
 53          */
 54         RDMA_RESTRACK_COUNTER,
 55         /**
 56          * @RDMA_RESTRACK_SRQ: Shared receive queue (SRQ)
 57          */
 58         RDMA_RESTRACK_SRQ,
 59         /**
 60          * @RDMA_RESTRACK_MAX: Last entry, used for array dclarations
 61          */
 62         RDMA_RESTRACK_MAX
 63 };
 64 
 65 /**
 66  * struct rdma_restrack_entry - metadata per-entry
 67  */
 68 struct rdma_restrack_entry {
 69         /**
 70          * @valid: validity indicator
 71          *
 72          * The entries are filled during rdma_restrack_add,
 73          * can be attempted to be free during rdma_restrack_del.
 74          *
 75          * As an example for that, see mlx5 QPs with type MLX5_IB_QPT_HW_GSI
 76          */
 77         bool                    valid;
 78         /**
 79          * @no_track: don't add this entry to restrack DB
 80          *
 81          * This field is used to mark an entry that doesn't need to be added to
 82          * internal restrack DB and presented later to the users at the nldev
 83          * query stage.
 84          */
 85         u8                      no_track : 1;
 86         /*
 87          * @kref: Protect destroy of the resource
 88          */
 89         struct kref             kref;
 90         /*
 91          * @comp: Signal that all consumers of resource are completed their work
 92          */
 93         struct completion       comp;
 94         /**
 95          * @task: owner of resource tracking entity
 96          *
 97          * There are two types of entities: created by user and created
 98          * by kernel.
 99          *
100          * This is relevant for the entities created by users.
101          * For the entities created by kernel, this pointer will be NULL.
102          */
103         struct task_struct      *task;
104         /**
105          * @kern_name: name of owner for the kernel created entities.
106          */
107         const char              *kern_name;
108         /**
109          * @type: various objects in restrack database
110          */
111         enum rdma_restrack_type type;
112         /**
113          * @user: user resource
114          */
115         bool                    user;
116         /**
117          * @id: ID to expose to users
118          */
119         u32 id;
120 };
121 
122 int rdma_restrack_count(struct ib_device *dev, enum rdma_restrack_type type,
123                         bool show_details);
124 /**
125  * rdma_is_kernel_res() - check the owner of resource
126  * @res:  resource entry
127  */
128 static inline bool rdma_is_kernel_res(const struct rdma_restrack_entry *res)
129 {
130         return !res->user;
131 }
132 
133 /**
134  * rdma_restrack_get() - grab to protect resource from release
135  * @res:  resource entry
136  */
137 int __must_check rdma_restrack_get(struct rdma_restrack_entry *res);
138 
139 /**
140  * rdma_restrack_put() - release resource
141  * @res:  resource entry
142  */
143 int rdma_restrack_put(struct rdma_restrack_entry *res);
144 
145 /*
146  * Helper functions for rdma drivers when filling out
147  * nldev driver attributes.
148  */
149 int rdma_nl_put_driver_u32(struct sk_buff *msg, const char *name, u32 value);
150 int rdma_nl_put_driver_u32_hex(struct sk_buff *msg, const char *name,
151                                u32 value);
152 int rdma_nl_put_driver_u64(struct sk_buff *msg, const char *name, u64 value);
153 int rdma_nl_put_driver_u64_hex(struct sk_buff *msg, const char *name,
154                                u64 value);
155 int rdma_nl_put_driver_string(struct sk_buff *msg, const char *name,
156                               const char *str);
157 int rdma_nl_stat_hwcounter_entry(struct sk_buff *msg, const char *name,
158                                  u64 value);
159 
160 struct rdma_restrack_entry *rdma_restrack_get_byid(struct ib_device *dev,
161                                                    enum rdma_restrack_type type,
162                                                    u32 id);
163 
164 /**
165  * rdma_restrack_no_track() - don't add resource to the DB
166  * @res: resource entry
167  *
168  * Every user of this API should be cross examined.
169  * Probably you don't need to use this function.
170  */
171 static inline void rdma_restrack_no_track(struct rdma_restrack_entry *res)
172 {
173         res->no_track = true;
174 }
175 static inline bool rdma_restrack_is_tracked(struct rdma_restrack_entry *res)
176 {
177         return !res->no_track;
178 }
179 #endif /* _RDMA_RESTRACK_H_ */
180 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php