diff options
author | Dr. David Alan Gilbert <dgilbert@redhat.com> | 2018-03-28 17:36:26 +0100 |
---|---|---|
committer | Jason Wang <jasowang@redhat.com> | 2018-04-10 11:30:03 +0800 |
commit | 3c4053c52cf6294848d8219a14b491784c8bebc8 (patch) | |
tree | eeddf60c712d8a16af36f96ef7229f9ae765bc15 /hw/net/e1000.c | |
parent | 4ae4bf5bb16bd8e5b94433db9fe8265d30c53ba3 (diff) |
e1000: Dupe offload data on reading old stream
Old QEMUs only had one set of offload data; when we only receive
one lot, dupe the received data - that should give us about the
same bug level as the old version.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'hw/net/e1000.c')
-rw-r--r-- | hw/net/e1000.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/hw/net/e1000.c b/hw/net/e1000.c index 24e9a4ab40..d399ce3e4f 100644 --- a/hw/net/e1000.c +++ b/hw/net/e1000.c @@ -127,6 +127,7 @@ typedef struct E1000State_st { #define E1000_FLAG_MIT (1 << E1000_FLAG_MIT_BIT) #define E1000_FLAG_MAC (1 << E1000_FLAG_MAC_BIT) uint32_t compat_flags; + bool received_tx_tso; } E1000State; #define chkflag(x) (s->compat_flags & E1000_FLAG_##x) @@ -1390,6 +1391,20 @@ static int e1000_post_load(void *opaque, int version_id) qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 500); } + if (!s->received_tx_tso) { + /* We received only one set of offload data (tx.props) + * and haven't got tx.tso_props. The best we can do + * is dupe the data. + */ + s->tx.tso_props = s->tx.props; + } + return 0; +} + +static int e1000_tx_tso_post_load(void *opaque, int version_id) +{ + E1000State *s = opaque; + s->received_tx_tso = true; return 0; } @@ -1437,6 +1452,7 @@ static const VMStateDescription vmstate_e1000_tx_tso_state = { .name = "e1000/tx_tso_state", .version_id = 1, .minimum_version_id = 1, + .post_load = e1000_tx_tso_post_load, .fields = (VMStateField[]) { VMSTATE_UINT8(tx.tso_props.ipcss, E1000State), VMSTATE_UINT8(tx.tso_props.ipcso, E1000State), |