• Zhao, Yu's avatar
    intel-iommu: Fix address wrap on 32-bit kernel. · afeeb7ce
    Zhao, Yu authored
    The problem is in dma_pte_clear_range and dma_pte_free_pagetable. When
    intel_unmap_single and intel_unmap_sg call them, the end address may be
    zero if the 'start_addr + size' rounds up. So no PTE gets cleared. The
    uncleared PTE fires the BUG_ON when it's used again to create new mappings.
    
    After I modified dma_pte_clear_range a bit, the BUG_ON is gone.
    
    Tested both 32 and 32 PAE modes on Intel X58 and Q35 platforms.
    Signed-off-by: default avatarYu Zhao <yu.zhao@intel.com>
    Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
    afeeb7ce
intel-iommu.c 77.1 KB