diff options
author | Ingo Molnar <mingo@kernel.org> | 2014-01-05 06:34:29 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2014-01-05 06:34:29 -0500 |
commit | ef0b8b9a521c65201bfca9747ee1bf374296133c (patch) | |
tree | 644c3390c07d06fb7807182a4935f7c3f675b157 /drivers/net/xen-netback/interface.c | |
parent | 5c12af0c41e3417e1939095325920463b5f8e726 (diff) | |
parent | d6e0a2dd12f4067a5bcefb8bbd8ddbeff800afbc (diff) |
Merge tag 'v3.13-rc7' into x86/efi-kexec to resolve conflicts
Conflicts:
arch/x86/platform/efi/efi.c
drivers/firmware/efi/Kconfig
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/net/xen-netback/interface.c')
-rw-r--r-- | drivers/net/xen-netback/interface.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c index 2329cccf1fa6..34ca4e58a43d 100644 --- a/drivers/net/xen-netback/interface.c +++ b/drivers/net/xen-netback/interface.c | |||
@@ -307,6 +307,15 @@ struct xenvif *xenvif_alloc(struct device *parent, domid_t domid, | |||
307 | SET_NETDEV_DEV(dev, parent); | 307 | SET_NETDEV_DEV(dev, parent); |
308 | 308 | ||
309 | vif = netdev_priv(dev); | 309 | vif = netdev_priv(dev); |
310 | |||
311 | vif->grant_copy_op = vmalloc(sizeof(struct gnttab_copy) * | ||
312 | MAX_GRANT_COPY_OPS); | ||
313 | if (vif->grant_copy_op == NULL) { | ||
314 | pr_warn("Could not allocate grant copy space for %s\n", name); | ||
315 | free_netdev(dev); | ||
316 | return ERR_PTR(-ENOMEM); | ||
317 | } | ||
318 | |||
310 | vif->domid = domid; | 319 | vif->domid = domid; |
311 | vif->handle = handle; | 320 | vif->handle = handle; |
312 | vif->can_sg = 1; | 321 | vif->can_sg = 1; |
@@ -368,11 +377,11 @@ int xenvif_connect(struct xenvif *vif, unsigned long tx_ring_ref, | |||
368 | unsigned long rx_ring_ref, unsigned int tx_evtchn, | 377 | unsigned long rx_ring_ref, unsigned int tx_evtchn, |
369 | unsigned int rx_evtchn) | 378 | unsigned int rx_evtchn) |
370 | { | 379 | { |
380 | struct task_struct *task; | ||
371 | int err = -ENOMEM; | 381 | int err = -ENOMEM; |
372 | 382 | ||
373 | /* Already connected through? */ | 383 | BUG_ON(vif->tx_irq); |
374 | if (vif->tx_irq) | 384 | BUG_ON(vif->task); |
375 | return 0; | ||
376 | 385 | ||
377 | err = xenvif_map_frontend_rings(vif, tx_ring_ref, rx_ring_ref); | 386 | err = xenvif_map_frontend_rings(vif, tx_ring_ref, rx_ring_ref); |
378 | if (err < 0) | 387 | if (err < 0) |
@@ -411,14 +420,16 @@ int xenvif_connect(struct xenvif *vif, unsigned long tx_ring_ref, | |||
411 | } | 420 | } |
412 | 421 | ||
413 | init_waitqueue_head(&vif->wq); | 422 | init_waitqueue_head(&vif->wq); |
414 | vif->task = kthread_create(xenvif_kthread, | 423 | task = kthread_create(xenvif_kthread, |
415 | (void *)vif, "%s", vif->dev->name); | 424 | (void *)vif, "%s", vif->dev->name); |
416 | if (IS_ERR(vif->task)) { | 425 | if (IS_ERR(task)) { |
417 | pr_warn("Could not allocate kthread for %s\n", vif->dev->name); | 426 | pr_warn("Could not allocate kthread for %s\n", vif->dev->name); |
418 | err = PTR_ERR(vif->task); | 427 | err = PTR_ERR(task); |
419 | goto err_rx_unbind; | 428 | goto err_rx_unbind; |
420 | } | 429 | } |
421 | 430 | ||
431 | vif->task = task; | ||
432 | |||
422 | rtnl_lock(); | 433 | rtnl_lock(); |
423 | if (!vif->can_sg && vif->dev->mtu > ETH_DATA_LEN) | 434 | if (!vif->can_sg && vif->dev->mtu > ETH_DATA_LEN) |
424 | dev_set_mtu(vif->dev, ETH_DATA_LEN); | 435 | dev_set_mtu(vif->dev, ETH_DATA_LEN); |
@@ -461,8 +472,10 @@ void xenvif_disconnect(struct xenvif *vif) | |||
461 | if (netif_carrier_ok(vif->dev)) | 472 | if (netif_carrier_ok(vif->dev)) |
462 | xenvif_carrier_off(vif); | 473 | xenvif_carrier_off(vif); |
463 | 474 | ||
464 | if (vif->task) | 475 | if (vif->task) { |
465 | kthread_stop(vif->task); | 476 | kthread_stop(vif->task); |
477 | vif->task = NULL; | ||
478 | } | ||
466 | 479 | ||
467 | if (vif->tx_irq) { | 480 | if (vif->tx_irq) { |
468 | if (vif->tx_irq == vif->rx_irq) | 481 | if (vif->tx_irq == vif->rx_irq) |
@@ -483,6 +496,7 @@ void xenvif_free(struct xenvif *vif) | |||
483 | 496 | ||
484 | unregister_netdev(vif->dev); | 497 | unregister_netdev(vif->dev); |
485 | 498 | ||
499 | vfree(vif->grant_copy_op); | ||
486 | free_netdev(vif->dev); | 500 | free_netdev(vif->dev); |
487 | 501 | ||
488 | module_put(THIS_MODULE); | 502 | module_put(THIS_MODULE); |