]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
e1000: don't raise interrupt in pre_save()
authorJason Wang <jasowang@redhat.com>
Wed, 10 Jul 2019 03:52:53 +0000 (11:52 +0800)
committerJason Wang <jasowang@redhat.com>
Mon, 29 Jul 2019 08:29:30 +0000 (16:29 +0800)
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>
hw/net/e1000.c

index 1dc14663324a22661d98a62377b7a2fd3d41e95a..a023ceb27cb1e7397f05abf52c105046350a0077 100644 (file)
@@ -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].