Commit f46efa9b authored by Jason Wang's avatar Jason Wang
Browse files

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: default avatarLongpeng <longpeng2@huawei.com>
Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
parent fff31599
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -1381,11 +1381,6 @@ static int e1000_pre_save(void *opaque)
    E1000State *s = opaque;
    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,
     * 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_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
     * to link status bit in mac_reg[STATUS].