• M
    virtio: introduce virtio_map · 8059feee
    Michael S. Tsirkin 提交于
    virtio_map_sg currently fails if one of the entries it's mapping is
    contigious in GPA but not HVA address space.  Introduce virtio_map which
    handles this by splitting sg entries.
    
    This new API generally turns out to be a good idea since it's harder to
    misuse: at least in one case the existing one was used incorrectly.
    
    This will still fail if there's no space left in the sg, but luckily max
    queue size in use is currently 256, while max sg size is 1024, so we
    should be OK even is all entries happen to cross a single DIMM boundary.
    
    Won't work well with very small DIMM sizes, unfortunately:
    e.g. this will fail with 4K DIMMs where a single
    request might span a large number of DIMMs.
    
    Let's hope these are uncommon - at least we are not breaking things.
    
    Note: virtio-scsi calls virtio_map_sg on data loaded from network, and
    validates input, asserting on failure.  Copy the validating code here -
    it will be dropped from virtio-scsi in a follow-up patch.
    Reported-by: NIgor Mammedov <imammedo@redhat.com>
    Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
    Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: NIgor Mammedov <imammedo@redhat.com>
    
    8059feee
virtio.c 46.3 KB