failover: fix a regression introduced by JSON'ification of -device
commit7fe7791e3f652ac31ef98dcc94a8f2a317ab846b
authorLaurent Vivier <lvivier@redhat.com>
Tue, 19 Oct 2021 07:15:31 +0000 (19 09:15 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 20 Oct 2021 08:37:55 +0000 (20 04:37 -0400)
tree9cdf0a882ca893ff838048ff1f8e166ce6cc186b
parenta1ed9ef1de87c3e86ff68589604298ec90875a14
failover: fix a regression introduced by JSON'ification of -device

The hide_device helper can be called several times for the same
devices as it shouldn't change any state and should only return an
information.

But not to rely anymore on QemuOpts we have introduced a new field
to store the parameters of the device and don't allow to update it
once it is done.

And as the function is called several times, we ends with:

  warning: Cannot attach more than one primary device to 'virtio0'

That is not only a warning as it prevents to hide the device and breaks
failover.

Fix that by checking the device id.

Now, we fail only if the virtio-net device is really used by two different
devices, for instance:

   -device virtio-net-pci,id=virtio0,failover=on,... \
   -device vfio-pci,id=hostdev0,failover_pair_id=virtio0,... \
   -device e1000e,id=e1000e0,failover_pair_id=virtio0,... \

will exit with:

  Cannot attach more than one primary device to 'virtio0': 'hostdev0' and 'e1000e0'

Fixes: 259a10dbcb4f ("virtio-net: Store failover primary opts pointer locally")
Cc: kwolf@redhat.com
Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Message-Id: <20211019071532.682717-2-lvivier@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
hw/net/virtio-net.c