https://bugs.dpdk.org/show_bug.cgi?id=1582 Bug ID: 1582 Summary: virtio: reader/writer lock mismatch Product: DPDK Version: 24.11 Hardware: All OS: All Status: UNCONFIRMED Severity: major Priority: Normal Component: ethdev Assignee: dev@dpdk.org Reporter: stephen@networkplumber.org Target Milestone: --- The code virtio_dev_rx_async_submit has mismatch between locking the access_lock for write, and then releases it with read_unlock. This could cause all sorts of deadlock depending on the implementation of rwlock. static __rte_always_inline uint32_t virtio_dev_rx_async_submit(struct virtio_net *dev, struct vhost_virtqueue *vq, struct rte_mbuf **pkts, uint32_t count, int16_t dma_id, uint16_t vchan_id) { uint32_t nb_tx = 0; VHOST_DATA_LOG(dev->ifname, DEBUG, "%s", __func__); if (unlikely(!dma_copy_track[dma_id].vchans || !dma_copy_track[dma_id].vchans[vchan_id].pkts_cmpl_flag_addr)) { VHOST_DATA_LOG(dev->ifname, ERR, "%s: invalid channel %d:%u.", __func__, dma_id, vchan_id); return 0; } rte_rwlock_write_lock(&vq->access_lock); if (unlikely(!vq->enabled || !vq->async)) goto out_access_unlock; vhost_user_iotlb_rd_lock(vq); if (unlikely(!vq->access_ok)) { vhost_user_iotlb_rd_unlock(vq); rte_rwlock_read_unlock(&vq->access_lock); <<<<<<<< HERE virtio_dev_vring_translate(dev, vq); goto out_no_unlock; } -- You are receiving this mail because: You are the assignee for the bug.