diff options
Diffstat (limited to 'drivers/net/hyperv/netvsc_drv.c')
| -rw-r--r-- | drivers/net/hyperv/netvsc_drv.c | 18 | 
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 1a1ca6cfc74..466c58a7353 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -123,7 +123,7 @@ static int netvsc_close(struct net_device *net)  	struct hv_device *device_obj = net_device_ctx->device_ctx;  	int ret; -	netif_stop_queue(net); +	netif_tx_disable(net);  	ret = rndis_filter_close(device_obj);  	if (ret != 0) @@ -151,10 +151,10 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)  	int ret;  	unsigned int i, num_pages, npg_data; -	/* Add multipage for skb->data and additional one for RNDIS */ +	/* Add multipages for skb->data and additional 2 for RNDIS */  	npg_data = (((unsigned long)skb->data + skb_headlen(skb) - 1)  		>> PAGE_SHIFT) - ((unsigned long)skb->data >> PAGE_SHIFT) + 1; -	num_pages = skb_shinfo(skb)->nr_frags + npg_data + 1; +	num_pages = skb_shinfo(skb)->nr_frags + npg_data + 2;  	/* Allocate a netvsc packet based on # of frags. */  	packet = kzalloc(sizeof(struct hv_netvsc_packet) + @@ -173,8 +173,8 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)  				sizeof(struct hv_netvsc_packet) +  				    (num_pages * sizeof(struct hv_page_buffer)); -	/* Setup the rndis header */ -	packet->page_buf_cnt = num_pages; +	/* If the rndis msg goes beyond 1 page, we will add 1 later */ +	packet->page_buf_cnt = num_pages - 1;  	/* Initialize it from the skb */  	packet->total_data_buflen = skb->len; @@ -256,7 +256,7 @@ void netvsc_linkstatus_callback(struct hv_device *device_obj,  		schedule_delayed_work(&ndev_ctx->dwork, msecs_to_jiffies(20));  	} else {  		netif_carrier_off(net); -		netif_stop_queue(net); +		netif_tx_disable(net);  	}  } @@ -298,7 +298,7 @@ int netvsc_recv_callback(struct hv_device *device_obj,  	skb->ip_summed = CHECKSUM_NONE;  	net->stats.rx_packets++; -	net->stats.rx_bytes += skb->len; +	net->stats.rx_bytes += packet->total_data_buflen;  	/*  	 * Pass the skb back up. Network stack will deallocate the skb when it @@ -337,7 +337,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)  	nvdev->start_remove = true;  	cancel_delayed_work_sync(&ndevctx->dwork); -	netif_stop_queue(ndev); +	netif_tx_disable(ndev);  	rndis_filter_device_remove(hdev);  	ndev->mtu = mtu; @@ -460,7 +460,7 @@ static int netvsc_remove(struct hv_device *dev)  	cancel_delayed_work_sync(&ndev_ctx->dwork);  	/* Stop outbound asap */ -	netif_stop_queue(net); +	netif_tx_disable(net);  	unregister_netdev(net);  |