]> Zhao Yanbai Git Server - minix.git/commitdiff
virtio-net: acknowledge used features 08/808/1
authorAurelien Jarno <aurelien@aurel32.net>
Sun, 28 Apr 2013 15:06:33 +0000 (17:06 +0200)
committerBen Gras <ben@minix3.org>
Wed, 11 Sep 2013 16:34:11 +0000 (18:34 +0200)
According to the virtio specifications, the host present the supported
features to the guest, and the guest should answer woth the features it
supports. This allows the host to disable support for features that the
guest is not going to use.

Minix tells to the host it doesn't support any extended features, while
it uses at least VIRTIO_NET_F_MAC and VIRTIO_NET_F_CTRL_VQ. For the
latter it seems it only allocate the queue while not using it later.
However starting with QEMU 1.4.0, with multiqueue support added, the
control queue is not allocated on the host side if the guest doesn't
tell it supports this feature. This cause virtio-net to crash on the
Minix side.

This patch fixes that by correctly telling the features that are
used by the Minix guest for more than printing a debug message. This
fixes virtio-net on QEMU 1.4.x.

Change-Id: I8bbf757c09d24e0f5fe5835531a1c9203b714bd7

drivers/virtio_net/virtio_net.c

index 9f17495325bcf9fe85cee8beafc807382e92a47e..0fad9c6ef93f2510e66794cf3a0b4029d39b6ca2 100644 (file)
@@ -112,9 +112,9 @@ static void sef_cb_signal_handler(int signo);
 /* TODO: Features are pretty much ignored */
 struct virtio_feature netf[] = {
        { "partial csum",       VIRTIO_NET_F_CSUM,      0,      0       },
-       { "given mac",          VIRTIO_NET_F_MAC,       0,      0       },
+       { "given mac",          VIRTIO_NET_F_MAC,       0,      1       },
        { "status ",            VIRTIO_NET_F_STATUS,    0,      0       },
-       { "control channel",    VIRTIO_NET_F_CTRL_VQ,   0,      0       },
+       { "control channel",    VIRTIO_NET_F_CTRL_VQ,   0,      1       },
        { "control channel rx", VIRTIO_NET_F_CTRL_RX,   0,      0       }
 };