virtio-net: Disable RSS on reset
RSS is disabled by default. Fixes: 590790297c ("virtio-net: implement RSS configuration command") Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Reviewed-by: Michael Tokarev <mjt@tls.msk.ru> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
942f420e5c
commit
cef776c03a
@ -600,40 +600,6 @@ static void virtio_net_queue_enable(VirtIODevice *vdev, uint32_t queue_index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void virtio_net_reset(VirtIODevice *vdev)
|
|
||||||
{
|
|
||||||
VirtIONet *n = VIRTIO_NET(vdev);
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* Reset back to compatibility mode */
|
|
||||||
n->promisc = 1;
|
|
||||||
n->allmulti = 0;
|
|
||||||
n->alluni = 0;
|
|
||||||
n->nomulti = 0;
|
|
||||||
n->nouni = 0;
|
|
||||||
n->nobcast = 0;
|
|
||||||
/* multiqueue is disabled by default */
|
|
||||||
n->curr_queue_pairs = 1;
|
|
||||||
timer_del(n->announce_timer.tm);
|
|
||||||
n->announce_timer.round = 0;
|
|
||||||
n->status &= ~VIRTIO_NET_S_ANNOUNCE;
|
|
||||||
|
|
||||||
/* Flush any MAC and VLAN filter table state */
|
|
||||||
n->mac_table.in_use = 0;
|
|
||||||
n->mac_table.first_multi = 0;
|
|
||||||
n->mac_table.multi_overflow = 0;
|
|
||||||
n->mac_table.uni_overflow = 0;
|
|
||||||
memset(n->mac_table.macs, 0, MAC_TABLE_ENTRIES * ETH_ALEN);
|
|
||||||
memcpy(&n->mac[0], &n->nic->conf->macaddr, sizeof(n->mac));
|
|
||||||
qemu_format_nic_info_str(qemu_get_queue(n->nic), n->mac);
|
|
||||||
memset(n->vlans, 0, MAX_VLAN >> 3);
|
|
||||||
|
|
||||||
/* Flush any async TX */
|
|
||||||
for (i = 0; i < n->max_queue_pairs; i++) {
|
|
||||||
flush_or_purge_queued_packets(qemu_get_subqueue(n->nic, i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void peer_test_vnet_hdr(VirtIONet *n)
|
static void peer_test_vnet_hdr(VirtIONet *n)
|
||||||
{
|
{
|
||||||
NetClientState *nc = qemu_get_queue(n->nic);
|
NetClientState *nc = qemu_get_queue(n->nic);
|
||||||
@ -3845,6 +3811,42 @@ static void virtio_net_device_unrealize(DeviceState *dev)
|
|||||||
virtio_cleanup(vdev);
|
virtio_cleanup(vdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void virtio_net_reset(VirtIODevice *vdev)
|
||||||
|
{
|
||||||
|
VirtIONet *n = VIRTIO_NET(vdev);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Reset back to compatibility mode */
|
||||||
|
n->promisc = 1;
|
||||||
|
n->allmulti = 0;
|
||||||
|
n->alluni = 0;
|
||||||
|
n->nomulti = 0;
|
||||||
|
n->nouni = 0;
|
||||||
|
n->nobcast = 0;
|
||||||
|
/* multiqueue is disabled by default */
|
||||||
|
n->curr_queue_pairs = 1;
|
||||||
|
timer_del(n->announce_timer.tm);
|
||||||
|
n->announce_timer.round = 0;
|
||||||
|
n->status &= ~VIRTIO_NET_S_ANNOUNCE;
|
||||||
|
|
||||||
|
/* Flush any MAC and VLAN filter table state */
|
||||||
|
n->mac_table.in_use = 0;
|
||||||
|
n->mac_table.first_multi = 0;
|
||||||
|
n->mac_table.multi_overflow = 0;
|
||||||
|
n->mac_table.uni_overflow = 0;
|
||||||
|
memset(n->mac_table.macs, 0, MAC_TABLE_ENTRIES * ETH_ALEN);
|
||||||
|
memcpy(&n->mac[0], &n->nic->conf->macaddr, sizeof(n->mac));
|
||||||
|
qemu_format_nic_info_str(qemu_get_queue(n->nic), n->mac);
|
||||||
|
memset(n->vlans, 0, MAX_VLAN >> 3);
|
||||||
|
|
||||||
|
/* Flush any async TX */
|
||||||
|
for (i = 0; i < n->max_queue_pairs; i++) {
|
||||||
|
flush_or_purge_queued_packets(qemu_get_subqueue(n->nic, i));
|
||||||
|
}
|
||||||
|
|
||||||
|
virtio_net_disable_rss(n);
|
||||||
|
}
|
||||||
|
|
||||||
static void virtio_net_instance_init(Object *obj)
|
static void virtio_net_instance_init(Object *obj)
|
||||||
{
|
{
|
||||||
VirtIONet *n = VIRTIO_NET(obj);
|
VirtIONet *n = VIRTIO_NET(obj);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user