• Jens Axboe's avatar
    [PATCH] iommu max segment size · 2fed8438
    Jens Axboe authored
    This patch is from James, I've changed it slightly only.
    
    The problem is that some IOMMU implementations have a maximum limit to the
    size of the number of contiguously mappable pages (admittedly, this limit
    is mostly in the resource management algorithms rather than the IOMMUs
    themselves).
    
    This patch adds this concept to the bio layer via the parameter
    
    BIO_VMERGE_MAX_SIZE
    
    which architectures can define in asm/io.h (if undefined, we assume it to
    be infinite, which is current behaviour).
    
    While adding this, I noticed several places where bio was making incorrect
    assumptions about virtual mergeability (none of which was a bug: bio was
    overestimating rather than underestimating).
    
    - The worst offender was bio_add_page(), which seemed never to check for
      virtual mergeability
    
    - I also fixed blk_hw_contig_segments() not to check the QUEUE_CLUSTER
      flag, and not to check the phys segment boundary.
    
    In order to track the hw segment size across bios, I had to introduce two
    extra bio parameters: bi_hw_front_size and bi_hw_back_size which store the
    sizes of the front and back hw contiguous segments (and which will be equal
    if there's only one hw segment).  When the bio is merged into a request,
    these fields are updated with the total hw contig size so they can always
    be used to assess if the merger would violate the BIO_VMERGE_MAX_SIZE
    parameter.
    Signed-Off-By: default avatarJens Axboe <axboe@suse.de>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    2fed8438
bio.c 20.5 KB