diff options
Diffstat (limited to 'drivers/net/virtio_net.c')
| -rw-r--r-- | drivers/net/virtio_net.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 9320d96a1632..143d8a95a60d 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -869,7 +869,7 @@ static unsigned int get_mergeable_buf_len(struct receive_queue *rq,  	unsigned int len;  	len = hdr_len + clamp_t(unsigned int, ewma_pkt_len_read(avg_pkt_len), -				rq->min_buf_len - hdr_len, PAGE_SIZE - hdr_len); +				rq->min_buf_len, PAGE_SIZE - hdr_len);  	return ALIGN(len, L1_CACHE_BYTES);  } @@ -1797,6 +1797,7 @@ static void virtnet_freeze_down(struct virtio_device *vdev)  	flush_work(&vi->config_work);  	netif_device_detach(vi->dev); +	netif_tx_disable(vi->dev);  	cancel_delayed_work_sync(&vi->refill);  	if (netif_running(vi->dev)) { @@ -1989,6 +1990,7 @@ static const struct net_device_ops virtnet_netdev = {  	.ndo_poll_controller = virtnet_netpoll,  #endif  	.ndo_xdp		= virtnet_xdp, +	.ndo_features_check	= passthru_features_check,  };  static void virtnet_config_changed_work(struct work_struct *work) @@ -2143,7 +2145,8 @@ static unsigned int mergeable_min_buf_len(struct virtnet_info *vi, struct virtqu  	unsigned int buf_len = hdr_len + ETH_HLEN + VLAN_HLEN + packet_len;  	unsigned int min_buf_len = DIV_ROUND_UP(buf_len, rq_size); -	return max(min_buf_len, hdr_len); +	return max(max(min_buf_len, hdr_len) - hdr_len, +		   (unsigned int)GOOD_PACKET_LEN);  }  static int virtnet_find_vqs(struct virtnet_info *vi)  | 
