intel-iommu: Fix address wrap on 32-bit kernel.
authorZhao, Yu <yu.zhao@intel.com>
Fri, 13 Feb 2009 09:55:49 +0000 (17:55 +0800)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Wed, 25 Mar 2009 16:03:49 +0000 (16:03 +0000)
commitafeeb7cebbd223ffee303fd8de4ba97458b13581
tree834419e2fffecbba9f1d5cf6acb3a8765206e438
parent4cf2e75d0bec15d945972b005056c4a8731b82cf
intel-iommu: Fix address wrap on 32-bit kernel.

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: Yu Zhao <yu.zhao@intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/pci/intel-iommu.c