lkml.org 
[lkml]   [2019]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/5] virtio: Introduce virtio_max_dma_size()
    Date
    From: Joerg Roedel <jroedel@suse.de>

    This function returns the maximum segment size for a single
    dma transaction of a virtio device. The possible limit comes
    from the SWIOTLB implementation in the Linux kernel, that
    has an upper limit of (currently) 256kb of contiguous
    memory it can map. Other DMA-API implementations might also
    have limits.

    Use the new dma_max_mapping_size() function to determine the
    maximum mapping size when DMA-API is in use for virtio.

    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    ---
    drivers/virtio/virtio_ring.c | 10 ++++++++++
    include/linux/virtio.h | 2 ++
    2 files changed, 12 insertions(+)

    diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
    index cd7e755484e3..9ca3fe6af9fa 100644
    --- a/drivers/virtio/virtio_ring.c
    +++ b/drivers/virtio/virtio_ring.c
    @@ -266,6 +266,16 @@ static bool vring_use_dma_api(struct virtio_device *vdev)
    return false;
    }

    +size_t virtio_max_dma_size(struct virtio_device *vdev)
    +{
    + size_t max_segment_size = SIZE_MAX;
    +
    + if (vring_use_dma_api(vdev))
    + max_segment_size = dma_max_mapping_size(&vdev->dev);
    +
    + return max_segment_size;
    +}
    +
    static void *vring_alloc_queue(struct virtio_device *vdev, size_t size,
    dma_addr_t *dma_handle, gfp_t flag)
    {
    diff --git a/include/linux/virtio.h b/include/linux/virtio.h
    index fa1b5da2804e..673fe3ef3607 100644
    --- a/include/linux/virtio.h
    +++ b/include/linux/virtio.h
    @@ -157,6 +157,8 @@ int virtio_device_freeze(struct virtio_device *dev);
    int virtio_device_restore(struct virtio_device *dev);
    #endif

    +size_t virtio_max_dma_size(struct virtio_device *vdev);
    +
    #define virtio_device_for_each_vq(vdev, vq) \
    list_for_each_entry(vq, &vdev->vqs, list)

    --
    2.17.1
    \
     
     \ /
      Last update: 2019-01-23 17:32    [W:4.558 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site