igb: fix link state on resume
authorLaurent Vivier <lvivier@redhat.com>
Wed, 24 Jan 2024 10:29:03 +0000 (11:29 +0100)
committerJason Wang <jasowang@redhat.com>
Tue, 12 Mar 2024 11:28:31 +0000 (19:28 +0800)
commit65c2ab808571dcd9322020690a63df63281a67f0
tree573a97b3f6ad9b655ba85c04f0e329b87e213f95
parent05ec974671200814fa5c1d5db710e0e4b88a40af
igb: fix link state on resume

On resume igb_vm_state_change() always calls igb_autoneg_resume()
that sets link_down to false, and thus activates the link even
if we have disabled it.

The problem can be reproduced starting qemu in paused state (-S) and
then set the link to down. When we resume the machine the link appears
to be up.

Reproducer:

   # qemu-system-x86_64 ... -device igb,netdev=netdev0,id=net0 -S

   {"execute": "qmp_capabilities" }
   {"execute": "set_link", "arguments": {"name": "net0", "up": false}}
   {"execute": "cont" }

To fix the problem, merge the content of igb_vm_state_change()
into igb_core_post_load() as e1000 does.

Buglink: https://issues.redhat.com/browse/RHEL-21867
Fixes: 3a977deebe6b ("Intrdocue igb device emulation")
Cc: akihiko.odaki@daynix.com
Suggested-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
hw/net/igb_core.c
hw/net/igb_core.h