• Jason Wang's avatar
    virtio-ring: store DMA metadata in desc_extra for split virtqueue · 72b5e895
    Jason Wang authored
    For split virtqueue, we used to depend on the address, length and
    flags stored in the descriptor ring for DMA unmapping. This is unsafe
    for the case since the device can manipulate the behavior of virtio
    driver, IOMMU drivers and swiotlb.
    
    For safety, maintain the DMA address, DMA length, descriptor flags and
    next filed of the non indirect descriptors in vring_desc_state_extra
    when DMA API is used for virtio as we did for packed virtqueue and use
    those metadata for performing DMA operations. Indirect descriptors
    should be safe since they are using streaming mappings.
    
    With this the descriptor ring is write only form the view of the
    driver.
    
    This slight increase the footprint of the drive but it's not noticed
    through pktgen (64B) test and netperf test in the case of virtio-net.
    Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
    Link: https://lore.kernel.org/r/20210604055350.58753-8-jasowang@redhat.comSigned-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    72b5e895
virtio_ring.c 62.7 KB