On Wed, 23 Feb 2022 10:53:26 +0800, Jason Wang <jasowang@xxxxxxxxxx> wrote: > > 在 2022/2/10 下午4:51, Xuan Zhuo 写道: > > When calling vring_unmap_desc_packed(), it will not encounter the > > situation that the flags contains VRING_DESC_F_INDIRECT. So remove this > > logic. > > > This seems not correct. > > There's a call from detach_buf_packed() that can work for indirect > descriptors? > Yes, it works with indirect descriptors. But these descriptors do not contain VRING_DESC_F_INDIRECT. The one that contains VRING_DESC_F_INDIRECT is vq->packed.desc_extra[id].flags. This is handled by vring_unmap_state_packed(). Thanks. > Thanks > > > > > > Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> > > --- > > drivers/virtio/virtio_ring.c | 18 +++++------------- > > 1 file changed, 5 insertions(+), 13 deletions(-) > > > > diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c > > index fadd0a7503e9..cfb028ca238e 100644 > > --- a/drivers/virtio/virtio_ring.c > > +++ b/drivers/virtio/virtio_ring.c > > @@ -1009,19 +1009,11 @@ static void vring_unmap_desc_packed(const struct vring_virtqueue *vq, > > > > flags = le16_to_cpu(desc->flags); > > > > - if (flags & VRING_DESC_F_INDIRECT) { > > - dma_unmap_single(vring_dma_dev(vq), > > - le64_to_cpu(desc->addr), > > - le32_to_cpu(desc->len), > > - (flags & VRING_DESC_F_WRITE) ? > > - DMA_FROM_DEVICE : DMA_TO_DEVICE); > > - } else { > > - dma_unmap_page(vring_dma_dev(vq), > > - le64_to_cpu(desc->addr), > > - le32_to_cpu(desc->len), > > - (flags & VRING_DESC_F_WRITE) ? > > - DMA_FROM_DEVICE : DMA_TO_DEVICE); > > - } > > + dma_unmap_page(vring_dma_dev(vq), > > + le64_to_cpu(desc->addr), > > + le32_to_cpu(desc->len), > > + (flags & VRING_DESC_F_WRITE) ? > > + DMA_FROM_DEVICE : DMA_TO_DEVICE); > > } > > > > static struct vring_packed_desc *alloc_indirect_packed(unsigned int total_sg, > _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization