2981 lines · c
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 two6 * licenses. You may choose to be licensed under the terms of the GNU7 * General Public License (GPL) Version 2, available from the file8 * COPYING in the main directory of this source tree, or the9 * OpenIB.org BSD license below:10 *11 * Redistribution and use in source and binary forms, with or12 * without modification, are permitted provided that the following13 * conditions are met:14 *15 * - Redistributions of source code must retain the above16 * copyright notice, this list of conditions and the following17 * disclaimer.18 *19 * - Redistributions in binary form must reproduce the above20 * copyright notice, this list of conditions and the following21 * disclaimer in the documentation and/or other materials22 * 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 OF26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE31 * 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 <rdma/rdma_netlink.h>46#include <rdma/ib_addr.h>47#include <rdma/ib_cache.h>48#include <rdma/rdma_counter.h>49 50#include "core_priv.h"51#include "restrack.h"52 53MODULE_AUTHOR("Roland Dreier");54MODULE_DESCRIPTION("core kernel InfiniBand API");55MODULE_LICENSE("Dual BSD/GPL");56 57struct workqueue_struct *ib_comp_wq;58struct workqueue_struct *ib_comp_unbound_wq;59struct workqueue_struct *ib_wq;60EXPORT_SYMBOL_GPL(ib_wq);61static struct workqueue_struct *ib_unreg_wq;62 63/*64 * Each of the three rwsem locks (devices, clients, client_data) protects the65 * xarray of the same name. Specifically it allows the caller to assert that66 * the MARK will/will not be changing under the lock, and for devices and67 * clients, that the value in the xarray is still a valid pointer. Change of68 * the MARK is linked to the object state, so holding the lock and testing the69 * MARK also asserts that the contained object is in a certain state.70 *71 * This is used to build a two stage register/unregister flow where objects72 * can continue to be in the xarray even though they are still in progress to73 * register/unregister.74 *75 * The xarray itself provides additional locking, and restartable iteration,76 * which is also relied on.77 *78 * Locks should not be nested, with the exception of client_data, which is79 * allowed to nest under the read side of the other two locks.80 *81 * The devices_rwsem also protects the device name list, any change or82 * assignment of device name must also hold the write side to guarantee unique83 * names.84 */85 86/*87 * devices contains devices that have had their names assigned. The88 * devices may not be registered. Users that care about the registration89 * status need to call ib_device_try_get() on the device to ensure it is90 * registered, and keep it registered, for the required duration.91 *92 */93static DEFINE_XARRAY_FLAGS(devices, XA_FLAGS_ALLOC);94static DECLARE_RWSEM(devices_rwsem);95#define DEVICE_REGISTERED XA_MARK_196 97static u32 highest_client_id;98#define CLIENT_REGISTERED XA_MARK_199static DEFINE_XARRAY_FLAGS(clients, XA_FLAGS_ALLOC);100static DECLARE_RWSEM(clients_rwsem);101 102static void ib_client_put(struct ib_client *client)103{104 if (refcount_dec_and_test(&client->uses))105 complete(&client->uses_zero);106}107 108/*109 * If client_data is registered then the corresponding client must also still110 * be registered.111 */112#define CLIENT_DATA_REGISTERED XA_MARK_1113 114unsigned int rdma_dev_net_id;115 116/*117 * A list of net namespaces is maintained in an xarray. This is necessary118 * because we can't get the locking right using the existing net ns list. We119 * would require a init_net callback after the list is updated.120 */121static DEFINE_XARRAY_FLAGS(rdma_nets, XA_FLAGS_ALLOC);122/*123 * rwsem to protect accessing the rdma_nets xarray entries.124 */125static DECLARE_RWSEM(rdma_nets_rwsem);126 127bool ib_devices_shared_netns = true;128module_param_named(netns_mode, ib_devices_shared_netns, bool, 0444);129MODULE_PARM_DESC(netns_mode,130 "Share device among net namespaces; default=1 (shared)");131/**132 * rdma_dev_access_netns() - Return whether an rdma device can be accessed133 * from a specified net namespace or not.134 * @dev: Pointer to rdma device which needs to be checked135 * @net: Pointer to net namesapce for which access to be checked136 *137 * When the rdma device is in shared mode, it ignores the net namespace.138 * When the rdma device is exclusive to a net namespace, rdma device net139 * namespace is checked against the specified one.140 */141bool rdma_dev_access_netns(const struct ib_device *dev, const struct net *net)142{143 return (ib_devices_shared_netns ||144 net_eq(read_pnet(&dev->coredev.rdma_net), net));145}146EXPORT_SYMBOL(rdma_dev_access_netns);147 148/*149 * xarray has this behavior where it won't iterate over NULL values stored in150 * allocated arrays. So we need our own iterator to see all values stored in151 * the array. This does the same thing as xa_for_each except that it also152 * returns NULL valued entries if the array is allocating. Simplified to only153 * work on simple xarrays.154 */155static void *xan_find_marked(struct xarray *xa, unsigned long *indexp,156 xa_mark_t filter)157{158 XA_STATE(xas, xa, *indexp);159 void *entry;160 161 rcu_read_lock();162 do {163 entry = xas_find_marked(&xas, ULONG_MAX, filter);164 if (xa_is_zero(entry))165 break;166 } while (xas_retry(&xas, entry));167 rcu_read_unlock();168 169 if (entry) {170 *indexp = xas.xa_index;171 if (xa_is_zero(entry))172 return NULL;173 return entry;174 }175 return XA_ERROR(-ENOENT);176}177#define xan_for_each_marked(xa, index, entry, filter) \178 for (index = 0, entry = xan_find_marked(xa, &(index), filter); \179 !xa_is_err(entry); \180 (index)++, entry = xan_find_marked(xa, &(index), filter))181 182/* RCU hash table mapping netdevice pointers to struct ib_port_data */183static DEFINE_SPINLOCK(ndev_hash_lock);184static DECLARE_HASHTABLE(ndev_hash, 5);185 186static void free_netdevs(struct ib_device *ib_dev);187static void ib_unregister_work(struct work_struct *work);188static void __ib_unregister_device(struct ib_device *device);189static int ib_security_change(struct notifier_block *nb, unsigned long event,190 void *lsm_data);191static void ib_policy_change_task(struct work_struct *work);192static DECLARE_WORK(ib_policy_change_work, ib_policy_change_task);193 194static void __ibdev_printk(const char *level, const struct ib_device *ibdev,195 struct va_format *vaf)196{197 if (ibdev && ibdev->dev.parent)198 dev_printk_emit(level[1] - '0',199 ibdev->dev.parent,200 "%s %s %s: %pV",201 dev_driver_string(ibdev->dev.parent),202 dev_name(ibdev->dev.parent),203 dev_name(&ibdev->dev),204 vaf);205 else if (ibdev)206 printk("%s%s: %pV",207 level, dev_name(&ibdev->dev), vaf);208 else209 printk("%s(NULL ib_device): %pV", level, vaf);210}211 212void ibdev_printk(const char *level, const struct ib_device *ibdev,213 const char *format, ...)214{215 struct va_format vaf;216 va_list args;217 218 va_start(args, format);219 220 vaf.fmt = format;221 vaf.va = &args;222 223 __ibdev_printk(level, ibdev, &vaf);224 225 va_end(args);226}227EXPORT_SYMBOL(ibdev_printk);228 229#define define_ibdev_printk_level(func, level) \230void func(const struct ib_device *ibdev, const char *fmt, ...) \231{ \232 struct va_format vaf; \233 va_list args; \234 \235 va_start(args, fmt); \236 \237 vaf.fmt = fmt; \238 vaf.va = &args; \239 \240 __ibdev_printk(level, ibdev, &vaf); \241 \242 va_end(args); \243} \244EXPORT_SYMBOL(func);245 246define_ibdev_printk_level(ibdev_emerg, KERN_EMERG);247define_ibdev_printk_level(ibdev_alert, KERN_ALERT);248define_ibdev_printk_level(ibdev_crit, KERN_CRIT);249define_ibdev_printk_level(ibdev_err, KERN_ERR);250define_ibdev_printk_level(ibdev_warn, KERN_WARNING);251define_ibdev_printk_level(ibdev_notice, KERN_NOTICE);252define_ibdev_printk_level(ibdev_info, KERN_INFO);253 254static struct notifier_block ibdev_lsm_nb = {255 .notifier_call = ib_security_change,256};257 258static int rdma_dev_change_netns(struct ib_device *device, struct net *cur_net,259 struct net *net);260 261/* Pointer to the RCU head at the start of the ib_port_data array */262struct ib_port_data_rcu {263 struct rcu_head rcu_head;264 struct ib_port_data pdata[];265};266 267static void ib_device_check_mandatory(struct ib_device *device)268{269#define IB_MANDATORY_FUNC(x) { offsetof(struct ib_device_ops, x), #x }270 static const struct {271 size_t offset;272 char *name;273 } mandatory_table[] = {274 IB_MANDATORY_FUNC(query_device),275 IB_MANDATORY_FUNC(query_port),276 IB_MANDATORY_FUNC(alloc_pd),277 IB_MANDATORY_FUNC(dealloc_pd),278 IB_MANDATORY_FUNC(create_qp),279 IB_MANDATORY_FUNC(modify_qp),280 IB_MANDATORY_FUNC(destroy_qp),281 IB_MANDATORY_FUNC(post_send),282 IB_MANDATORY_FUNC(post_recv),283 IB_MANDATORY_FUNC(create_cq),284 IB_MANDATORY_FUNC(destroy_cq),285 IB_MANDATORY_FUNC(poll_cq),286 IB_MANDATORY_FUNC(req_notify_cq),287 IB_MANDATORY_FUNC(get_dma_mr),288 IB_MANDATORY_FUNC(reg_user_mr),289 IB_MANDATORY_FUNC(dereg_mr),290 IB_MANDATORY_FUNC(get_port_immutable)291 };292 int i;293 294 device->kverbs_provider = true;295 for (i = 0; i < ARRAY_SIZE(mandatory_table); ++i) {296 if (!*(void **) ((void *) &device->ops +297 mandatory_table[i].offset)) {298 device->kverbs_provider = false;299 break;300 }301 }302}303 304/*305 * Caller must perform ib_device_put() to return the device reference count306 * when ib_device_get_by_index() returns valid device pointer.307 */308struct ib_device *ib_device_get_by_index(const struct net *net, u32 index)309{310 struct ib_device *device;311 312 down_read(&devices_rwsem);313 device = xa_load(&devices, index);314 if (device) {315 if (!rdma_dev_access_netns(device, net)) {316 device = NULL;317 goto out;318 }319 320 if (!ib_device_try_get(device))321 device = NULL;322 }323out:324 up_read(&devices_rwsem);325 return device;326}327 328/**329 * ib_device_put - Release IB device reference330 * @device: device whose reference to be released331 *332 * ib_device_put() releases reference to the IB device to allow it to be333 * unregistered and eventually free.334 */335void ib_device_put(struct ib_device *device)336{337 if (refcount_dec_and_test(&device->refcount))338 complete(&device->unreg_completion);339}340EXPORT_SYMBOL(ib_device_put);341 342static struct ib_device *__ib_device_get_by_name(const char *name)343{344 struct ib_device *device;345 unsigned long index;346 347 xa_for_each (&devices, index, device)348 if (!strcmp(name, dev_name(&device->dev)))349 return device;350 351 return NULL;352}353 354/**355 * ib_device_get_by_name - Find an IB device by name356 * @name: The name to look for357 * @driver_id: The driver ID that must match (RDMA_DRIVER_UNKNOWN matches all)358 *359 * Find and hold an ib_device by its name. The caller must call360 * ib_device_put() on the returned pointer.361 */362struct ib_device *ib_device_get_by_name(const char *name,363 enum rdma_driver_id driver_id)364{365 struct ib_device *device;366 367 down_read(&devices_rwsem);368 device = __ib_device_get_by_name(name);369 if (device && driver_id != RDMA_DRIVER_UNKNOWN &&370 device->ops.driver_id != driver_id)371 device = NULL;372 373 if (device) {374 if (!ib_device_try_get(device))375 device = NULL;376 }377 up_read(&devices_rwsem);378 return device;379}380EXPORT_SYMBOL(ib_device_get_by_name);381 382static int rename_compat_devs(struct ib_device *device)383{384 struct ib_core_device *cdev;385 unsigned long index;386 int ret = 0;387 388 mutex_lock(&device->compat_devs_mutex);389 xa_for_each (&device->compat_devs, index, cdev) {390 ret = device_rename(&cdev->dev, dev_name(&device->dev));391 if (ret) {392 dev_warn(&cdev->dev,393 "Fail to rename compatdev to new name %s\n",394 dev_name(&device->dev));395 break;396 }397 }398 mutex_unlock(&device->compat_devs_mutex);399 return ret;400}401 402int ib_device_rename(struct ib_device *ibdev, const char *name)403{404 unsigned long index;405 void *client_data;406 int ret;407 408 down_write(&devices_rwsem);409 if (!strcmp(name, dev_name(&ibdev->dev))) {410 up_write(&devices_rwsem);411 return 0;412 }413 414 if (__ib_device_get_by_name(name)) {415 up_write(&devices_rwsem);416 return -EEXIST;417 }418 419 ret = device_rename(&ibdev->dev, name);420 if (ret) {421 up_write(&devices_rwsem);422 return ret;423 }424 425 strscpy(ibdev->name, name, IB_DEVICE_NAME_MAX);426 ret = rename_compat_devs(ibdev);427 428 downgrade_write(&devices_rwsem);429 down_read(&ibdev->client_data_rwsem);430 xan_for_each_marked(&ibdev->client_data, index, client_data,431 CLIENT_DATA_REGISTERED) {432 struct ib_client *client = xa_load(&clients, index);433 434 if (!client || !client->rename)435 continue;436 437 client->rename(ibdev, client_data);438 }439 up_read(&ibdev->client_data_rwsem);440 up_read(&devices_rwsem);441 return 0;442}443 444int ib_device_set_dim(struct ib_device *ibdev, u8 use_dim)445{446 if (use_dim > 1)447 return -EINVAL;448 ibdev->use_cq_dim = use_dim;449 450 return 0;451}452 453static int alloc_name(struct ib_device *ibdev, const char *name)454{455 struct ib_device *device;456 unsigned long index;457 struct ida inuse;458 int rc;459 int i;460 461 lockdep_assert_held_write(&devices_rwsem);462 ida_init(&inuse);463 xa_for_each (&devices, index, device) {464 char buf[IB_DEVICE_NAME_MAX];465 466 if (sscanf(dev_name(&device->dev), name, &i) != 1)467 continue;468 if (i < 0 || i >= INT_MAX)469 continue;470 snprintf(buf, sizeof buf, name, i);471 if (strcmp(buf, dev_name(&device->dev)) != 0)472 continue;473 474 rc = ida_alloc_range(&inuse, i, i, GFP_KERNEL);475 if (rc < 0)476 goto out;477 }478 479 rc = ida_alloc(&inuse, GFP_KERNEL);480 if (rc < 0)481 goto out;482 483 rc = dev_set_name(&ibdev->dev, name, rc);484out:485 ida_destroy(&inuse);486 return rc;487}488 489static void ib_device_release(struct device *device)490{491 struct ib_device *dev = container_of(device, struct ib_device, dev);492 493 free_netdevs(dev);494 WARN_ON(refcount_read(&dev->refcount));495 if (dev->hw_stats_data)496 ib_device_release_hw_stats(dev->hw_stats_data);497 if (dev->port_data) {498 ib_cache_release_one(dev);499 ib_security_release_port_pkey_list(dev);500 rdma_counter_release(dev);501 kfree_rcu(container_of(dev->port_data, struct ib_port_data_rcu,502 pdata[0]),503 rcu_head);504 }505 506 mutex_destroy(&dev->subdev_lock);507 mutex_destroy(&dev->unregistration_lock);508 mutex_destroy(&dev->compat_devs_mutex);509 510 xa_destroy(&dev->compat_devs);511 xa_destroy(&dev->client_data);512 kfree_rcu(dev, rcu_head);513}514 515static int ib_device_uevent(const struct device *device,516 struct kobj_uevent_env *env)517{518 if (add_uevent_var(env, "NAME=%s", dev_name(device)))519 return -ENOMEM;520 521 /*522 * It would be nice to pass the node GUID with the event...523 */524 525 return 0;526}527 528static const void *net_namespace(const struct device *d)529{530 const struct ib_core_device *coredev =531 container_of(d, struct ib_core_device, dev);532 533 return read_pnet(&coredev->rdma_net);534}535 536static struct class ib_class = {537 .name = "infiniband",538 .dev_release = ib_device_release,539 .dev_uevent = ib_device_uevent,540 .ns_type = &net_ns_type_operations,541 .namespace = net_namespace,542};543 544static void rdma_init_coredev(struct ib_core_device *coredev,545 struct ib_device *dev, struct net *net)546{547 /* This BUILD_BUG_ON is intended to catch layout change548 * of union of ib_core_device and device.549 * dev must be the first element as ib_core and providers550 * driver uses it. Adding anything in ib_core_device before551 * device will break this assumption.552 */553 BUILD_BUG_ON(offsetof(struct ib_device, coredev.dev) !=554 offsetof(struct ib_device, dev));555 556 coredev->dev.class = &ib_class;557 coredev->dev.groups = dev->groups;558 device_initialize(&coredev->dev);559 coredev->owner = dev;560 INIT_LIST_HEAD(&coredev->port_list);561 write_pnet(&coredev->rdma_net, net);562}563 564/**565 * _ib_alloc_device - allocate an IB device struct566 * @size:size of structure to allocate567 *568 * Low-level drivers should use ib_alloc_device() to allocate &struct569 * ib_device. @size is the size of the structure to be allocated,570 * including any private data used by the low-level driver.571 * ib_dealloc_device() must be used to free structures allocated with572 * ib_alloc_device().573 */574struct ib_device *_ib_alloc_device(size_t size)575{576 struct ib_device *device;577 unsigned int i;578 579 if (WARN_ON(size < sizeof(struct ib_device)))580 return NULL;581 582 device = kzalloc(size, GFP_KERNEL);583 if (!device)584 return NULL;585 586 if (rdma_restrack_init(device)) {587 kfree(device);588 return NULL;589 }590 591 rdma_init_coredev(&device->coredev, device, &init_net);592 593 INIT_LIST_HEAD(&device->event_handler_list);594 spin_lock_init(&device->qp_open_list_lock);595 init_rwsem(&device->event_handler_rwsem);596 mutex_init(&device->unregistration_lock);597 /*598 * client_data needs to be alloc because we don't want our mark to be599 * destroyed if the user stores NULL in the client data.600 */601 xa_init_flags(&device->client_data, XA_FLAGS_ALLOC);602 init_rwsem(&device->client_data_rwsem);603 xa_init_flags(&device->compat_devs, XA_FLAGS_ALLOC);604 mutex_init(&device->compat_devs_mutex);605 init_completion(&device->unreg_completion);606 INIT_WORK(&device->unregistration_work, ib_unregister_work);607 608 spin_lock_init(&device->cq_pools_lock);609 for (i = 0; i < ARRAY_SIZE(device->cq_pools); i++)610 INIT_LIST_HEAD(&device->cq_pools[i]);611 612 rwlock_init(&device->cache_lock);613 614 device->uverbs_cmd_mask =615 BIT_ULL(IB_USER_VERBS_CMD_ALLOC_MW) |616 BIT_ULL(IB_USER_VERBS_CMD_ALLOC_PD) |617 BIT_ULL(IB_USER_VERBS_CMD_ATTACH_MCAST) |618 BIT_ULL(IB_USER_VERBS_CMD_CLOSE_XRCD) |619 BIT_ULL(IB_USER_VERBS_CMD_CREATE_AH) |620 BIT_ULL(IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL) |621 BIT_ULL(IB_USER_VERBS_CMD_CREATE_CQ) |622 BIT_ULL(IB_USER_VERBS_CMD_CREATE_QP) |623 BIT_ULL(IB_USER_VERBS_CMD_CREATE_SRQ) |624 BIT_ULL(IB_USER_VERBS_CMD_CREATE_XSRQ) |625 BIT_ULL(IB_USER_VERBS_CMD_DEALLOC_MW) |626 BIT_ULL(IB_USER_VERBS_CMD_DEALLOC_PD) |627 BIT_ULL(IB_USER_VERBS_CMD_DEREG_MR) |628 BIT_ULL(IB_USER_VERBS_CMD_DESTROY_AH) |629 BIT_ULL(IB_USER_VERBS_CMD_DESTROY_CQ) |630 BIT_ULL(IB_USER_VERBS_CMD_DESTROY_QP) |631 BIT_ULL(IB_USER_VERBS_CMD_DESTROY_SRQ) |632 BIT_ULL(IB_USER_VERBS_CMD_DETACH_MCAST) |633 BIT_ULL(IB_USER_VERBS_CMD_GET_CONTEXT) |634 BIT_ULL(IB_USER_VERBS_CMD_MODIFY_QP) |635 BIT_ULL(IB_USER_VERBS_CMD_MODIFY_SRQ) |636 BIT_ULL(IB_USER_VERBS_CMD_OPEN_QP) |637 BIT_ULL(IB_USER_VERBS_CMD_OPEN_XRCD) |638 BIT_ULL(IB_USER_VERBS_CMD_QUERY_DEVICE) |639 BIT_ULL(IB_USER_VERBS_CMD_QUERY_PORT) |640 BIT_ULL(IB_USER_VERBS_CMD_QUERY_QP) |641 BIT_ULL(IB_USER_VERBS_CMD_QUERY_SRQ) |642 BIT_ULL(IB_USER_VERBS_CMD_REG_MR) |643 BIT_ULL(IB_USER_VERBS_CMD_REREG_MR) |644 BIT_ULL(IB_USER_VERBS_CMD_RESIZE_CQ);645 646 mutex_init(&device->subdev_lock);647 INIT_LIST_HEAD(&device->subdev_list_head);648 INIT_LIST_HEAD(&device->subdev_list);649 650 return device;651}652EXPORT_SYMBOL(_ib_alloc_device);653 654/**655 * ib_dealloc_device - free an IB device struct656 * @device:structure to free657 *658 * Free a structure allocated with ib_alloc_device().659 */660void ib_dealloc_device(struct ib_device *device)661{662 if (device->ops.dealloc_driver)663 device->ops.dealloc_driver(device);664 665 /*666 * ib_unregister_driver() requires all devices to remain in the xarray667 * while their ops are callable. The last op we call is dealloc_driver668 * above. This is needed to create a fence on op callbacks prior to669 * allowing the driver module to unload.670 */671 down_write(&devices_rwsem);672 if (xa_load(&devices, device->index) == device)673 xa_erase(&devices, device->index);674 up_write(&devices_rwsem);675 676 /* Expedite releasing netdev references */677 free_netdevs(device);678 679 WARN_ON(!xa_empty(&device->compat_devs));680 WARN_ON(!xa_empty(&device->client_data));681 WARN_ON(refcount_read(&device->refcount));682 rdma_restrack_clean(device);683 /* Balances with device_initialize */684 put_device(&device->dev);685}686EXPORT_SYMBOL(ib_dealloc_device);687 688/*689 * add_client_context() and remove_client_context() must be safe against690 * parallel calls on the same device - registration/unregistration of both the691 * device and client can be occurring in parallel.692 *693 * The routines need to be a fence, any caller must not return until the add694 * or remove is fully completed.695 */696static int add_client_context(struct ib_device *device,697 struct ib_client *client)698{699 int ret = 0;700 701 if (!device->kverbs_provider && !client->no_kverbs_req)702 return 0;703 704 down_write(&device->client_data_rwsem);705 /*706 * So long as the client is registered hold both the client and device707 * unregistration locks.708 */709 if (!refcount_inc_not_zero(&client->uses))710 goto out_unlock;711 refcount_inc(&device->refcount);712 713 /*714 * Another caller to add_client_context got here first and has already715 * completely initialized context.716 */717 if (xa_get_mark(&device->client_data, client->client_id,718 CLIENT_DATA_REGISTERED))719 goto out;720 721 ret = xa_err(xa_store(&device->client_data, client->client_id, NULL,722 GFP_KERNEL));723 if (ret)724 goto out;725 downgrade_write(&device->client_data_rwsem);726 if (client->add) {727 if (client->add(device)) {728 /*729 * If a client fails to add then the error code is730 * ignored, but we won't call any more ops on this731 * client.732 */733 xa_erase(&device->client_data, client->client_id);734 up_read(&device->client_data_rwsem);735 ib_device_put(device);736 ib_client_put(client);737 return 0;738 }739 }740 741 /* Readers shall not see a client until add has been completed */742 xa_set_mark(&device->client_data, client->client_id,743 CLIENT_DATA_REGISTERED);744 up_read(&device->client_data_rwsem);745 return 0;746 747out:748 ib_device_put(device);749 ib_client_put(client);750out_unlock:751 up_write(&device->client_data_rwsem);752 return ret;753}754 755static void remove_client_context(struct ib_device *device,756 unsigned int client_id)757{758 struct ib_client *client;759 void *client_data;760 761 down_write(&device->client_data_rwsem);762 if (!xa_get_mark(&device->client_data, client_id,763 CLIENT_DATA_REGISTERED)) {764 up_write(&device->client_data_rwsem);765 return;766 }767 client_data = xa_load(&device->client_data, client_id);768 xa_clear_mark(&device->client_data, client_id, CLIENT_DATA_REGISTERED);769 client = xa_load(&clients, client_id);770 up_write(&device->client_data_rwsem);771 772 /*773 * Notice we cannot be holding any exclusive locks when calling the774 * remove callback as the remove callback can recurse back into any775 * public functions in this module and thus try for any locks those776 * functions take.777 *778 * For this reason clients and drivers should not call the779 * unregistration functions will holdling any locks.780 */781 if (client->remove)782 client->remove(device, client_data);783 784 xa_erase(&device->client_data, client_id);785 ib_device_put(device);786 ib_client_put(client);787}788 789static int alloc_port_data(struct ib_device *device)790{791 struct ib_port_data_rcu *pdata_rcu;792 u32 port;793 794 if (device->port_data)795 return 0;796 797 /* This can only be called once the physical port range is defined */798 if (WARN_ON(!device->phys_port_cnt))799 return -EINVAL;800 801 /* Reserve U32_MAX so the logic to go over all the ports is sane */802 if (WARN_ON(device->phys_port_cnt == U32_MAX))803 return -EINVAL;804 805 /*806 * device->port_data is indexed directly by the port number to make807 * access to this data as efficient as possible.808 *809 * Therefore port_data is declared as a 1 based array with potential810 * empty slots at the beginning.811 */812 pdata_rcu = kzalloc(struct_size(pdata_rcu, pdata,813 size_add(rdma_end_port(device), 1)),814 GFP_KERNEL);815 if (!pdata_rcu)816 return -ENOMEM;817 /*818 * The rcu_head is put in front of the port data array and the stored819 * pointer is adjusted since we never need to see that member until820 * kfree_rcu.821 */822 device->port_data = pdata_rcu->pdata;823 824 rdma_for_each_port (device, port) {825 struct ib_port_data *pdata = &device->port_data[port];826 827 pdata->ib_dev = device;828 spin_lock_init(&pdata->pkey_list_lock);829 INIT_LIST_HEAD(&pdata->pkey_list);830 spin_lock_init(&pdata->netdev_lock);831 INIT_HLIST_NODE(&pdata->ndev_hash_link);832 }833 return 0;834}835 836static int verify_immutable(const struct ib_device *dev, u32 port)837{838 return WARN_ON(!rdma_cap_ib_mad(dev, port) &&839 rdma_max_mad_size(dev, port) != 0);840}841 842static int setup_port_data(struct ib_device *device)843{844 u32 port;845 int ret;846 847 ret = alloc_port_data(device);848 if (ret)849 return ret;850 851 rdma_for_each_port (device, port) {852 struct ib_port_data *pdata = &device->port_data[port];853 854 ret = device->ops.get_port_immutable(device, port,855 &pdata->immutable);856 if (ret)857 return ret;858 859 if (verify_immutable(device, port))860 return -EINVAL;861 }862 return 0;863}864 865/**866 * ib_port_immutable_read() - Read rdma port's immutable data867 * @dev: IB device868 * @port: port number whose immutable data to read. It starts with index 1 and869 * valid upto including rdma_end_port().870 */871const struct ib_port_immutable*872ib_port_immutable_read(struct ib_device *dev, unsigned int port)873{874 WARN_ON(!rdma_is_port_valid(dev, port));875 return &dev->port_data[port].immutable;876}877EXPORT_SYMBOL(ib_port_immutable_read);878 879void ib_get_device_fw_str(struct ib_device *dev, char *str)880{881 if (dev->ops.get_dev_fw_str)882 dev->ops.get_dev_fw_str(dev, str);883 else884 str[0] = '\0';885}886EXPORT_SYMBOL(ib_get_device_fw_str);887 888static void ib_policy_change_task(struct work_struct *work)889{890 struct ib_device *dev;891 unsigned long index;892 893 down_read(&devices_rwsem);894 xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED) {895 unsigned int i;896 897 rdma_for_each_port (dev, i) {898 u64 sp;899 ib_get_cached_subnet_prefix(dev, i, &sp);900 ib_security_cache_change(dev, i, sp);901 }902 }903 up_read(&devices_rwsem);904}905 906static int ib_security_change(struct notifier_block *nb, unsigned long event,907 void *lsm_data)908{909 if (event != LSM_POLICY_CHANGE)910 return NOTIFY_DONE;911 912 schedule_work(&ib_policy_change_work);913 ib_mad_agent_security_change();914 915 return NOTIFY_OK;916}917 918static void compatdev_release(struct device *dev)919{920 struct ib_core_device *cdev =921 container_of(dev, struct ib_core_device, dev);922 923 kfree(cdev);924}925 926static int add_one_compat_dev(struct ib_device *device,927 struct rdma_dev_net *rnet)928{929 struct ib_core_device *cdev;930 int ret;931 932 lockdep_assert_held(&rdma_nets_rwsem);933 if (!ib_devices_shared_netns)934 return 0;935 936 /*937 * Create and add compat device in all namespaces other than where it938 * is currently bound to.939 */940 if (net_eq(read_pnet(&rnet->net),941 read_pnet(&device->coredev.rdma_net)))942 return 0;943 944 /*945 * The first of init_net() or ib_register_device() to take the946 * compat_devs_mutex wins and gets to add the device. Others will wait947 * for completion here.948 */949 mutex_lock(&device->compat_devs_mutex);950 cdev = xa_load(&device->compat_devs, rnet->id);951 if (cdev) {952 ret = 0;953 goto done;954 }955 ret = xa_reserve(&device->compat_devs, rnet->id, GFP_KERNEL);956 if (ret)957 goto done;958 959 cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);960 if (!cdev) {961 ret = -ENOMEM;962 goto cdev_err;963 }964 965 cdev->dev.parent = device->dev.parent;966 rdma_init_coredev(cdev, device, read_pnet(&rnet->net));967 cdev->dev.release = compatdev_release;968 ret = dev_set_name(&cdev->dev, "%s", dev_name(&device->dev));969 if (ret)970 goto add_err;971 972 ret = device_add(&cdev->dev);973 if (ret)974 goto add_err;975 ret = ib_setup_port_attrs(cdev);976 if (ret)977 goto port_err;978 979 ret = xa_err(xa_store(&device->compat_devs, rnet->id,980 cdev, GFP_KERNEL));981 if (ret)982 goto insert_err;983 984 mutex_unlock(&device->compat_devs_mutex);985 return 0;986 987insert_err:988 ib_free_port_attrs(cdev);989port_err:990 device_del(&cdev->dev);991add_err:992 put_device(&cdev->dev);993cdev_err:994 xa_release(&device->compat_devs, rnet->id);995done:996 mutex_unlock(&device->compat_devs_mutex);997 return ret;998}999 1000static void remove_one_compat_dev(struct ib_device *device, u32 id)1001{1002 struct ib_core_device *cdev;1003 1004 mutex_lock(&device->compat_devs_mutex);1005 cdev = xa_erase(&device->compat_devs, id);1006 mutex_unlock(&device->compat_devs_mutex);1007 if (cdev) {1008 ib_free_port_attrs(cdev);1009 device_del(&cdev->dev);1010 put_device(&cdev->dev);1011 }1012}1013 1014static void remove_compat_devs(struct ib_device *device)1015{1016 struct ib_core_device *cdev;1017 unsigned long index;1018 1019 xa_for_each (&device->compat_devs, index, cdev)1020 remove_one_compat_dev(device, index);1021}1022 1023static int add_compat_devs(struct ib_device *device)1024{1025 struct rdma_dev_net *rnet;1026 unsigned long index;1027 int ret = 0;1028 1029 lockdep_assert_held(&devices_rwsem);1030 1031 down_read(&rdma_nets_rwsem);1032 xa_for_each (&rdma_nets, index, rnet) {1033 ret = add_one_compat_dev(device, rnet);1034 if (ret)1035 break;1036 }1037 up_read(&rdma_nets_rwsem);1038 return ret;1039}1040 1041static void remove_all_compat_devs(void)1042{1043 struct ib_compat_device *cdev;1044 struct ib_device *dev;1045 unsigned long index;1046 1047 down_read(&devices_rwsem);1048 xa_for_each (&devices, index, dev) {1049 unsigned long c_index = 0;1050 1051 /* Hold nets_rwsem so that any other thread modifying this1052 * system param can sync with this thread.1053 */1054 down_read(&rdma_nets_rwsem);1055 xa_for_each (&dev->compat_devs, c_index, cdev)1056 remove_one_compat_dev(dev, c_index);1057 up_read(&rdma_nets_rwsem);1058 }1059 up_read(&devices_rwsem);1060}1061 1062static int add_all_compat_devs(void)1063{1064 struct rdma_dev_net *rnet;1065 struct ib_device *dev;1066 unsigned long index;1067 int ret = 0;1068 1069 down_read(&devices_rwsem);1070 xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED) {1071 unsigned long net_index = 0;1072 1073 /* Hold nets_rwsem so that any other thread modifying this1074 * system param can sync with this thread.1075 */1076 down_read(&rdma_nets_rwsem);1077 xa_for_each (&rdma_nets, net_index, rnet) {1078 ret = add_one_compat_dev(dev, rnet);1079 if (ret)1080 break;1081 }1082 up_read(&rdma_nets_rwsem);1083 }1084 up_read(&devices_rwsem);1085 if (ret)1086 remove_all_compat_devs();1087 return ret;1088}1089 1090int rdma_compatdev_set(u8 enable)1091{1092 struct rdma_dev_net *rnet;1093 unsigned long index;1094 int ret = 0;1095 1096 down_write(&rdma_nets_rwsem);1097 if (ib_devices_shared_netns == enable) {1098 up_write(&rdma_nets_rwsem);1099 return 0;1100 }1101 1102 /* enable/disable of compat devices is not supported1103 * when more than default init_net exists.1104 */1105 xa_for_each (&rdma_nets, index, rnet) {1106 ret++;1107 break;1108 }1109 if (!ret)1110 ib_devices_shared_netns = enable;1111 up_write(&rdma_nets_rwsem);1112 if (ret)1113 return -EBUSY;1114 1115 if (enable)1116 ret = add_all_compat_devs();1117 else1118 remove_all_compat_devs();1119 return ret;1120}1121 1122static void rdma_dev_exit_net(struct net *net)1123{1124 struct rdma_dev_net *rnet = rdma_net_to_dev_net(net);1125 struct ib_device *dev;1126 unsigned long index;1127 int ret;1128 1129 down_write(&rdma_nets_rwsem);1130 /*1131 * Prevent the ID from being re-used and hide the id from xa_for_each.1132 */1133 ret = xa_err(xa_store(&rdma_nets, rnet->id, NULL, GFP_KERNEL));1134 WARN_ON(ret);1135 up_write(&rdma_nets_rwsem);1136 1137 down_read(&devices_rwsem);1138 xa_for_each (&devices, index, dev) {1139 get_device(&dev->dev);1140 /*1141 * Release the devices_rwsem so that pontentially blocking1142 * device_del, doesn't hold the devices_rwsem for too long.1143 */1144 up_read(&devices_rwsem);1145 1146 remove_one_compat_dev(dev, rnet->id);1147 1148 /*1149 * If the real device is in the NS then move it back to init.1150 */1151 rdma_dev_change_netns(dev, net, &init_net);1152 1153 put_device(&dev->dev);1154 down_read(&devices_rwsem);1155 }1156 up_read(&devices_rwsem);1157 1158 rdma_nl_net_exit(rnet);1159 xa_erase(&rdma_nets, rnet->id);1160}1161 1162static __net_init int rdma_dev_init_net(struct net *net)1163{1164 struct rdma_dev_net *rnet = rdma_net_to_dev_net(net);1165 unsigned long index;1166 struct ib_device *dev;1167 int ret;1168 1169 write_pnet(&rnet->net, net);1170 1171 ret = rdma_nl_net_init(rnet);1172 if (ret)1173 return ret;1174 1175 /* No need to create any compat devices in default init_net. */1176 if (net_eq(net, &init_net))1177 return 0;1178 1179 ret = xa_alloc(&rdma_nets, &rnet->id, rnet, xa_limit_32b, GFP_KERNEL);1180 if (ret) {1181 rdma_nl_net_exit(rnet);1182 return ret;1183 }1184 1185 down_read(&devices_rwsem);1186 xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED) {1187 /* Hold nets_rwsem so that netlink command cannot change1188 * system configuration for device sharing mode.1189 */1190 down_read(&rdma_nets_rwsem);1191 ret = add_one_compat_dev(dev, rnet);1192 up_read(&rdma_nets_rwsem);1193 if (ret)1194 break;1195 }1196 up_read(&devices_rwsem);1197 1198 if (ret)1199 rdma_dev_exit_net(net);1200 1201 return ret;1202}1203 1204/*1205 * Assign the unique string device name and the unique device index. This is1206 * undone by ib_dealloc_device.1207 */1208static int assign_name(struct ib_device *device, const char *name)1209{1210 static u32 last_id;1211 int ret;1212 1213 down_write(&devices_rwsem);1214 /* Assign a unique name to the device */1215 if (strchr(name, '%'))1216 ret = alloc_name(device, name);1217 else1218 ret = dev_set_name(&device->dev, name);1219 if (ret)1220 goto out;1221 1222 if (__ib_device_get_by_name(dev_name(&device->dev))) {1223 ret = -ENFILE;1224 goto out;1225 }1226 strscpy(device->name, dev_name(&device->dev), IB_DEVICE_NAME_MAX);1227 1228 ret = xa_alloc_cyclic(&devices, &device->index, device, xa_limit_31b,1229 &last_id, GFP_KERNEL);1230 if (ret > 0)1231 ret = 0;1232 1233out:1234 up_write(&devices_rwsem);1235 return ret;1236}1237 1238/*1239 * setup_device() allocates memory and sets up data that requires calling the1240 * device ops, this is the only reason these actions are not done during1241 * ib_alloc_device. It is undone by ib_dealloc_device().1242 */1243static int setup_device(struct ib_device *device)1244{1245 struct ib_udata uhw = {.outlen = 0, .inlen = 0};1246 int ret;1247 1248 ib_device_check_mandatory(device);1249 1250 ret = setup_port_data(device);1251 if (ret) {1252 dev_warn(&device->dev, "Couldn't create per-port data\n");1253 return ret;1254 }1255 1256 memset(&device->attrs, 0, sizeof(device->attrs));1257 ret = device->ops.query_device(device, &device->attrs, &uhw);1258 if (ret) {1259 dev_warn(&device->dev,1260 "Couldn't query the device attributes\n");1261 return ret;1262 }1263 1264 return 0;1265}1266 1267static void disable_device(struct ib_device *device)1268{1269 u32 cid;1270 1271 WARN_ON(!refcount_read(&device->refcount));1272 1273 down_write(&devices_rwsem);1274 xa_clear_mark(&devices, device->index, DEVICE_REGISTERED);1275 up_write(&devices_rwsem);1276 1277 /*1278 * Remove clients in LIFO order, see assign_client_id. This could be1279 * more efficient if xarray learns to reverse iterate. Since no new1280 * clients can be added to this ib_device past this point we only need1281 * the maximum possible client_id value here.1282 */1283 down_read(&clients_rwsem);1284 cid = highest_client_id;1285 up_read(&clients_rwsem);1286 while (cid) {1287 cid--;1288 remove_client_context(device, cid);1289 }1290 1291 ib_cq_pool_cleanup(device);1292 1293 /* Pairs with refcount_set in enable_device */1294 ib_device_put(device);1295 wait_for_completion(&device->unreg_completion);1296 1297 /*1298 * compat devices must be removed after device refcount drops to zero.1299 * Otherwise init_net() may add more compatdevs after removing compat1300 * devices and before device is disabled.1301 */1302 remove_compat_devs(device);1303}1304 1305/*1306 * An enabled device is visible to all clients and to all the public facing1307 * APIs that return a device pointer. This always returns with a new get, even1308 * if it fails.1309 */1310static int enable_device_and_get(struct ib_device *device)1311{1312 struct ib_client *client;1313 unsigned long index;1314 int ret = 0;1315 1316 /*1317 * One ref belongs to the xa and the other belongs to this1318 * thread. This is needed to guard against parallel unregistration.1319 */1320 refcount_set(&device->refcount, 2);1321 down_write(&devices_rwsem);1322 xa_set_mark(&devices, device->index, DEVICE_REGISTERED);1323 1324 /*1325 * By using downgrade_write() we ensure that no other thread can clear1326 * DEVICE_REGISTERED while we are completing the client setup.1327 */1328 downgrade_write(&devices_rwsem);1329 1330 if (device->ops.enable_driver) {1331 ret = device->ops.enable_driver(device);1332 if (ret)1333 goto out;1334 }1335 1336 down_read(&clients_rwsem);1337 xa_for_each_marked (&clients, index, client, CLIENT_REGISTERED) {1338 ret = add_client_context(device, client);1339 if (ret)1340 break;1341 }1342 up_read(&clients_rwsem);1343 if (!ret)1344 ret = add_compat_devs(device);1345out:1346 up_read(&devices_rwsem);1347 return ret;1348}1349 1350static void prevent_dealloc_device(struct ib_device *ib_dev)1351{1352}1353 1354static void ib_device_notify_register(struct ib_device *device)1355{1356 struct net_device *netdev;1357 u32 port;1358 int ret;1359 1360 ret = rdma_nl_notify_event(device, 0, RDMA_REGISTER_EVENT);1361 if (ret)1362 return;1363 1364 rdma_for_each_port(device, port) {1365 netdev = ib_device_get_netdev(device, port);1366 if (!netdev)1367 continue;1368 1369 ret = rdma_nl_notify_event(device, port,1370 RDMA_NETDEV_ATTACH_EVENT);1371 dev_put(netdev);1372 if (ret)1373 return;1374 }1375}1376 1377/**1378 * ib_register_device - Register an IB device with IB core1379 * @device: Device to register1380 * @name: unique string device name. This may include a '%' which will1381 * cause a unique index to be added to the passed device name.1382 * @dma_device: pointer to a DMA-capable device. If %NULL, then the IB1383 * device will be used. In this case the caller should fully1384 * setup the ibdev for DMA. This usually means using dma_virt_ops.1385 *1386 * Low-level drivers use ib_register_device() to register their1387 * devices with the IB core. All registered clients will receive a1388 * callback for each device that is added. @device must be allocated1389 * with ib_alloc_device().1390 *1391 * If the driver uses ops.dealloc_driver and calls any ib_unregister_device()1392 * asynchronously then the device pointer may become freed as soon as this1393 * function returns.1394 */1395int ib_register_device(struct ib_device *device, const char *name,1396 struct device *dma_device)1397{1398 int ret;1399 1400 ret = assign_name(device, name);1401 if (ret)1402 return ret;1403 1404 /*1405 * If the caller does not provide a DMA capable device then the IB core1406 * will set up ib_sge and scatterlist structures that stash the kernel1407 * virtual address into the address field.1408 */1409 WARN_ON(dma_device && !dma_device->dma_parms);1410 device->dma_device = dma_device;1411 1412 ret = setup_device(device);1413 if (ret)1414 return ret;1415 1416 ret = ib_cache_setup_one(device);1417 if (ret) {1418 dev_warn(&device->dev,1419 "Couldn't set up InfiniBand P_Key/GID cache\n");1420 return ret;1421 }1422 1423 device->groups[0] = &ib_dev_attr_group;1424 device->groups[1] = device->ops.device_group;1425 ret = ib_setup_device_attrs(device);1426 if (ret)1427 goto cache_cleanup;1428 1429 ib_device_register_rdmacg(device);1430 1431 rdma_counter_init(device);1432 1433 /*1434 * Ensure that ADD uevent is not fired because it1435 * is too early amd device is not initialized yet.1436 */1437 dev_set_uevent_suppress(&device->dev, true);1438 ret = device_add(&device->dev);1439 if (ret)1440 goto cg_cleanup;1441 1442 ret = ib_setup_port_attrs(&device->coredev);1443 if (ret) {1444 dev_warn(&device->dev,1445 "Couldn't register device with driver model\n");1446 goto dev_cleanup;1447 }1448 1449 ret = enable_device_and_get(device);1450 if (ret) {1451 void (*dealloc_fn)(struct ib_device *);1452 1453 /*1454 * If we hit this error flow then we don't want to1455 * automatically dealloc the device since the caller is1456 * expected to call ib_dealloc_device() after1457 * ib_register_device() fails. This is tricky due to the1458 * possibility for a parallel unregistration along with this1459 * error flow. Since we have a refcount here we know any1460 * parallel flow is stopped in disable_device and will see the1461 * special dealloc_driver pointer, causing the responsibility to1462 * ib_dealloc_device() to revert back to this thread.1463 */1464 dealloc_fn = device->ops.dealloc_driver;1465 device->ops.dealloc_driver = prevent_dealloc_device;1466 ib_device_put(device);1467 __ib_unregister_device(device);1468 device->ops.dealloc_driver = dealloc_fn;1469 dev_set_uevent_suppress(&device->dev, false);1470 return ret;1471 }1472 dev_set_uevent_suppress(&device->dev, false);1473 /* Mark for userspace that device is ready */1474 kobject_uevent(&device->dev.kobj, KOBJ_ADD);1475 1476 ib_device_notify_register(device);1477 ib_device_put(device);1478 1479 return 0;1480 1481dev_cleanup:1482 device_del(&device->dev);1483cg_cleanup:1484 dev_set_uevent_suppress(&device->dev, false);1485 ib_device_unregister_rdmacg(device);1486cache_cleanup:1487 ib_cache_cleanup_one(device);1488 return ret;1489}1490EXPORT_SYMBOL(ib_register_device);1491 1492/* Callers must hold a get on the device. */1493static void __ib_unregister_device(struct ib_device *ib_dev)1494{1495 struct ib_device *sub, *tmp;1496 1497 mutex_lock(&ib_dev->subdev_lock);1498 list_for_each_entry_safe_reverse(sub, tmp,1499 &ib_dev->subdev_list_head,1500 subdev_list) {1501 list_del(&sub->subdev_list);1502 ib_dev->ops.del_sub_dev(sub);1503 ib_device_put(ib_dev);1504 }1505 mutex_unlock(&ib_dev->subdev_lock);1506 1507 /*1508 * We have a registration lock so that all the calls to unregister are1509 * fully fenced, once any unregister returns the device is truely1510 * unregistered even if multiple callers are unregistering it at the1511 * same time. This also interacts with the registration flow and1512 * provides sane semantics if register and unregister are racing.1513 */1514 mutex_lock(&ib_dev->unregistration_lock);1515 if (!refcount_read(&ib_dev->refcount))1516 goto out;1517 1518 disable_device(ib_dev);1519 rdma_nl_notify_event(ib_dev, 0, RDMA_UNREGISTER_EVENT);1520 1521 /* Expedite removing unregistered pointers from the hash table */1522 free_netdevs(ib_dev);1523 1524 ib_free_port_attrs(&ib_dev->coredev);1525 device_del(&ib_dev->dev);1526 ib_device_unregister_rdmacg(ib_dev);1527 ib_cache_cleanup_one(ib_dev);1528 1529 /*1530 * Drivers using the new flow may not call ib_dealloc_device except1531 * in error unwind prior to registration success.1532 */1533 if (ib_dev->ops.dealloc_driver &&1534 ib_dev->ops.dealloc_driver != prevent_dealloc_device) {1535 WARN_ON(kref_read(&ib_dev->dev.kobj.kref) <= 1);1536 ib_dealloc_device(ib_dev);1537 }1538out:1539 mutex_unlock(&ib_dev->unregistration_lock);1540}1541 1542/**1543 * ib_unregister_device - Unregister an IB device1544 * @ib_dev: The device to unregister1545 *1546 * Unregister an IB device. All clients will receive a remove callback.1547 *1548 * Callers should call this routine only once, and protect against races with1549 * registration. Typically it should only be called as part of a remove1550 * callback in an implementation of driver core's struct device_driver and1551 * related.1552 *1553 * If ops.dealloc_driver is used then ib_dev will be freed upon return from1554 * this function.1555 */1556void ib_unregister_device(struct ib_device *ib_dev)1557{1558 get_device(&ib_dev->dev);1559 __ib_unregister_device(ib_dev);1560 put_device(&ib_dev->dev);1561}1562EXPORT_SYMBOL(ib_unregister_device);1563 1564/**1565 * ib_unregister_device_and_put - Unregister a device while holding a 'get'1566 * @ib_dev: The device to unregister1567 *1568 * This is the same as ib_unregister_device(), except it includes an internal1569 * ib_device_put() that should match a 'get' obtained by the caller.1570 *1571 * It is safe to call this routine concurrently from multiple threads while1572 * holding the 'get'. When the function returns the device is fully1573 * unregistered.1574 *1575 * Drivers using this flow MUST use the driver_unregister callback to clean up1576 * their resources associated with the device and dealloc it.1577 */1578void ib_unregister_device_and_put(struct ib_device *ib_dev)1579{1580 WARN_ON(!ib_dev->ops.dealloc_driver);1581 get_device(&ib_dev->dev);1582 ib_device_put(ib_dev);1583 __ib_unregister_device(ib_dev);1584 put_device(&ib_dev->dev);1585}1586EXPORT_SYMBOL(ib_unregister_device_and_put);1587 1588/**1589 * ib_unregister_driver - Unregister all IB devices for a driver1590 * @driver_id: The driver to unregister1591 *1592 * This implements a fence for device unregistration. It only returns once all1593 * devices associated with the driver_id have fully completed their1594 * unregistration and returned from ib_unregister_device*().1595 *1596 * If device's are not yet unregistered it goes ahead and starts unregistering1597 * them.1598 *1599 * This does not block creation of new devices with the given driver_id, that1600 * is the responsibility of the caller.1601 */1602void ib_unregister_driver(enum rdma_driver_id driver_id)1603{1604 struct ib_device *ib_dev;1605 unsigned long index;1606 1607 down_read(&devices_rwsem);1608 xa_for_each (&devices, index, ib_dev) {1609 if (ib_dev->ops.driver_id != driver_id)1610 continue;1611 1612 get_device(&ib_dev->dev);1613 up_read(&devices_rwsem);1614 1615 WARN_ON(!ib_dev->ops.dealloc_driver);1616 __ib_unregister_device(ib_dev);1617 1618 put_device(&ib_dev->dev);1619 down_read(&devices_rwsem);1620 }1621 up_read(&devices_rwsem);1622}1623EXPORT_SYMBOL(ib_unregister_driver);1624 1625static void ib_unregister_work(struct work_struct *work)1626{1627 struct ib_device *ib_dev =1628 container_of(work, struct ib_device, unregistration_work);1629 1630 __ib_unregister_device(ib_dev);1631 put_device(&ib_dev->dev);1632}1633 1634/**1635 * ib_unregister_device_queued - Unregister a device using a work queue1636 * @ib_dev: The device to unregister1637 *1638 * This schedules an asynchronous unregistration using a WQ for the device. A1639 * driver should use this to avoid holding locks while doing unregistration,1640 * such as holding the RTNL lock.1641 *1642 * Drivers using this API must use ib_unregister_driver before module unload1643 * to ensure that all scheduled unregistrations have completed.1644 */1645void ib_unregister_device_queued(struct ib_device *ib_dev)1646{1647 WARN_ON(!refcount_read(&ib_dev->refcount));1648 WARN_ON(!ib_dev->ops.dealloc_driver);1649 get_device(&ib_dev->dev);1650 if (!queue_work(ib_unreg_wq, &ib_dev->unregistration_work))1651 put_device(&ib_dev->dev);1652}1653EXPORT_SYMBOL(ib_unregister_device_queued);1654 1655/*1656 * The caller must pass in a device that has the kref held and the refcount1657 * released. If the device is in cur_net and still registered then it is moved1658 * into net.1659 */1660static int rdma_dev_change_netns(struct ib_device *device, struct net *cur_net,1661 struct net *net)1662{1663 int ret2 = -EINVAL;1664 int ret;1665 1666 mutex_lock(&device->unregistration_lock);1667 1668 /*1669 * If a device not under ib_device_get() or if the unregistration_lock1670 * is not held, the namespace can be changed, or it can be unregistered.1671 * Check again under the lock.1672 */1673 if (refcount_read(&device->refcount) == 0 ||1674 !net_eq(cur_net, read_pnet(&device->coredev.rdma_net))) {1675 ret = -ENODEV;1676 goto out;1677 }1678 1679 kobject_uevent(&device->dev.kobj, KOBJ_REMOVE);1680 disable_device(device);1681 1682 /*1683 * At this point no one can be using the device, so it is safe to1684 * change the namespace.1685 */1686 write_pnet(&device->coredev.rdma_net, net);1687 1688 down_read(&devices_rwsem);1689 /*1690 * Currently rdma devices are system wide unique. So the device name1691 * is guaranteed free in the new namespace. Publish the new namespace1692 * at the sysfs level.1693 */1694 ret = device_rename(&device->dev, dev_name(&device->dev));1695 up_read(&devices_rwsem);1696 if (ret) {1697 dev_warn(&device->dev,1698 "%s: Couldn't rename device after namespace change\n",1699 __func__);1700 /* Try and put things back and re-enable the device */1701 write_pnet(&device->coredev.rdma_net, cur_net);1702 }1703 1704 ret2 = enable_device_and_get(device);1705 if (ret2) {1706 /*1707 * This shouldn't really happen, but if it does, let the user1708 * retry at later point. So don't disable the device.1709 */1710 dev_warn(&device->dev,1711 "%s: Couldn't re-enable device after namespace change\n",1712 __func__);1713 }1714 kobject_uevent(&device->dev.kobj, KOBJ_ADD);1715 1716 ib_device_put(device);1717out:1718 mutex_unlock(&device->unregistration_lock);1719 if (ret)1720 return ret;1721 return ret2;1722}1723 1724int ib_device_set_netns_put(struct sk_buff *skb,1725 struct ib_device *dev, u32 ns_fd)1726{1727 struct net *net;1728 int ret;1729 1730 net = get_net_ns_by_fd(ns_fd);1731 if (IS_ERR(net)) {1732 ret = PTR_ERR(net);1733 goto net_err;1734 }1735 1736 if (!netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) {1737 ret = -EPERM;1738 goto ns_err;1739 }1740 1741 /*1742 * All the ib_clients, including uverbs, are reset when the namespace is1743 * changed and this cannot be blocked waiting for userspace to do1744 * something, so disassociation is mandatory.1745 */1746 if (!dev->ops.disassociate_ucontext || ib_devices_shared_netns) {1747 ret = -EOPNOTSUPP;1748 goto ns_err;1749 }1750 1751 get_device(&dev->dev);1752 ib_device_put(dev);1753 ret = rdma_dev_change_netns(dev, current->nsproxy->net_ns, net);1754 put_device(&dev->dev);1755 1756 put_net(net);1757 return ret;1758 1759ns_err:1760 put_net(net);1761net_err:1762 ib_device_put(dev);1763 return ret;1764}1765 1766static struct pernet_operations rdma_dev_net_ops = {1767 .init = rdma_dev_init_net,1768 .exit = rdma_dev_exit_net,1769 .id = &rdma_dev_net_id,1770 .size = sizeof(struct rdma_dev_net),1771};1772 1773static int assign_client_id(struct ib_client *client)1774{1775 int ret;1776 1777 lockdep_assert_held(&clients_rwsem);1778 /*1779 * The add/remove callbacks must be called in FIFO/LIFO order. To1780 * achieve this we assign client_ids so they are sorted in1781 * registration order.1782 */1783 client->client_id = highest_client_id;1784 ret = xa_insert(&clients, client->client_id, client, GFP_KERNEL);1785 if (ret)1786 return ret;1787 1788 highest_client_id++;1789 xa_set_mark(&clients, client->client_id, CLIENT_REGISTERED);1790 return 0;1791}1792 1793static void remove_client_id(struct ib_client *client)1794{1795 down_write(&clients_rwsem);1796 xa_erase(&clients, client->client_id);1797 for (; highest_client_id; highest_client_id--)1798 if (xa_load(&clients, highest_client_id - 1))1799 break;1800 up_write(&clients_rwsem);1801}1802 1803/**1804 * ib_register_client - Register an IB client1805 * @client:Client to register1806 *1807 * Upper level users of the IB drivers can use ib_register_client() to1808 * register callbacks for IB device addition and removal. When an IB1809 * device is added, each registered client's add method will be called1810 * (in the order the clients were registered), and when a device is1811 * removed, each client's remove method will be called (in the reverse1812 * order that clients were registered). In addition, when1813 * ib_register_client() is called, the client will receive an add1814 * callback for all devices already registered.1815 */1816int ib_register_client(struct ib_client *client)1817{1818 struct ib_device *device;1819 unsigned long index;1820 bool need_unreg = false;1821 int ret;1822 1823 refcount_set(&client->uses, 1);1824 init_completion(&client->uses_zero);1825 1826 /*1827 * The devices_rwsem is held in write mode to ensure that a racing1828 * ib_register_device() sees a consisent view of clients and devices.1829 */1830 down_write(&devices_rwsem);1831 down_write(&clients_rwsem);1832 ret = assign_client_id(client);1833 if (ret)1834 goto out;1835 1836 need_unreg = true;1837 xa_for_each_marked (&devices, index, device, DEVICE_REGISTERED) {1838 ret = add_client_context(device, client);1839 if (ret)1840 goto out;1841 }1842 ret = 0;1843out:1844 up_write(&clients_rwsem);1845 up_write(&devices_rwsem);1846 if (need_unreg && ret)1847 ib_unregister_client(client);1848 return ret;1849}1850EXPORT_SYMBOL(ib_register_client);1851 1852/**1853 * ib_unregister_client - Unregister an IB client1854 * @client:Client to unregister1855 *1856 * Upper level users use ib_unregister_client() to remove their client1857 * registration. When ib_unregister_client() is called, the client1858 * will receive a remove callback for each IB device still registered.1859 *1860 * This is a full fence, once it returns no client callbacks will be called,1861 * or are running in another thread.1862 */1863void ib_unregister_client(struct ib_client *client)1864{1865 struct ib_device *device;1866 unsigned long index;1867 1868 down_write(&clients_rwsem);1869 ib_client_put(client);1870 xa_clear_mark(&clients, client->client_id, CLIENT_REGISTERED);1871 up_write(&clients_rwsem);1872 1873 /* We do not want to have locks while calling client->remove() */1874 rcu_read_lock();1875 xa_for_each (&devices, index, device) {1876 if (!ib_device_try_get(device))1877 continue;1878 rcu_read_unlock();1879 1880 remove_client_context(device, client->client_id);1881 1882 ib_device_put(device);1883 rcu_read_lock();1884 }1885 rcu_read_unlock();1886 1887 /*1888 * remove_client_context() is not a fence, it can return even though a1889 * removal is ongoing. Wait until all removals are completed.1890 */1891 wait_for_completion(&client->uses_zero);1892 remove_client_id(client);1893}1894EXPORT_SYMBOL(ib_unregister_client);1895 1896static int __ib_get_global_client_nl_info(const char *client_name,1897 struct ib_client_nl_info *res)1898{1899 struct ib_client *client;1900 unsigned long index;1901 int ret = -ENOENT;1902 1903 down_read(&clients_rwsem);1904 xa_for_each_marked (&clients, index, client, CLIENT_REGISTERED) {1905 if (strcmp(client->name, client_name) != 0)1906 continue;1907 if (!client->get_global_nl_info) {1908 ret = -EOPNOTSUPP;1909 break;1910 }1911 ret = client->get_global_nl_info(res);1912 if (WARN_ON(ret == -ENOENT))1913 ret = -EINVAL;1914 if (!ret && res->cdev)1915 get_device(res->cdev);1916 break;1917 }1918 up_read(&clients_rwsem);1919 return ret;1920}1921 1922static int __ib_get_client_nl_info(struct ib_device *ibdev,1923 const char *client_name,1924 struct ib_client_nl_info *res)1925{1926 unsigned long index;1927 void *client_data;1928 int ret = -ENOENT;1929 1930 down_read(&ibdev->client_data_rwsem);1931 xan_for_each_marked (&ibdev->client_data, index, client_data,1932 CLIENT_DATA_REGISTERED) {1933 struct ib_client *client = xa_load(&clients, index);1934 1935 if (!client || strcmp(client->name, client_name) != 0)1936 continue;1937 if (!client->get_nl_info) {1938 ret = -EOPNOTSUPP;1939 break;1940 }1941 ret = client->get_nl_info(ibdev, client_data, res);1942 if (WARN_ON(ret == -ENOENT))1943 ret = -EINVAL;1944 1945 /*1946 * The cdev is guaranteed valid as long as we are inside the1947 * client_data_rwsem as remove_one can't be called. Keep it1948 * valid for the caller.1949 */1950 if (!ret && res->cdev)1951 get_device(res->cdev);1952 break;1953 }1954 up_read(&ibdev->client_data_rwsem);1955 1956 return ret;1957}1958 1959/**1960 * ib_get_client_nl_info - Fetch the nl_info from a client1961 * @ibdev: IB device1962 * @client_name: Name of the client1963 * @res: Result of the query1964 */1965int ib_get_client_nl_info(struct ib_device *ibdev, const char *client_name,1966 struct ib_client_nl_info *res)1967{1968 int ret;1969 1970 if (ibdev)1971 ret = __ib_get_client_nl_info(ibdev, client_name, res);1972 else1973 ret = __ib_get_global_client_nl_info(client_name, res);1974#ifdef CONFIG_MODULES1975 if (ret == -ENOENT) {1976 request_module("rdma-client-%s", client_name);1977 if (ibdev)1978 ret = __ib_get_client_nl_info(ibdev, client_name, res);1979 else1980 ret = __ib_get_global_client_nl_info(client_name, res);1981 }1982#endif1983 if (ret) {1984 if (ret == -ENOENT)1985 return -EOPNOTSUPP;1986 return ret;1987 }1988 1989 if (WARN_ON(!res->cdev))1990 return -EINVAL;1991 return 0;1992}1993 1994/**1995 * ib_set_client_data - Set IB client context1996 * @device:Device to set context for1997 * @client:Client to set context for1998 * @data:Context to set1999 *2000 * ib_set_client_data() sets client context data that can be retrieved with2001 * ib_get_client_data(). This can only be called while the client is2002 * registered to the device, once the ib_client remove() callback returns this2003 * cannot be called.2004 */2005void ib_set_client_data(struct ib_device *device, struct ib_client *client,2006 void *data)2007{2008 void *rc;2009 2010 if (WARN_ON(IS_ERR(data)))2011 data = NULL;2012 2013 rc = xa_store(&device->client_data, client->client_id, data,2014 GFP_KERNEL);2015 WARN_ON(xa_is_err(rc));2016}2017EXPORT_SYMBOL(ib_set_client_data);2018 2019/**2020 * ib_register_event_handler - Register an IB event handler2021 * @event_handler:Handler to register2022 *2023 * ib_register_event_handler() registers an event handler that will be2024 * called back when asynchronous IB events occur (as defined in2025 * chapter 11 of the InfiniBand Architecture Specification). This2026 * callback occurs in workqueue context.2027 */2028void ib_register_event_handler(struct ib_event_handler *event_handler)2029{2030 down_write(&event_handler->device->event_handler_rwsem);2031 list_add_tail(&event_handler->list,2032 &event_handler->device->event_handler_list);2033 up_write(&event_handler->device->event_handler_rwsem);2034}2035EXPORT_SYMBOL(ib_register_event_handler);2036 2037/**2038 * ib_unregister_event_handler - Unregister an event handler2039 * @event_handler:Handler to unregister2040 *2041 * Unregister an event handler registered with2042 * ib_register_event_handler().2043 */2044void ib_unregister_event_handler(struct ib_event_handler *event_handler)2045{2046 down_write(&event_handler->device->event_handler_rwsem);2047 list_del(&event_handler->list);2048 up_write(&event_handler->device->event_handler_rwsem);2049}2050EXPORT_SYMBOL(ib_unregister_event_handler);2051 2052void ib_dispatch_event_clients(struct ib_event *event)2053{2054 struct ib_event_handler *handler;2055 2056 down_read(&event->device->event_handler_rwsem);2057 2058 list_for_each_entry(handler, &event->device->event_handler_list, list)2059 handler->handler(handler, event);2060 2061 up_read(&event->device->event_handler_rwsem);2062}2063 2064static int iw_query_port(struct ib_device *device,2065 u32 port_num,2066 struct ib_port_attr *port_attr)2067{2068 struct in_device *inetdev;2069 struct net_device *netdev;2070 2071 memset(port_attr, 0, sizeof(*port_attr));2072 2073 netdev = ib_device_get_netdev(device, port_num);2074 if (!netdev)2075 return -ENODEV;2076 2077 port_attr->max_mtu = IB_MTU_4096;2078 port_attr->active_mtu = ib_mtu_int_to_enum(netdev->mtu);2079 2080 if (!netif_carrier_ok(netdev)) {2081 port_attr->state = IB_PORT_DOWN;2082 port_attr->phys_state = IB_PORT_PHYS_STATE_DISABLED;2083 } else {2084 rcu_read_lock();2085 inetdev = __in_dev_get_rcu(netdev);2086 2087 if (inetdev && inetdev->ifa_list) {2088 port_attr->state = IB_PORT_ACTIVE;2089 port_attr->phys_state = IB_PORT_PHYS_STATE_LINK_UP;2090 } else {2091 port_attr->state = IB_PORT_INIT;2092 port_attr->phys_state =2093 IB_PORT_PHYS_STATE_PORT_CONFIGURATION_TRAINING;2094 }2095 2096 rcu_read_unlock();2097 }2098 2099 dev_put(netdev);2100 return device->ops.query_port(device, port_num, port_attr);2101}2102 2103static int __ib_query_port(struct ib_device *device,2104 u32 port_num,2105 struct ib_port_attr *port_attr)2106{2107 int err;2108 2109 memset(port_attr, 0, sizeof(*port_attr));2110 2111 err = device->ops.query_port(device, port_num, port_attr);2112 if (err || port_attr->subnet_prefix)2113 return err;2114 2115 if (rdma_port_get_link_layer(device, port_num) !=2116 IB_LINK_LAYER_INFINIBAND)2117 return 0;2118 2119 ib_get_cached_subnet_prefix(device, port_num,2120 &port_attr->subnet_prefix);2121 return 0;2122}2123 2124/**2125 * ib_query_port - Query IB port attributes2126 * @device:Device to query2127 * @port_num:Port number to query2128 * @port_attr:Port attributes2129 *2130 * ib_query_port() returns the attributes of a port through the2131 * @port_attr pointer.2132 */2133int ib_query_port(struct ib_device *device,2134 u32 port_num,2135 struct ib_port_attr *port_attr)2136{2137 if (!rdma_is_port_valid(device, port_num))2138 return -EINVAL;2139 2140 if (rdma_protocol_iwarp(device, port_num))2141 return iw_query_port(device, port_num, port_attr);2142 else2143 return __ib_query_port(device, port_num, port_attr);2144}2145EXPORT_SYMBOL(ib_query_port);2146 2147static void add_ndev_hash(struct ib_port_data *pdata)2148{2149 unsigned long flags;2150 2151 might_sleep();2152 2153 spin_lock_irqsave(&ndev_hash_lock, flags);2154 if (hash_hashed(&pdata->ndev_hash_link)) {2155 hash_del_rcu(&pdata->ndev_hash_link);2156 spin_unlock_irqrestore(&ndev_hash_lock, flags);2157 /*2158 * We cannot do hash_add_rcu after a hash_del_rcu until the2159 * grace period2160 */2161 synchronize_rcu();2162 spin_lock_irqsave(&ndev_hash_lock, flags);2163 }2164 if (pdata->netdev)2165 hash_add_rcu(ndev_hash, &pdata->ndev_hash_link,2166 (uintptr_t)pdata->netdev);2167 spin_unlock_irqrestore(&ndev_hash_lock, flags);2168}2169 2170/**2171 * ib_device_set_netdev - Associate the ib_dev with an underlying net_device2172 * @ib_dev: Device to modify2173 * @ndev: net_device to affiliate, may be NULL2174 * @port: IB port the net_device is connected to2175 *2176 * Drivers should use this to link the ib_device to a netdev so the netdev2177 * shows up in interfaces like ib_enum_roce_netdev. Only one netdev may be2178 * affiliated with any port.2179 *2180 * The caller must ensure that the given ndev is not unregistered or2181 * unregistering, and that either the ib_device is unregistered or2182 * ib_device_set_netdev() is called with NULL when the ndev sends a2183 * NETDEV_UNREGISTER event.2184 */2185int ib_device_set_netdev(struct ib_device *ib_dev, struct net_device *ndev,2186 u32 port)2187{2188 enum rdma_nl_notify_event_type etype;2189 struct net_device *old_ndev;2190 struct ib_port_data *pdata;2191 unsigned long flags;2192 int ret;2193 2194 if (!rdma_is_port_valid(ib_dev, port))2195 return -EINVAL;2196 2197 /*2198 * Drivers wish to call this before ib_register_driver, so we have to2199 * setup the port data early.2200 */2201 ret = alloc_port_data(ib_dev);2202 if (ret)2203 return ret;2204 2205 pdata = &ib_dev->port_data[port];2206 spin_lock_irqsave(&pdata->netdev_lock, flags);2207 old_ndev = rcu_dereference_protected(2208 pdata->netdev, lockdep_is_held(&pdata->netdev_lock));2209 if (old_ndev == ndev) {2210 spin_unlock_irqrestore(&pdata->netdev_lock, flags);2211 return 0;2212 }2213 2214 rcu_assign_pointer(pdata->netdev, ndev);2215 netdev_put(old_ndev, &pdata->netdev_tracker);2216 netdev_hold(ndev, &pdata->netdev_tracker, GFP_ATOMIC);2217 spin_unlock_irqrestore(&pdata->netdev_lock, flags);2218 2219 add_ndev_hash(pdata);2220 2221 /* Make sure that the device is registered before we send events */2222 if (xa_load(&devices, ib_dev->index) != ib_dev)2223 return 0;2224 2225 etype = ndev ? RDMA_NETDEV_ATTACH_EVENT : RDMA_NETDEV_DETACH_EVENT;2226 rdma_nl_notify_event(ib_dev, port, etype);2227 2228 return 0;2229}2230EXPORT_SYMBOL(ib_device_set_netdev);2231 2232static void free_netdevs(struct ib_device *ib_dev)2233{2234 unsigned long flags;2235 u32 port;2236 2237 if (!ib_dev->port_data)2238 return;2239 2240 rdma_for_each_port (ib_dev, port) {2241 struct ib_port_data *pdata = &ib_dev->port_data[port];2242 struct net_device *ndev;2243 2244 spin_lock_irqsave(&pdata->netdev_lock, flags);2245 ndev = rcu_dereference_protected(2246 pdata->netdev, lockdep_is_held(&pdata->netdev_lock));2247 if (ndev) {2248 spin_lock(&ndev_hash_lock);2249 hash_del_rcu(&pdata->ndev_hash_link);2250 spin_unlock(&ndev_hash_lock);2251 2252 /*2253 * If this is the last dev_put there is still a2254 * synchronize_rcu before the netdev is kfreed, so we2255 * can continue to rely on unlocked pointer2256 * comparisons after the put2257 */2258 rcu_assign_pointer(pdata->netdev, NULL);2259 netdev_put(ndev, &pdata->netdev_tracker);2260 }2261 spin_unlock_irqrestore(&pdata->netdev_lock, flags);2262 }2263}2264 2265struct net_device *ib_device_get_netdev(struct ib_device *ib_dev,2266 u32 port)2267{2268 struct ib_port_data *pdata;2269 struct net_device *res;2270 2271 if (!rdma_is_port_valid(ib_dev, port))2272 return NULL;2273 2274 if (!ib_dev->port_data)2275 return NULL;2276 2277 pdata = &ib_dev->port_data[port];2278 2279 /*2280 * New drivers should use ib_device_set_netdev() not the legacy2281 * get_netdev().2282 */2283 if (ib_dev->ops.get_netdev)2284 res = ib_dev->ops.get_netdev(ib_dev, port);2285 else {2286 spin_lock(&pdata->netdev_lock);2287 res = rcu_dereference_protected(2288 pdata->netdev, lockdep_is_held(&pdata->netdev_lock));2289 dev_hold(res);2290 spin_unlock(&pdata->netdev_lock);2291 }2292 2293 return res;2294}2295EXPORT_SYMBOL(ib_device_get_netdev);2296 2297/**2298 * ib_device_get_by_netdev - Find an IB device associated with a netdev2299 * @ndev: netdev to locate2300 * @driver_id: The driver ID that must match (RDMA_DRIVER_UNKNOWN matches all)2301 *2302 * Find and hold an ib_device that is associated with a netdev via2303 * ib_device_set_netdev(). The caller must call ib_device_put() on the2304 * returned pointer.2305 */2306struct ib_device *ib_device_get_by_netdev(struct net_device *ndev,2307 enum rdma_driver_id driver_id)2308{2309 struct ib_device *res = NULL;2310 struct ib_port_data *cur;2311 2312 rcu_read_lock();2313 hash_for_each_possible_rcu (ndev_hash, cur, ndev_hash_link,2314 (uintptr_t)ndev) {2315 if (rcu_access_pointer(cur->netdev) == ndev &&2316 (driver_id == RDMA_DRIVER_UNKNOWN ||2317 cur->ib_dev->ops.driver_id == driver_id) &&2318 ib_device_try_get(cur->ib_dev)) {2319 res = cur->ib_dev;2320 break;2321 }2322 }2323 rcu_read_unlock();2324 2325 return res;2326}2327EXPORT_SYMBOL(ib_device_get_by_netdev);2328 2329/**2330 * ib_enum_roce_netdev - enumerate all RoCE ports2331 * @ib_dev : IB device we want to query2332 * @filter: Should we call the callback?2333 * @filter_cookie: Cookie passed to filter2334 * @cb: Callback to call for each found RoCE ports2335 * @cookie: Cookie passed back to the callback2336 *2337 * Enumerates all of the physical RoCE ports of ib_dev2338 * which are related to netdevice and calls callback() on each2339 * device for which filter() function returns non zero.2340 */2341void ib_enum_roce_netdev(struct ib_device *ib_dev,2342 roce_netdev_filter filter,2343 void *filter_cookie,2344 roce_netdev_callback cb,2345 void *cookie)2346{2347 u32 port;2348 2349 rdma_for_each_port (ib_dev, port)2350 if (rdma_protocol_roce(ib_dev, port)) {2351 struct net_device *idev =2352 ib_device_get_netdev(ib_dev, port);2353 2354 if (filter(ib_dev, port, idev, filter_cookie))2355 cb(ib_dev, port, idev, cookie);2356 dev_put(idev);2357 }2358}2359 2360/**2361 * ib_enum_all_roce_netdevs - enumerate all RoCE devices2362 * @filter: Should we call the callback?2363 * @filter_cookie: Cookie passed to filter2364 * @cb: Callback to call for each found RoCE ports2365 * @cookie: Cookie passed back to the callback2366 *2367 * Enumerates all RoCE devices' physical ports which are related2368 * to netdevices and calls callback() on each device for which2369 * filter() function returns non zero.2370 */2371void ib_enum_all_roce_netdevs(roce_netdev_filter filter,2372 void *filter_cookie,2373 roce_netdev_callback cb,2374 void *cookie)2375{2376 struct ib_device *dev;2377 unsigned long index;2378 2379 down_read(&devices_rwsem);2380 xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED)2381 ib_enum_roce_netdev(dev, filter, filter_cookie, cb, cookie);2382 up_read(&devices_rwsem);2383}2384 2385/*2386 * ib_enum_all_devs - enumerate all ib_devices2387 * @cb: Callback to call for each found ib_device2388 *2389 * Enumerates all ib_devices and calls callback() on each device.2390 */2391int ib_enum_all_devs(nldev_callback nldev_cb, struct sk_buff *skb,2392 struct netlink_callback *cb)2393{2394 unsigned long index;2395 struct ib_device *dev;2396 unsigned int idx = 0;2397 int ret = 0;2398 2399 down_read(&devices_rwsem);2400 xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED) {2401 if (!rdma_dev_access_netns(dev, sock_net(skb->sk)))2402 continue;2403 2404 ret = nldev_cb(dev, skb, cb, idx);2405 if (ret)2406 break;2407 idx++;2408 }2409 up_read(&devices_rwsem);2410 return ret;2411}2412 2413/**2414 * ib_query_pkey - Get P_Key table entry2415 * @device:Device to query2416 * @port_num:Port number to query2417 * @index:P_Key table index to query2418 * @pkey:Returned P_Key2419 *2420 * ib_query_pkey() fetches the specified P_Key table entry.2421 */2422int ib_query_pkey(struct ib_device *device,2423 u32 port_num, u16 index, u16 *pkey)2424{2425 if (!rdma_is_port_valid(device, port_num))2426 return -EINVAL;2427 2428 if (!device->ops.query_pkey)2429 return -EOPNOTSUPP;2430 2431 return device->ops.query_pkey(device, port_num, index, pkey);2432}2433EXPORT_SYMBOL(ib_query_pkey);2434 2435/**2436 * ib_modify_device - Change IB device attributes2437 * @device:Device to modify2438 * @device_modify_mask:Mask of attributes to change2439 * @device_modify:New attribute values2440 *2441 * ib_modify_device() changes a device's attributes as specified by2442 * the @device_modify_mask and @device_modify structure.2443 */2444int ib_modify_device(struct ib_device *device,2445 int device_modify_mask,2446 struct ib_device_modify *device_modify)2447{2448 if (!device->ops.modify_device)2449 return -EOPNOTSUPP;2450 2451 return device->ops.modify_device(device, device_modify_mask,2452 device_modify);2453}2454EXPORT_SYMBOL(ib_modify_device);2455 2456/**2457 * ib_modify_port - Modifies the attributes for the specified port.2458 * @device: The device to modify.2459 * @port_num: The number of the port to modify.2460 * @port_modify_mask: Mask used to specify which attributes of the port2461 * to change.2462 * @port_modify: New attribute values for the port.2463 *2464 * ib_modify_port() changes a port's attributes as specified by the2465 * @port_modify_mask and @port_modify structure.2466 */2467int ib_modify_port(struct ib_device *device,2468 u32 port_num, int port_modify_mask,2469 struct ib_port_modify *port_modify)2470{2471 int rc;2472 2473 if (!rdma_is_port_valid(device, port_num))2474 return -EINVAL;2475 2476 if (device->ops.modify_port)2477 rc = device->ops.modify_port(device, port_num,2478 port_modify_mask,2479 port_modify);2480 else if (rdma_protocol_roce(device, port_num) &&2481 ((port_modify->set_port_cap_mask & ~IB_PORT_CM_SUP) == 0 ||2482 (port_modify->clr_port_cap_mask & ~IB_PORT_CM_SUP) == 0))2483 rc = 0;2484 else2485 rc = -EOPNOTSUPP;2486 return rc;2487}2488EXPORT_SYMBOL(ib_modify_port);2489 2490/**2491 * ib_find_gid - Returns the port number and GID table index where2492 * a specified GID value occurs. Its searches only for IB link layer.2493 * @device: The device to query.2494 * @gid: The GID value to search for.2495 * @port_num: The port number of the device where the GID value was found.2496 * @index: The index into the GID table where the GID was found. This2497 * parameter may be NULL.2498 */2499int ib_find_gid(struct ib_device *device, union ib_gid *gid,2500 u32 *port_num, u16 *index)2501{2502 union ib_gid tmp_gid;2503 u32 port;2504 int ret, i;2505 2506 rdma_for_each_port (device, port) {2507 if (!rdma_protocol_ib(device, port))2508 continue;2509 2510 for (i = 0; i < device->port_data[port].immutable.gid_tbl_len;2511 ++i) {2512 ret = rdma_query_gid(device, port, i, &tmp_gid);2513 if (ret)2514 continue;2515 2516 if (!memcmp(&tmp_gid, gid, sizeof *gid)) {2517 *port_num = port;2518 if (index)2519 *index = i;2520 return 0;2521 }2522 }2523 }2524 2525 return -ENOENT;2526}2527EXPORT_SYMBOL(ib_find_gid);2528 2529/**2530 * ib_find_pkey - Returns the PKey table index where a specified2531 * PKey value occurs.2532 * @device: The device to query.2533 * @port_num: The port number of the device to search for the PKey.2534 * @pkey: The PKey value to search for.2535 * @index: The index into the PKey table where the PKey was found.2536 */2537int ib_find_pkey(struct ib_device *device,2538 u32 port_num, u16 pkey, u16 *index)2539{2540 int ret, i;2541 u16 tmp_pkey;2542 int partial_ix = -1;2543 2544 for (i = 0; i < device->port_data[port_num].immutable.pkey_tbl_len;2545 ++i) {2546 ret = ib_query_pkey(device, port_num, i, &tmp_pkey);2547 if (ret)2548 return ret;2549 if ((pkey & 0x7fff) == (tmp_pkey & 0x7fff)) {2550 /* if there is full-member pkey take it.*/2551 if (tmp_pkey & 0x8000) {2552 *index = i;2553 return 0;2554 }2555 if (partial_ix < 0)2556 partial_ix = i;2557 }2558 }2559 2560 /*no full-member, if exists take the limited*/2561 if (partial_ix >= 0) {2562 *index = partial_ix;2563 return 0;2564 }2565 return -ENOENT;2566}2567EXPORT_SYMBOL(ib_find_pkey);2568 2569/**2570 * ib_get_net_dev_by_params() - Return the appropriate net_dev2571 * for a received CM request2572 * @dev: An RDMA device on which the request has been received.2573 * @port: Port number on the RDMA device.2574 * @pkey: The Pkey the request came on.2575 * @gid: A GID that the net_dev uses to communicate.2576 * @addr: Contains the IP address that the request specified as its2577 * destination.2578 *2579 */2580struct net_device *ib_get_net_dev_by_params(struct ib_device *dev,2581 u32 port,2582 u16 pkey,2583 const union ib_gid *gid,2584 const struct sockaddr *addr)2585{2586 struct net_device *net_dev = NULL;2587 unsigned long index;2588 void *client_data;2589 2590 if (!rdma_protocol_ib(dev, port))2591 return NULL;2592 2593 /*2594 * Holding the read side guarantees that the client will not become2595 * unregistered while we are calling get_net_dev_by_params()2596 */2597 down_read(&dev->client_data_rwsem);2598 xan_for_each_marked (&dev->client_data, index, client_data,2599 CLIENT_DATA_REGISTERED) {2600 struct ib_client *client = xa_load(&clients, index);2601 2602 if (!client || !client->get_net_dev_by_params)2603 continue;2604 2605 net_dev = client->get_net_dev_by_params(dev, port, pkey, gid,2606 addr, client_data);2607 if (net_dev)2608 break;2609 }2610 up_read(&dev->client_data_rwsem);2611 2612 return net_dev;2613}2614EXPORT_SYMBOL(ib_get_net_dev_by_params);2615 2616void ib_set_device_ops(struct ib_device *dev, const struct ib_device_ops *ops)2617{2618 struct ib_device_ops *dev_ops = &dev->ops;2619#define SET_DEVICE_OP(ptr, name) \2620 do { \2621 if (ops->name) \2622 if (!((ptr)->name)) \2623 (ptr)->name = ops->name; \2624 } while (0)2625 2626#define SET_OBJ_SIZE(ptr, name) SET_DEVICE_OP(ptr, size_##name)2627 2628 if (ops->driver_id != RDMA_DRIVER_UNKNOWN) {2629 WARN_ON(dev_ops->driver_id != RDMA_DRIVER_UNKNOWN &&2630 dev_ops->driver_id != ops->driver_id);2631 dev_ops->driver_id = ops->driver_id;2632 }2633 if (ops->owner) {2634 WARN_ON(dev_ops->owner && dev_ops->owner != ops->owner);2635 dev_ops->owner = ops->owner;2636 }2637 if (ops->uverbs_abi_ver)2638 dev_ops->uverbs_abi_ver = ops->uverbs_abi_ver;2639 2640 dev_ops->uverbs_no_driver_id_binding |=2641 ops->uverbs_no_driver_id_binding;2642 2643 SET_DEVICE_OP(dev_ops, add_gid);2644 SET_DEVICE_OP(dev_ops, add_sub_dev);2645 SET_DEVICE_OP(dev_ops, advise_mr);2646 SET_DEVICE_OP(dev_ops, alloc_dm);2647 SET_DEVICE_OP(dev_ops, alloc_hw_device_stats);2648 SET_DEVICE_OP(dev_ops, alloc_hw_port_stats);2649 SET_DEVICE_OP(dev_ops, alloc_mr);2650 SET_DEVICE_OP(dev_ops, alloc_mr_integrity);2651 SET_DEVICE_OP(dev_ops, alloc_mw);2652 SET_DEVICE_OP(dev_ops, alloc_pd);2653 SET_DEVICE_OP(dev_ops, alloc_rdma_netdev);2654 SET_DEVICE_OP(dev_ops, alloc_ucontext);2655 SET_DEVICE_OP(dev_ops, alloc_xrcd);2656 SET_DEVICE_OP(dev_ops, attach_mcast);2657 SET_DEVICE_OP(dev_ops, check_mr_status);2658 SET_DEVICE_OP(dev_ops, counter_alloc_stats);2659 SET_DEVICE_OP(dev_ops, counter_bind_qp);2660 SET_DEVICE_OP(dev_ops, counter_dealloc);2661 SET_DEVICE_OP(dev_ops, counter_unbind_qp);2662 SET_DEVICE_OP(dev_ops, counter_update_stats);2663 SET_DEVICE_OP(dev_ops, create_ah);2664 SET_DEVICE_OP(dev_ops, create_counters);2665 SET_DEVICE_OP(dev_ops, create_cq);2666 SET_DEVICE_OP(dev_ops, create_flow);2667 SET_DEVICE_OP(dev_ops, create_qp);2668 SET_DEVICE_OP(dev_ops, create_rwq_ind_table);2669 SET_DEVICE_OP(dev_ops, create_srq);2670 SET_DEVICE_OP(dev_ops, create_user_ah);2671 SET_DEVICE_OP(dev_ops, create_wq);2672 SET_DEVICE_OP(dev_ops, dealloc_dm);2673 SET_DEVICE_OP(dev_ops, dealloc_driver);2674 SET_DEVICE_OP(dev_ops, dealloc_mw);2675 SET_DEVICE_OP(dev_ops, dealloc_pd);2676 SET_DEVICE_OP(dev_ops, dealloc_ucontext);2677 SET_DEVICE_OP(dev_ops, dealloc_xrcd);2678 SET_DEVICE_OP(dev_ops, del_gid);2679 SET_DEVICE_OP(dev_ops, del_sub_dev);2680 SET_DEVICE_OP(dev_ops, dereg_mr);2681 SET_DEVICE_OP(dev_ops, destroy_ah);2682 SET_DEVICE_OP(dev_ops, destroy_counters);2683 SET_DEVICE_OP(dev_ops, destroy_cq);2684 SET_DEVICE_OP(dev_ops, destroy_flow);2685 SET_DEVICE_OP(dev_ops, destroy_flow_action);2686 SET_DEVICE_OP(dev_ops, destroy_qp);2687 SET_DEVICE_OP(dev_ops, destroy_rwq_ind_table);2688 SET_DEVICE_OP(dev_ops, destroy_srq);2689 SET_DEVICE_OP(dev_ops, destroy_wq);2690 SET_DEVICE_OP(dev_ops, device_group);2691 SET_DEVICE_OP(dev_ops, detach_mcast);2692 SET_DEVICE_OP(dev_ops, disassociate_ucontext);2693 SET_DEVICE_OP(dev_ops, drain_rq);2694 SET_DEVICE_OP(dev_ops, drain_sq);2695 SET_DEVICE_OP(dev_ops, enable_driver);2696 SET_DEVICE_OP(dev_ops, fill_res_cm_id_entry);2697 SET_DEVICE_OP(dev_ops, fill_res_cq_entry);2698 SET_DEVICE_OP(dev_ops, fill_res_cq_entry_raw);2699 SET_DEVICE_OP(dev_ops, fill_res_mr_entry);2700 SET_DEVICE_OP(dev_ops, fill_res_mr_entry_raw);2701 SET_DEVICE_OP(dev_ops, fill_res_qp_entry);2702 SET_DEVICE_OP(dev_ops, fill_res_qp_entry_raw);2703 SET_DEVICE_OP(dev_ops, fill_res_srq_entry);2704 SET_DEVICE_OP(dev_ops, fill_res_srq_entry_raw);2705 SET_DEVICE_OP(dev_ops, fill_stat_mr_entry);2706 SET_DEVICE_OP(dev_ops, get_dev_fw_str);2707 SET_DEVICE_OP(dev_ops, get_dma_mr);2708 SET_DEVICE_OP(dev_ops, get_hw_stats);2709 SET_DEVICE_OP(dev_ops, get_link_layer);2710 SET_DEVICE_OP(dev_ops, get_netdev);2711 SET_DEVICE_OP(dev_ops, get_numa_node);2712 SET_DEVICE_OP(dev_ops, get_port_immutable);2713 SET_DEVICE_OP(dev_ops, get_vector_affinity);2714 SET_DEVICE_OP(dev_ops, get_vf_config);2715 SET_DEVICE_OP(dev_ops, get_vf_guid);2716 SET_DEVICE_OP(dev_ops, get_vf_stats);2717 SET_DEVICE_OP(dev_ops, iw_accept);2718 SET_DEVICE_OP(dev_ops, iw_add_ref);2719 SET_DEVICE_OP(dev_ops, iw_connect);2720 SET_DEVICE_OP(dev_ops, iw_create_listen);2721 SET_DEVICE_OP(dev_ops, iw_destroy_listen);2722 SET_DEVICE_OP(dev_ops, iw_get_qp);2723 SET_DEVICE_OP(dev_ops, iw_reject);2724 SET_DEVICE_OP(dev_ops, iw_rem_ref);2725 SET_DEVICE_OP(dev_ops, map_mr_sg);2726 SET_DEVICE_OP(dev_ops, map_mr_sg_pi);2727 SET_DEVICE_OP(dev_ops, mmap);2728 SET_DEVICE_OP(dev_ops, mmap_free);2729 SET_DEVICE_OP(dev_ops, modify_ah);2730 SET_DEVICE_OP(dev_ops, modify_cq);2731 SET_DEVICE_OP(dev_ops, modify_device);2732 SET_DEVICE_OP(dev_ops, modify_hw_stat);2733 SET_DEVICE_OP(dev_ops, modify_port);2734 SET_DEVICE_OP(dev_ops, modify_qp);2735 SET_DEVICE_OP(dev_ops, modify_srq);2736 SET_DEVICE_OP(dev_ops, modify_wq);2737 SET_DEVICE_OP(dev_ops, peek_cq);2738 SET_DEVICE_OP(dev_ops, poll_cq);2739 SET_DEVICE_OP(dev_ops, port_groups);2740 SET_DEVICE_OP(dev_ops, post_recv);2741 SET_DEVICE_OP(dev_ops, post_send);2742 SET_DEVICE_OP(dev_ops, post_srq_recv);2743 SET_DEVICE_OP(dev_ops, process_mad);2744 SET_DEVICE_OP(dev_ops, query_ah);2745 SET_DEVICE_OP(dev_ops, query_device);2746 SET_DEVICE_OP(dev_ops, query_gid);2747 SET_DEVICE_OP(dev_ops, query_pkey);2748 SET_DEVICE_OP(dev_ops, query_port);2749 SET_DEVICE_OP(dev_ops, query_qp);2750 SET_DEVICE_OP(dev_ops, query_srq);2751 SET_DEVICE_OP(dev_ops, query_ucontext);2752 SET_DEVICE_OP(dev_ops, rdma_netdev_get_params);2753 SET_DEVICE_OP(dev_ops, read_counters);2754 SET_DEVICE_OP(dev_ops, reg_dm_mr);2755 SET_DEVICE_OP(dev_ops, reg_user_mr);2756 SET_DEVICE_OP(dev_ops, reg_user_mr_dmabuf);2757 SET_DEVICE_OP(dev_ops, req_notify_cq);2758 SET_DEVICE_OP(dev_ops, rereg_user_mr);2759 SET_DEVICE_OP(dev_ops, resize_cq);2760 SET_DEVICE_OP(dev_ops, set_vf_guid);2761 SET_DEVICE_OP(dev_ops, set_vf_link_state);2762 2763 SET_OBJ_SIZE(dev_ops, ib_ah);2764 SET_OBJ_SIZE(dev_ops, ib_counters);2765 SET_OBJ_SIZE(dev_ops, ib_cq);2766 SET_OBJ_SIZE(dev_ops, ib_mw);2767 SET_OBJ_SIZE(dev_ops, ib_pd);2768 SET_OBJ_SIZE(dev_ops, ib_qp);2769 SET_OBJ_SIZE(dev_ops, ib_rwq_ind_table);2770 SET_OBJ_SIZE(dev_ops, ib_srq);2771 SET_OBJ_SIZE(dev_ops, ib_ucontext);2772 SET_OBJ_SIZE(dev_ops, ib_xrcd);2773}2774EXPORT_SYMBOL(ib_set_device_ops);2775 2776int ib_add_sub_device(struct ib_device *parent,2777 enum rdma_nl_dev_type type,2778 const char *name)2779{2780 struct ib_device *sub;2781 int ret = 0;2782 2783 if (!parent->ops.add_sub_dev || !parent->ops.del_sub_dev)2784 return -EOPNOTSUPP;2785 2786 if (!ib_device_try_get(parent))2787 return -EINVAL;2788 2789 sub = parent->ops.add_sub_dev(parent, type, name);2790 if (IS_ERR(sub)) {2791 ib_device_put(parent);2792 return PTR_ERR(sub);2793 }2794 2795 sub->type = type;2796 sub->parent = parent;2797 2798 mutex_lock(&parent->subdev_lock);2799 list_add_tail(&parent->subdev_list_head, &sub->subdev_list);2800 mutex_unlock(&parent->subdev_lock);2801 2802 return ret;2803}2804EXPORT_SYMBOL(ib_add_sub_device);2805 2806int ib_del_sub_device_and_put(struct ib_device *sub)2807{2808 struct ib_device *parent = sub->parent;2809 2810 if (!parent)2811 return -EOPNOTSUPP;2812 2813 mutex_lock(&parent->subdev_lock);2814 list_del(&sub->subdev_list);2815 mutex_unlock(&parent->subdev_lock);2816 2817 ib_device_put(sub);2818 parent->ops.del_sub_dev(sub);2819 ib_device_put(parent);2820 2821 return 0;2822}2823EXPORT_SYMBOL(ib_del_sub_device_and_put);2824 2825#ifdef CONFIG_INFINIBAND_VIRT_DMA2826int ib_dma_virt_map_sg(struct ib_device *dev, struct scatterlist *sg, int nents)2827{2828 struct scatterlist *s;2829 int i;2830 2831 for_each_sg(sg, s, nents, i) {2832 sg_dma_address(s) = (uintptr_t)sg_virt(s);2833 sg_dma_len(s) = s->length;2834 }2835 return nents;2836}2837EXPORT_SYMBOL(ib_dma_virt_map_sg);2838#endif /* CONFIG_INFINIBAND_VIRT_DMA */2839 2840static const struct rdma_nl_cbs ibnl_ls_cb_table[RDMA_NL_LS_NUM_OPS] = {2841 [RDMA_NL_LS_OP_RESOLVE] = {2842 .doit = ib_nl_handle_resolve_resp,2843 .flags = RDMA_NL_ADMIN_PERM,2844 },2845 [RDMA_NL_LS_OP_SET_TIMEOUT] = {2846 .doit = ib_nl_handle_set_timeout,2847 .flags = RDMA_NL_ADMIN_PERM,2848 },2849 [RDMA_NL_LS_OP_IP_RESOLVE] = {2850 .doit = ib_nl_handle_ip_res_resp,2851 .flags = RDMA_NL_ADMIN_PERM,2852 },2853};2854 2855static int __init ib_core_init(void)2856{2857 int ret = -ENOMEM;2858 2859 ib_wq = alloc_workqueue("infiniband", 0, 0);2860 if (!ib_wq)2861 return -ENOMEM;2862 2863 ib_unreg_wq = alloc_workqueue("ib-unreg-wq", WQ_UNBOUND,2864 WQ_UNBOUND_MAX_ACTIVE);2865 if (!ib_unreg_wq)2866 goto err;2867 2868 ib_comp_wq = alloc_workqueue("ib-comp-wq",2869 WQ_HIGHPRI | WQ_MEM_RECLAIM | WQ_SYSFS, 0);2870 if (!ib_comp_wq)2871 goto err_unbound;2872 2873 ib_comp_unbound_wq =2874 alloc_workqueue("ib-comp-unb-wq",2875 WQ_UNBOUND | WQ_HIGHPRI | WQ_MEM_RECLAIM |2876 WQ_SYSFS, WQ_UNBOUND_MAX_ACTIVE);2877 if (!ib_comp_unbound_wq)2878 goto err_comp;2879 2880 ret = class_register(&ib_class);2881 if (ret) {2882 pr_warn("Couldn't create InfiniBand device class\n");2883 goto err_comp_unbound;2884 }2885 2886 rdma_nl_init();2887 2888 ret = addr_init();2889 if (ret) {2890 pr_warn("Couldn't init IB address resolution\n");2891 goto err_ibnl;2892 }2893 2894 ret = ib_mad_init();2895 if (ret) {2896 pr_warn("Couldn't init IB MAD\n");2897 goto err_addr;2898 }2899 2900 ret = ib_sa_init();2901 if (ret) {2902 pr_warn("Couldn't init SA\n");2903 goto err_mad;2904 }2905 2906 ret = register_blocking_lsm_notifier(&ibdev_lsm_nb);2907 if (ret) {2908 pr_warn("Couldn't register LSM notifier. ret %d\n", ret);2909 goto err_sa;2910 }2911 2912 ret = register_pernet_device(&rdma_dev_net_ops);2913 if (ret) {2914 pr_warn("Couldn't init compat dev. ret %d\n", ret);2915 goto err_compat;2916 }2917 2918 nldev_init();2919 rdma_nl_register(RDMA_NL_LS, ibnl_ls_cb_table);2920 ret = roce_gid_mgmt_init();2921 if (ret) {2922 pr_warn("Couldn't init RoCE GID management\n");2923 goto err_parent;2924 }2925 2926 return 0;2927 2928err_parent:2929 rdma_nl_unregister(RDMA_NL_LS);2930 nldev_exit();2931 unregister_pernet_device(&rdma_dev_net_ops);2932err_compat:2933 unregister_blocking_lsm_notifier(&ibdev_lsm_nb);2934err_sa:2935 ib_sa_cleanup();2936err_mad:2937 ib_mad_cleanup();2938err_addr:2939 addr_cleanup();2940err_ibnl:2941 class_unregister(&ib_class);2942err_comp_unbound:2943 destroy_workqueue(ib_comp_unbound_wq);2944err_comp:2945 destroy_workqueue(ib_comp_wq);2946err_unbound:2947 destroy_workqueue(ib_unreg_wq);2948err:2949 destroy_workqueue(ib_wq);2950 return ret;2951}2952 2953static void __exit ib_core_cleanup(void)2954{2955 roce_gid_mgmt_cleanup();2956 rdma_nl_unregister(RDMA_NL_LS);2957 nldev_exit();2958 unregister_pernet_device(&rdma_dev_net_ops);2959 unregister_blocking_lsm_notifier(&ibdev_lsm_nb);2960 ib_sa_cleanup();2961 ib_mad_cleanup();2962 addr_cleanup();2963 rdma_nl_exit();2964 class_unregister(&ib_class);2965 destroy_workqueue(ib_comp_unbound_wq);2966 destroy_workqueue(ib_comp_wq);2967 /* Make sure that any pending umem accounting work is done. */2968 destroy_workqueue(ib_wq);2969 destroy_workqueue(ib_unreg_wq);2970 WARN_ON(!xa_empty(&clients));2971 WARN_ON(!xa_empty(&devices));2972}2973 2974MODULE_ALIAS_RDMA_NETLINK(RDMA_NL_LS, 4);2975 2976/* ib core relies on netdev stack to first register net_ns_type_operations2977 * ns kobject type before ib_core initialization.2978 */2979fs_initcall(ib_core_init);2980module_exit(ib_core_cleanup);2981