23abee9dea
virtio_user_dev_server_reconnect() is typically called from the
interrupt context while checking the link state:
vhost_user_update_link_state()
--> virtio_user_dev_server_reconnect()
Under this conditions callback unregistering always fails. This means
that listenfd is never unregistered and continue to trigger interrupts.
For example, if second client will try to connect to the same socket,
the server will receive interrupts infinitely because it will not
accept them while listen fd is readable and generates epoll events.
Fix that by moving reconfiguration of interrupts out of the
interrupt context to alarm handler.
'virtio_user_dev_delayed_handler' renamed to
'virtio_user_dev_delayed_disconnect_handler' to better reflect its
purpose.
Additionally improved error logging around interrupt management.
Fixes:
|
||
---|---|---|
.. | ||
virtio_user | ||
meson.build | ||
version.map | ||
virtio_ethdev.c | ||
virtio_ethdev.h | ||
virtio_logs.h | ||
virtio_pci_ethdev.c | ||
virtio_pci.c | ||
virtio_pci.h | ||
virtio_ring.h | ||
virtio_rxtx_packed_avx.h | ||
virtio_rxtx_packed_neon.h | ||
virtio_rxtx_packed.c | ||
virtio_rxtx_packed.h | ||
virtio_rxtx_simple_altivec.c | ||
virtio_rxtx_simple_neon.c | ||
virtio_rxtx_simple_sse.c | ||
virtio_rxtx_simple.c | ||
virtio_rxtx_simple.h | ||
virtio_rxtx.c | ||
virtio_rxtx.h | ||
virtio_user_ethdev.c | ||
virtio.c | ||
virtio.h | ||
virtqueue.c | ||
virtqueue.h |