virtio-net: adding all queues in .realize()
Instead of adding queues for multiqueue during feature set. This patch did this in .realize(), this will help the following patches that count the number of virtqueues used in .device_plugged() callback. Signed-off-by: Jason Wang <jasowang@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
cf34f533a1
commit
da51a335aa
|
@ -1301,39 +1301,8 @@ static void virtio_net_tx_bh(void *opaque)
|
|||
|
||||
static void virtio_net_set_multiqueue(VirtIONet *n, int multiqueue)
|
||||
{
|
||||
VirtIODevice *vdev = VIRTIO_DEVICE(n);
|
||||
int i, max = multiqueue ? n->max_queues : 1;
|
||||
|
||||
n->multiqueue = multiqueue;
|
||||
|
||||
for (i = 2; i < n->max_queues * 2 + 1; i++) {
|
||||
virtio_del_queue(vdev, i);
|
||||
}
|
||||
|
||||
for (i = 1; i < max; i++) {
|
||||
n->vqs[i].rx_vq = virtio_add_queue(vdev, 256, virtio_net_handle_rx);
|
||||
if (n->vqs[i].tx_timer) {
|
||||
n->vqs[i].tx_vq =
|
||||
virtio_add_queue(vdev, 256, virtio_net_handle_tx_timer);
|
||||
n->vqs[i].tx_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
|
||||
virtio_net_tx_timer,
|
||||
&n->vqs[i]);
|
||||
} else {
|
||||
n->vqs[i].tx_vq =
|
||||
virtio_add_queue(vdev, 256, virtio_net_handle_tx_bh);
|
||||
n->vqs[i].tx_bh = qemu_bh_new(virtio_net_tx_bh, &n->vqs[i]);
|
||||
}
|
||||
|
||||
n->vqs[i].tx_waiting = 0;
|
||||
n->vqs[i].n = n;
|
||||
}
|
||||
|
||||
/* Note: Minux Guests (version 3.2.1) use ctrl vq but don't ack
|
||||
* VIRTIO_NET_F_CTRL_VQ. Create ctrl vq unconditionally to avoid
|
||||
* breaking them.
|
||||
*/
|
||||
n->ctrl_vq = virtio_add_queue(vdev, 64, virtio_net_handle_ctrl);
|
||||
|
||||
virtio_net_set_queues(n);
|
||||
}
|
||||
|
||||
|
@ -1594,9 +1563,7 @@ static void virtio_net_device_realize(DeviceState *dev, Error **errp)
|
|||
return;
|
||||
}
|
||||
n->vqs = g_malloc0(sizeof(VirtIONetQueue) * n->max_queues);
|
||||
n->vqs[0].rx_vq = virtio_add_queue(vdev, 256, virtio_net_handle_rx);
|
||||
n->curr_queues = 1;
|
||||
n->vqs[0].n = n;
|
||||
n->tx_timeout = n->net_conf.txtimer;
|
||||
|
||||
if (n->net_conf.tx && strcmp(n->net_conf.tx, "timer")
|
||||
|
@ -1607,16 +1574,24 @@ static void virtio_net_device_realize(DeviceState *dev, Error **errp)
|
|||
error_report("Defaulting to \"bh\"");
|
||||
}
|
||||
|
||||
for (i = 0; i < n->max_queues; i++) {
|
||||
n->vqs[i].rx_vq = virtio_add_queue(vdev, 256, virtio_net_handle_rx);
|
||||
if (n->net_conf.tx && !strcmp(n->net_conf.tx, "timer")) {
|
||||
n->vqs[0].tx_vq = virtio_add_queue(vdev, 256,
|
||||
virtio_net_handle_tx_timer);
|
||||
n->vqs[0].tx_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, virtio_net_tx_timer,
|
||||
&n->vqs[0]);
|
||||
n->vqs[i].tx_vq =
|
||||
virtio_add_queue(vdev, 256, virtio_net_handle_tx_timer);
|
||||
n->vqs[i].tx_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
|
||||
virtio_net_tx_timer,
|
||||
&n->vqs[i]);
|
||||
} else {
|
||||
n->vqs[0].tx_vq = virtio_add_queue(vdev, 256,
|
||||
virtio_net_handle_tx_bh);
|
||||
n->vqs[0].tx_bh = qemu_bh_new(virtio_net_tx_bh, &n->vqs[0]);
|
||||
n->vqs[i].tx_vq =
|
||||
virtio_add_queue(vdev, 256, virtio_net_handle_tx_bh);
|
||||
n->vqs[i].tx_bh = qemu_bh_new(virtio_net_tx_bh, &n->vqs[i]);
|
||||
}
|
||||
|
||||
n->vqs[i].tx_waiting = 0;
|
||||
n->vqs[i].n = n;
|
||||
}
|
||||
|
||||
n->ctrl_vq = virtio_add_queue(vdev, 64, virtio_net_handle_ctrl);
|
||||
qemu_macaddr_default_if_unset(&n->nic_conf.macaddr);
|
||||
memcpy(&n->mac[0], &n->nic_conf.macaddr, sizeof(n->mac));
|
||||
|
|
Loading…
Reference in a new issue