]> git.droids-corp.org - dpdk.git/commit
net/virtio-user: fix socket non-blocking mode
authorYuan Wang <yuanx.wang@intel.com>
Fri, 17 Jun 2022 02:42:29 +0000 (10:42 +0800)
committerMaxime Coquelin <maxime.coquelin@redhat.com>
Fri, 1 Jul 2022 13:49:32 +0000 (15:49 +0200)
commit41f9a1757ffc010cc3debaad9a56af8ad88d0c6d
treef2c9f805facd14877a0dc7d3dd672b7ea94e4915
parent7b1a614dcbe2017f1984be28a01efabcd7fed8b8
net/virtio-user: fix socket non-blocking mode

The virtio-user initialization requires unix socket to receive backend
messages in block mode. However, vhost_user_update_link_state() sets
the same socket to nonblocking via fcntl, which affects all threads.
Enabling the rxq interrupt can causes both of these behaviors to occur
concurrently, with the result that the initialization may fail
because no messages are received in nonblocking socket.

Thread 1:
virtio_init_device()
--> virtio_user_start_device()
--> vhost_user_set_memory_table()
--> vhost_user_check_reply_ack()

Thread 2:
virtio_interrupt_handler()
--> vhost_user_update_link_state()

Fix that by replacing O_NONBLOCK with the recv per-call option
MSG_DONTWAIT.

Fixes: ef53b6030039 ("net/virtio-user: support LSC")
Cc: stable@dpdk.org
Signed-off-by: Yuan Wang <yuanx.wang@intel.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
drivers/net/virtio/virtio_user/vhost_user.c