https://bugs.dpdk.org/show_bug.cgi?id=81
Bug ID: 81 Summary: Use of rte_memseg_contig_walk in vhost_kernel.c causes deadlock Product: DPDK Version: 18.08 Hardware: All OS: All Status: CONFIRMED Severity: normal Priority: Normal Component: vhost/virtio Assignee: dev@dpdk.org Reporter: sea...@gmail.com Target Milestone: --- Deadlock can occur when allocating memory if a virtio_user device is in use. The execution path that causes is this is as follows: alloc_more_mem_on_socket(...); try_expand_heap(...); // RW Write Lock taken here... rte_rwlock_write_lock(&mcfg->memory_hotplug_lock); try_expand_heap_primary(...); eal_memalloc_mem_event_notify(...); virtio_user_mem_event_cb(...); vhost_kernel_ioctl(...); prepare_vhost_memory_kernel(...); rte_memseg_contig_walk(...); // Attempt to take RW Read Lock here... rte_rwlock_read_lock(&mcfg->memory_hotplug_lock); Replacing rte_memseg_contig_walk() with rte_memseg_walk_thread_unsafe() in prepare_vhost_memory_kernel() will remove the deadlock, but could cause issues as prepare_vhost_memory_kernel() may also be called outside of memalloc event notify context. -- You are receiving this mail because: You are the assignee for the bug.