Skip to content

Commit

Permalink
virtio-net: Add initial MTU advice feature
Browse files Browse the repository at this point in the history
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: Aaron Conole <aconole@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Aaron Conole authored and David S. Miller committed Jun 7, 2016
1 parent 3d9dc40 commit 14de9d1
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 0 deletions.
10 changes: 10 additions & 0 deletions drivers/net/virtio_net.c
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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 = {
Expand Down
3 changes: 3 additions & 0 deletions include/uapi/linux/virtio_net.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand All @@ -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));

/*
Expand Down

0 comments on commit 14de9d1

Please sign in to comment.