>On 2/23/23 10:35, Han Ding wrote:
>> 
>> When use ovs-vsctl to delete vhostuserclient port while qemu destroy virtio,
>> there is a deadlock between OVS main thread and the vhost-events thread.
>> 
>> openvswitch is 2.14 and dpdk is 20.11
>
>FWIW, 2.14 supposed to be used with 19.11.

Thanks for reply.  

The code flow path of openvswitch 3.0.1 and dpdk 21.11, dpdk 22.11 is same
for destroying vhostuserclient device. So, I think  there is a same bug in new 
version.


>> 
>> Main thread:
>> ofport_remove
>>   -> netdev_unref
>>       -> netdev_dpdk_vhost_destruct
>>            -> rte_vhost_driver_unregister (If fdentry is busy, circle again 
>> until the fdentry is not busy)
>>                -> fdset_try_del  (fdentry is busy now, return -1. Goto again)
>> 



>> vhost-nets thread:
>> fdset_event_dispatch (set fdentry to busy. When destroy_device fuction 
>> return set the fdentry to no busy)
>>    -> vhost_user_read_cb 
>>      -> vhost_user_msg_handler
>>          -> vhost_user_get_vring_base
>>              ->destroy_device 
>>                 -> ovsrcu_synchronize (Wait for other threads to quiesce)



>> The  vhost-nets thread wait for main thread to quiesce, but the main thread 
>> now is waiting for fdentry to no busy 
>> and circle all the time.  


>> 
>> Whether the ovsrcu_synchronize  is necessary in destrory_device
>
>Yes, we have to wait for all threads to stop using this device.
>
>> or the rte_vhost_driver_unregister is correct in fdset_try_del ?
>
>CC: David and Maxime.
>
>Best regards, Ilya Maximets


_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to