2.6.35-longterm review patch. If anyone has any objections, please let me know.
------------------ From: Joerg Roedel <joerg.roe...@amd.com> commit 665d3e2af83c8fbd149534db8f57d82fa6fa6753 upstream. The GART can only map physical memory below 1TB. Make sure the gart driver in the kernel does not try to map memory above 1TB. Signed-off-by: Joerg Roedel <joerg.roe...@amd.com> Signed-off-by: Andi Kleen <a...@linux.intel.com> Link: http://lkml.kernel.org/r/1303134346-5805-5-git-send-email-joerg.roe...@amd.com Signed-off-by: H. Peter Anvin <h...@zytor.com> Signed-off-by: Greg Kroah-Hartman <gre...@suse.de> --- arch/x86/kernel/pci-gart_64.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) Index: linux-2.6.35.y/arch/x86/kernel/pci-gart_64.c =================================================================== --- linux-2.6.35.y.orig/arch/x86/kernel/pci-gart_64.c +++ linux-2.6.35.y/arch/x86/kernel/pci-gart_64.c @@ -80,6 +80,9 @@ static u32 gart_unmapped_entry; #define AGPEXTERN #endif +/* GART can only remap to physical addresses < 1TB */ +#define GART_MAX_PHYS_ADDR (1ULL << 40) + /* backdoor interface to AGP driver */ AGPEXTERN int agp_memory_reserved; AGPEXTERN __u32 *agp_gatt_table; @@ -211,9 +214,13 @@ static dma_addr_t dma_map_area(struct de size_t size, int dir, unsigned long align_mask) { unsigned long npages = iommu_num_pages(phys_mem, size, PAGE_SIZE); - unsigned long iommu_page = alloc_iommu(dev, npages, align_mask); + unsigned long iommu_page; int i; + if (unlikely(phys_mem + size > GART_MAX_PHYS_ADDR)) + return bad_dma_addr; + + iommu_page = alloc_iommu(dev, npages, align_mask); if (iommu_page == -1) { if (!nonforced_iommu(dev, phys_mem, size)) return phys_mem; _______________________________________________ stable mailing list stable@linux.kernel.org http://linux.kernel.org/mailman/listinfo/stable