e1000: don't raise interrupt in pre_save()
We should not raise any interrupt after VM has been stopped but this is what e1000 currently did when mit timer is active in pre_save(). Fixing this by scheduling a timer in post_load() which can make sure the interrupt was raised when VM is running. Reported-and-tested-by: Longpeng <longpeng2@huawei.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
fff3159900
commit
f46efa9b08
@ -1381,11 +1381,6 @@ static int e1000_pre_save(void *opaque)
|
|||||||
E1000State *s = opaque;
|
E1000State *s = opaque;
|
||||||
NetClientState *nc = qemu_get_queue(s->nic);
|
NetClientState *nc = qemu_get_queue(s->nic);
|
||||||
|
|
||||||
/* If the mitigation timer is active, emulate a timeout now. */
|
|
||||||
if (s->mit_timer_on) {
|
|
||||||
e1000_mit_timer(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If link is down and auto-negotiation is supported and ongoing,
|
* If link is down and auto-negotiation is supported and ongoing,
|
||||||
* complete auto-negotiation immediately. This allows us to look
|
* complete auto-negotiation immediately. This allows us to look
|
||||||
@ -1423,7 +1418,8 @@ static int e1000_post_load(void *opaque, int version_id)
|
|||||||
s->mit_irq_level = false;
|
s->mit_irq_level = false;
|
||||||
}
|
}
|
||||||
s->mit_ide = 0;
|
s->mit_ide = 0;
|
||||||
s->mit_timer_on = false;
|
s->mit_timer_on = true;
|
||||||
|
timer_mod(s->mit_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 1);
|
||||||
|
|
||||||
/* nc.link_down can't be migrated, so infer link_down according
|
/* nc.link_down can't be migrated, so infer link_down according
|
||||||
* to link status bit in mac_reg[STATUS].
|
* to link status bit in mac_reg[STATUS].
|
||||||
|
Loading…
Reference in New Issue
Block a user