xref: /linux/drivers/infiniband/core/device.c (revision 570f7e331f5febb30f1384817463c7e42b65ca7d)
1 /*
2  * Copyright (c) 2004 Topspin Communications.  All rights reserved.
3  * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
4  *
5  * This software is available to you under a choice of one of two
6  * licenses.  You may choose to be licensed under the terms of the GNU
7  * General Public License (GPL) Version 2, available from the file
8  * COPYING in the main directory of this source tree, or the
9  * OpenIB.org BSD license below:
10  *
11  *     Redistribution and use in source and binary forms, with or
12  *     without modification, are permitted provided that the following
13  *     conditions are met:
14  *
15  *      - Redistributions of source code must retain the above
16  *        copyright notice, this list of conditions and the following
17  *        disclaimer.
18  *
19  *      - Redistributions in binary form must reproduce the above
20  *        copyright notice, this list of conditions and the following
21  *        disclaimer in the documentation and/or other materials
22  *        provided with the distribution.
23  *
24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
28  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
29  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31  * SOFTWARE.
32  */
33 
34 #include <linux/module.h>
35 #include <linux/string.h>
36 #include <linux/errno.h>
37 #include <linux/kernel.h>
38 #include <linux/slab.h>
39 #include <linux/init.h>
40 #include <linux/netdevice.h>
41 #include <net/net_namespace.h>
42 #include <linux/security.h>
43 #include <linux/notifier.h>
44 #include <linux/hashtable.h>
45 #include <linux/cc_platform.h>
46 #include <rdma/rdma_netlink.h>
47 #include <rdma/ib_addr.h>
48 #include <rdma/ib_cache.h>
49 #include <rdma/rdma_counter.h>
50 
51 #include "core_priv.h"
52 #include "restrack.h"
53 
54 MODULE_AUTHOR("Roland Dreier");
55 MODULE_DESCRIPTION("core kernel InfiniBand API");
56 MODULE_LICENSE("Dual BSD/GPL");
57 
58 struct workqueue_struct *ib_comp_wq;
59 struct workqueue_struct *ib_comp_unbound_wq;
60 struct workqueue_struct *ib_wq;
61 EXPORT_SYMBOL_GPL(ib_wq);
62 static struct workqueue_struct *ib_unreg_wq;
63 
64 /*
65  * Each of the three rwsem locks (devices, clients, client_data) protects the
66  * xarray of the same name. Specifically it allows the caller to assert that
67  * the MARK will/will not be changing under the lock, and for devices and
68  * clients, that the value in the xarray is still a valid pointer. Change of
69  * the MARK is linked to the object state, so holding the lock and testing the
70  * MARK also asserts that the contained object is in a certain state.
71  *
72  * This is used to build a two stage register/unregister flow where objects
73  * can continue to be in the xarray even though they are still in progress to
74  * register/unregister.
75  *
76  * The xarray itself provides additional locking, and restartable iteration,
77  * which is also relied on.
78  *
79  * Locks should not be nested, with the exception of client_data, which is
80  * allowed to nest under the read side of the other two locks.
81  *
82  * The devices_rwsem also protects the device name list, any change or
83  * assignment of device name must also hold the write side to guarantee unique
84  * names.
85  */
86 
87 /*
88  * devices contains devices that have had their names assigned. The
89  * devices may not be registered. Users that care about the registration
90  * status need to call ib_device_try_get() on the device to ensure it is
91  * registered, and keep it registered, for the required duration.
92  *
93  */
94 static DEFINE_XARRAY_FLAGS(devices, XA_FLAGS_ALLOC);
95 static DECLARE_RWSEM(devices_rwsem);
96 #define DEVICE_REGISTERED XA_MARK_1
97 #define DEVICE_GID_UPDATES XA_MARK_2
98 
99 static u32 highest_client_id;
100 #define CLIENT_REGISTERED XA_MARK_1
101 static DEFINE_XARRAY_FLAGS(clients, XA_FLAGS_ALLOC);
102 static DECLARE_RWSEM(clients_rwsem);
103 
104 static void ib_client_put(struct ib_client *client)
105 {
106 	if (refcount_dec_and_test(&client->uses))
107 		complete(&client->uses_zero);
108 }
109 
110 /*
111  * If client_data is registered then the corresponding client must also still
112  * be registered.
113  */
114 #define CLIENT_DATA_REGISTERED XA_MARK_1
115 
116 unsigned int rdma_dev_net_id;
117 
118 /*
119  * A list of net namespaces is maintained in an xarray. This is necessary
120  * because we can't get the locking right using the existing net ns list. We
121  * would require a init_net callback after the list is updated.
122  */
123 static DEFINE_XARRAY_FLAGS(rdma_nets, XA_FLAGS_ALLOC);
124 /*
125  * rwsem to protect accessing the rdma_nets xarray entries.
126  */
127 static DECLARE_RWSEM(rdma_nets_rwsem);
128 
129 bool ib_devices_shared_netns = true;
130 module_param_named(netns_mode, ib_devices_shared_netns, bool, 0444);
131 MODULE_PARM_DESC(netns_mode,
132 		 "Share device among net namespaces; default=1 (shared). In exclusive mode device names are unique per net namespace");
133 /**
134  * rdma_dev_access_netns() - Return whether an rdma device can be accessed
135  *			     from a specified net namespace or not.
136  * @dev:	Pointer to rdma device which needs to be checked
137  * @net:	Pointer to net namesapce for which access to be checked
138  *
139  * When the rdma device is in shared mode, it ignores the net namespace.
140  * When the rdma device is exclusive to a net namespace, rdma device net
141  * namespace is checked against the specified one.
142  */
143 bool rdma_dev_access_netns(const struct ib_device *dev, const struct net *net)
144 {
145 	return (ib_devices_shared_netns ||
146 		net_eq(read_pnet(&dev->coredev.rdma_net), net));
147 }
148 EXPORT_SYMBOL(rdma_dev_access_netns);
149 
150 /**
151  * rdma_dev_has_raw_cap() - Returns whether a specified rdma device has
152  *			    CAP_NET_RAW capability or not.
153  *
154  * @dev:	Pointer to rdma device whose capability to be checked
155  *
156  * Returns true if a rdma device's owning user namespace has CAP_NET_RAW
157  * capability, otherwise false. When rdma subsystem is in legacy shared network,
158  * namespace mode, the default net namespace is considered.
159  */
160 bool rdma_dev_has_raw_cap(const struct ib_device *dev)
161 {
162 	const struct net *net;
163 
164 	/* Network namespace is the resource whose user namespace
165 	 * to be considered. When in shared mode, there is no reliable
166 	 * network namespace resource, so consider the default net namespace.
167 	 */
168 	if (ib_devices_shared_netns)
169 		net = &init_net;
170 	else
171 		net = read_pnet(&dev->coredev.rdma_net);
172 
173 	return ns_capable(net->user_ns, CAP_NET_RAW);
174 }
175 EXPORT_SYMBOL(rdma_dev_has_raw_cap);
176 
177 /*
178  * xarray has this behavior where it won't iterate over NULL values stored in
179  * allocated arrays.  So we need our own iterator to see all values stored in
180  * the array. This does the same thing as xa_for_each except that it also
181  * returns NULL valued entries if the array is allocating. Simplified to only
182  * work on simple xarrays.
183  */
184 static void *xan_find_marked(struct xarray *xa, unsigned long *indexp,
185 			     xa_mark_t filter)
186 {
187 	XA_STATE(xas, xa, *indexp);
188 	void *entry;
189 
190 	rcu_read_lock();
191 	do {
192 		entry = xas_find_marked(&xas, ULONG_MAX, filter);
193 		if (xa_is_zero(entry))
194 			break;
195 	} while (xas_retry(&xas, entry));
196 	rcu_read_unlock();
197 
198 	if (entry) {
199 		*indexp = xas.xa_index;
200 		if (xa_is_zero(entry))
201 			return NULL;
202 		return entry;
203 	}
204 	return XA_ERROR(-ENOENT);
205 }
206 #define xan_for_each_marked(xa, index, entry, filter)                          \
207 	for (index = 0, entry = xan_find_marked(xa, &(index), filter);         \
208 	     !xa_is_err(entry);                                                \
209 	     (index)++, entry = xan_find_marked(xa, &(index), filter))
210 
211 /* RCU hash table mapping netdevice pointers to struct ib_port_data */
212 static DEFINE_SPINLOCK(ndev_hash_lock);
213 static DECLARE_HASHTABLE(ndev_hash, 5);
214 
215 static void free_netdevs(struct ib_device *ib_dev);
216 static void ib_unregister_work(struct work_struct *work);
217 static void __ib_unregister_device(struct ib_device *device);
218 static int ib_security_change(struct notifier_block *nb, unsigned long event,
219 			      void *lsm_data);
220 static void ib_policy_change_task(struct work_struct *work);
221 static DECLARE_WORK(ib_policy_change_work, ib_policy_change_task);
222 
223 static void __ibdev_printk(const char *level, const struct ib_device *ibdev,
224 			   struct va_format *vaf)
225 {
226 	if (ibdev && ibdev->dev.parent)
227 		dev_printk_emit(level[1] - '0',
228 				ibdev->dev.parent,
229 				"%s %s %s: %pV",
230 				dev_driver_string(ibdev->dev.parent),
231 				dev_name(ibdev->dev.parent),
232 				dev_name(&ibdev->dev),
233 				vaf);
234 	else if (ibdev)
235 		printk("%s%s: %pV",
236 		       level, dev_name(&ibdev->dev), vaf);
237 	else
238 		printk("%s(NULL ib_device): %pV", level, vaf);
239 }
240 
241 #define define_ibdev_printk_level(func, level)                  \
242 void func(const struct ib_device *ibdev, const char *fmt, ...)  \
243 {                                                               \
244 	struct va_format vaf;                                   \
245 	va_list args;                                           \
246 								\
247 	va_start(args, fmt);                                    \
248 								\
249 	vaf.fmt = fmt;                                          \
250 	vaf.va = &args;                                         \
251 								\
252 	__ibdev_printk(level, ibdev, &vaf);                     \
253 								\
254 	va_end(args);                                           \
255 }                                                               \
256 EXPORT_SYMBOL(func);
257 
258 define_ibdev_printk_level(ibdev_emerg, KERN_EMERG);
259 define_ibdev_printk_level(ibdev_alert, KERN_ALERT);
260 define_ibdev_printk_level(ibdev_crit, KERN_CRIT);
261 define_ibdev_printk_level(ibdev_err, KERN_ERR);
262 define_ibdev_printk_level(ibdev_warn, KERN_WARNING);
263 define_ibdev_printk_level(ibdev_notice, KERN_NOTICE);
264 define_ibdev_printk_level(ibdev_info, KERN_INFO);
265 
266 static struct notifier_block ibdev_lsm_nb = {
267 	.notifier_call = ib_security_change,
268 };
269 
270 static int rdma_dev_change_netns(struct ib_device *device, struct net *cur_net,
271 				 struct net *net, const char *requested_name,
272 				 const char *fallback_pattern);
273 
274 /* Pointer to the RCU head at the start of the ib_port_data array */
275 struct ib_port_data_rcu {
276 	struct rcu_head rcu_head;
277 	struct ib_port_data pdata[];
278 };
279 
280 static void ib_device_check_mandatory(struct ib_device *device)
281 {
282 #define IB_MANDATORY_FUNC(x) { offsetof(struct ib_device_ops, x), #x }
283 	static const struct {
284 		size_t offset;
285 		char  *name;
286 	} mandatory_table[] = {
287 		IB_MANDATORY_FUNC(query_device),
288 		IB_MANDATORY_FUNC(query_port),
289 		IB_MANDATORY_FUNC(alloc_pd),
290 		IB_MANDATORY_FUNC(dealloc_pd),
291 		IB_MANDATORY_FUNC(create_qp),
292 		IB_MANDATORY_FUNC(modify_qp),
293 		IB_MANDATORY_FUNC(destroy_qp),
294 		IB_MANDATORY_FUNC(post_send),
295 		IB_MANDATORY_FUNC(post_recv),
296 		IB_MANDATORY_FUNC(create_cq),
297 		IB_MANDATORY_FUNC(destroy_cq),
298 		IB_MANDATORY_FUNC(poll_cq),
299 		IB_MANDATORY_FUNC(req_notify_cq),
300 		IB_MANDATORY_FUNC(get_dma_mr),
301 		IB_MANDATORY_FUNC(reg_user_mr),
302 		IB_MANDATORY_FUNC(dereg_mr),
303 		IB_MANDATORY_FUNC(get_port_immutable)
304 	};
305 	int i;
306 
307 	device->kverbs_provider = true;
308 	for (i = 0; i < ARRAY_SIZE(mandatory_table); ++i) {
309 		if (!*(void **) ((void *) &device->ops +
310 				 mandatory_table[i].offset)) {
311 			device->kverbs_provider = false;
312 			break;
313 		}
314 	}
315 }
316 
317 /*
318  * Caller must perform ib_device_put() to return the device reference count
319  * when ib_device_get_by_index() returns valid device pointer.
320  */
321 struct ib_device *ib_device_get_by_index(const struct net *net, u32 index)
322 {
323 	struct ib_device *device;
324 
325 	down_read(&devices_rwsem);
326 	device = xa_load(&devices, index);
327 	if (device) {
328 		if (!rdma_dev_access_netns(device, net)) {
329 			device = NULL;
330 			goto out;
331 		}
332 
333 		if (!ib_device_try_get(device))
334 			device = NULL;
335 	}
336 out:
337 	up_read(&devices_rwsem);
338 	return device;
339 }
340 
341 /**
342  * ib_device_put - Release IB device reference
343  * @device: device whose reference to be released
344  *
345  * ib_device_put() releases reference to the IB device to allow it to be
346  * unregistered and eventually free.
347  */
348 void ib_device_put(struct ib_device *device)
349 {
350 	if (refcount_dec_and_test(&device->refcount))
351 		complete(&device->unreg_completion);
352 }
353 EXPORT_SYMBOL(ib_device_put);
354 
355 static struct ib_device *__ib_device_get_by_name(const char *name,
356 						 const struct net *net)
357 {
358 	struct ib_device *device;
359 	unsigned long index;
360 
361 	xa_for_each (&devices, index, device)
362 		if (rdma_dev_access_netns(device, net) &&
363 		    !strcmp(name, dev_name(&device->dev)))
364 			return device;
365 
366 	return NULL;
367 }
368 
369 static int rename_compat_devs(struct ib_device *device)
370 {
371 	struct ib_core_device *cdev;
372 	unsigned long index;
373 	int ret = 0;
374 
375 	mutex_lock(&device->compat_devs_mutex);
376 	xa_for_each (&device->compat_devs, index, cdev) {
377 		ret = device_rename(&cdev->dev, dev_name(&device->dev));
378 		if (ret) {
379 			dev_warn(&cdev->dev,
380 				 "Fail to rename compatdev to new name %s\n",
381 				 dev_name(&device->dev));
382 			break;
383 		}
384 	}
385 	mutex_unlock(&device->compat_devs_mutex);
386 	return ret;
387 }
388 
389 int ib_device_rename(struct ib_device *ibdev, const char *name)
390 {
391 	unsigned long index;
392 	void *client_data;
393 	int ret;
394 
395 	down_write(&devices_rwsem);
396 	if (!strcmp(name, dev_name(&ibdev->dev))) {
397 		up_write(&devices_rwsem);
398 		return 0;
399 	}
400 
401 	if (__ib_device_get_by_name(name, rdma_dev_net(ibdev))) {
402 		up_write(&devices_rwsem);
403 		return -EEXIST;
404 	}
405 
406 	ret = device_rename(&ibdev->dev, name);
407 	if (ret) {
408 		up_write(&devices_rwsem);
409 		return ret;
410 	}
411 
412 	strscpy(ibdev->name, name, IB_DEVICE_NAME_MAX);
413 	ret = rename_compat_devs(ibdev);
414 
415 	downgrade_write(&devices_rwsem);
416 	down_read(&ibdev->client_data_rwsem);
417 	xan_for_each_marked(&ibdev->client_data, index, client_data,
418 			    CLIENT_DATA_REGISTERED) {
419 		struct ib_client *client = xa_load(&clients, index);
420 
421 		if (!client || !client->rename)
422 			continue;
423 
424 		client->rename(ibdev, client_data);
425 	}
426 	up_read(&ibdev->client_data_rwsem);
427 	rdma_nl_notify_event(ibdev, 0, RDMA_RENAME_EVENT);
428 	up_read(&devices_rwsem);
429 	return 0;
430 }
431 
432 int ib_device_set_dim(struct ib_device *ibdev, u8 use_dim)
433 {
434 	if (use_dim > 1)
435 		return -EINVAL;
436 	ibdev->use_cq_dim = use_dim;
437 
438 	return 0;
439 }
440 
441 /*
442  * Pick a free index for the '%d' style @name pattern within net namespace
443  * @net. Returns the index on success or a negative errno. The caller builds
444  * the final unique device name from the returned index.
445  */
446 static int __alloc_name_id(struct net *net, const char *name,
447 			   const struct ib_device *skip)
448 {
449 	struct ib_device *device;
450 	unsigned long index;
451 	struct ida inuse;
452 	int rc;
453 	int i;
454 
455 	lockdep_assert_held_write(&devices_rwsem);
456 	ida_init(&inuse);
457 	xa_for_each (&devices, index, device) {
458 		char buf[IB_DEVICE_NAME_MAX];
459 
460 		if (device == skip || !rdma_dev_access_netns(device, net))
461 			continue;
462 		if (sscanf(dev_name(&device->dev), name, &i) != 1)
463 			continue;
464 		if (i < 0 || i >= INT_MAX)
465 			continue;
466 		snprintf(buf, sizeof buf, name, i);
467 		if (strcmp(buf, dev_name(&device->dev)) != 0)
468 			continue;
469 
470 		rc = ida_alloc_range(&inuse, i, i, GFP_KERNEL);
471 		if (rc < 0)
472 			goto out;
473 	}
474 
475 	rc = ida_alloc(&inuse, GFP_KERNEL);
476 out:
477 	ida_destroy(&inuse);
478 	return rc;
479 }
480 
481 static int alloc_name_id(struct net *net, const char *name)
482 {
483 	return __alloc_name_id(net, name, NULL);
484 }
485 
486 static int alloc_name(struct ib_device *ibdev, const char *name)
487 {
488 	int id;
489 
490 	id = alloc_name_id(rdma_dev_net(ibdev), name);
491 	if (id < 0)
492 		return id;
493 
494 	return dev_set_name(&ibdev->dev, name, id);
495 }
496 
497 static void ib_device_release(struct device *device)
498 {
499 	struct ib_device *dev = container_of(device, struct ib_device, dev);
500 
501 	free_netdevs(dev);
502 	WARN_ON(refcount_read(&dev->refcount));
503 	if (dev->hw_stats_data)
504 		ib_device_release_hw_stats(dev->hw_stats_data);
505 	if (dev->port_data) {
506 		ib_cache_release_one(dev);
507 		ib_security_release_port_pkey_list(dev);
508 		rdma_counter_release(dev);
509 		kfree_rcu(container_of(dev->port_data, struct ib_port_data_rcu,
510 				       pdata[0]),
511 			  rcu_head);
512 	}
513 
514 	mutex_destroy(&dev->subdev_lock);
515 	mutex_destroy(&dev->unregistration_lock);
516 	mutex_destroy(&dev->compat_devs_mutex);
517 
518 	xa_destroy(&dev->compat_devs);
519 	xa_destroy(&dev->client_data);
520 	kfree_rcu(dev, rcu_head);
521 }
522 
523 static int ib_device_uevent(const struct device *device,
524 			    struct kobj_uevent_env *env)
525 {
526 	if (add_uevent_var(env, "NAME=%s", dev_name(device)))
527 		return -ENOMEM;
528 
529 	/*
530 	 * It would be nice to pass the node GUID with the event...
531 	 */
532 
533 	return 0;
534 }
535 
536 static const struct ns_common *net_namespace(const struct device *d)
537 {
538 	const struct ib_core_device *coredev =
539 			container_of(d, struct ib_core_device, dev);
540 	struct net *net = read_pnet(&coredev->rdma_net);
541 
542 	return net ? to_ns_common(net) : NULL;
543 }
544 
545 static struct class ib_class = {
546 	.name    = "infiniband",
547 	.dev_release = ib_device_release,
548 	.dev_uevent = ib_device_uevent,
549 	.ns_type = &net_ns_type_operations,
550 	.namespace = net_namespace,
551 };
552 
553 static void rdma_init_coredev(struct ib_core_device *coredev,
554 			      struct ib_device *dev, struct net *net)
555 {
556 	bool is_full_dev = &dev->coredev == coredev;
557 
558 	/* This BUILD_BUG_ON is intended to catch layout change
559 	 * of union of ib_core_device and device.
560 	 * dev must be the first element as ib_core and providers
561 	 * driver uses it. Adding anything in ib_core_device before
562 	 * device will break this assumption.
563 	 */
564 	BUILD_BUG_ON(offsetof(struct ib_device, coredev.dev) !=
565 		     offsetof(struct ib_device, dev));
566 
567 	coredev->dev.class = &ib_class;
568 	coredev->dev.groups = dev->groups;
569 
570 	/*
571 	 * Don't expose hw counters outside of the init namespace.
572 	 */
573 	if (!is_full_dev && dev->hw_stats_attr_index)
574 		coredev->dev.groups[dev->hw_stats_attr_index] = NULL;
575 
576 	device_initialize(&coredev->dev);
577 	coredev->owner = dev;
578 	INIT_LIST_HEAD(&coredev->port_list);
579 	write_pnet(&coredev->rdma_net, net);
580 }
581 
582 /**
583  * _ib_alloc_device - allocate an IB device struct
584  * @size:size of structure to allocate
585  * @net: network namespace device should be located in, namespace
586  *       must stay valid until ib_register_device() is completed.
587  *
588  * Low-level drivers should use ib_alloc_device() to allocate &struct
589  * ib_device.  @size is the size of the structure to be allocated,
590  * including any private data used by the low-level driver.
591  * ib_dealloc_device() must be used to free structures allocated with
592  * ib_alloc_device().
593  */
594 struct ib_device *_ib_alloc_device(size_t size, struct net *net)
595 {
596 	struct ib_device *device;
597 	unsigned int i;
598 
599 	if (WARN_ON(size < sizeof(struct ib_device)))
600 		return NULL;
601 
602 	device = kzalloc(size, GFP_KERNEL);
603 	if (!device)
604 		return NULL;
605 
606 	if (rdma_restrack_init(device)) {
607 		kfree(device);
608 		return NULL;
609 	}
610 
611 	/* ib_devices_shared_netns can't change while we have active namespaces
612 	 * in the system which means either init_net is passed or the user has
613 	 * no idea what they are doing.
614 	 *
615 	 * To avoid breaking backward compatibility, when in shared mode,
616 	 * force to init the device in the init_net.
617 	 */
618 	net = ib_devices_shared_netns ? &init_net : net;
619 	rdma_init_coredev(&device->coredev, device, net);
620 
621 	INIT_LIST_HEAD(&device->event_handler_list);
622 	spin_lock_init(&device->qp_open_list_lock);
623 	init_rwsem(&device->event_handler_rwsem);
624 	mutex_init(&device->unregistration_lock);
625 	/*
626 	 * client_data needs to be alloc because we don't want our mark to be
627 	 * destroyed if the user stores NULL in the client data.
628 	 */
629 	xa_init_flags(&device->client_data, XA_FLAGS_ALLOC);
630 	init_rwsem(&device->client_data_rwsem);
631 	xa_init_flags(&device->compat_devs, XA_FLAGS_ALLOC);
632 	mutex_init(&device->compat_devs_mutex);
633 	init_completion(&device->unreg_completion);
634 	INIT_WORK(&device->unregistration_work, ib_unregister_work);
635 
636 	spin_lock_init(&device->cq_pools_lock);
637 	for (i = 0; i < ARRAY_SIZE(device->cq_pools); i++)
638 		INIT_LIST_HEAD(&device->cq_pools[i]);
639 
640 	rwlock_init(&device->cache_lock);
641 
642 	device->uverbs_cmd_mask =
643 		BIT_ULL(IB_USER_VERBS_CMD_ALLOC_MW) |
644 		BIT_ULL(IB_USER_VERBS_CMD_ALLOC_PD) |
645 		BIT_ULL(IB_USER_VERBS_CMD_ATTACH_MCAST) |
646 		BIT_ULL(IB_USER_VERBS_CMD_CLOSE_XRCD) |
647 		BIT_ULL(IB_USER_VERBS_CMD_CREATE_AH) |
648 		BIT_ULL(IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |
649 		BIT_ULL(IB_USER_VERBS_CMD_CREATE_CQ) |
650 		BIT_ULL(IB_USER_VERBS_CMD_CREATE_QP) |
651 		BIT_ULL(IB_USER_VERBS_CMD_CREATE_SRQ) |
652 		BIT_ULL(IB_USER_VERBS_CMD_CREATE_XSRQ) |
653 		BIT_ULL(IB_USER_VERBS_CMD_DEALLOC_MW) |
654 		BIT_ULL(IB_USER_VERBS_CMD_DEALLOC_PD) |
655 		BIT_ULL(IB_USER_VERBS_CMD_DEREG_MR) |
656 		BIT_ULL(IB_USER_VERBS_CMD_DESTROY_AH) |
657 		BIT_ULL(IB_USER_VERBS_CMD_DESTROY_CQ) |
658 		BIT_ULL(IB_USER_VERBS_CMD_DESTROY_QP) |
659 		BIT_ULL(IB_USER_VERBS_CMD_DESTROY_SRQ) |
660 		BIT_ULL(IB_USER_VERBS_CMD_DETACH_MCAST) |
661 		BIT_ULL(IB_USER_VERBS_CMD_GET_CONTEXT) |
662 		BIT_ULL(IB_USER_VERBS_CMD_MODIFY_QP) |
663 		BIT_ULL(IB_USER_VERBS_CMD_MODIFY_SRQ) |
664 		BIT_ULL(IB_USER_VERBS_CMD_OPEN_QP) |
665 		BIT_ULL(IB_USER_VERBS_CMD_OPEN_XRCD) |
666 		BIT_ULL(IB_USER_VERBS_CMD_QUERY_DEVICE) |
667 		BIT_ULL(IB_USER_VERBS_CMD_QUERY_PORT) |
668 		BIT_ULL(IB_USER_VERBS_CMD_QUERY_QP) |
669 		BIT_ULL(IB_USER_VERBS_CMD_QUERY_SRQ) |
670 		BIT_ULL(IB_USER_VERBS_CMD_REG_MR) |
671 		BIT_ULL(IB_USER_VERBS_CMD_REREG_MR) |
672 		BIT_ULL(IB_USER_VERBS_CMD_RESIZE_CQ);
673 
674 	mutex_init(&device->subdev_lock);
675 	INIT_LIST_HEAD(&device->subdev_list_head);
676 	INIT_LIST_HEAD(&device->subdev_list);
677 
678 	return device;
679 }
680 EXPORT_SYMBOL(_ib_alloc_device);
681 
682 /**
683  * ib_dealloc_device - free an IB device struct
684  * @device:structure to free
685  *
686  * Free a structure allocated with ib_alloc_device().
687  */
688 void ib_dealloc_device(struct ib_device *device)
689 {
690 	if (device->ops.dealloc_driver)
691 		device->ops.dealloc_driver(device);
692 
693 	/*
694 	 * ib_unregister_driver() requires all devices to remain in the xarray
695 	 * while their ops are callable. The last op we call is dealloc_driver
696 	 * above.  This is needed to create a fence on op callbacks prior to
697 	 * allowing the driver module to unload.
698 	 */
699 	down_write(&devices_rwsem);
700 	if (xa_load(&devices, device->index) == device)
701 		xa_erase(&devices, device->index);
702 	up_write(&devices_rwsem);
703 
704 	/* Expedite releasing netdev references */
705 	free_netdevs(device);
706 
707 	WARN_ON(!xa_empty(&device->compat_devs));
708 	WARN_ON(!xa_empty(&device->client_data));
709 	WARN_ON(refcount_read(&device->refcount));
710 	rdma_restrack_clean(device);
711 	/* Balances with device_initialize */
712 	put_device(&device->dev);
713 }
714 EXPORT_SYMBOL(ib_dealloc_device);
715 
716 /*
717  * add_client_context() and remove_client_context() must be safe against
718  * parallel calls on the same device - registration/unregistration of both the
719  * device and client can be occurring in parallel.
720  *
721  * The routines need to be a fence, any caller must not return until the add
722  * or remove is fully completed.
723  */
724 static int add_client_context(struct ib_device *device,
725 			      struct ib_client *client)
726 {
727 	int ret = 0;
728 
729 	if (!device->kverbs_provider && !client->no_kverbs_req)
730 		return 0;
731 
732 	down_write(&device->client_data_rwsem);
733 	/*
734 	 * So long as the client is registered hold both the client and device
735 	 * unregistration locks.
736 	 */
737 	if (!refcount_inc_not_zero(&client->uses))
738 		goto out_unlock;
739 	refcount_inc(&device->refcount);
740 
741 	/*
742 	 * Another caller to add_client_context got here first and has already
743 	 * completely initialized context.
744 	 */
745 	if (xa_get_mark(&device->client_data, client->client_id,
746 		    CLIENT_DATA_REGISTERED))
747 		goto out;
748 
749 	ret = xa_err(xa_store(&device->client_data, client->client_id, NULL,
750 			      GFP_KERNEL));
751 	if (ret)
752 		goto out;
753 	downgrade_write(&device->client_data_rwsem);
754 	if (client->add) {
755 		if (client->add(device)) {
756 			/*
757 			 * If a client fails to add then the error code is
758 			 * ignored, but we won't call any more ops on this
759 			 * client.
760 			 */
761 			xa_erase(&device->client_data, client->client_id);
762 			up_read(&device->client_data_rwsem);
763 			ib_device_put(device);
764 			ib_client_put(client);
765 			return 0;
766 		}
767 	}
768 
769 	/* Readers shall not see a client until add has been completed */
770 	xa_set_mark(&device->client_data, client->client_id,
771 		    CLIENT_DATA_REGISTERED);
772 	up_read(&device->client_data_rwsem);
773 	return 0;
774 
775 out:
776 	ib_device_put(device);
777 	ib_client_put(client);
778 out_unlock:
779 	up_write(&device->client_data_rwsem);
780 	return ret;
781 }
782 
783 static void remove_client_context(struct ib_device *device,
784 				  unsigned int client_id)
785 {
786 	struct ib_client *client;
787 	void *client_data;
788 
789 	down_write(&device->client_data_rwsem);
790 	if (!xa_get_mark(&device->client_data, client_id,
791 			 CLIENT_DATA_REGISTERED)) {
792 		up_write(&device->client_data_rwsem);
793 		return;
794 	}
795 	client_data = xa_load(&device->client_data, client_id);
796 	xa_clear_mark(&device->client_data, client_id, CLIENT_DATA_REGISTERED);
797 	client = xa_load(&clients, client_id);
798 	up_write(&device->client_data_rwsem);
799 
800 	/*
801 	 * Notice we cannot be holding any exclusive locks when calling the
802 	 * remove callback as the remove callback can recurse back into any
803 	 * public functions in this module and thus try for any locks those
804 	 * functions take.
805 	 *
806 	 * For this reason clients and drivers should not call the
807 	 * unregistration functions will holdling any locks.
808 	 */
809 	if (client->remove)
810 		client->remove(device, client_data);
811 
812 	xa_erase(&device->client_data, client_id);
813 	ib_device_put(device);
814 	ib_client_put(client);
815 }
816 
817 static int alloc_port_data(struct ib_device *device)
818 {
819 	struct ib_port_data_rcu *pdata_rcu;
820 	u32 port;
821 
822 	if (device->port_data)
823 		return 0;
824 
825 	/* This can only be called once the physical port range is defined */
826 	if (WARN_ON(!device->phys_port_cnt))
827 		return -EINVAL;
828 
829 	/* Reserve U32_MAX so the logic to go over all the ports is sane */
830 	if (WARN_ON(device->phys_port_cnt == U32_MAX))
831 		return -EINVAL;
832 
833 	/*
834 	 * device->port_data is indexed directly by the port number to make
835 	 * access to this data as efficient as possible.
836 	 *
837 	 * Therefore port_data is declared as a 1 based array with potential
838 	 * empty slots at the beginning.
839 	 */
840 	pdata_rcu = kzalloc_flex(*pdata_rcu, pdata,
841 				 size_add(rdma_end_port(device), 1));
842 	if (!pdata_rcu)
843 		return -ENOMEM;
844 	/*
845 	 * The rcu_head is put in front of the port data array and the stored
846 	 * pointer is adjusted since we never need to see that member until
847 	 * kfree_rcu.
848 	 */
849 	device->port_data = pdata_rcu->pdata;
850 
851 	rdma_for_each_port (device, port) {
852 		struct ib_port_data *pdata = &device->port_data[port];
853 
854 		pdata->ib_dev = device;
855 		spin_lock_init(&pdata->pkey_list_lock);
856 		INIT_LIST_HEAD(&pdata->pkey_list);
857 		spin_lock_init(&pdata->netdev_lock);
858 		INIT_HLIST_NODE(&pdata->ndev_hash_link);
859 	}
860 	return 0;
861 }
862 
863 static int verify_immutable(const struct ib_device *dev, u32 port)
864 {
865 	return WARN_ON(!rdma_cap_ib_mad(dev, port) &&
866 			    rdma_max_mad_size(dev, port) != 0);
867 }
868 
869 static int setup_port_data(struct ib_device *device)
870 {
871 	u32 port;
872 	int ret;
873 
874 	ret = alloc_port_data(device);
875 	if (ret)
876 		return ret;
877 
878 	rdma_for_each_port (device, port) {
879 		struct ib_port_data *pdata = &device->port_data[port];
880 
881 		ret = device->ops.get_port_immutable(device, port,
882 						     &pdata->immutable);
883 		if (ret)
884 			return ret;
885 
886 		if (verify_immutable(device, port))
887 			return -EINVAL;
888 	}
889 	return 0;
890 }
891 
892 /**
893  * ib_port_immutable_read() - Read rdma port's immutable data
894  * @dev: IB device
895  * @port: port number whose immutable data to read. It starts with index 1 and
896  *        valid upto including rdma_end_port().
897  */
898 const struct ib_port_immutable*
899 ib_port_immutable_read(struct ib_device *dev, unsigned int port)
900 {
901 	WARN_ON(!rdma_is_port_valid(dev, port));
902 	return &dev->port_data[port].immutable;
903 }
904 EXPORT_SYMBOL(ib_port_immutable_read);
905 
906 void ib_get_device_fw_str(struct ib_device *dev, char *str)
907 {
908 	if (dev->ops.get_dev_fw_str)
909 		dev->ops.get_dev_fw_str(dev, str);
910 	else
911 		str[0] = '\0';
912 }
913 EXPORT_SYMBOL(ib_get_device_fw_str);
914 
915 static void ib_policy_change_task(struct work_struct *work)
916 {
917 	struct ib_device *dev;
918 	unsigned long index;
919 
920 	down_read(&devices_rwsem);
921 	xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED) {
922 		unsigned int i;
923 
924 		rdma_for_each_port (dev, i) {
925 			u64 sp;
926 			ib_get_cached_subnet_prefix(dev, i, &sp);
927 			ib_security_cache_change(dev, i, sp);
928 		}
929 	}
930 	up_read(&devices_rwsem);
931 }
932 
933 static int ib_security_change(struct notifier_block *nb, unsigned long event,
934 			      void *lsm_data)
935 {
936 	if (event != LSM_POLICY_CHANGE)
937 		return NOTIFY_DONE;
938 
939 	schedule_work(&ib_policy_change_work);
940 	ib_mad_agent_security_change();
941 
942 	return NOTIFY_OK;
943 }
944 
945 static void compatdev_release(struct device *dev)
946 {
947 	struct ib_core_device *cdev =
948 		container_of(dev, struct ib_core_device, dev);
949 
950 	kfree(cdev);
951 }
952 
953 static int add_one_compat_dev(struct ib_device *device,
954 			      struct rdma_dev_net *rnet)
955 {
956 	struct ib_core_device *cdev;
957 	int ret;
958 
959 	lockdep_assert_held(&rdma_nets_rwsem);
960 	if (!ib_devices_shared_netns)
961 		return 0;
962 
963 	/*
964 	 * Create and add compat device in all namespaces other than where it
965 	 * is currently bound to.
966 	 */
967 	if (net_eq(read_pnet(&rnet->net),
968 		   read_pnet(&device->coredev.rdma_net)))
969 		return 0;
970 
971 	/*
972 	 * The first of init_net() or ib_register_device() to take the
973 	 * compat_devs_mutex wins and gets to add the device. Others will wait
974 	 * for completion here.
975 	 */
976 	mutex_lock(&device->compat_devs_mutex);
977 	cdev = xa_load(&device->compat_devs, rnet->id);
978 	if (cdev) {
979 		ret = 0;
980 		goto done;
981 	}
982 	ret = xa_reserve(&device->compat_devs, rnet->id, GFP_KERNEL);
983 	if (ret)
984 		goto done;
985 
986 	cdev = kzalloc_obj(*cdev);
987 	if (!cdev) {
988 		ret = -ENOMEM;
989 		goto cdev_err;
990 	}
991 
992 	cdev->dev.parent = device->dev.parent;
993 	rdma_init_coredev(cdev, device, read_pnet(&rnet->net));
994 	cdev->dev.release = compatdev_release;
995 	ret = dev_set_name(&cdev->dev, "%s", dev_name(&device->dev));
996 	if (ret)
997 		goto add_err;
998 
999 	ret = device_add(&cdev->dev);
1000 	if (ret)
1001 		goto add_err;
1002 	ret = ib_setup_port_attrs(cdev);
1003 	if (ret)
1004 		goto port_err;
1005 
1006 	ret = xa_err(xa_store(&device->compat_devs, rnet->id,
1007 			      cdev, GFP_KERNEL));
1008 	if (ret)
1009 		goto insert_err;
1010 
1011 	mutex_unlock(&device->compat_devs_mutex);
1012 	return 0;
1013 
1014 insert_err:
1015 	ib_free_port_attrs(cdev);
1016 port_err:
1017 	device_del(&cdev->dev);
1018 add_err:
1019 	put_device(&cdev->dev);
1020 cdev_err:
1021 	xa_release(&device->compat_devs, rnet->id);
1022 done:
1023 	mutex_unlock(&device->compat_devs_mutex);
1024 	return ret;
1025 }
1026 
1027 static void remove_one_compat_dev(struct ib_device *device, u32 id)
1028 {
1029 	struct ib_core_device *cdev;
1030 
1031 	mutex_lock(&device->compat_devs_mutex);
1032 	cdev = xa_erase(&device->compat_devs, id);
1033 	mutex_unlock(&device->compat_devs_mutex);
1034 	if (cdev) {
1035 		ib_free_port_attrs(cdev);
1036 		device_del(&cdev->dev);
1037 		put_device(&cdev->dev);
1038 	}
1039 }
1040 
1041 static void remove_compat_devs(struct ib_device *device)
1042 {
1043 	struct ib_core_device *cdev;
1044 	unsigned long index;
1045 
1046 	xa_for_each (&device->compat_devs, index, cdev)
1047 		remove_one_compat_dev(device, index);
1048 }
1049 
1050 static int add_compat_devs(struct ib_device *device)
1051 {
1052 	struct rdma_dev_net *rnet;
1053 	unsigned long index;
1054 	int ret = 0;
1055 
1056 	lockdep_assert_held(&devices_rwsem);
1057 
1058 	down_read(&rdma_nets_rwsem);
1059 	xa_for_each (&rdma_nets, index, rnet) {
1060 		ret = add_one_compat_dev(device, rnet);
1061 		if (ret)
1062 			break;
1063 	}
1064 	up_read(&rdma_nets_rwsem);
1065 	return ret;
1066 }
1067 
1068 static void remove_all_compat_devs(void)
1069 {
1070 	struct ib_compat_device *cdev;
1071 	struct ib_device *dev;
1072 	unsigned long index;
1073 
1074 	down_read(&devices_rwsem);
1075 	xa_for_each (&devices, index, dev) {
1076 		unsigned long c_index = 0;
1077 
1078 		/* Hold nets_rwsem so that any other thread modifying this
1079 		 * system param can sync with this thread.
1080 		 */
1081 		down_read(&rdma_nets_rwsem);
1082 		xa_for_each (&dev->compat_devs, c_index, cdev)
1083 			remove_one_compat_dev(dev, c_index);
1084 		up_read(&rdma_nets_rwsem);
1085 	}
1086 	up_read(&devices_rwsem);
1087 }
1088 
1089 static int add_all_compat_devs(void)
1090 {
1091 	struct rdma_dev_net *rnet;
1092 	struct ib_device *dev;
1093 	unsigned long index;
1094 	int ret = 0;
1095 
1096 	down_read(&devices_rwsem);
1097 	xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED) {
1098 		unsigned long net_index = 0;
1099 
1100 		/* Hold nets_rwsem so that any other thread modifying this
1101 		 * system param can sync with this thread.
1102 		 */
1103 		down_read(&rdma_nets_rwsem);
1104 		xa_for_each (&rdma_nets, net_index, rnet) {
1105 			ret = add_one_compat_dev(dev, rnet);
1106 			if (ret)
1107 				break;
1108 		}
1109 		up_read(&rdma_nets_rwsem);
1110 	}
1111 	up_read(&devices_rwsem);
1112 	if (ret)
1113 		remove_all_compat_devs();
1114 	return ret;
1115 }
1116 
1117 int rdma_compatdev_set(u8 enable)
1118 {
1119 	struct rdma_dev_net *rnet;
1120 	unsigned long index;
1121 	int ret = 0;
1122 
1123 	down_write(&rdma_nets_rwsem);
1124 	if (ib_devices_shared_netns == enable) {
1125 		up_write(&rdma_nets_rwsem);
1126 		return 0;
1127 	}
1128 
1129 	/* enable/disable of compat devices is not supported
1130 	 * when more than default init_net exists.
1131 	 */
1132 	xa_for_each (&rdma_nets, index, rnet) {
1133 		ret++;
1134 		break;
1135 	}
1136 	if (!ret)
1137 		ib_devices_shared_netns = enable;
1138 	up_write(&rdma_nets_rwsem);
1139 	if (ret)
1140 		return -EBUSY;
1141 
1142 	if (enable)
1143 		ret = add_all_compat_devs();
1144 	else
1145 		remove_all_compat_devs();
1146 	return ret;
1147 }
1148 
1149 static void rdma_dev_exit_net(struct net *net)
1150 {
1151 	struct rdma_dev_net *rnet = rdma_net_to_dev_net(net);
1152 	struct ib_device *dev;
1153 	unsigned long index;
1154 	int ret;
1155 
1156 	down_write(&rdma_nets_rwsem);
1157 	/*
1158 	 * Prevent the ID from being re-used and hide the id from xa_for_each.
1159 	 */
1160 	ret = xa_err(xa_store(&rdma_nets, rnet->id, NULL, GFP_KERNEL));
1161 	WARN_ON(ret);
1162 	up_write(&rdma_nets_rwsem);
1163 
1164 	down_read(&devices_rwsem);
1165 	xa_for_each (&devices, index, dev) {
1166 		get_device(&dev->dev);
1167 		/*
1168 		 * Release the devices_rwsem so that pontentially blocking
1169 		 * device_del, doesn't hold the devices_rwsem for too long.
1170 		 */
1171 		up_read(&devices_rwsem);
1172 
1173 		remove_one_compat_dev(dev, rnet->id);
1174 
1175 		/*
1176 		 * If the real device is in the NS then move it back to init.
1177 		 * Provide a fallback pattern so a name conflict in init_net
1178 		 * cannot make the teardown move fail.
1179 		 */
1180 		if (net_eq(net, read_pnet(&dev->coredev.rdma_net))) {
1181 			ret = rdma_dev_change_netns(dev, net, &init_net,
1182 						    NULL, "ibdev%d");
1183 			if (ret && ret != -ENODEV)
1184 				WARN(1,
1185 				     "Failed to move RDMA device %s to init_net on netns exit: %d\n",
1186 				     dev_name(&dev->dev), ret);
1187 		}
1188 
1189 		put_device(&dev->dev);
1190 		down_read(&devices_rwsem);
1191 	}
1192 	up_read(&devices_rwsem);
1193 
1194 	rdma_nl_net_exit(rnet);
1195 	xa_erase(&rdma_nets, rnet->id);
1196 }
1197 
1198 static __net_init int rdma_dev_init_net(struct net *net)
1199 {
1200 	struct rdma_dev_net *rnet = rdma_net_to_dev_net(net);
1201 	unsigned long index;
1202 	struct ib_device *dev;
1203 	int ret;
1204 
1205 	write_pnet(&rnet->net, net);
1206 
1207 	ret = rdma_nl_net_init(rnet);
1208 	if (ret)
1209 		return ret;
1210 
1211 	/* No need to create any compat devices in default init_net. */
1212 	if (net_eq(net, &init_net))
1213 		return 0;
1214 
1215 	ret = xa_alloc(&rdma_nets, &rnet->id, rnet, xa_limit_32b, GFP_KERNEL);
1216 	if (ret) {
1217 		rdma_nl_net_exit(rnet);
1218 		return ret;
1219 	}
1220 
1221 	down_read(&devices_rwsem);
1222 	xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED) {
1223 		/* Hold nets_rwsem so that netlink command cannot change
1224 		 * system configuration for device sharing mode.
1225 		 */
1226 		down_read(&rdma_nets_rwsem);
1227 		ret = add_one_compat_dev(dev, rnet);
1228 		up_read(&rdma_nets_rwsem);
1229 		if (ret)
1230 			break;
1231 	}
1232 	up_read(&devices_rwsem);
1233 
1234 	if (ret)
1235 		rdma_dev_exit_net(net);
1236 
1237 	return ret;
1238 }
1239 
1240 /*
1241  * Assign the unique string device name and the unique device index. The device
1242  * name is unique within the net namespace the device is assigned to. This is
1243  * undone by ib_dealloc_device.
1244  */
1245 static int assign_name(struct ib_device *device, const char *name)
1246 {
1247 	static u32 last_id;
1248 	int ret;
1249 
1250 	down_write(&devices_rwsem);
1251 	/* Assign a unique name to the device */
1252 	if (strchr(name, '%'))
1253 		ret = alloc_name(device, name);
1254 	else
1255 		ret = dev_set_name(&device->dev, name);
1256 	if (ret)
1257 		goto out;
1258 
1259 	if (__ib_device_get_by_name(dev_name(&device->dev),
1260 				    rdma_dev_net(device))) {
1261 		ret = -ENFILE;
1262 		goto out;
1263 	}
1264 	strscpy(device->name, dev_name(&device->dev), IB_DEVICE_NAME_MAX);
1265 
1266 	ret = xa_alloc_cyclic(&devices, &device->index, device, xa_limit_31b,
1267 			&last_id, GFP_KERNEL);
1268 	if (ret > 0)
1269 		ret = 0;
1270 
1271 out:
1272 	up_write(&devices_rwsem);
1273 	return ret;
1274 }
1275 
1276 /*
1277  * setup_device() allocates memory and sets up data that requires calling the
1278  * device ops, this is the only reason these actions are not done during
1279  * ib_alloc_device. It is undone by ib_dealloc_device().
1280  */
1281 static int setup_device(struct ib_device *device)
1282 {
1283 	int ret;
1284 
1285 	ib_device_check_mandatory(device);
1286 
1287 	ret = setup_port_data(device);
1288 	if (ret) {
1289 		dev_warn(&device->dev, "Couldn't create per-port data\n");
1290 		return ret;
1291 	}
1292 
1293 	memset(&device->attrs, 0, sizeof(device->attrs));
1294 	ret = device->ops.query_device(device, &device->attrs, NULL);
1295 	if (ret) {
1296 		dev_warn(&device->dev,
1297 			 "Couldn't query the device attributes\n");
1298 		return ret;
1299 	}
1300 
1301 	return 0;
1302 }
1303 
1304 static void disable_device(struct ib_device *device)
1305 {
1306 	u32 cid;
1307 
1308 	WARN_ON(!refcount_read(&device->refcount));
1309 
1310 	down_write(&devices_rwsem);
1311 	xa_clear_mark(&devices, device->index, DEVICE_REGISTERED);
1312 	up_write(&devices_rwsem);
1313 
1314 	/*
1315 	 * Remove clients in LIFO order, see assign_client_id. This could be
1316 	 * more efficient if xarray learns to reverse iterate. Since no new
1317 	 * clients can be added to this ib_device past this point we only need
1318 	 * the maximum possible client_id value here.
1319 	 */
1320 	down_read(&clients_rwsem);
1321 	cid = highest_client_id;
1322 	up_read(&clients_rwsem);
1323 	while (cid) {
1324 		cid--;
1325 		remove_client_context(device, cid);
1326 	}
1327 
1328 	ib_cq_pool_cleanup(device);
1329 
1330 	/* Pairs with refcount_set in enable_device */
1331 	ib_device_put(device);
1332 	wait_for_completion(&device->unreg_completion);
1333 
1334 	/*
1335 	 * compat devices must be removed after device refcount drops to zero.
1336 	 * Otherwise init_net() may add more compatdevs after removing compat
1337 	 * devices and before device is disabled.
1338 	 */
1339 	remove_compat_devs(device);
1340 }
1341 
1342 /*
1343  * An enabled device is visible to all clients and to all the public facing
1344  * APIs that return a device pointer. This always returns with a new get, even
1345  * if it fails.
1346  */
1347 static int enable_device_and_get(struct ib_device *device)
1348 {
1349 	struct ib_client *client;
1350 	unsigned long index;
1351 	int ret = 0;
1352 
1353 	/*
1354 	 * One ref belongs to the xa and the other belongs to this
1355 	 * thread. This is needed to guard against parallel unregistration.
1356 	 */
1357 	refcount_set(&device->refcount, 2);
1358 	down_write(&devices_rwsem);
1359 	xa_set_mark(&devices, device->index, DEVICE_REGISTERED);
1360 
1361 	/*
1362 	 * By using downgrade_write() we ensure that no other thread can clear
1363 	 * DEVICE_REGISTERED while we are completing the client setup.
1364 	 */
1365 	downgrade_write(&devices_rwsem);
1366 
1367 	if (device->ops.enable_driver) {
1368 		ret = device->ops.enable_driver(device);
1369 		if (ret)
1370 			goto out;
1371 	}
1372 
1373 	down_read(&clients_rwsem);
1374 	xa_for_each_marked (&clients, index, client, CLIENT_REGISTERED) {
1375 		ret = add_client_context(device, client);
1376 		if (ret)
1377 			break;
1378 	}
1379 	up_read(&clients_rwsem);
1380 	if (!ret)
1381 		ret = add_compat_devs(device);
1382 out:
1383 	up_read(&devices_rwsem);
1384 	return ret;
1385 }
1386 
1387 static void prevent_dealloc_device(struct ib_device *ib_dev)
1388 {
1389 }
1390 
1391 static void ib_device_notify_register(struct ib_device *device)
1392 {
1393 	struct net_device *netdev;
1394 	u32 port;
1395 	int ret;
1396 
1397 	down_read(&devices_rwsem);
1398 
1399 	/* Mark for userspace that device is ready */
1400 	kobject_uevent(&device->dev.kobj, KOBJ_ADD);
1401 
1402 	ret = rdma_nl_notify_event(device, 0, RDMA_REGISTER_EVENT);
1403 	if (ret)
1404 		goto out;
1405 
1406 	rdma_for_each_port(device, port) {
1407 		netdev = ib_device_get_netdev(device, port);
1408 		if (!netdev)
1409 			continue;
1410 
1411 		ret = rdma_nl_notify_event(device, port,
1412 					   RDMA_NETDEV_ATTACH_EVENT);
1413 		dev_put(netdev);
1414 		if (ret)
1415 			goto out;
1416 	}
1417 
1418 out:
1419 	up_read(&devices_rwsem);
1420 }
1421 
1422 /**
1423  * ib_register_device - Register an IB device with IB core
1424  * @device: Device to register
1425  * @name: device name, unique within the device's net namespace. This may
1426  *	  include a '%' which will cause a unique index to be added to the
1427  *	  passed device name.
1428  * @dma_device: pointer to a DMA-capable device. If %NULL, then the IB
1429  *	        device will be used. In this case the caller should fully
1430  *		setup the ibdev for DMA. This usually means using dma_virt_ops.
1431  *
1432  * Low-level drivers use ib_register_device() to register their
1433  * devices with the IB core.  All registered clients will receive a
1434  * callback for each device that is added. @device must be allocated
1435  * with ib_alloc_device().
1436  *
1437  * If the driver uses ops.dealloc_driver and calls any ib_unregister_device()
1438  * asynchronously then the device pointer may become freed as soon as this
1439  * function returns.
1440  */
1441 int ib_register_device(struct ib_device *device, const char *name,
1442 		       struct device *dma_device)
1443 {
1444 	int ret;
1445 
1446 	ret = assign_name(device, name);
1447 	if (ret)
1448 		return ret;
1449 
1450 	/*
1451 	 * If the caller does not provide a DMA capable device then the IB core
1452 	 * will set up ib_sge and scatterlist structures that stash the kernel
1453 	 * virtual address into the address field.
1454 	 */
1455 	WARN_ON(dma_device && !dma_device->dma_parms);
1456 	device->dma_device = dma_device;
1457 	/*
1458 	 * In a CoCo guest every device is currently assumed to be untrusted
1459 	 * (T=0) and therefore subject to DMA bouncing. Once trusted (T=1)
1460 	 * device detection is wired up, narrow this check to exclude such
1461 	 * devices.
1462 	 */
1463 	if (dma_device && cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
1464 		device->cc_dma_bounce = 1;
1465 
1466 	ret = setup_device(device);
1467 	if (ret)
1468 		return ret;
1469 
1470 	ret = ib_cache_setup_one(device);
1471 	if (ret) {
1472 		dev_warn(&device->dev,
1473 			 "Couldn't set up InfiniBand P_Key/GID cache\n");
1474 		return ret;
1475 	}
1476 
1477 	device->groups[0] = &ib_dev_attr_group;
1478 	device->groups[1] = device->ops.device_group;
1479 	ret = ib_setup_device_attrs(device);
1480 	if (ret)
1481 		goto cache_cleanup;
1482 
1483 	ib_device_register_rdmacg(device);
1484 
1485 	rdma_counter_init(device);
1486 
1487 	/*
1488 	 * Ensure that ADD uevent is not fired because it
1489 	 * is too early amd device is not initialized yet.
1490 	 */
1491 	dev_set_uevent_suppress(&device->dev, true);
1492 	ret = device_add(&device->dev);
1493 	if (ret)
1494 		goto cg_cleanup;
1495 
1496 	ret = ib_setup_port_attrs(&device->coredev);
1497 	if (ret) {
1498 		dev_warn(&device->dev,
1499 			 "Couldn't register device with driver model\n");
1500 		goto dev_cleanup;
1501 	}
1502 
1503 	ret = enable_device_and_get(device);
1504 	if (ret) {
1505 		void (*dealloc_fn)(struct ib_device *);
1506 
1507 		/*
1508 		 * If we hit this error flow then we don't want to
1509 		 * automatically dealloc the device since the caller is
1510 		 * expected to call ib_dealloc_device() after
1511 		 * ib_register_device() fails. This is tricky due to the
1512 		 * possibility for a parallel unregistration along with this
1513 		 * error flow. Since we have a refcount here we know any
1514 		 * parallel flow is stopped in disable_device and will see the
1515 		 * special dealloc_driver pointer, causing the responsibility to
1516 		 * ib_dealloc_device() to revert back to this thread.
1517 		 */
1518 		dealloc_fn = device->ops.dealloc_driver;
1519 		device->ops.dealloc_driver = prevent_dealloc_device;
1520 		ib_device_put(device);
1521 		__ib_unregister_device(device);
1522 		device->ops.dealloc_driver = dealloc_fn;
1523 		dev_set_uevent_suppress(&device->dev, false);
1524 		return ret;
1525 	}
1526 	dev_set_uevent_suppress(&device->dev, false);
1527 
1528 	ib_device_notify_register(device);
1529 
1530 	ib_device_put(device);
1531 
1532 	return 0;
1533 
1534 dev_cleanup:
1535 	device_del(&device->dev);
1536 cg_cleanup:
1537 	dev_set_uevent_suppress(&device->dev, false);
1538 	ib_device_unregister_rdmacg(device);
1539 cache_cleanup:
1540 	ib_cache_cleanup_one(device);
1541 	return ret;
1542 }
1543 EXPORT_SYMBOL(ib_register_device);
1544 
1545 /* Callers must hold a get on the device. */
1546 static void __ib_unregister_device(struct ib_device *ib_dev)
1547 {
1548 	struct ib_device *sub, *tmp;
1549 
1550 	mutex_lock(&ib_dev->subdev_lock);
1551 	list_for_each_entry_safe_reverse(sub, tmp,
1552 					 &ib_dev->subdev_list_head,
1553 					 subdev_list) {
1554 		list_del(&sub->subdev_list);
1555 		ib_dev->ops.del_sub_dev(sub);
1556 		ib_device_put(ib_dev);
1557 	}
1558 	mutex_unlock(&ib_dev->subdev_lock);
1559 
1560 	/*
1561 	 * We have a registration lock so that all the calls to unregister are
1562 	 * fully fenced, once any unregister returns the device is truly
1563 	 * unregistered even if multiple callers are unregistering it at the
1564 	 * same time. This also interacts with the registration flow and
1565 	 * provides sane semantics if register and unregister are racing.
1566 	 */
1567 	mutex_lock(&ib_dev->unregistration_lock);
1568 	if (!refcount_read(&ib_dev->refcount))
1569 		goto out;
1570 
1571 	disable_device(ib_dev);
1572 	rdma_nl_notify_event(ib_dev, 0, RDMA_UNREGISTER_EVENT);
1573 
1574 	/* Expedite removing unregistered pointers from the hash table */
1575 	free_netdevs(ib_dev);
1576 
1577 	ib_free_port_attrs(&ib_dev->coredev);
1578 	device_del(&ib_dev->dev);
1579 	ib_device_unregister_rdmacg(ib_dev);
1580 	ib_cache_cleanup_one(ib_dev);
1581 
1582 	/*
1583 	 * Drivers using the new flow may not call ib_dealloc_device except
1584 	 * in error unwind prior to registration success.
1585 	 */
1586 	if (ib_dev->ops.dealloc_driver &&
1587 	    ib_dev->ops.dealloc_driver != prevent_dealloc_device) {
1588 		WARN_ON(kref_read(&ib_dev->dev.kobj.kref) <= 1);
1589 		ib_dealloc_device(ib_dev);
1590 	}
1591 out:
1592 	mutex_unlock(&ib_dev->unregistration_lock);
1593 }
1594 
1595 /**
1596  * ib_unregister_device - Unregister an IB device
1597  * @ib_dev: The device to unregister
1598  *
1599  * Unregister an IB device.  All clients will receive a remove callback.
1600  *
1601  * Callers should call this routine only once, and protect against races with
1602  * registration. Typically it should only be called as part of a remove
1603  * callback in an implementation of driver core's struct device_driver and
1604  * related.
1605  *
1606  * If ops.dealloc_driver is used then ib_dev will be freed upon return from
1607  * this function.
1608  */
1609 void ib_unregister_device(struct ib_device *ib_dev)
1610 {
1611 	get_device(&ib_dev->dev);
1612 	__ib_unregister_device(ib_dev);
1613 	put_device(&ib_dev->dev);
1614 }
1615 EXPORT_SYMBOL(ib_unregister_device);
1616 
1617 /**
1618  * ib_unregister_device_and_put - Unregister a device while holding a 'get'
1619  * @ib_dev: The device to unregister
1620  *
1621  * This is the same as ib_unregister_device(), except it includes an internal
1622  * ib_device_put() that should match a 'get' obtained by the caller.
1623  *
1624  * It is safe to call this routine concurrently from multiple threads while
1625  * holding the 'get'. When the function returns the device is fully
1626  * unregistered.
1627  *
1628  * Drivers using this flow MUST use the driver_unregister callback to clean up
1629  * their resources associated with the device and dealloc it.
1630  */
1631 void ib_unregister_device_and_put(struct ib_device *ib_dev)
1632 {
1633 	WARN_ON(!ib_dev->ops.dealloc_driver);
1634 	get_device(&ib_dev->dev);
1635 	ib_device_put(ib_dev);
1636 	__ib_unregister_device(ib_dev);
1637 	put_device(&ib_dev->dev);
1638 }
1639 EXPORT_SYMBOL(ib_unregister_device_and_put);
1640 
1641 /**
1642  * ib_unregister_driver - Unregister all IB devices for a driver
1643  * @driver_id: The driver to unregister
1644  *
1645  * This implements a fence for device unregistration. It only returns once all
1646  * devices associated with the driver_id have fully completed their
1647  * unregistration and returned from ib_unregister_device*().
1648  *
1649  * If device's are not yet unregistered it goes ahead and starts unregistering
1650  * them.
1651  *
1652  * This does not block creation of new devices with the given driver_id, that
1653  * is the responsibility of the caller.
1654  */
1655 void ib_unregister_driver(enum rdma_driver_id driver_id)
1656 {
1657 	struct ib_device *ib_dev;
1658 	unsigned long index;
1659 
1660 	down_read(&devices_rwsem);
1661 	xa_for_each (&devices, index, ib_dev) {
1662 		if (ib_dev->ops.driver_id != driver_id)
1663 			continue;
1664 
1665 		get_device(&ib_dev->dev);
1666 		up_read(&devices_rwsem);
1667 
1668 		WARN_ON(!ib_dev->ops.dealloc_driver);
1669 		__ib_unregister_device(ib_dev);
1670 
1671 		put_device(&ib_dev->dev);
1672 		down_read(&devices_rwsem);
1673 	}
1674 	up_read(&devices_rwsem);
1675 }
1676 EXPORT_SYMBOL(ib_unregister_driver);
1677 
1678 static void ib_unregister_work(struct work_struct *work)
1679 {
1680 	struct ib_device *ib_dev =
1681 		container_of(work, struct ib_device, unregistration_work);
1682 
1683 	__ib_unregister_device(ib_dev);
1684 	put_device(&ib_dev->dev);
1685 }
1686 
1687 /**
1688  * ib_unregister_device_queued - Unregister a device using a work queue
1689  * @ib_dev: The device to unregister
1690  *
1691  * This schedules an asynchronous unregistration using a WQ for the device. A
1692  * driver should use this to avoid holding locks while doing unregistration,
1693  * such as holding the RTNL lock.
1694  *
1695  * Drivers using this API must use ib_unregister_driver before module unload
1696  * to ensure that all scheduled unregistrations have completed.
1697  */
1698 void ib_unregister_device_queued(struct ib_device *ib_dev)
1699 {
1700 	WARN_ON(!refcount_read(&ib_dev->refcount));
1701 	WARN_ON(!ib_dev->ops.dealloc_driver);
1702 	get_device(&ib_dev->dev);
1703 	if (!queue_work(ib_unreg_wq, &ib_dev->unregistration_work))
1704 		put_device(&ib_dev->dev);
1705 }
1706 EXPORT_SYMBOL(ib_unregister_device_queued);
1707 
1708 static bool rdma_dev_name_in_netns(struct ib_device *skip, struct net *net,
1709 				   const char *name)
1710 {
1711 	struct ib_device *device;
1712 	unsigned long index;
1713 
1714 	lockdep_assert_held_write(&devices_rwsem);
1715 
1716 	xa_for_each(&devices, index, device)
1717 		if (device != skip &&
1718 		    rdma_dev_access_netns(device, net) &&
1719 		    !strcmp(name, dev_name(&device->dev)))
1720 			return true;
1721 
1722 	return false;
1723 }
1724 
1725 /*
1726  * Choose the name @device should use in net namespace @net. @requested_name
1727  * is used as a literal device name when set. Otherwise keep the current name
1728  * when it is free, or use a trusted '%d' @fallback_pattern for teardown. The
1729  * caller must hold the write side of devices_rwsem.
1730  */
1731 static int rdma_dev_pick_netns_name(struct ib_device *device, struct net *net,
1732 				    const char *requested_name,
1733 				    const char *fallback_pattern,
1734 				    char *buf, size_t buf_len,
1735 				    const char **new_name)
1736 {
1737 	int id;
1738 
1739 	lockdep_assert_held_write(&devices_rwsem);
1740 
1741 	if (requested_name) {
1742 		if (!rdma_dev_name_in_netns(device, net, requested_name)) {
1743 			*new_name = requested_name;
1744 			return 0;
1745 		}
1746 
1747 		return -EEXIST;
1748 	}
1749 
1750 	if (!rdma_dev_name_in_netns(device, net, dev_name(&device->dev))) {
1751 		*new_name = dev_name(&device->dev);
1752 		return 0;
1753 	}
1754 
1755 	if (!fallback_pattern)
1756 		return -EEXIST;
1757 
1758 	snprintf(buf, buf_len, "ibdev%u", device->index);
1759 	if (!rdma_dev_name_in_netns(device, net, buf)) {
1760 		*new_name = buf;
1761 		return 0;
1762 	}
1763 
1764 	id = __alloc_name_id(net, fallback_pattern, device);
1765 	if (id < 0)
1766 		return id;
1767 	snprintf(buf, buf_len, fallback_pattern, id);
1768 	*new_name = buf;
1769 	return 0;
1770 }
1771 
1772 /*
1773  * The caller must pass in a device that has the kref held and the refcount
1774  * released. If the device is in cur_net and still registered then it is moved
1775  * into net.
1776  *
1777  * Naming rules are handled by rdma_dev_pick_netns_name().
1778  */
1779 static int rdma_dev_change_netns(struct ib_device *device, struct net *cur_net,
1780 				 struct net *net, const char *requested_name,
1781 				 const char *fallback_pattern)
1782 {
1783 	char buf[IB_DEVICE_NAME_MAX];
1784 	const char *new_name;
1785 	int ret2 = -EINVAL;
1786 	int ret;
1787 
1788 	mutex_lock(&device->unregistration_lock);
1789 
1790 	/*
1791 	 * If a device not under ib_device_get() or if the unregistration_lock
1792 	 * is not held, the namespace can be changed, or it can be unregistered.
1793 	 * Check again under the lock.
1794 	 */
1795 	if (refcount_read(&device->refcount) == 0 ||
1796 	    !net_eq(cur_net, read_pnet(&device->coredev.rdma_net))) {
1797 		ret = -ENODEV;
1798 		goto out;
1799 	}
1800 
1801 	if (!fallback_pattern) {
1802 		/*
1803 		 * Reject a predictable name conflict before tearing anything
1804 		 * down, so a doomed user move does not disable a live device.
1805 		 */
1806 		down_write(&devices_rwsem);
1807 		ret = rdma_dev_pick_netns_name(device, net, requested_name,
1808 					       fallback_pattern, buf,
1809 					       sizeof(buf), &new_name);
1810 		up_write(&devices_rwsem);
1811 		if (ret)
1812 			goto out;
1813 	}
1814 
1815 	kobject_uevent(&device->dev.kobj, KOBJ_REMOVE);
1816 	disable_device(device);
1817 
1818 	/*
1819 	 * Recompute the destination name under the write side of devices_rwsem
1820 	 * now that the device is disabled, closing races with a concurrent
1821 	 * registration or rename, then publish the new namespace at the sysfs
1822 	 * level.
1823 	 */
1824 	down_write(&devices_rwsem);
1825 	ret = rdma_dev_pick_netns_name(device, net, requested_name,
1826 				       fallback_pattern, buf, sizeof(buf),
1827 				       &new_name);
1828 	if (ret) {
1829 		if (fallback_pattern) {
1830 			WARN(1,
1831 			     "%s: failed to pick device name during namespace teardown: %d\n",
1832 			     __func__, ret);
1833 			write_pnet(&device->coredev.rdma_net, net);
1834 			ret = 0;
1835 		}
1836 		goto rename_done;
1837 	}
1838 
1839 	write_pnet(&device->coredev.rdma_net, net);
1840 	ret = device_rename(&device->dev, new_name);
1841 	if (ret) {
1842 		if (fallback_pattern) {
1843 			WARN(1,
1844 			     "%s: failed to rename device during namespace teardown: %d\n",
1845 			     __func__, ret);
1846 			ret = 0;
1847 		} else {
1848 			dev_warn(&device->dev,
1849 				 "%s: Couldn't rename device after namespace change\n",
1850 				 __func__);
1851 			/* Try and put things back and re-enable the device */
1852 			write_pnet(&device->coredev.rdma_net, cur_net);
1853 		}
1854 	} else {
1855 		strscpy(device->name, dev_name(&device->dev),
1856 			IB_DEVICE_NAME_MAX);
1857 	}
1858 rename_done:
1859 	up_write(&devices_rwsem);
1860 
1861 	ret2 = enable_device_and_get(device);
1862 	if (ret2) {
1863 		/*
1864 		 * This shouldn't really happen, but if it does, let the user
1865 		 * retry at later point. So don't disable the device.
1866 		 */
1867 		dev_warn(&device->dev,
1868 			 "%s: Couldn't re-enable device after namespace change\n",
1869 			 __func__);
1870 	}
1871 	kobject_uevent(&device->dev.kobj, KOBJ_ADD);
1872 
1873 	ib_device_put(device);
1874 out:
1875 	mutex_unlock(&device->unregistration_lock);
1876 	if (ret)
1877 		return ret;
1878 	return ret2;
1879 }
1880 
1881 int ib_device_set_netns_put(struct sk_buff *skb,
1882 			    struct ib_device *dev, u32 ns_fd, const char *name,
1883 			    struct netlink_ext_ack *extack)
1884 {
1885 	struct net *net;
1886 	int ret;
1887 
1888 	net = get_net_ns_by_fd(ns_fd);
1889 	if (IS_ERR(net)) {
1890 		NL_SET_ERR_MSG(extack, "Invalid target net namespace fd");
1891 		ret = PTR_ERR(net);
1892 		goto net_err;
1893 	}
1894 
1895 	if (!netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) {
1896 		NL_SET_ERR_MSG(extack,
1897 			       "Missing CAP_NET_ADMIN in the target net namespace");
1898 		ret = -EPERM;
1899 		goto ns_err;
1900 	}
1901 
1902 	/*
1903 	 * Moving a device to the namespace it already lives in is a no-op; a
1904 	 * supplied name still renames it in place.
1905 	 */
1906 	if (net_eq(net, read_pnet(&dev->coredev.rdma_net))) {
1907 		ret = name ? ib_device_rename(dev, name) : 0;
1908 
1909 		if (ret == -EEXIST)
1910 			NL_SET_ERR_MSG(extack,
1911 				       "Device name already exists in the target net namespace");
1912 		else if (ret == -EINVAL && name)
1913 			NL_SET_ERR_MSG(extack,
1914 				       "Unable to use requested device name in the target net namespace");
1915 		goto ns_err;
1916 	}
1917 
1918 	/*
1919 	 * All the ib_clients, including uverbs, are reset when the namespace is
1920 	 * changed and this cannot be blocked waiting for userspace to do
1921 	 * something, so disassociation is mandatory.
1922 	 */
1923 	if (ib_devices_shared_netns) {
1924 		NL_SET_ERR_MSG(extack,
1925 			       "Cannot change net namespace of RDMA device in shared netns mode");
1926 		ret = -EOPNOTSUPP;
1927 		goto ns_err;
1928 	}
1929 
1930 	if (!dev->ops.disassociate_ucontext) {
1931 		NL_SET_ERR_MSG(extack,
1932 			       "Device does not support namespace changes (no disassociate support)");
1933 		ret = -EOPNOTSUPP;
1934 		goto ns_err;
1935 	}
1936 
1937 	get_device(&dev->dev);
1938 	ib_device_put(dev);
1939 	ret = rdma_dev_change_netns(dev, current->nsproxy->net_ns, net, name,
1940 				    NULL);
1941 	put_device(&dev->dev);
1942 	if (ret == -EEXIST)
1943 		NL_SET_ERR_MSG(extack,
1944 			       "Device name already exists in the target net namespace");
1945 	else if (ret == -EINVAL && name)
1946 		NL_SET_ERR_MSG(extack,
1947 			       "Unable to use requested device name in the target net namespace");
1948 
1949 	put_net(net);
1950 	return ret;
1951 
1952 ns_err:
1953 	put_net(net);
1954 net_err:
1955 	ib_device_put(dev);
1956 	return ret;
1957 }
1958 
1959 static struct pernet_operations rdma_dev_net_ops = {
1960 	.init = rdma_dev_init_net,
1961 	.exit = rdma_dev_exit_net,
1962 	.id = &rdma_dev_net_id,
1963 	.size = sizeof(struct rdma_dev_net),
1964 };
1965 
1966 static int assign_client_id(struct ib_client *client)
1967 {
1968 	int ret;
1969 
1970 	lockdep_assert_held(&clients_rwsem);
1971 	/*
1972 	 * The add/remove callbacks must be called in FIFO/LIFO order. To
1973 	 * achieve this we assign client_ids so they are sorted in
1974 	 * registration order.
1975 	 */
1976 	client->client_id = highest_client_id;
1977 	ret = xa_insert(&clients, client->client_id, client, GFP_KERNEL);
1978 	if (ret)
1979 		return ret;
1980 
1981 	highest_client_id++;
1982 	xa_set_mark(&clients, client->client_id, CLIENT_REGISTERED);
1983 	return 0;
1984 }
1985 
1986 static void remove_client_id(struct ib_client *client)
1987 {
1988 	down_write(&clients_rwsem);
1989 	xa_erase(&clients, client->client_id);
1990 	for (; highest_client_id; highest_client_id--)
1991 		if (xa_load(&clients, highest_client_id - 1))
1992 			break;
1993 	up_write(&clients_rwsem);
1994 }
1995 
1996 /**
1997  * ib_register_client - Register an IB client
1998  * @client:Client to register
1999  *
2000  * Upper level users of the IB drivers can use ib_register_client() to
2001  * register callbacks for IB device addition and removal.  When an IB
2002  * device is added, each registered client's add method will be called
2003  * (in the order the clients were registered), and when a device is
2004  * removed, each client's remove method will be called (in the reverse
2005  * order that clients were registered).  In addition, when
2006  * ib_register_client() is called, the client will receive an add
2007  * callback for all devices already registered.
2008  */
2009 int ib_register_client(struct ib_client *client)
2010 {
2011 	struct ib_device *device;
2012 	unsigned long index;
2013 	bool need_unreg = false;
2014 	int ret;
2015 
2016 	refcount_set(&client->uses, 1);
2017 	init_completion(&client->uses_zero);
2018 
2019 	/*
2020 	 * The devices_rwsem is held in write mode to ensure that a racing
2021 	 * ib_register_device() sees a consisent view of clients and devices.
2022 	 */
2023 	down_write(&devices_rwsem);
2024 	down_write(&clients_rwsem);
2025 	ret = assign_client_id(client);
2026 	if (ret)
2027 		goto out;
2028 
2029 	need_unreg = true;
2030 	xa_for_each_marked (&devices, index, device, DEVICE_REGISTERED) {
2031 		ret = add_client_context(device, client);
2032 		if (ret)
2033 			goto out;
2034 	}
2035 	ret = 0;
2036 out:
2037 	up_write(&clients_rwsem);
2038 	up_write(&devices_rwsem);
2039 	if (need_unreg && ret)
2040 		ib_unregister_client(client);
2041 	return ret;
2042 }
2043 EXPORT_SYMBOL(ib_register_client);
2044 
2045 /**
2046  * ib_unregister_client - Unregister an IB client
2047  * @client:Client to unregister
2048  *
2049  * Upper level users use ib_unregister_client() to remove their client
2050  * registration.  When ib_unregister_client() is called, the client
2051  * will receive a remove callback for each IB device still registered.
2052  *
2053  * This is a full fence, once it returns no client callbacks will be called,
2054  * or are running in another thread.
2055  */
2056 void ib_unregister_client(struct ib_client *client)
2057 {
2058 	struct ib_device *device;
2059 	unsigned long index;
2060 
2061 	down_write(&clients_rwsem);
2062 	ib_client_put(client);
2063 	xa_clear_mark(&clients, client->client_id, CLIENT_REGISTERED);
2064 	up_write(&clients_rwsem);
2065 
2066 	/* We do not want to have locks while calling client->remove() */
2067 	rcu_read_lock();
2068 	xa_for_each (&devices, index, device) {
2069 		if (!ib_device_try_get(device))
2070 			continue;
2071 		rcu_read_unlock();
2072 
2073 		remove_client_context(device, client->client_id);
2074 
2075 		ib_device_put(device);
2076 		rcu_read_lock();
2077 	}
2078 	rcu_read_unlock();
2079 
2080 	/*
2081 	 * remove_client_context() is not a fence, it can return even though a
2082 	 * removal is ongoing. Wait until all removals are completed.
2083 	 */
2084 	wait_for_completion(&client->uses_zero);
2085 	remove_client_id(client);
2086 }
2087 EXPORT_SYMBOL(ib_unregister_client);
2088 
2089 static int __ib_get_global_client_nl_info(const char *client_name,
2090 					  struct ib_client_nl_info *res)
2091 {
2092 	struct ib_client *client;
2093 	unsigned long index;
2094 	int ret = -ENOENT;
2095 
2096 	down_read(&clients_rwsem);
2097 	xa_for_each_marked (&clients, index, client, CLIENT_REGISTERED) {
2098 		if (strcmp(client->name, client_name) != 0)
2099 			continue;
2100 		if (!client->get_global_nl_info) {
2101 			ret = -EOPNOTSUPP;
2102 			break;
2103 		}
2104 		ret = client->get_global_nl_info(res);
2105 		if (WARN_ON(ret == -ENOENT))
2106 			ret = -EINVAL;
2107 		if (!ret && res->cdev)
2108 			get_device(res->cdev);
2109 		break;
2110 	}
2111 	up_read(&clients_rwsem);
2112 	return ret;
2113 }
2114 
2115 static int __ib_get_client_nl_info(struct ib_device *ibdev,
2116 				   const char *client_name,
2117 				   struct ib_client_nl_info *res)
2118 {
2119 	unsigned long index;
2120 	void *client_data;
2121 	int ret = -ENOENT;
2122 
2123 	down_read(&ibdev->client_data_rwsem);
2124 	xan_for_each_marked (&ibdev->client_data, index, client_data,
2125 			     CLIENT_DATA_REGISTERED) {
2126 		struct ib_client *client = xa_load(&clients, index);
2127 
2128 		if (!client || strcmp(client->name, client_name) != 0)
2129 			continue;
2130 		if (!client->get_nl_info) {
2131 			ret = -EOPNOTSUPP;
2132 			break;
2133 		}
2134 		ret = client->get_nl_info(ibdev, client_data, res);
2135 		if (WARN_ON(ret == -ENOENT))
2136 			ret = -EINVAL;
2137 
2138 		/*
2139 		 * The cdev is guaranteed valid as long as we are inside the
2140 		 * client_data_rwsem as remove_one can't be called. Keep it
2141 		 * valid for the caller.
2142 		 */
2143 		if (!ret && res->cdev)
2144 			get_device(res->cdev);
2145 		break;
2146 	}
2147 	up_read(&ibdev->client_data_rwsem);
2148 
2149 	return ret;
2150 }
2151 
2152 /**
2153  * ib_get_client_nl_info - Fetch the nl_info from a client
2154  * @ibdev: IB device
2155  * @client_name: Name of the client
2156  * @res: Result of the query
2157  */
2158 int ib_get_client_nl_info(struct ib_device *ibdev, const char *client_name,
2159 			  struct ib_client_nl_info *res)
2160 {
2161 	int ret;
2162 
2163 	if (ibdev)
2164 		ret = __ib_get_client_nl_info(ibdev, client_name, res);
2165 	else
2166 		ret = __ib_get_global_client_nl_info(client_name, res);
2167 #ifdef CONFIG_MODULES
2168 	if (ret == -ENOENT) {
2169 		request_module("rdma-client-%s", client_name);
2170 		if (ibdev)
2171 			ret = __ib_get_client_nl_info(ibdev, client_name, res);
2172 		else
2173 			ret = __ib_get_global_client_nl_info(client_name, res);
2174 	}
2175 #endif
2176 	if (ret) {
2177 		if (ret == -ENOENT)
2178 			return -EOPNOTSUPP;
2179 		return ret;
2180 	}
2181 
2182 	if (WARN_ON(!res->cdev))
2183 		return -EINVAL;
2184 	return 0;
2185 }
2186 
2187 /**
2188  * ib_set_client_data - Set IB client context
2189  * @device:Device to set context for
2190  * @client:Client to set context for
2191  * @data:Context to set
2192  *
2193  * ib_set_client_data() sets client context data that can be retrieved with
2194  * ib_get_client_data(). This can only be called while the client is
2195  * registered to the device, once the ib_client remove() callback returns this
2196  * cannot be called.
2197  */
2198 void ib_set_client_data(struct ib_device *device, struct ib_client *client,
2199 			void *data)
2200 {
2201 	void *rc;
2202 
2203 	if (WARN_ON(IS_ERR(data)))
2204 		data = NULL;
2205 
2206 	rc = xa_store(&device->client_data, client->client_id, data,
2207 		      GFP_KERNEL);
2208 	WARN_ON(xa_is_err(rc));
2209 }
2210 EXPORT_SYMBOL(ib_set_client_data);
2211 
2212 /**
2213  * ib_register_event_handler - Register an IB event handler
2214  * @event_handler:Handler to register
2215  *
2216  * ib_register_event_handler() registers an event handler that will be
2217  * called back when asynchronous IB events occur (as defined in
2218  * chapter 11 of the InfiniBand Architecture Specification). This
2219  * callback occurs in workqueue context.
2220  */
2221 void ib_register_event_handler(struct ib_event_handler *event_handler)
2222 {
2223 	down_write(&event_handler->device->event_handler_rwsem);
2224 	list_add_tail(&event_handler->list,
2225 		      &event_handler->device->event_handler_list);
2226 	up_write(&event_handler->device->event_handler_rwsem);
2227 }
2228 EXPORT_SYMBOL(ib_register_event_handler);
2229 
2230 /**
2231  * ib_unregister_event_handler - Unregister an event handler
2232  * @event_handler:Handler to unregister
2233  *
2234  * Unregister an event handler registered with
2235  * ib_register_event_handler().
2236  */
2237 void ib_unregister_event_handler(struct ib_event_handler *event_handler)
2238 {
2239 	down_write(&event_handler->device->event_handler_rwsem);
2240 	list_del(&event_handler->list);
2241 	up_write(&event_handler->device->event_handler_rwsem);
2242 }
2243 EXPORT_SYMBOL(ib_unregister_event_handler);
2244 
2245 void ib_dispatch_event_clients(struct ib_event *event)
2246 {
2247 	struct ib_event_handler *handler;
2248 
2249 	down_read(&event->device->event_handler_rwsem);
2250 
2251 	list_for_each_entry(handler, &event->device->event_handler_list, list)
2252 		handler->handler(handler, event);
2253 
2254 	up_read(&event->device->event_handler_rwsem);
2255 }
2256 
2257 static int iw_query_port(struct ib_device *device,
2258 			   u32 port_num,
2259 			   struct ib_port_attr *port_attr)
2260 {
2261 	struct in_device *inetdev;
2262 	struct net_device *netdev;
2263 
2264 	memset(port_attr, 0, sizeof(*port_attr));
2265 
2266 	netdev = ib_device_get_netdev(device, port_num);
2267 	if (!netdev)
2268 		return -ENODEV;
2269 
2270 	port_attr->max_mtu = IB_MTU_4096;
2271 	port_attr->active_mtu = ib_mtu_int_to_enum(netdev->mtu);
2272 
2273 	if (!netif_carrier_ok(netdev)) {
2274 		port_attr->state = IB_PORT_DOWN;
2275 		port_attr->phys_state = IB_PORT_PHYS_STATE_DISABLED;
2276 	} else {
2277 		rcu_read_lock();
2278 		inetdev = __in_dev_get_rcu(netdev);
2279 
2280 		if (inetdev && inetdev->ifa_list) {
2281 			port_attr->state = IB_PORT_ACTIVE;
2282 			port_attr->phys_state = IB_PORT_PHYS_STATE_LINK_UP;
2283 		} else {
2284 			port_attr->state = IB_PORT_INIT;
2285 			port_attr->phys_state =
2286 				IB_PORT_PHYS_STATE_PORT_CONFIGURATION_TRAINING;
2287 		}
2288 
2289 		rcu_read_unlock();
2290 	}
2291 
2292 	dev_put(netdev);
2293 	return device->ops.query_port(device, port_num, port_attr);
2294 }
2295 
2296 static int __ib_query_port(struct ib_device *device,
2297 			   u32 port_num,
2298 			   struct ib_port_attr *port_attr)
2299 {
2300 	int err;
2301 
2302 	memset(port_attr, 0, sizeof(*port_attr));
2303 
2304 	err = device->ops.query_port(device, port_num, port_attr);
2305 	if (err || port_attr->subnet_prefix)
2306 		return err;
2307 
2308 	if (rdma_port_get_link_layer(device, port_num) !=
2309 	    IB_LINK_LAYER_INFINIBAND)
2310 		return 0;
2311 
2312 	ib_get_cached_subnet_prefix(device, port_num,
2313 				    &port_attr->subnet_prefix);
2314 	return 0;
2315 }
2316 
2317 /**
2318  * ib_query_port - Query IB port attributes
2319  * @device:Device to query
2320  * @port_num:Port number to query
2321  * @port_attr:Port attributes
2322  *
2323  * ib_query_port() returns the attributes of a port through the
2324  * @port_attr pointer.
2325  */
2326 int ib_query_port(struct ib_device *device,
2327 		  u32 port_num,
2328 		  struct ib_port_attr *port_attr)
2329 {
2330 	if (!rdma_is_port_valid(device, port_num))
2331 		return -EINVAL;
2332 
2333 	if (rdma_protocol_iwarp(device, port_num))
2334 		return iw_query_port(device, port_num, port_attr);
2335 	else
2336 		return __ib_query_port(device, port_num, port_attr);
2337 }
2338 EXPORT_SYMBOL(ib_query_port);
2339 
2340 static void add_ndev_hash(struct ib_port_data *pdata)
2341 {
2342 	unsigned long flags;
2343 
2344 	might_sleep();
2345 
2346 	spin_lock_irqsave(&ndev_hash_lock, flags);
2347 	if (hash_hashed(&pdata->ndev_hash_link)) {
2348 		hash_del_rcu(&pdata->ndev_hash_link);
2349 		spin_unlock_irqrestore(&ndev_hash_lock, flags);
2350 		/*
2351 		 * We cannot do hash_add_rcu after a hash_del_rcu until the
2352 		 * grace period
2353 		 */
2354 		synchronize_rcu();
2355 		spin_lock_irqsave(&ndev_hash_lock, flags);
2356 	}
2357 	if (pdata->netdev)
2358 		hash_add_rcu(ndev_hash, &pdata->ndev_hash_link,
2359 			     (uintptr_t)pdata->netdev);
2360 	spin_unlock_irqrestore(&ndev_hash_lock, flags);
2361 }
2362 
2363 /**
2364  * ib_device_set_netdev - Associate the ib_dev with an underlying net_device
2365  * @ib_dev: Device to modify
2366  * @ndev: net_device to affiliate, may be NULL
2367  * @port: IB port the net_device is connected to
2368  *
2369  * Drivers should use this to link the ib_device to a netdev so the netdev
2370  * shows up in interfaces like ib_enum_roce_netdev. Only one netdev may be
2371  * affiliated with any port.
2372  *
2373  * The caller must ensure that the given ndev is not unregistered or
2374  * unregistering, and that either the ib_device is unregistered or
2375  * ib_device_set_netdev() is called with NULL when the ndev sends a
2376  * NETDEV_UNREGISTER event.
2377  */
2378 int ib_device_set_netdev(struct ib_device *ib_dev, struct net_device *ndev,
2379 			 u32 port)
2380 {
2381 	enum rdma_nl_notify_event_type etype;
2382 	struct net_device *old_ndev;
2383 	struct ib_port_data *pdata;
2384 	unsigned long flags;
2385 	int ret;
2386 
2387 	if (!rdma_is_port_valid(ib_dev, port))
2388 		return -EINVAL;
2389 
2390 	/*
2391 	 * Drivers wish to call this before ib_register_driver, so we have to
2392 	 * setup the port data early.
2393 	 */
2394 	ret = alloc_port_data(ib_dev);
2395 	if (ret)
2396 		return ret;
2397 
2398 	pdata = &ib_dev->port_data[port];
2399 	spin_lock_irqsave(&pdata->netdev_lock, flags);
2400 	old_ndev = rcu_dereference_protected(
2401 		pdata->netdev, lockdep_is_held(&pdata->netdev_lock));
2402 	if (old_ndev == ndev) {
2403 		spin_unlock_irqrestore(&pdata->netdev_lock, flags);
2404 		return 0;
2405 	}
2406 
2407 	rcu_assign_pointer(pdata->netdev, ndev);
2408 	netdev_put(old_ndev, &pdata->netdev_tracker);
2409 	netdev_hold(ndev, &pdata->netdev_tracker, GFP_ATOMIC);
2410 	spin_unlock_irqrestore(&pdata->netdev_lock, flags);
2411 
2412 	add_ndev_hash(pdata);
2413 
2414 	/* Make sure that the device is registered before we send events */
2415 	if (xa_load(&devices, ib_dev->index) != ib_dev)
2416 		return 0;
2417 
2418 	etype = ndev ? RDMA_NETDEV_ATTACH_EVENT : RDMA_NETDEV_DETACH_EVENT;
2419 	rdma_nl_notify_event(ib_dev, port, etype);
2420 
2421 	return 0;
2422 }
2423 EXPORT_SYMBOL(ib_device_set_netdev);
2424 
2425 static void free_netdevs(struct ib_device *ib_dev)
2426 {
2427 	unsigned long flags;
2428 	u32 port;
2429 
2430 	if (!ib_dev->port_data)
2431 		return;
2432 
2433 	rdma_for_each_port (ib_dev, port) {
2434 		struct ib_port_data *pdata = &ib_dev->port_data[port];
2435 		struct net_device *ndev;
2436 
2437 		spin_lock_irqsave(&pdata->netdev_lock, flags);
2438 		ndev = rcu_dereference_protected(
2439 			pdata->netdev, lockdep_is_held(&pdata->netdev_lock));
2440 		if (ndev) {
2441 			spin_lock(&ndev_hash_lock);
2442 			hash_del_rcu(&pdata->ndev_hash_link);
2443 			spin_unlock(&ndev_hash_lock);
2444 
2445 			/*
2446 			 * If this is the last dev_put there is still a
2447 			 * synchronize_rcu before the netdev is kfreed, so we
2448 			 * can continue to rely on unlocked pointer
2449 			 * comparisons after the put
2450 			 */
2451 			rcu_assign_pointer(pdata->netdev, NULL);
2452 			netdev_put(ndev, &pdata->netdev_tracker);
2453 		}
2454 		spin_unlock_irqrestore(&pdata->netdev_lock, flags);
2455 	}
2456 }
2457 
2458 struct net_device *ib_device_get_netdev(struct ib_device *ib_dev,
2459 					u32 port)
2460 {
2461 	struct ib_port_data *pdata;
2462 	struct net_device *res;
2463 
2464 	if (!rdma_is_port_valid(ib_dev, port))
2465 		return NULL;
2466 
2467 	if (!ib_dev->port_data)
2468 		return NULL;
2469 
2470 	pdata = &ib_dev->port_data[port];
2471 
2472 	/*
2473 	 * New drivers should use ib_device_set_netdev() not the legacy
2474 	 * get_netdev().
2475 	 */
2476 	if (ib_dev->ops.get_netdev)
2477 		res = ib_dev->ops.get_netdev(ib_dev, port);
2478 	else {
2479 		spin_lock(&pdata->netdev_lock);
2480 		res = rcu_dereference_protected(
2481 			pdata->netdev, lockdep_is_held(&pdata->netdev_lock));
2482 		dev_hold(res);
2483 		spin_unlock(&pdata->netdev_lock);
2484 	}
2485 
2486 	return res;
2487 }
2488 EXPORT_SYMBOL(ib_device_get_netdev);
2489 
2490 /**
2491  * ib_query_netdev_port - Query the port number of a net_device
2492  * associated with an ibdev
2493  * @ibdev: IB device
2494  * @ndev: Network device
2495  * @port: IB port the net_device is connected to
2496  */
2497 int ib_query_netdev_port(struct ib_device *ibdev, struct net_device *ndev,
2498 			 u32 *port)
2499 {
2500 	struct net_device *ib_ndev;
2501 	u32 port_num;
2502 
2503 	rdma_for_each_port(ibdev, port_num) {
2504 		ib_ndev = ib_device_get_netdev(ibdev, port_num);
2505 		if (ndev == ib_ndev) {
2506 			*port = port_num;
2507 			dev_put(ib_ndev);
2508 			return 0;
2509 		}
2510 		dev_put(ib_ndev);
2511 	}
2512 
2513 	return -ENOENT;
2514 }
2515 EXPORT_SYMBOL(ib_query_netdev_port);
2516 
2517 /**
2518  * ib_device_get_by_netdev - Find an IB device associated with a netdev
2519  * @ndev: netdev to locate
2520  * @driver_id: The driver ID that must match (RDMA_DRIVER_UNKNOWN matches all)
2521  *
2522  * Find and hold an ib_device that is associated with a netdev via
2523  * ib_device_set_netdev(). The caller must call ib_device_put() on the
2524  * returned pointer.
2525  */
2526 struct ib_device *ib_device_get_by_netdev(struct net_device *ndev,
2527 					  enum rdma_driver_id driver_id)
2528 {
2529 	struct ib_device *res = NULL;
2530 	struct ib_port_data *cur;
2531 
2532 	rcu_read_lock();
2533 	hash_for_each_possible_rcu (ndev_hash, cur, ndev_hash_link,
2534 				    (uintptr_t)ndev) {
2535 		if (rcu_access_pointer(cur->netdev) == ndev &&
2536 		    (driver_id == RDMA_DRIVER_UNKNOWN ||
2537 		     cur->ib_dev->ops.driver_id == driver_id) &&
2538 		    ib_device_try_get(cur->ib_dev)) {
2539 			res = cur->ib_dev;
2540 			break;
2541 		}
2542 	}
2543 	rcu_read_unlock();
2544 
2545 	return res;
2546 }
2547 EXPORT_SYMBOL(ib_device_get_by_netdev);
2548 
2549 /**
2550  * ib_enum_roce_netdev - enumerate all RoCE ports
2551  * @ib_dev : IB device we want to query
2552  * @filter: Should we call the callback?
2553  * @filter_cookie: Cookie passed to filter
2554  * @cb: Callback to call for each found RoCE ports
2555  * @cookie: Cookie passed back to the callback
2556  *
2557  * Enumerates all of the physical RoCE ports of ib_dev
2558  * which are related to netdevice and calls callback() on each
2559  * device for which filter() function returns non zero.
2560  */
2561 void ib_enum_roce_netdev(struct ib_device *ib_dev,
2562 			 roce_netdev_filter filter,
2563 			 void *filter_cookie,
2564 			 roce_netdev_callback cb,
2565 			 void *cookie)
2566 {
2567 	u32 port;
2568 
2569 	rdma_for_each_port (ib_dev, port)
2570 		if (rdma_protocol_roce(ib_dev, port)) {
2571 			struct net_device *idev =
2572 				ib_device_get_netdev(ib_dev, port);
2573 
2574 			if (filter(ib_dev, port, idev, filter_cookie))
2575 				cb(ib_dev, port, idev, cookie);
2576 			dev_put(idev);
2577 		}
2578 }
2579 
2580 /**
2581  * ib_enum_all_roce_netdevs - enumerate all RoCE devices
2582  * @filter: Should we call the callback?
2583  * @filter_cookie: Cookie passed to filter
2584  * @cb: Callback to call for each found RoCE ports
2585  * @cookie: Cookie passed back to the callback
2586  *
2587  * Enumerates all RoCE devices' physical ports which are related
2588  * to netdevices and calls callback() on each device for which
2589  * filter() function returns non zero.
2590  */
2591 void ib_enum_all_roce_netdevs(roce_netdev_filter filter,
2592 			      void *filter_cookie,
2593 			      roce_netdev_callback cb,
2594 			      void *cookie)
2595 {
2596 	struct ib_device *dev;
2597 	unsigned long index;
2598 
2599 	down_read(&devices_rwsem);
2600 	xa_for_each_marked(&devices, index, dev, DEVICE_GID_UPDATES)
2601 		ib_enum_roce_netdev(dev, filter, filter_cookie, cb, cookie);
2602 	up_read(&devices_rwsem);
2603 }
2604 
2605 /**
2606  * ib_device_enable_gid_updates - Mark device as ready for GID cache updates
2607  * @device: Device to mark
2608  *
2609  * Called after GID table is allocated and initialized. After this mark is set,
2610  * netdevice event handlers can update the device's GID cache. This allows
2611  * events that arrive during device registration to be processed, avoiding
2612  * stale GID entries when netdev properties change during the device
2613  * registration process.
2614  */
2615 void ib_device_enable_gid_updates(struct ib_device *device)
2616 {
2617 	down_write(&devices_rwsem);
2618 	xa_set_mark(&devices, device->index, DEVICE_GID_UPDATES);
2619 	up_write(&devices_rwsem);
2620 }
2621 
2622 /**
2623  * ib_device_disable_gid_updates - Clear the GID updates mark
2624  * @device: Device to unmark
2625  *
2626  * Called before GID table cleanup to prevent event handlers from accessing
2627  * the device while it's being torn down.
2628  */
2629 void ib_device_disable_gid_updates(struct ib_device *device)
2630 {
2631 	down_write(&devices_rwsem);
2632 	xa_clear_mark(&devices, device->index, DEVICE_GID_UPDATES);
2633 	up_write(&devices_rwsem);
2634 }
2635 
2636 /*
2637  * ib_enum_all_devs - enumerate all ib_devices
2638  * @cb: Callback to call for each found ib_device
2639  *
2640  * Enumerates all ib_devices and calls callback() on each device.
2641  */
2642 int ib_enum_all_devs(nldev_callback nldev_cb, struct sk_buff *skb,
2643 		     struct netlink_callback *cb)
2644 {
2645 	unsigned long index;
2646 	struct ib_device *dev;
2647 	unsigned int idx = 0;
2648 	int ret = 0;
2649 
2650 	down_read(&devices_rwsem);
2651 	xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED) {
2652 		if (!rdma_dev_access_netns(dev, sock_net(skb->sk)))
2653 			continue;
2654 
2655 		ret = nldev_cb(dev, skb, cb, idx);
2656 		if (ret)
2657 			break;
2658 		idx++;
2659 	}
2660 	up_read(&devices_rwsem);
2661 	return ret;
2662 }
2663 
2664 /**
2665  * ib_query_pkey - Get P_Key table entry
2666  * @device:Device to query
2667  * @port_num:Port number to query
2668  * @index:P_Key table index to query
2669  * @pkey:Returned P_Key
2670  *
2671  * ib_query_pkey() fetches the specified P_Key table entry.
2672  */
2673 int ib_query_pkey(struct ib_device *device,
2674 		  u32 port_num, u16 index, u16 *pkey)
2675 {
2676 	if (!rdma_is_port_valid(device, port_num))
2677 		return -EINVAL;
2678 
2679 	if (!device->ops.query_pkey)
2680 		return -EOPNOTSUPP;
2681 
2682 	return device->ops.query_pkey(device, port_num, index, pkey);
2683 }
2684 EXPORT_SYMBOL(ib_query_pkey);
2685 
2686 /**
2687  * ib_modify_device - Change IB device attributes
2688  * @device:Device to modify
2689  * @device_modify_mask:Mask of attributes to change
2690  * @device_modify:New attribute values
2691  *
2692  * ib_modify_device() changes a device's attributes as specified by
2693  * the @device_modify_mask and @device_modify structure.
2694  */
2695 int ib_modify_device(struct ib_device *device,
2696 		     int device_modify_mask,
2697 		     struct ib_device_modify *device_modify)
2698 {
2699 	if (!device->ops.modify_device)
2700 		return -EOPNOTSUPP;
2701 
2702 	return device->ops.modify_device(device, device_modify_mask,
2703 					 device_modify);
2704 }
2705 EXPORT_SYMBOL(ib_modify_device);
2706 
2707 /**
2708  * ib_modify_port - Modifies the attributes for the specified port.
2709  * @device: The device to modify.
2710  * @port_num: The number of the port to modify.
2711  * @port_modify_mask: Mask used to specify which attributes of the port
2712  *   to change.
2713  * @port_modify: New attribute values for the port.
2714  *
2715  * ib_modify_port() changes a port's attributes as specified by the
2716  * @port_modify_mask and @port_modify structure.
2717  */
2718 int ib_modify_port(struct ib_device *device,
2719 		   u32 port_num, int port_modify_mask,
2720 		   struct ib_port_modify *port_modify)
2721 {
2722 	int rc;
2723 
2724 	if (!rdma_is_port_valid(device, port_num))
2725 		return -EINVAL;
2726 
2727 	if (device->ops.modify_port)
2728 		rc = device->ops.modify_port(device, port_num,
2729 					     port_modify_mask,
2730 					     port_modify);
2731 	else if (rdma_protocol_roce(device, port_num) &&
2732 		 ((port_modify->set_port_cap_mask & ~IB_PORT_CM_SUP) == 0 ||
2733 		  (port_modify->clr_port_cap_mask & ~IB_PORT_CM_SUP) == 0))
2734 		rc = 0;
2735 	else
2736 		rc = -EOPNOTSUPP;
2737 	return rc;
2738 }
2739 EXPORT_SYMBOL(ib_modify_port);
2740 
2741 /**
2742  * ib_find_gid - Returns the port number and GID table index where
2743  *   a specified GID value occurs. Its searches only for IB link layer.
2744  * @device: The device to query.
2745  * @gid: The GID value to search for.
2746  * @port_num: The port number of the device where the GID value was found.
2747  * @index: The index into the GID table where the GID was found.  This
2748  *   parameter may be NULL.
2749  */
2750 int ib_find_gid(struct ib_device *device, union ib_gid *gid,
2751 		u32 *port_num, u16 *index)
2752 {
2753 	union ib_gid tmp_gid;
2754 	u32 port;
2755 	int ret, i;
2756 
2757 	rdma_for_each_port (device, port) {
2758 		if (!rdma_protocol_ib(device, port))
2759 			continue;
2760 
2761 		for (i = 0; i < device->port_data[port].immutable.gid_tbl_len;
2762 		     ++i) {
2763 			ret = rdma_query_gid(device, port, i, &tmp_gid);
2764 			if (ret)
2765 				continue;
2766 
2767 			if (!memcmp(&tmp_gid, gid, sizeof *gid)) {
2768 				*port_num = port;
2769 				if (index)
2770 					*index = i;
2771 				return 0;
2772 			}
2773 		}
2774 	}
2775 
2776 	return -ENOENT;
2777 }
2778 EXPORT_SYMBOL(ib_find_gid);
2779 
2780 /**
2781  * ib_find_pkey - Returns the PKey table index where a specified
2782  *   PKey value occurs.
2783  * @device: The device to query.
2784  * @port_num: The port number of the device to search for the PKey.
2785  * @pkey: The PKey value to search for.
2786  * @index: The index into the PKey table where the PKey was found.
2787  */
2788 int ib_find_pkey(struct ib_device *device,
2789 		 u32 port_num, u16 pkey, u16 *index)
2790 {
2791 	int ret, i;
2792 	u16 tmp_pkey;
2793 	int partial_ix = -1;
2794 
2795 	for (i = 0; i < device->port_data[port_num].immutable.pkey_tbl_len;
2796 	     ++i) {
2797 		ret = ib_query_pkey(device, port_num, i, &tmp_pkey);
2798 		if (ret)
2799 			return ret;
2800 		if ((pkey & 0x7fff) == (tmp_pkey & 0x7fff)) {
2801 			/* if there is full-member pkey take it.*/
2802 			if (tmp_pkey & 0x8000) {
2803 				*index = i;
2804 				return 0;
2805 			}
2806 			if (partial_ix < 0)
2807 				partial_ix = i;
2808 		}
2809 	}
2810 
2811 	/*no full-member, if exists take the limited*/
2812 	if (partial_ix >= 0) {
2813 		*index = partial_ix;
2814 		return 0;
2815 	}
2816 	return -ENOENT;
2817 }
2818 EXPORT_SYMBOL(ib_find_pkey);
2819 
2820 /**
2821  * ib_get_net_dev_by_params() - Return the appropriate net_dev
2822  * for a received CM request
2823  * @dev:	An RDMA device on which the request has been received.
2824  * @port:	Port number on the RDMA device.
2825  * @pkey:	The Pkey the request came on.
2826  * @gid:	A GID that the net_dev uses to communicate.
2827  * @addr:	Contains the IP address that the request specified as its
2828  *		destination.
2829  *
2830  */
2831 struct net_device *ib_get_net_dev_by_params(struct ib_device *dev,
2832 					    u32 port,
2833 					    u16 pkey,
2834 					    const union ib_gid *gid,
2835 					    const struct sockaddr *addr)
2836 {
2837 	struct net_device *net_dev = NULL;
2838 	unsigned long index;
2839 	void *client_data;
2840 
2841 	if (!rdma_protocol_ib(dev, port))
2842 		return NULL;
2843 
2844 	/*
2845 	 * Holding the read side guarantees that the client will not become
2846 	 * unregistered while we are calling get_net_dev_by_params()
2847 	 */
2848 	down_read(&dev->client_data_rwsem);
2849 	xan_for_each_marked (&dev->client_data, index, client_data,
2850 			     CLIENT_DATA_REGISTERED) {
2851 		struct ib_client *client = xa_load(&clients, index);
2852 
2853 		if (!client || !client->get_net_dev_by_params)
2854 			continue;
2855 
2856 		net_dev = client->get_net_dev_by_params(dev, port, pkey, gid,
2857 							addr, client_data);
2858 		if (net_dev)
2859 			break;
2860 	}
2861 	up_read(&dev->client_data_rwsem);
2862 
2863 	return net_dev;
2864 }
2865 EXPORT_SYMBOL(ib_get_net_dev_by_params);
2866 
2867 void ib_set_device_ops(struct ib_device *dev, const struct ib_device_ops *ops)
2868 {
2869 	struct ib_device_ops *dev_ops = &dev->ops;
2870 #define SET_DEVICE_OP(ptr, name)                                               \
2871 	do {                                                                   \
2872 		if (ops->name)                                                 \
2873 			if (!((ptr)->name))				       \
2874 				(ptr)->name = ops->name;                       \
2875 	} while (0)
2876 
2877 #define SET_OBJ_SIZE(ptr, name) SET_DEVICE_OP(ptr, size_##name)
2878 
2879 	if (ops->driver_id != RDMA_DRIVER_UNKNOWN) {
2880 		WARN_ON(dev_ops->driver_id != RDMA_DRIVER_UNKNOWN &&
2881 			dev_ops->driver_id != ops->driver_id);
2882 		dev_ops->driver_id = ops->driver_id;
2883 	}
2884 	if (ops->owner) {
2885 		WARN_ON(dev_ops->owner && dev_ops->owner != ops->owner);
2886 		dev_ops->owner = ops->owner;
2887 	}
2888 	if (ops->uverbs_abi_ver)
2889 		dev_ops->uverbs_abi_ver = ops->uverbs_abi_ver;
2890 
2891 	dev_ops->uverbs_no_driver_id_binding |=
2892 		ops->uverbs_no_driver_id_binding;
2893 	dev_ops->uverbs_robust_udata |= ops->uverbs_robust_udata;
2894 
2895 	SET_DEVICE_OP(dev_ops, add_gid);
2896 	SET_DEVICE_OP(dev_ops, add_sub_dev);
2897 	SET_DEVICE_OP(dev_ops, advise_mr);
2898 	SET_DEVICE_OP(dev_ops, alloc_dm);
2899 	SET_DEVICE_OP(dev_ops, alloc_dmah);
2900 	SET_DEVICE_OP(dev_ops, alloc_hw_device_stats);
2901 	SET_DEVICE_OP(dev_ops, alloc_hw_port_stats);
2902 	SET_DEVICE_OP(dev_ops, alloc_mr);
2903 	SET_DEVICE_OP(dev_ops, alloc_mr_integrity);
2904 	SET_DEVICE_OP(dev_ops, alloc_mw);
2905 	SET_DEVICE_OP(dev_ops, alloc_pd);
2906 	SET_DEVICE_OP(dev_ops, alloc_rdma_netdev);
2907 	SET_DEVICE_OP(dev_ops, alloc_ucontext);
2908 	SET_DEVICE_OP(dev_ops, alloc_xrcd);
2909 	SET_DEVICE_OP(dev_ops, attach_mcast);
2910 	SET_DEVICE_OP(dev_ops, check_mr_status);
2911 	SET_DEVICE_OP(dev_ops, counter_alloc_stats);
2912 	SET_DEVICE_OP(dev_ops, counter_bind_qp);
2913 	SET_DEVICE_OP(dev_ops, counter_dealloc);
2914 	SET_DEVICE_OP(dev_ops, counter_init);
2915 	SET_DEVICE_OP(dev_ops, counter_unbind_qp);
2916 	SET_DEVICE_OP(dev_ops, counter_update_stats);
2917 	SET_DEVICE_OP(dev_ops, create_ah);
2918 	SET_DEVICE_OP(dev_ops, create_counters);
2919 	SET_DEVICE_OP(dev_ops, create_cq);
2920 	SET_DEVICE_OP(dev_ops, create_comp_cntr);
2921 	SET_DEVICE_OP(dev_ops, create_user_cq);
2922 	SET_DEVICE_OP(dev_ops, create_flow);
2923 	SET_DEVICE_OP(dev_ops, create_qp);
2924 	SET_DEVICE_OP(dev_ops, create_rwq_ind_table);
2925 	SET_DEVICE_OP(dev_ops, create_srq);
2926 	SET_DEVICE_OP(dev_ops, create_user_ah);
2927 	SET_DEVICE_OP(dev_ops, create_wq);
2928 	SET_DEVICE_OP(dev_ops, dealloc_dm);
2929 	SET_DEVICE_OP(dev_ops, dealloc_dmah);
2930 	SET_DEVICE_OP(dev_ops, dealloc_driver);
2931 	SET_DEVICE_OP(dev_ops, dealloc_mw);
2932 	SET_DEVICE_OP(dev_ops, dealloc_pd);
2933 	SET_DEVICE_OP(dev_ops, dealloc_ucontext);
2934 	SET_DEVICE_OP(dev_ops, dealloc_xrcd);
2935 	SET_DEVICE_OP(dev_ops, del_gid);
2936 	SET_DEVICE_OP(dev_ops, del_sub_dev);
2937 	SET_DEVICE_OP(dev_ops, dereg_mr);
2938 	SET_DEVICE_OP(dev_ops, destroy_ah);
2939 	SET_DEVICE_OP(dev_ops, destroy_counters);
2940 	SET_DEVICE_OP(dev_ops, destroy_cq);
2941 	SET_DEVICE_OP(dev_ops, destroy_comp_cntr);
2942 	SET_DEVICE_OP(dev_ops, destroy_flow);
2943 	SET_DEVICE_OP(dev_ops, destroy_flow_action);
2944 	SET_DEVICE_OP(dev_ops, destroy_qp);
2945 	SET_DEVICE_OP(dev_ops, destroy_rwq_ind_table);
2946 	SET_DEVICE_OP(dev_ops, destroy_srq);
2947 	SET_DEVICE_OP(dev_ops, destroy_wq);
2948 	SET_DEVICE_OP(dev_ops, device_group);
2949 	SET_DEVICE_OP(dev_ops, detach_mcast);
2950 	SET_DEVICE_OP(dev_ops, disassociate_ucontext);
2951 	SET_DEVICE_OP(dev_ops, drain_rq);
2952 	SET_DEVICE_OP(dev_ops, drain_sq);
2953 	SET_DEVICE_OP(dev_ops, enable_driver);
2954 	SET_DEVICE_OP(dev_ops, fill_res_cm_id_entry);
2955 	SET_DEVICE_OP(dev_ops, fill_res_cq_entry);
2956 	SET_DEVICE_OP(dev_ops, fill_res_cq_entry_raw);
2957 	SET_DEVICE_OP(dev_ops, fill_res_mr_entry);
2958 	SET_DEVICE_OP(dev_ops, fill_res_mr_entry_raw);
2959 	SET_DEVICE_OP(dev_ops, fill_res_qp_entry);
2960 	SET_DEVICE_OP(dev_ops, fill_res_qp_entry_raw);
2961 	SET_DEVICE_OP(dev_ops, fill_res_srq_entry);
2962 	SET_DEVICE_OP(dev_ops, fill_res_srq_entry_raw);
2963 	SET_DEVICE_OP(dev_ops, fill_stat_mr_entry);
2964 	SET_DEVICE_OP(dev_ops, get_dev_fw_str);
2965 	SET_DEVICE_OP(dev_ops, get_dma_mr);
2966 	SET_DEVICE_OP(dev_ops, get_hw_stats);
2967 	SET_DEVICE_OP(dev_ops, get_link_layer);
2968 	SET_DEVICE_OP(dev_ops, get_netdev);
2969 	SET_DEVICE_OP(dev_ops, get_numa_node);
2970 	SET_DEVICE_OP(dev_ops, get_port_immutable);
2971 	SET_DEVICE_OP(dev_ops, get_vf_config);
2972 	SET_DEVICE_OP(dev_ops, get_vf_guid);
2973 	SET_DEVICE_OP(dev_ops, get_vf_stats);
2974 	SET_DEVICE_OP(dev_ops, iw_accept);
2975 	SET_DEVICE_OP(dev_ops, iw_add_ref);
2976 	SET_DEVICE_OP(dev_ops, iw_connect);
2977 	SET_DEVICE_OP(dev_ops, iw_create_listen);
2978 	SET_DEVICE_OP(dev_ops, iw_destroy_listen);
2979 	SET_DEVICE_OP(dev_ops, iw_get_qp);
2980 	SET_DEVICE_OP(dev_ops, iw_reject);
2981 	SET_DEVICE_OP(dev_ops, iw_rem_ref);
2982 	SET_DEVICE_OP(dev_ops, map_mr_sg);
2983 	SET_DEVICE_OP(dev_ops, map_mr_sg_pi);
2984 	SET_DEVICE_OP(dev_ops, mmap);
2985 	SET_DEVICE_OP(dev_ops, mmap_get_pfns);
2986 	SET_DEVICE_OP(dev_ops, mmap_free);
2987 	SET_DEVICE_OP(dev_ops, modify_ah);
2988 	SET_DEVICE_OP(dev_ops, modify_cq);
2989 	SET_DEVICE_OP(dev_ops, modify_device);
2990 	SET_DEVICE_OP(dev_ops, modify_hw_stat);
2991 	SET_DEVICE_OP(dev_ops, modify_port);
2992 	SET_DEVICE_OP(dev_ops, modify_qp);
2993 	SET_DEVICE_OP(dev_ops, qp_attach_comp_cntr);
2994 	SET_DEVICE_OP(dev_ops, modify_srq);
2995 	SET_DEVICE_OP(dev_ops, modify_wq);
2996 	SET_DEVICE_OP(dev_ops, peek_cq);
2997 	SET_DEVICE_OP(dev_ops, pgoff_to_mmap_entry);
2998 	SET_DEVICE_OP(dev_ops, pre_destroy_cq);
2999 	SET_DEVICE_OP(dev_ops, poll_cq);
3000 	SET_DEVICE_OP(dev_ops, port_groups);
3001 	SET_DEVICE_OP(dev_ops, post_destroy_cq);
3002 	SET_DEVICE_OP(dev_ops, post_recv);
3003 	SET_DEVICE_OP(dev_ops, post_send);
3004 	SET_DEVICE_OP(dev_ops, post_srq_recv);
3005 	SET_DEVICE_OP(dev_ops, process_mad);
3006 	SET_DEVICE_OP(dev_ops, query_ah);
3007 	SET_DEVICE_OP(dev_ops, query_comp_cntr_caps);
3008 	SET_DEVICE_OP(dev_ops, query_device);
3009 	SET_DEVICE_OP(dev_ops, query_gid);
3010 	SET_DEVICE_OP(dev_ops, query_pkey);
3011 	SET_DEVICE_OP(dev_ops, query_port);
3012 	SET_DEVICE_OP(dev_ops, query_port_speed);
3013 	SET_DEVICE_OP(dev_ops, query_qp);
3014 	SET_DEVICE_OP(dev_ops, query_srq);
3015 	SET_DEVICE_OP(dev_ops, query_ucontext);
3016 	SET_DEVICE_OP(dev_ops, rdma_netdev_get_params);
3017 	SET_DEVICE_OP(dev_ops, read_counters);
3018 	SET_DEVICE_OP(dev_ops, read_comp_cntr);
3019 	SET_DEVICE_OP(dev_ops, reg_dm_mr);
3020 	SET_DEVICE_OP(dev_ops, reg_user_mr);
3021 	SET_DEVICE_OP(dev_ops, reg_user_mr_dmabuf);
3022 	SET_DEVICE_OP(dev_ops, req_notify_cq);
3023 	SET_DEVICE_OP(dev_ops, rereg_user_mr);
3024 	SET_DEVICE_OP(dev_ops, resize_user_cq);
3025 	SET_DEVICE_OP(dev_ops, modify_comp_cntr);
3026 	SET_DEVICE_OP(dev_ops, set_vf_guid);
3027 	SET_DEVICE_OP(dev_ops, set_vf_link_state);
3028 	SET_DEVICE_OP(dev_ops, ufile_hw_cleanup);
3029 	SET_DEVICE_OP(dev_ops, report_port_event);
3030 
3031 	SET_OBJ_SIZE(dev_ops, ib_ah);
3032 	SET_OBJ_SIZE(dev_ops, ib_counters);
3033 	SET_OBJ_SIZE(dev_ops, ib_cq);
3034 	SET_OBJ_SIZE(dev_ops, ib_comp_cntr);
3035 	SET_OBJ_SIZE(dev_ops, ib_dmah);
3036 	SET_OBJ_SIZE(dev_ops, ib_mw);
3037 	SET_OBJ_SIZE(dev_ops, ib_pd);
3038 	SET_OBJ_SIZE(dev_ops, ib_qp);
3039 	SET_OBJ_SIZE(dev_ops, ib_rwq_ind_table);
3040 	SET_OBJ_SIZE(dev_ops, ib_srq);
3041 	SET_OBJ_SIZE(dev_ops, ib_ucontext);
3042 	SET_OBJ_SIZE(dev_ops, ib_xrcd);
3043 	SET_OBJ_SIZE(dev_ops, rdma_counter);
3044 }
3045 EXPORT_SYMBOL(ib_set_device_ops);
3046 
3047 int ib_add_sub_device(struct ib_device *parent,
3048 		      enum rdma_nl_dev_type type,
3049 		      const char *name)
3050 {
3051 	struct ib_device *sub;
3052 	int ret = 0;
3053 
3054 	if (!parent->ops.add_sub_dev || !parent->ops.del_sub_dev)
3055 		return -EOPNOTSUPP;
3056 
3057 	if (!ib_device_try_get(parent))
3058 		return -EINVAL;
3059 
3060 	sub = parent->ops.add_sub_dev(parent, type, name);
3061 	if (IS_ERR(sub)) {
3062 		ib_device_put(parent);
3063 		return PTR_ERR(sub);
3064 	}
3065 
3066 	sub->type = type;
3067 	sub->parent = parent;
3068 
3069 	mutex_lock(&parent->subdev_lock);
3070 	list_add_tail(&parent->subdev_list_head, &sub->subdev_list);
3071 	mutex_unlock(&parent->subdev_lock);
3072 
3073 	return ret;
3074 }
3075 
3076 int ib_del_sub_device_and_put(struct ib_device *sub)
3077 {
3078 	struct ib_device *parent = sub->parent;
3079 
3080 	if (!parent) {
3081 		ib_device_put(sub);
3082 		return -EOPNOTSUPP;
3083 	}
3084 
3085 	mutex_lock(&parent->subdev_lock);
3086 	list_del(&sub->subdev_list);
3087 	mutex_unlock(&parent->subdev_lock);
3088 
3089 	ib_device_put(sub);
3090 	parent->ops.del_sub_dev(sub);
3091 	ib_device_put(parent);
3092 
3093 	return 0;
3094 }
3095 
3096 #ifdef CONFIG_INFINIBAND_VIRT_DMA
3097 int ib_dma_virt_map_sg(struct ib_device *dev, struct scatterlist *sg, int nents)
3098 {
3099 	struct scatterlist *s;
3100 	int i;
3101 
3102 	for_each_sg(sg, s, nents, i) {
3103 		sg_dma_address(s) = (uintptr_t)sg_virt(s);
3104 		sg_dma_len(s) = s->length;
3105 	}
3106 	return nents;
3107 }
3108 EXPORT_SYMBOL(ib_dma_virt_map_sg);
3109 #endif /* CONFIG_INFINIBAND_VIRT_DMA */
3110 
3111 static const struct rdma_nl_cbs ibnl_ls_cb_table[RDMA_NL_LS_NUM_OPS] = {
3112 	[RDMA_NL_LS_OP_RESOLVE] = {
3113 		.doit = ib_nl_handle_resolve_resp,
3114 		.flags = RDMA_NL_ADMIN_PERM,
3115 	},
3116 	[RDMA_NL_LS_OP_SET_TIMEOUT] = {
3117 		.doit = ib_nl_handle_set_timeout,
3118 		.flags = RDMA_NL_ADMIN_PERM,
3119 	},
3120 	[RDMA_NL_LS_OP_IP_RESOLVE] = {
3121 		.doit = ib_nl_handle_ip_res_resp,
3122 		.flags = RDMA_NL_ADMIN_PERM,
3123 	},
3124 };
3125 
3126 void ib_dispatch_port_state_event(struct ib_device *ibdev, struct net_device *ndev)
3127 {
3128 	enum ib_port_state curr_state;
3129 	struct ib_event ibevent = {};
3130 	u32 port;
3131 
3132 	if (ib_query_netdev_port(ibdev, ndev, &port))
3133 		return;
3134 
3135 	curr_state = ib_get_curr_port_state(ndev);
3136 
3137 	write_lock_irq(&ibdev->cache_lock);
3138 	if (ibdev->port_data[port].cache.last_port_state == curr_state) {
3139 		write_unlock_irq(&ibdev->cache_lock);
3140 		return;
3141 	}
3142 	ibdev->port_data[port].cache.last_port_state = curr_state;
3143 	write_unlock_irq(&ibdev->cache_lock);
3144 
3145 	ibevent.event = (curr_state == IB_PORT_DOWN) ?
3146 					IB_EVENT_PORT_ERR : IB_EVENT_PORT_ACTIVE;
3147 	ibevent.device = ibdev;
3148 	ibevent.element.port_num = port;
3149 	ib_dispatch_event(&ibevent);
3150 }
3151 EXPORT_SYMBOL(ib_dispatch_port_state_event);
3152 
3153 static void handle_port_event(struct net_device *ndev, unsigned long event)
3154 {
3155 	struct ib_device *ibdev;
3156 
3157 	/* Currently, link events in bonding scenarios are still
3158 	 * reported by drivers that support bonding.
3159 	 */
3160 	if (netif_is_lag_master(ndev) || netif_is_lag_port(ndev))
3161 		return;
3162 
3163 	ibdev = ib_device_get_by_netdev(ndev, RDMA_DRIVER_UNKNOWN);
3164 	if (!ibdev)
3165 		return;
3166 
3167 	if (ibdev->ops.report_port_event) {
3168 		ibdev->ops.report_port_event(ibdev, ndev, event);
3169 		goto put_ibdev;
3170 	}
3171 
3172 	ib_dispatch_port_state_event(ibdev, ndev);
3173 
3174 put_ibdev:
3175 	ib_device_put(ibdev);
3176 };
3177 
3178 static int ib_netdevice_event(struct notifier_block *this,
3179 			      unsigned long event, void *ptr)
3180 {
3181 	struct net_device *ndev = netdev_notifier_info_to_dev(ptr);
3182 	struct ib_device *ibdev;
3183 	u32 port;
3184 
3185 	switch (event) {
3186 	case NETDEV_CHANGENAME:
3187 		ibdev = ib_device_get_by_netdev(ndev, RDMA_DRIVER_UNKNOWN);
3188 		if (!ibdev)
3189 			return NOTIFY_DONE;
3190 
3191 		if (ib_query_netdev_port(ibdev, ndev, &port)) {
3192 			ib_device_put(ibdev);
3193 			break;
3194 		}
3195 
3196 		rdma_nl_notify_event(ibdev, port, RDMA_NETDEV_RENAME_EVENT);
3197 		ib_device_put(ibdev);
3198 		break;
3199 
3200 	case NETDEV_UP:
3201 	case NETDEV_CHANGE:
3202 	case NETDEV_DOWN:
3203 		handle_port_event(ndev, event);
3204 		break;
3205 
3206 	default:
3207 		break;
3208 	}
3209 
3210 	return NOTIFY_DONE;
3211 }
3212 
3213 static struct notifier_block nb_netdevice = {
3214 	.notifier_call = ib_netdevice_event,
3215 };
3216 
3217 static int __init ib_core_init(void)
3218 {
3219 	int ret = -ENOMEM;
3220 
3221 	ib_wq = alloc_workqueue("infiniband", WQ_PERCPU, 0);
3222 	if (!ib_wq)
3223 		return -ENOMEM;
3224 
3225 	ib_unreg_wq = alloc_workqueue("ib-unreg-wq", WQ_UNBOUND,
3226 				      WQ_UNBOUND_MAX_ACTIVE);
3227 	if (!ib_unreg_wq)
3228 		goto err;
3229 
3230 	ib_comp_wq = alloc_workqueue("ib-comp-wq",
3231 			WQ_HIGHPRI | WQ_MEM_RECLAIM | WQ_SYSFS | WQ_PERCPU, 0);
3232 	if (!ib_comp_wq)
3233 		goto err_unbound;
3234 
3235 	ib_comp_unbound_wq =
3236 		alloc_workqueue("ib-comp-unb-wq",
3237 				WQ_UNBOUND | WQ_HIGHPRI | WQ_MEM_RECLAIM |
3238 				WQ_SYSFS, WQ_UNBOUND_MAX_ACTIVE);
3239 	if (!ib_comp_unbound_wq)
3240 		goto err_comp;
3241 
3242 	ret = class_register(&ib_class);
3243 	if (ret) {
3244 		pr_warn("Couldn't create InfiniBand device class\n");
3245 		goto err_comp_unbound;
3246 	}
3247 
3248 	rdma_nl_init();
3249 
3250 	ret = addr_init();
3251 	if (ret) {
3252 		pr_warn("Couldn't init IB address resolution\n");
3253 		goto err_ibnl;
3254 	}
3255 
3256 	ret = ib_mad_init();
3257 	if (ret) {
3258 		pr_warn("Couldn't init IB MAD\n");
3259 		goto err_addr;
3260 	}
3261 
3262 	ret = ib_sa_init();
3263 	if (ret) {
3264 		pr_warn("Couldn't init SA\n");
3265 		goto err_mad;
3266 	}
3267 
3268 	ret = register_blocking_lsm_notifier(&ibdev_lsm_nb);
3269 	if (ret) {
3270 		pr_warn("Couldn't register LSM notifier. ret %d\n", ret);
3271 		goto err_sa;
3272 	}
3273 
3274 	ret = register_pernet_device(&rdma_dev_net_ops);
3275 	if (ret) {
3276 		pr_warn("Couldn't init compat dev. ret %d\n", ret);
3277 		goto err_compat;
3278 	}
3279 
3280 	nldev_init();
3281 	rdma_nl_register(RDMA_NL_LS, ibnl_ls_cb_table);
3282 	ret = roce_gid_mgmt_init();
3283 	if (ret) {
3284 		pr_warn("Couldn't init RoCE GID management\n");
3285 		goto err_parent;
3286 	}
3287 
3288 	register_netdevice_notifier(&nb_netdevice);
3289 
3290 	return 0;
3291 
3292 err_parent:
3293 	rdma_nl_unregister(RDMA_NL_LS);
3294 	nldev_exit();
3295 	unregister_pernet_device(&rdma_dev_net_ops);
3296 err_compat:
3297 	unregister_blocking_lsm_notifier(&ibdev_lsm_nb);
3298 err_sa:
3299 	ib_sa_cleanup();
3300 err_mad:
3301 	ib_mad_cleanup();
3302 err_addr:
3303 	addr_cleanup();
3304 err_ibnl:
3305 	class_unregister(&ib_class);
3306 err_comp_unbound:
3307 	destroy_workqueue(ib_comp_unbound_wq);
3308 err_comp:
3309 	destroy_workqueue(ib_comp_wq);
3310 err_unbound:
3311 	destroy_workqueue(ib_unreg_wq);
3312 err:
3313 	destroy_workqueue(ib_wq);
3314 	return ret;
3315 }
3316 
3317 static void __exit ib_core_cleanup(void)
3318 {
3319 	unregister_netdevice_notifier(&nb_netdevice);
3320 	roce_gid_mgmt_cleanup();
3321 	rdma_nl_unregister(RDMA_NL_LS);
3322 	nldev_exit();
3323 	unregister_pernet_device(&rdma_dev_net_ops);
3324 	unregister_blocking_lsm_notifier(&ibdev_lsm_nb);
3325 	ib_sa_cleanup();
3326 	ib_mad_cleanup();
3327 	addr_cleanup();
3328 	rdma_nl_exit();
3329 	class_unregister(&ib_class);
3330 	destroy_workqueue(ib_comp_unbound_wq);
3331 	destroy_workqueue(ib_comp_wq);
3332 	/* Make sure that any pending umem accounting work is done. */
3333 	destroy_workqueue(ib_wq);
3334 	destroy_workqueue(ib_unreg_wq);
3335 	rcu_barrier();
3336 	WARN_ON(!xa_empty(&clients));
3337 	WARN_ON(!xa_empty(&devices));
3338 }
3339 
3340 MODULE_ALIAS_RDMA_NETLINK(RDMA_NL_LS, 4);
3341 
3342 /* ib core relies on netdev stack to first register net_ns_type_operations
3343  * ns kobject type before ib_core initialization.
3344  */
3345 fs_initcall(ib_core_init);
3346 module_exit(ib_core_cleanup);
3347