| .. | .. |
|---|
| 76 | 76 | static int usnic_ib_dump_vf_hdr(void *obj, char *buf, int buf_sz) |
|---|
| 77 | 77 | { |
|---|
| 78 | 78 | struct usnic_ib_vf *vf = obj; |
|---|
| 79 | | - return scnprintf(buf, buf_sz, "PF: %s ", vf->pf->ib_dev.name); |
|---|
| 79 | + return scnprintf(buf, buf_sz, "PF: %s ", dev_name(&vf->pf->ib_dev.dev)); |
|---|
| 80 | 80 | } |
|---|
| 81 | 81 | /* End callback dump funcs */ |
|---|
| 82 | 82 | |
|---|
| .. | .. |
|---|
| 89 | 89 | |
|---|
| 90 | 90 | void usnic_ib_log_vf(struct usnic_ib_vf *vf) |
|---|
| 91 | 91 | { |
|---|
| 92 | | - char buf[1000]; |
|---|
| 93 | | - usnic_ib_dump_vf(vf, buf, sizeof(buf)); |
|---|
| 92 | + char *buf = kzalloc(1000, GFP_KERNEL); |
|---|
| 93 | + |
|---|
| 94 | + if (!buf) |
|---|
| 95 | + return; |
|---|
| 96 | + |
|---|
| 97 | + usnic_ib_dump_vf(vf, buf, 1000); |
|---|
| 94 | 98 | usnic_dbg("%s\n", buf); |
|---|
| 99 | + |
|---|
| 100 | + kfree(buf); |
|---|
| 95 | 101 | } |
|---|
| 96 | 102 | |
|---|
| 97 | 103 | /* Start of netdev section */ |
|---|
| .. | .. |
|---|
| 114 | 120 | IB_QPS_ERR, |
|---|
| 115 | 121 | NULL); |
|---|
| 116 | 122 | if (status) { |
|---|
| 117 | | - usnic_err("Failed to transistion qp grp %u from %s to %s\n", |
|---|
| 123 | + usnic_err("Failed to transition qp grp %u from %s to %s\n", |
|---|
| 118 | 124 | qp_grp->grp_id, |
|---|
| 119 | 125 | usnic_ib_qp_grp_state_to_string |
|---|
| 120 | 126 | (cur_state), |
|---|
| .. | .. |
|---|
| 138 | 144 | netdev = us_ibdev->netdev; |
|---|
| 139 | 145 | switch (event) { |
|---|
| 140 | 146 | case NETDEV_REBOOT: |
|---|
| 141 | | - usnic_info("PF Reset on %s\n", us_ibdev->ib_dev.name); |
|---|
| 147 | + usnic_info("PF Reset on %s\n", dev_name(&us_ibdev->ib_dev.dev)); |
|---|
| 142 | 148 | usnic_ib_qp_grp_modify_active_to_err(us_ibdev); |
|---|
| 143 | 149 | ib_event.event = IB_EVENT_PORT_ERR; |
|---|
| 144 | 150 | ib_event.device = &us_ibdev->ib_dev; |
|---|
| .. | .. |
|---|
| 151 | 157 | if (!us_ibdev->ufdev->link_up && |
|---|
| 152 | 158 | netif_carrier_ok(netdev)) { |
|---|
| 153 | 159 | usnic_fwd_carrier_up(us_ibdev->ufdev); |
|---|
| 154 | | - usnic_info("Link UP on %s\n", us_ibdev->ib_dev.name); |
|---|
| 160 | + usnic_info("Link UP on %s\n", |
|---|
| 161 | + dev_name(&us_ibdev->ib_dev.dev)); |
|---|
| 155 | 162 | ib_event.event = IB_EVENT_PORT_ACTIVE; |
|---|
| 156 | 163 | ib_event.device = &us_ibdev->ib_dev; |
|---|
| 157 | 164 | ib_event.element.port_num = 1; |
|---|
| .. | .. |
|---|
| 159 | 166 | } else if (us_ibdev->ufdev->link_up && |
|---|
| 160 | 167 | !netif_carrier_ok(netdev)) { |
|---|
| 161 | 168 | usnic_fwd_carrier_down(us_ibdev->ufdev); |
|---|
| 162 | | - usnic_info("Link DOWN on %s\n", us_ibdev->ib_dev.name); |
|---|
| 169 | + usnic_info("Link DOWN on %s\n", |
|---|
| 170 | + dev_name(&us_ibdev->ib_dev.dev)); |
|---|
| 163 | 171 | usnic_ib_qp_grp_modify_active_to_err(us_ibdev); |
|---|
| 164 | 172 | ib_event.event = IB_EVENT_PORT_ERR; |
|---|
| 165 | 173 | ib_event.device = &us_ibdev->ib_dev; |
|---|
| .. | .. |
|---|
| 168 | 176 | } else { |
|---|
| 169 | 177 | usnic_dbg("Ignoring %s on %s\n", |
|---|
| 170 | 178 | netdev_cmd_to_name(event), |
|---|
| 171 | | - us_ibdev->ib_dev.name); |
|---|
| 179 | + dev_name(&us_ibdev->ib_dev.dev)); |
|---|
| 172 | 180 | } |
|---|
| 173 | 181 | break; |
|---|
| 174 | 182 | case NETDEV_CHANGEADDR: |
|---|
| 175 | 183 | if (!memcmp(us_ibdev->ufdev->mac, netdev->dev_addr, |
|---|
| 176 | 184 | sizeof(us_ibdev->ufdev->mac))) { |
|---|
| 177 | 185 | usnic_dbg("Ignoring addr change on %s\n", |
|---|
| 178 | | - us_ibdev->ib_dev.name); |
|---|
| 186 | + dev_name(&us_ibdev->ib_dev.dev)); |
|---|
| 179 | 187 | } else { |
|---|
| 180 | 188 | usnic_info(" %s old mac: %pM new mac: %pM\n", |
|---|
| 181 | | - us_ibdev->ib_dev.name, |
|---|
| 189 | + dev_name(&us_ibdev->ib_dev.dev), |
|---|
| 182 | 190 | us_ibdev->ufdev->mac, |
|---|
| 183 | 191 | netdev->dev_addr); |
|---|
| 184 | 192 | usnic_fwd_set_mac(us_ibdev->ufdev, netdev->dev_addr); |
|---|
| .. | .. |
|---|
| 193 | 201 | case NETDEV_CHANGEMTU: |
|---|
| 194 | 202 | if (us_ibdev->ufdev->mtu != netdev->mtu) { |
|---|
| 195 | 203 | usnic_info("MTU Change on %s old: %u new: %u\n", |
|---|
| 196 | | - us_ibdev->ib_dev.name, |
|---|
| 204 | + dev_name(&us_ibdev->ib_dev.dev), |
|---|
| 197 | 205 | us_ibdev->ufdev->mtu, netdev->mtu); |
|---|
| 198 | 206 | usnic_fwd_set_mtu(us_ibdev->ufdev, netdev->mtu); |
|---|
| 199 | 207 | usnic_ib_qp_grp_modify_active_to_err(us_ibdev); |
|---|
| 200 | 208 | } else { |
|---|
| 201 | 209 | usnic_dbg("Ignoring MTU change on %s\n", |
|---|
| 202 | | - us_ibdev->ib_dev.name); |
|---|
| 210 | + dev_name(&us_ibdev->ib_dev.dev)); |
|---|
| 203 | 211 | } |
|---|
| 204 | 212 | break; |
|---|
| 205 | 213 | default: |
|---|
| 206 | 214 | usnic_dbg("Ignoring event %s on %s", |
|---|
| 207 | 215 | netdev_cmd_to_name(event), |
|---|
| 208 | | - us_ibdev->ib_dev.name); |
|---|
| 216 | + dev_name(&us_ibdev->ib_dev.dev)); |
|---|
| 209 | 217 | } |
|---|
| 210 | 218 | mutex_unlock(&us_ibdev->usdev_lock); |
|---|
| 211 | 219 | } |
|---|
| .. | .. |
|---|
| 214 | 222 | unsigned long event, void *ptr) |
|---|
| 215 | 223 | { |
|---|
| 216 | 224 | struct usnic_ib_dev *us_ibdev; |
|---|
| 225 | + struct ib_device *ibdev; |
|---|
| 217 | 226 | |
|---|
| 218 | 227 | struct net_device *netdev = netdev_notifier_info_to_dev(ptr); |
|---|
| 219 | 228 | |
|---|
| 220 | | - mutex_lock(&usnic_ib_ibdev_list_lock); |
|---|
| 221 | | - list_for_each_entry(us_ibdev, &usnic_ib_ibdev_list, ib_dev_link) { |
|---|
| 222 | | - if (us_ibdev->netdev == netdev) { |
|---|
| 223 | | - usnic_ib_handle_usdev_event(us_ibdev, event); |
|---|
| 224 | | - break; |
|---|
| 225 | | - } |
|---|
| 226 | | - } |
|---|
| 227 | | - mutex_unlock(&usnic_ib_ibdev_list_lock); |
|---|
| 229 | + ibdev = ib_device_get_by_netdev(netdev, RDMA_DRIVER_USNIC); |
|---|
| 230 | + if (!ibdev) |
|---|
| 231 | + return NOTIFY_DONE; |
|---|
| 228 | 232 | |
|---|
| 233 | + us_ibdev = container_of(ibdev, struct usnic_ib_dev, ib_dev); |
|---|
| 234 | + usnic_ib_handle_usdev_event(us_ibdev, event); |
|---|
| 235 | + ib_device_put(ibdev); |
|---|
| 229 | 236 | return NOTIFY_DONE; |
|---|
| 230 | 237 | } |
|---|
| 231 | 238 | |
|---|
| .. | .. |
|---|
| 267 | 274 | default: |
|---|
| 268 | 275 | usnic_info("Ignoring event %s on %s", |
|---|
| 269 | 276 | netdev_cmd_to_name(event), |
|---|
| 270 | | - us_ibdev->ib_dev.name); |
|---|
| 277 | + dev_name(&us_ibdev->ib_dev.dev)); |
|---|
| 271 | 278 | } |
|---|
| 272 | 279 | mutex_unlock(&us_ibdev->usdev_lock); |
|---|
| 273 | 280 | |
|---|
| .. | .. |
|---|
| 280 | 287 | struct usnic_ib_dev *us_ibdev; |
|---|
| 281 | 288 | struct in_ifaddr *ifa = ptr; |
|---|
| 282 | 289 | struct net_device *netdev = ifa->ifa_dev->dev; |
|---|
| 290 | + struct ib_device *ibdev; |
|---|
| 283 | 291 | |
|---|
| 284 | | - mutex_lock(&usnic_ib_ibdev_list_lock); |
|---|
| 285 | | - list_for_each_entry(us_ibdev, &usnic_ib_ibdev_list, ib_dev_link) { |
|---|
| 286 | | - if (us_ibdev->netdev == netdev) { |
|---|
| 287 | | - usnic_ib_handle_inet_event(us_ibdev, event, ptr); |
|---|
| 288 | | - break; |
|---|
| 289 | | - } |
|---|
| 290 | | - } |
|---|
| 291 | | - mutex_unlock(&usnic_ib_ibdev_list_lock); |
|---|
| 292 | + ibdev = ib_device_get_by_netdev(netdev, RDMA_DRIVER_USNIC); |
|---|
| 293 | + if (!ibdev) |
|---|
| 294 | + return NOTIFY_DONE; |
|---|
| 292 | 295 | |
|---|
| 296 | + us_ibdev = container_of(ibdev, struct usnic_ib_dev, ib_dev); |
|---|
| 297 | + usnic_ib_handle_inet_event(us_ibdev, event, ptr); |
|---|
| 298 | + ib_device_put(ibdev); |
|---|
| 293 | 299 | return NOTIFY_DONE; |
|---|
| 294 | 300 | } |
|---|
| 295 | 301 | static struct notifier_block usnic_ib_inetaddr_notifier = { |
|---|
| .. | .. |
|---|
| 309 | 315 | if (err) |
|---|
| 310 | 316 | return err; |
|---|
| 311 | 317 | |
|---|
| 312 | | - immutable->pkey_tbl_len = attr.pkey_tbl_len; |
|---|
| 313 | 318 | immutable->gid_tbl_len = attr.gid_tbl_len; |
|---|
| 314 | 319 | |
|---|
| 315 | 320 | return 0; |
|---|
| .. | .. |
|---|
| 328 | 333 | snprintf(str, IB_FW_VERSION_NAME_MAX, "%s", info.fw_version); |
|---|
| 329 | 334 | } |
|---|
| 330 | 335 | |
|---|
| 336 | +static const struct ib_device_ops usnic_dev_ops = { |
|---|
| 337 | + .owner = THIS_MODULE, |
|---|
| 338 | + .driver_id = RDMA_DRIVER_USNIC, |
|---|
| 339 | + .uverbs_abi_ver = USNIC_UVERBS_ABI_VERSION, |
|---|
| 340 | + |
|---|
| 341 | + .alloc_pd = usnic_ib_alloc_pd, |
|---|
| 342 | + .alloc_ucontext = usnic_ib_alloc_ucontext, |
|---|
| 343 | + .create_cq = usnic_ib_create_cq, |
|---|
| 344 | + .create_qp = usnic_ib_create_qp, |
|---|
| 345 | + .dealloc_pd = usnic_ib_dealloc_pd, |
|---|
| 346 | + .dealloc_ucontext = usnic_ib_dealloc_ucontext, |
|---|
| 347 | + .dereg_mr = usnic_ib_dereg_mr, |
|---|
| 348 | + .destroy_cq = usnic_ib_destroy_cq, |
|---|
| 349 | + .destroy_qp = usnic_ib_destroy_qp, |
|---|
| 350 | + .get_dev_fw_str = usnic_get_dev_fw_str, |
|---|
| 351 | + .get_link_layer = usnic_ib_port_link_layer, |
|---|
| 352 | + .get_port_immutable = usnic_port_immutable, |
|---|
| 353 | + .mmap = usnic_ib_mmap, |
|---|
| 354 | + .modify_qp = usnic_ib_modify_qp, |
|---|
| 355 | + .query_device = usnic_ib_query_device, |
|---|
| 356 | + .query_gid = usnic_ib_query_gid, |
|---|
| 357 | + .query_port = usnic_ib_query_port, |
|---|
| 358 | + .query_qp = usnic_ib_query_qp, |
|---|
| 359 | + .reg_user_mr = usnic_ib_reg_mr, |
|---|
| 360 | + INIT_RDMA_OBJ_SIZE(ib_pd, usnic_ib_pd, ibpd), |
|---|
| 361 | + INIT_RDMA_OBJ_SIZE(ib_cq, usnic_ib_cq, ibcq), |
|---|
| 362 | + INIT_RDMA_OBJ_SIZE(ib_ucontext, usnic_ib_ucontext, ibucontext), |
|---|
| 363 | +}; |
|---|
| 364 | + |
|---|
| 331 | 365 | /* Start of PF discovery section */ |
|---|
| 332 | 366 | static void *usnic_ib_device_add(struct pci_dev *dev) |
|---|
| 333 | 367 | { |
|---|
| .. | .. |
|---|
| 335 | 369 | union ib_gid gid; |
|---|
| 336 | 370 | struct in_device *ind; |
|---|
| 337 | 371 | struct net_device *netdev; |
|---|
| 372 | + int ret; |
|---|
| 338 | 373 | |
|---|
| 339 | 374 | usnic_dbg("\n"); |
|---|
| 340 | 375 | netdev = pci_get_drvdata(dev); |
|---|
| 341 | 376 | |
|---|
| 342 | | - us_ibdev = (struct usnic_ib_dev *)ib_alloc_device(sizeof(*us_ibdev)); |
|---|
| 377 | + us_ibdev = ib_alloc_device(usnic_ib_dev, ib_dev); |
|---|
| 343 | 378 | if (!us_ibdev) { |
|---|
| 344 | 379 | usnic_err("Device %s context alloc failed\n", |
|---|
| 345 | 380 | netdev_name(pci_get_drvdata(dev))); |
|---|
| .. | .. |
|---|
| 358 | 393 | |
|---|
| 359 | 394 | us_ibdev->pdev = dev; |
|---|
| 360 | 395 | us_ibdev->netdev = pci_get_drvdata(dev); |
|---|
| 361 | | - us_ibdev->ib_dev.owner = THIS_MODULE; |
|---|
| 362 | 396 | us_ibdev->ib_dev.node_type = RDMA_NODE_USNIC_UDP; |
|---|
| 363 | 397 | us_ibdev->ib_dev.phys_port_cnt = USNIC_IB_PORT_CNT; |
|---|
| 364 | 398 | us_ibdev->ib_dev.num_comp_vectors = USNIC_IB_NUM_COMP_VECTORS; |
|---|
| 365 | 399 | us_ibdev->ib_dev.dev.parent = &dev->dev; |
|---|
| 366 | | - us_ibdev->ib_dev.uverbs_abi_ver = USNIC_UVERBS_ABI_VERSION; |
|---|
| 367 | | - strlcpy(us_ibdev->ib_dev.name, "usnic_%d", IB_DEVICE_NAME_MAX); |
|---|
| 368 | 400 | |
|---|
| 369 | 401 | us_ibdev->ib_dev.uverbs_cmd_mask = |
|---|
| 370 | 402 | (1ull << IB_USER_VERBS_CMD_GET_CONTEXT) | |
|---|
| .. | .. |
|---|
| 385 | 417 | (1ull << IB_USER_VERBS_CMD_DETACH_MCAST) | |
|---|
| 386 | 418 | (1ull << IB_USER_VERBS_CMD_OPEN_QP); |
|---|
| 387 | 419 | |
|---|
| 388 | | - us_ibdev->ib_dev.query_device = usnic_ib_query_device; |
|---|
| 389 | | - us_ibdev->ib_dev.query_port = usnic_ib_query_port; |
|---|
| 390 | | - us_ibdev->ib_dev.query_pkey = usnic_ib_query_pkey; |
|---|
| 391 | | - us_ibdev->ib_dev.query_gid = usnic_ib_query_gid; |
|---|
| 392 | | - us_ibdev->ib_dev.get_netdev = usnic_get_netdev; |
|---|
| 393 | | - us_ibdev->ib_dev.get_link_layer = usnic_ib_port_link_layer; |
|---|
| 394 | | - us_ibdev->ib_dev.alloc_pd = usnic_ib_alloc_pd; |
|---|
| 395 | | - us_ibdev->ib_dev.dealloc_pd = usnic_ib_dealloc_pd; |
|---|
| 396 | | - us_ibdev->ib_dev.create_qp = usnic_ib_create_qp; |
|---|
| 397 | | - us_ibdev->ib_dev.modify_qp = usnic_ib_modify_qp; |
|---|
| 398 | | - us_ibdev->ib_dev.query_qp = usnic_ib_query_qp; |
|---|
| 399 | | - us_ibdev->ib_dev.destroy_qp = usnic_ib_destroy_qp; |
|---|
| 400 | | - us_ibdev->ib_dev.create_cq = usnic_ib_create_cq; |
|---|
| 401 | | - us_ibdev->ib_dev.destroy_cq = usnic_ib_destroy_cq; |
|---|
| 402 | | - us_ibdev->ib_dev.reg_user_mr = usnic_ib_reg_mr; |
|---|
| 403 | | - us_ibdev->ib_dev.dereg_mr = usnic_ib_dereg_mr; |
|---|
| 404 | | - us_ibdev->ib_dev.alloc_ucontext = usnic_ib_alloc_ucontext; |
|---|
| 405 | | - us_ibdev->ib_dev.dealloc_ucontext = usnic_ib_dealloc_ucontext; |
|---|
| 406 | | - us_ibdev->ib_dev.mmap = usnic_ib_mmap; |
|---|
| 407 | | - us_ibdev->ib_dev.create_ah = usnic_ib_create_ah; |
|---|
| 408 | | - us_ibdev->ib_dev.destroy_ah = usnic_ib_destroy_ah; |
|---|
| 409 | | - us_ibdev->ib_dev.post_send = usnic_ib_post_send; |
|---|
| 410 | | - us_ibdev->ib_dev.post_recv = usnic_ib_post_recv; |
|---|
| 411 | | - us_ibdev->ib_dev.poll_cq = usnic_ib_poll_cq; |
|---|
| 412 | | - us_ibdev->ib_dev.req_notify_cq = usnic_ib_req_notify_cq; |
|---|
| 413 | | - us_ibdev->ib_dev.get_dma_mr = usnic_ib_get_dma_mr; |
|---|
| 414 | | - us_ibdev->ib_dev.get_port_immutable = usnic_port_immutable; |
|---|
| 415 | | - us_ibdev->ib_dev.get_dev_fw_str = usnic_get_dev_fw_str; |
|---|
| 420 | + ib_set_device_ops(&us_ibdev->ib_dev, &usnic_dev_ops); |
|---|
| 416 | 421 | |
|---|
| 422 | + rdma_set_device_sysfs_group(&us_ibdev->ib_dev, &usnic_attr_group); |
|---|
| 417 | 423 | |
|---|
| 418 | | - us_ibdev->ib_dev.driver_id = RDMA_DRIVER_USNIC; |
|---|
| 419 | | - if (ib_register_device(&us_ibdev->ib_dev, NULL)) |
|---|
| 424 | + ret = ib_device_set_netdev(&us_ibdev->ib_dev, us_ibdev->netdev, 1); |
|---|
| 425 | + if (ret) |
|---|
| 426 | + goto err_fwd_dealloc; |
|---|
| 427 | + |
|---|
| 428 | + dma_set_max_seg_size(&dev->dev, SZ_2G); |
|---|
| 429 | + if (ib_register_device(&us_ibdev->ib_dev, "usnic_%d", &dev->dev)) |
|---|
| 420 | 430 | goto err_fwd_dealloc; |
|---|
| 421 | 431 | |
|---|
| 422 | 432 | usnic_fwd_set_mtu(us_ibdev->ufdev, us_ibdev->netdev->mtu); |
|---|
| .. | .. |
|---|
| 424 | 434 | if (netif_carrier_ok(us_ibdev->netdev)) |
|---|
| 425 | 435 | usnic_fwd_carrier_up(us_ibdev->ufdev); |
|---|
| 426 | 436 | |
|---|
| 427 | | - ind = in_dev_get(netdev); |
|---|
| 428 | | - if (ind->ifa_list) |
|---|
| 429 | | - usnic_fwd_add_ipaddr(us_ibdev->ufdev, |
|---|
| 430 | | - ind->ifa_list->ifa_address); |
|---|
| 431 | | - in_dev_put(ind); |
|---|
| 437 | + rcu_read_lock(); |
|---|
| 438 | + ind = __in_dev_get_rcu(netdev); |
|---|
| 439 | + if (ind) { |
|---|
| 440 | + const struct in_ifaddr *ifa; |
|---|
| 441 | + |
|---|
| 442 | + ifa = rcu_dereference(ind->ifa_list); |
|---|
| 443 | + if (ifa) |
|---|
| 444 | + usnic_fwd_add_ipaddr(us_ibdev->ufdev, ifa->ifa_address); |
|---|
| 445 | + } |
|---|
| 446 | + rcu_read_unlock(); |
|---|
| 432 | 447 | |
|---|
| 433 | 448 | usnic_mac_ip_to_gid(us_ibdev->netdev->perm_addr, |
|---|
| 434 | 449 | us_ibdev->ufdev->inaddr, &gid.raw[0]); |
|---|
| .. | .. |
|---|
| 437 | 452 | kref_init(&us_ibdev->vf_cnt); |
|---|
| 438 | 453 | |
|---|
| 439 | 454 | usnic_info("Added ibdev: %s netdev: %s with mac %pM Link: %u MTU: %u\n", |
|---|
| 440 | | - us_ibdev->ib_dev.name, netdev_name(us_ibdev->netdev), |
|---|
| 441 | | - us_ibdev->ufdev->mac, us_ibdev->ufdev->link_up, |
|---|
| 442 | | - us_ibdev->ufdev->mtu); |
|---|
| 455 | + dev_name(&us_ibdev->ib_dev.dev), |
|---|
| 456 | + netdev_name(us_ibdev->netdev), us_ibdev->ufdev->mac, |
|---|
| 457 | + us_ibdev->ufdev->link_up, us_ibdev->ufdev->mtu); |
|---|
| 443 | 458 | return us_ibdev; |
|---|
| 444 | 459 | |
|---|
| 445 | 460 | err_fwd_dealloc: |
|---|
| .. | .. |
|---|
| 452 | 467 | |
|---|
| 453 | 468 | static void usnic_ib_device_remove(struct usnic_ib_dev *us_ibdev) |
|---|
| 454 | 469 | { |
|---|
| 455 | | - usnic_info("Unregistering %s\n", us_ibdev->ib_dev.name); |
|---|
| 470 | + usnic_info("Unregistering %s\n", dev_name(&us_ibdev->ib_dev.dev)); |
|---|
| 456 | 471 | usnic_ib_sysfs_unregister_usdev(us_ibdev); |
|---|
| 457 | 472 | usnic_fwd_dev_free(us_ibdev->ufdev); |
|---|
| 458 | 473 | ib_unregister_device(&us_ibdev->ib_dev); |
|---|
| .. | .. |
|---|
| 471 | 486 | &usnic_ib_ibdev_list, ib_dev_link) { |
|---|
| 472 | 487 | if (us_ibdev->pdev == dev) { |
|---|
| 473 | 488 | list_del(&us_ibdev->ib_dev_link); |
|---|
| 474 | | - usnic_ib_device_remove(us_ibdev); |
|---|
| 475 | 489 | found = true; |
|---|
| 476 | 490 | break; |
|---|
| 477 | 491 | } |
|---|
| 478 | 492 | } |
|---|
| 479 | 493 | |
|---|
| 480 | | - WARN(!found, "Failed to remove PF %s\n", pci_name(dev)); |
|---|
| 481 | 494 | |
|---|
| 482 | 495 | mutex_unlock(&usnic_ib_ibdev_list_lock); |
|---|
| 496 | + if (found) |
|---|
| 497 | + usnic_ib_device_remove(us_ibdev); |
|---|
| 498 | + else |
|---|
| 499 | + WARN(1, "Failed to remove PF %s\n", pci_name(dev)); |
|---|
| 483 | 500 | } |
|---|
| 484 | 501 | |
|---|
| 485 | 502 | static struct usnic_ib_dev *usnic_ib_discover_pf(struct usnic_vnic *vnic) |
|---|
| .. | .. |
|---|
| 591 | 608 | mutex_unlock(&pf->usdev_lock); |
|---|
| 592 | 609 | |
|---|
| 593 | 610 | usnic_info("Registering usnic VF %s into PF %s\n", pci_name(pdev), |
|---|
| 594 | | - pf->ib_dev.name); |
|---|
| 611 | + dev_name(&pf->ib_dev.dev)); |
|---|
| 595 | 612 | usnic_ib_log_vf(vf); |
|---|
| 596 | 613 | return 0; |
|---|
| 597 | 614 | |
|---|
| .. | .. |
|---|
| 646 | 663 | |
|---|
| 647 | 664 | err = usnic_uiom_init(DRV_NAME); |
|---|
| 648 | 665 | if (err) { |
|---|
| 649 | | - usnic_err("Unable to initalize umem with err %d\n", err); |
|---|
| 666 | + usnic_err("Unable to initialize umem with err %d\n", err); |
|---|
| 650 | 667 | return err; |
|---|
| 651 | 668 | } |
|---|
| 652 | 669 | |
|---|
| .. | .. |
|---|
| 685 | 702 | out_pci_unreg: |
|---|
| 686 | 703 | pci_unregister_driver(&usnic_ib_pci_driver); |
|---|
| 687 | 704 | out_umem_fini: |
|---|
| 688 | | - usnic_uiom_fini(); |
|---|
| 689 | 705 | |
|---|
| 690 | 706 | return err; |
|---|
| 691 | 707 | } |
|---|
| .. | .. |
|---|
| 698 | 714 | unregister_inetaddr_notifier(&usnic_ib_inetaddr_notifier); |
|---|
| 699 | 715 | unregister_netdevice_notifier(&usnic_ib_netdevice_notifier); |
|---|
| 700 | 716 | pci_unregister_driver(&usnic_ib_pci_driver); |
|---|
| 701 | | - usnic_uiom_fini(); |
|---|
| 702 | 717 | } |
|---|
| 703 | 718 | |
|---|
| 704 | 719 | MODULE_DESCRIPTION("Cisco VIC (usNIC) Verbs Driver"); |
|---|