• Stefano Garzarella's avatar
    vringh: iterate on iotlb_translate to handle large translations · 309bba39
    Stefano Garzarella authored
    iotlb_translate() can return -ENOBUFS if the bio_vec is not big enough
    to contain all the ranges for translation.
    This can happen for example if the VMM maps a large bounce buffer,
    without using hugepages, that requires more than 16 ranges to translate
    the addresses.
    
    To handle this case, let's extend iotlb_translate() to also return the
    number of bytes successfully translated.
    In copy_from_iotlb()/copy_to_iotlb() loops by calling iotlb_translate()
    several times until we complete the translation.
    Signed-off-by: default avatarStefano Garzarella <sgarzare@redhat.com>
    Message-Id: <20220624075656.13997-1-sgarzare@redhat.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    309bba39
vringh.c 39.4 KB