.. | .. |
---|
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"); |
---|