|
@@ -2777,6 +2777,13 @@ static int virtio_net_post_load_device(void *opaque, int version_id)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (n->rss_data.enabled) {
|
|
|
+ trace_virtio_net_rss_enable(n->rss_data.hash_types,
|
|
|
+ n->rss_data.indirections_len,
|
|
|
+ sizeof(n->rss_data.key));
|
|
|
+ } else {
|
|
|
+ trace_virtio_net_rss_disable();
|
|
|
+ }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -2954,6 +2961,32 @@ static const VMStateDescription vmstate_virtio_net_has_vnet = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
+static bool virtio_net_rss_needed(void *opaque)
|
|
|
+{
|
|
|
+ return VIRTIO_NET(opaque)->rss_data.enabled;
|
|
|
+}
|
|
|
+
|
|
|
+static const VMStateDescription vmstate_virtio_net_rss = {
|
|
|
+ .name = "virtio-net-device/rss",
|
|
|
+ .version_id = 1,
|
|
|
+ .minimum_version_id = 1,
|
|
|
+ .needed = virtio_net_rss_needed,
|
|
|
+ .fields = (VMStateField[]) {
|
|
|
+ VMSTATE_BOOL(rss_data.enabled, VirtIONet),
|
|
|
+ VMSTATE_BOOL(rss_data.redirect, VirtIONet),
|
|
|
+ VMSTATE_BOOL(rss_data.populate_hash, VirtIONet),
|
|
|
+ VMSTATE_UINT32(rss_data.hash_types, VirtIONet),
|
|
|
+ VMSTATE_UINT16(rss_data.indirections_len, VirtIONet),
|
|
|
+ VMSTATE_UINT16(rss_data.default_queue, VirtIONet),
|
|
|
+ VMSTATE_UINT8_ARRAY(rss_data.key, VirtIONet,
|
|
|
+ VIRTIO_NET_RSS_MAX_KEY_SIZE),
|
|
|
+ VMSTATE_VARRAY_UINT16_ALLOC(rss_data.indirections_table, VirtIONet,
|
|
|
+ rss_data.indirections_len, 0,
|
|
|
+ vmstate_info_uint16, uint16_t),
|
|
|
+ VMSTATE_END_OF_LIST()
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
static const VMStateDescription vmstate_virtio_net_device = {
|
|
|
.name = "virtio-net-device",
|
|
|
.version_id = VIRTIO_NET_VM_VERSION,
|
|
@@ -3004,6 +3037,10 @@ static const VMStateDescription vmstate_virtio_net_device = {
|
|
|
has_ctrl_guest_offloads),
|
|
|
VMSTATE_END_OF_LIST()
|
|
|
},
|
|
|
+ .subsections = (const VMStateDescription * []) {
|
|
|
+ &vmstate_virtio_net_rss,
|
|
|
+ NULL
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
static NetClientInfo net_virtio_info = {
|