Skip to content

Commit

Permalink
e1000: don't raise interrupt in pre_save()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
jasowang committed Jul 29, 2019
1 parent fff3159 commit f46efa9
Showing 1 changed file with 2 additions and 6 deletions.
8 changes: 2 additions & 6 deletions hw/net/e1000.c
Expand Up @@ -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
Expand Down Expand Up @@ -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].
Expand Down

0 comments on commit f46efa9

Please sign in to comment.