Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 14de9d11 authored by Aaron Conole's avatar Aaron Conole Committed by David S. Miller
Browse files

virtio-net: Add initial MTU advice feature



This commit adds the feature bit and associated mtu device entry for the
virtio network device.  When a virtio device comes up, it checks the
feature bit for the VIRTIO_NET_F_MTU feature.  If such feature bit is
enabled, the driver will read the advised MTU and use it as the initial
value.

Signed-off-by: default avatarAaron Conole <aconole@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3d9dc408
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1780,6 +1780,7 @@ static int virtnet_probe(struct virtio_device *vdev)
	struct net_device *dev;
	struct virtnet_info *vi;
	u16 max_queue_pairs;
	int mtu;

	if (!vdev->config->get) {
		dev_err(&vdev->dev, "%s failure: config access disabled\n",
@@ -1896,6 +1897,14 @@ static int virtnet_probe(struct virtio_device *vdev)
	if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ))
		vi->has_cvq = true;

	if (virtio_has_feature(vdev, VIRTIO_NET_F_MTU)) {
		mtu = virtio_cread16(vdev,
				     offsetof(struct virtio_net_config,
					      mtu));
		if (virtnet_change_mtu(dev, mtu))
			__virtio_clear_bit(vdev, VIRTIO_NET_F_MTU);
	}

	if (vi->any_header_sg)
		dev->needed_headroom = vi->hdr_len;

@@ -2067,6 +2076,7 @@ static unsigned int features[] = {
	VIRTIO_NET_F_GUEST_ANNOUNCE, VIRTIO_NET_F_MQ,
	VIRTIO_NET_F_CTRL_MAC_ADDR,
	VIRTIO_F_ANY_LAYOUT,
	VIRTIO_NET_F_MTU,
};

static struct virtio_driver virtio_net_driver = {
+3 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@
#define VIRTIO_NET_F_MQ	22	/* Device supports Receive Flow
					 * Steering */
#define VIRTIO_NET_F_CTRL_MAC_ADDR 23	/* Set MAC address */
#define VIRTIO_NET_F_MTU 25	/* Initial MTU advice */

#ifndef VIRTIO_NET_NO_LEGACY
#define VIRTIO_NET_F_GSO	6	/* Host handles pkts w/ any GSO type */
@@ -73,6 +74,8 @@ struct virtio_net_config {
	 * Legal values are between 1 and 0x8000
	 */
	__u16 max_virtqueue_pairs;
	/* Default maximum transmit unit advice */
	__u16 mtu;
} __attribute__((packed));

/*