0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033 #ifndef _CORE_PRIV_H
0034 #define _CORE_PRIV_H
0035
0036 #include <linux/list.h>
0037 #include <linux/spinlock.h>
0038 #include <linux/cgroup_rdma.h>
0039 #include <net/net_namespace.h>
0040 #include <net/netns/generic.h>
0041
0042 #include <rdma/ib_verbs.h>
0043 #include <rdma/opa_addr.h>
0044 #include <rdma/ib_mad.h>
0045 #include <rdma/restrack.h>
0046 #include "mad_priv.h"
0047 #include "restrack.h"
0048
0049
0050 #define RDMA_MAX_PORTS 8192
0051
0052 struct pkey_index_qp_list {
0053 struct list_head pkey_index_list;
0054 u16 pkey_index;
0055
0056 spinlock_t qp_list_lock;
0057 struct list_head qp_list;
0058 };
0059
0060
0061
0062
0063
0064
0065
0066 struct rdma_dev_net {
0067 struct sock *nl_sock;
0068 possible_net_t net;
0069 u32 id;
0070 };
0071
0072 extern const struct attribute_group ib_dev_attr_group;
0073 extern bool ib_devices_shared_netns;
0074 extern unsigned int rdma_dev_net_id;
0075
0076 static inline struct rdma_dev_net *rdma_net_to_dev_net(struct net *net)
0077 {
0078 return net_generic(net, rdma_dev_net_id);
0079 }
0080
0081 int ib_device_rename(struct ib_device *ibdev, const char *name);
0082 int ib_device_set_dim(struct ib_device *ibdev, u8 use_dim);
0083
0084 typedef void (*roce_netdev_callback)(struct ib_device *device, u32 port,
0085 struct net_device *idev, void *cookie);
0086
0087 typedef bool (*roce_netdev_filter)(struct ib_device *device, u32 port,
0088 struct net_device *idev, void *cookie);
0089
0090 struct net_device *ib_device_get_netdev(struct ib_device *ib_dev,
0091 u32 port);
0092
0093 void ib_enum_roce_netdev(struct ib_device *ib_dev,
0094 roce_netdev_filter filter,
0095 void *filter_cookie,
0096 roce_netdev_callback cb,
0097 void *cookie);
0098 void ib_enum_all_roce_netdevs(roce_netdev_filter filter,
0099 void *filter_cookie,
0100 roce_netdev_callback cb,
0101 void *cookie);
0102
0103 typedef int (*nldev_callback)(struct ib_device *device,
0104 struct sk_buff *skb,
0105 struct netlink_callback *cb,
0106 unsigned int idx);
0107
0108 int ib_enum_all_devs(nldev_callback nldev_cb, struct sk_buff *skb,
0109 struct netlink_callback *cb);
0110
0111 struct ib_client_nl_info {
0112 struct sk_buff *nl_msg;
0113 struct device *cdev;
0114 u32 port;
0115 u64 abi;
0116 };
0117 int ib_get_client_nl_info(struct ib_device *ibdev, const char *client_name,
0118 struct ib_client_nl_info *res);
0119
0120 enum ib_cache_gid_default_mode {
0121 IB_CACHE_GID_DEFAULT_MODE_SET,
0122 IB_CACHE_GID_DEFAULT_MODE_DELETE
0123 };
0124
0125 int ib_cache_gid_parse_type_str(const char *buf);
0126
0127 const char *ib_cache_gid_type_str(enum ib_gid_type gid_type);
0128
0129 void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u32 port,
0130 struct net_device *ndev,
0131 unsigned long gid_type_mask,
0132 enum ib_cache_gid_default_mode mode);
0133
0134 int ib_cache_gid_add(struct ib_device *ib_dev, u32 port,
0135 union ib_gid *gid, struct ib_gid_attr *attr);
0136
0137 int ib_cache_gid_del(struct ib_device *ib_dev, u32 port,
0138 union ib_gid *gid, struct ib_gid_attr *attr);
0139
0140 int ib_cache_gid_del_all_netdev_gids(struct ib_device *ib_dev, u32 port,
0141 struct net_device *ndev);
0142
0143 int roce_gid_mgmt_init(void);
0144 void roce_gid_mgmt_cleanup(void);
0145
0146 unsigned long roce_gid_type_mask_support(struct ib_device *ib_dev, u32 port);
0147
0148 int ib_cache_setup_one(struct ib_device *device);
0149 void ib_cache_cleanup_one(struct ib_device *device);
0150 void ib_cache_release_one(struct ib_device *device);
0151 void ib_dispatch_event_clients(struct ib_event *event);
0152
0153 #ifdef CONFIG_CGROUP_RDMA
0154 void ib_device_register_rdmacg(struct ib_device *device);
0155 void ib_device_unregister_rdmacg(struct ib_device *device);
0156
0157 int ib_rdmacg_try_charge(struct ib_rdmacg_object *cg_obj,
0158 struct ib_device *device,
0159 enum rdmacg_resource_type resource_index);
0160
0161 void ib_rdmacg_uncharge(struct ib_rdmacg_object *cg_obj,
0162 struct ib_device *device,
0163 enum rdmacg_resource_type resource_index);
0164 #else
0165 static inline void ib_device_register_rdmacg(struct ib_device *device)
0166 {
0167 }
0168
0169 static inline void ib_device_unregister_rdmacg(struct ib_device *device)
0170 {
0171 }
0172
0173 static inline int ib_rdmacg_try_charge(struct ib_rdmacg_object *cg_obj,
0174 struct ib_device *device,
0175 enum rdmacg_resource_type resource_index)
0176 {
0177 return 0;
0178 }
0179
0180 static inline void ib_rdmacg_uncharge(struct ib_rdmacg_object *cg_obj,
0181 struct ib_device *device,
0182 enum rdmacg_resource_type resource_index)
0183 {
0184 }
0185 #endif
0186
0187 static inline bool rdma_is_upper_dev_rcu(struct net_device *dev,
0188 struct net_device *upper)
0189 {
0190 return netdev_has_upper_dev_all_rcu(dev, upper);
0191 }
0192
0193 int addr_init(void);
0194 void addr_cleanup(void);
0195
0196 int ib_mad_init(void);
0197 void ib_mad_cleanup(void);
0198
0199 int ib_sa_init(void);
0200 void ib_sa_cleanup(void);
0201
0202 void rdma_nl_init(void);
0203 void rdma_nl_exit(void);
0204
0205 int ib_nl_handle_resolve_resp(struct sk_buff *skb,
0206 struct nlmsghdr *nlh,
0207 struct netlink_ext_ack *extack);
0208 int ib_nl_handle_set_timeout(struct sk_buff *skb,
0209 struct nlmsghdr *nlh,
0210 struct netlink_ext_ack *extack);
0211 int ib_nl_handle_ip_res_resp(struct sk_buff *skb,
0212 struct nlmsghdr *nlh,
0213 struct netlink_ext_ack *extack);
0214
0215 void ib_get_cached_subnet_prefix(struct ib_device *device,
0216 u32 port_num,
0217 u64 *sn_pfx);
0218
0219 #ifdef CONFIG_SECURITY_INFINIBAND
0220 void ib_security_release_port_pkey_list(struct ib_device *device);
0221
0222 void ib_security_cache_change(struct ib_device *device,
0223 u32 port_num,
0224 u64 subnet_prefix);
0225
0226 int ib_security_modify_qp(struct ib_qp *qp,
0227 struct ib_qp_attr *qp_attr,
0228 int qp_attr_mask,
0229 struct ib_udata *udata);
0230
0231 int ib_create_qp_security(struct ib_qp *qp, struct ib_device *dev);
0232 void ib_destroy_qp_security_begin(struct ib_qp_security *sec);
0233 void ib_destroy_qp_security_abort(struct ib_qp_security *sec);
0234 void ib_destroy_qp_security_end(struct ib_qp_security *sec);
0235 int ib_open_shared_qp_security(struct ib_qp *qp, struct ib_device *dev);
0236 void ib_close_shared_qp_security(struct ib_qp_security *sec);
0237 int ib_mad_agent_security_setup(struct ib_mad_agent *agent,
0238 enum ib_qp_type qp_type);
0239 void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent);
0240 int ib_mad_enforce_security(struct ib_mad_agent_private *map, u16 pkey_index);
0241 void ib_mad_agent_security_change(void);
0242 #else
0243 static inline void ib_security_release_port_pkey_list(struct ib_device *device)
0244 {
0245 }
0246
0247 static inline void ib_security_cache_change(struct ib_device *device,
0248 u32 port_num,
0249 u64 subnet_prefix)
0250 {
0251 }
0252
0253 static inline int ib_security_modify_qp(struct ib_qp *qp,
0254 struct ib_qp_attr *qp_attr,
0255 int qp_attr_mask,
0256 struct ib_udata *udata)
0257 {
0258 return qp->device->ops.modify_qp(qp->real_qp,
0259 qp_attr,
0260 qp_attr_mask,
0261 udata);
0262 }
0263
0264 static inline int ib_create_qp_security(struct ib_qp *qp,
0265 struct ib_device *dev)
0266 {
0267 return 0;
0268 }
0269
0270 static inline void ib_destroy_qp_security_begin(struct ib_qp_security *sec)
0271 {
0272 }
0273
0274 static inline void ib_destroy_qp_security_abort(struct ib_qp_security *sec)
0275 {
0276 }
0277
0278 static inline void ib_destroy_qp_security_end(struct ib_qp_security *sec)
0279 {
0280 }
0281
0282 static inline int ib_open_shared_qp_security(struct ib_qp *qp,
0283 struct ib_device *dev)
0284 {
0285 return 0;
0286 }
0287
0288 static inline void ib_close_shared_qp_security(struct ib_qp_security *sec)
0289 {
0290 }
0291
0292 static inline int ib_mad_agent_security_setup(struct ib_mad_agent *agent,
0293 enum ib_qp_type qp_type)
0294 {
0295 return 0;
0296 }
0297
0298 static inline void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent)
0299 {
0300 }
0301
0302 static inline int ib_mad_enforce_security(struct ib_mad_agent_private *map,
0303 u16 pkey_index)
0304 {
0305 return 0;
0306 }
0307
0308 static inline void ib_mad_agent_security_change(void)
0309 {
0310 }
0311 #endif
0312
0313 struct ib_device *ib_device_get_by_index(const struct net *net, u32 index);
0314
0315
0316 void nldev_init(void);
0317 void nldev_exit(void);
0318
0319 struct ib_qp *ib_create_qp_user(struct ib_device *dev, struct ib_pd *pd,
0320 struct ib_qp_init_attr *attr,
0321 struct ib_udata *udata,
0322 struct ib_uqp_object *uobj, const char *caller);
0323
0324 void ib_qp_usecnt_inc(struct ib_qp *qp);
0325 void ib_qp_usecnt_dec(struct ib_qp *qp);
0326
0327 struct rdma_dev_addr;
0328 int rdma_resolve_ip_route(struct sockaddr *src_addr,
0329 const struct sockaddr *dst_addr,
0330 struct rdma_dev_addr *addr);
0331
0332 int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid,
0333 const union ib_gid *dgid,
0334 u8 *dmac, const struct ib_gid_attr *sgid_attr,
0335 int *hoplimit);
0336 void rdma_copy_src_l2_addr(struct rdma_dev_addr *dev_addr,
0337 const struct net_device *dev);
0338
0339 struct sa_path_rec;
0340 int roce_resolve_route_from_path(struct sa_path_rec *rec,
0341 const struct ib_gid_attr *attr);
0342
0343 struct net_device *rdma_read_gid_attr_ndev_rcu(const struct ib_gid_attr *attr);
0344
0345 void ib_free_port_attrs(struct ib_core_device *coredev);
0346 int ib_setup_port_attrs(struct ib_core_device *coredev);
0347 struct rdma_hw_stats *ib_get_hw_stats_port(struct ib_device *ibdev, u32 port_num);
0348 void ib_device_release_hw_stats(struct hw_stats_device_data *data);
0349 int ib_setup_device_attrs(struct ib_device *ibdev);
0350
0351 int rdma_compatdev_set(u8 enable);
0352
0353 int ib_port_register_client_groups(struct ib_device *ibdev, u32 port_num,
0354 const struct attribute_group **groups);
0355 void ib_port_unregister_client_groups(struct ib_device *ibdev, u32 port_num,
0356 const struct attribute_group **groups);
0357
0358 int ib_device_set_netns_put(struct sk_buff *skb,
0359 struct ib_device *dev, u32 ns_fd);
0360
0361 int rdma_nl_net_init(struct rdma_dev_net *rnet);
0362 void rdma_nl_net_exit(struct rdma_dev_net *rnet);
0363
0364 struct rdma_umap_priv {
0365 struct vm_area_struct *vma;
0366 struct list_head list;
0367 struct rdma_user_mmap_entry *entry;
0368 };
0369
0370 void rdma_umap_priv_init(struct rdma_umap_priv *priv,
0371 struct vm_area_struct *vma,
0372 struct rdma_user_mmap_entry *entry);
0373
0374 void ib_cq_pool_cleanup(struct ib_device *dev);
0375
0376 #endif