diff options
Diffstat (limited to 'drivers/net/xen-netfront.c')
| -rw-r--r-- | drivers/net/xen-netfront.c | 12 | 
1 files changed, 11 insertions, 1 deletions
| diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index e31b98403f31..911f43986a8c 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -1730,6 +1730,10 @@ static int netfront_resume(struct xenbus_device *dev)  	dev_dbg(&dev->dev, "%s\n", dev->nodename); +	netif_tx_lock_bh(info->netdev); +	netif_device_detach(info->netdev); +	netif_tx_unlock_bh(info->netdev); +  	xennet_disconnect_backend(info);  	return 0;  } @@ -2157,6 +2161,7 @@ static int talk_to_netback(struct xenbus_device *dev,  	unsigned int max_queues = 0;  	struct netfront_queue *queue = NULL;  	unsigned int num_queues = 1; +	u8 addr[ETH_ALEN];  	info->netdev->irq = 0; @@ -2170,11 +2175,12 @@ static int talk_to_netback(struct xenbus_device *dev,  					"feature-split-event-channels", 0);  	/* Read mac addr. */ -	err = xen_net_read_mac(dev, info->netdev->dev_addr); +	err = xen_net_read_mac(dev, addr);  	if (err) {  		xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename);  		goto out_unlocked;  	} +	eth_hw_addr_set(info->netdev, addr);  	info->netback_has_xdp_headroom = xenbus_read_unsigned(info->xbdev->otherend,  							      "feature-xdp-headroom", 0); @@ -2349,6 +2355,10 @@ static int xennet_connect(struct net_device *dev)  	 * domain a kick because we've probably just requeued some  	 * packets.  	 */ +	netif_tx_lock_bh(np->netdev); +	netif_device_attach(np->netdev); +	netif_tx_unlock_bh(np->netdev); +  	netif_carrier_on(np->netdev);  	for (j = 0; j < num_queues; ++j) {  		queue = &np->queues[j]; |