diff mbox

virtio_net: enable big packets for large MTU values

Message ID 1490791079-22108-1-git-send-email-mst@redhat.com
State Superseded, archived
Delegated to: David Miller
Headers show

Commit Message

Michael S. Tsirkin March 29, 2017, 12:38 p.m. UTC
If one enables e.g. jumbo frames without mergeable
buffers, packets won't fit in 1500 byte buffers
we use. Switch to big packet mode instead.
TODO: make sizing more exact, possibly extend small
packet mode to use larger pages.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 drivers/net/virtio_net.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Michael S. Tsirkin March 29, 2017, 4:13 p.m. UTC | #1
On Wed, Mar 29, 2017 at 03:38:09PM +0300, Michael S. Tsirkin wrote:
> If one enables e.g. jumbo frames without mergeable
> buffers, packets won't fit in 1500 byte buffers
> we use. Switch to big packet mode instead.
> TODO: make sizing more exact, possibly extend small
> packet mode to use larger pages.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Fixes: 14de9d114a82 ("virtio-net: Add initial MTU advice feature")

> ---
>  drivers/net/virtio_net.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index e0fb3707..9dc31dc 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -2428,6 +2428,10 @@ static int virtnet_probe(struct virtio_device *vdev)
>  			dev->mtu = mtu;
>  			dev->max_mtu = mtu;
>  		}
> +
> +		/* TODO: size buffers correctly in this case. */
> +		if (dev->mtu > ETH_DATA_LEN)
> +			vi->big_packets = true;
>  	}
>  
>  	if (vi->any_header_sg)
> -- 
> MST
Jason Wang March 30, 2017, 4:03 a.m. UTC | #2
On 2017年03月29日 20:38, Michael S. Tsirkin wrote:
> If one enables e.g. jumbo frames without mergeable
> buffers, packets won't fit in 1500 byte buffers
> we use. Switch to big packet mode instead.
> TODO: make sizing more exact, possibly extend small
> packet mode to use larger pages.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>   drivers/net/virtio_net.c | 4 ++++
>   1 file changed, 4 insertions(+)
>
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index e0fb3707..9dc31dc 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -2428,6 +2428,10 @@ static int virtnet_probe(struct virtio_device *vdev)
>   			dev->mtu = mtu;
>   			dev->max_mtu = mtu;
>   		}
> +
> +		/* TODO: size buffers correctly in this case. */
> +		if (dev->mtu > ETH_DATA_LEN)
> +			vi->big_packets = true;
>   	}
>   
>   	if (vi->any_header_sg)

Ok, I think maybe we should fail the probe of small buffer in this case 
and decrease the max_mtu to ETH_DATA_LEN if small buffer is used (since 
user are allowed to increase the mtu).

Thanks
diff mbox

Patch

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index e0fb3707..9dc31dc 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -2428,6 +2428,10 @@  static int virtnet_probe(struct virtio_device *vdev)
 			dev->mtu = mtu;
 			dev->max_mtu = mtu;
 		}
+
+		/* TODO: size buffers correctly in this case. */
+		if (dev->mtu > ETH_DATA_LEN)
+			vi->big_packets = true;
 	}
 
 	if (vi->any_header_sg)