• Keqian Zhu's avatar
    KVM: arm64: Try stage2 block mapping for host device MMIO · 2aa53d68
    Keqian Zhu authored
    The MMIO region of a device maybe huge (GB level), try to use
    block mapping in stage2 to speedup both map and unmap.
    
    Compared to normal memory mapping, we should consider two more
    points when try block mapping for MMIO region:
    
    1. For normal memory mapping, the PA(host physical address) and
    HVA have same alignment within PUD_SIZE or PMD_SIZE when we use
    the HVA to request hugepage, so we don't need to consider PA
    alignment when verifing block mapping. But for device memory
    mapping, the PA and HVA may have different alignment.
    
    2. For normal memory mapping, we are sure hugepage size properly
    fit into vma, so we don't check whether the mapping size exceeds
    the boundary of vma. But for device memory mapping, we should pay
    attention to this.
    
    This adds get_vma_page_shift() to get page shift for both normal
    memory and device MMIO region, and check these two points when
    selecting block mapping size for MMIO region.
    Signed-off-by: default avatarKeqian Zhu <zhukeqian1@huawei.com>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20210507110322.23348-3-zhukeqian1@huawei.com
    2aa53d68
mmu.c 41.6 KB