From: Aurelien Jarno Date: Sun, 28 Apr 2013 15:06:33 +0000 (+0200) Subject: virtio-net: acknowledge used features X-Git-Tag: v3.3.0~804 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/doc/syslog.conf.5.html?a=commitdiff_plain;h=f0c391e09b3a11500988fdbed36a49fe6d61ac64;p=minix.git virtio-net: acknowledge used features 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 --- diff --git a/drivers/virtio_net/virtio_net.c b/drivers/virtio_net/virtio_net.c index 9f1749532..0fad9c6ef 100644 --- a/drivers/virtio_net/virtio_net.c +++ b/drivers/virtio_net/virtio_net.c @@ -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 } };