Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca8642f6 authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds
Browse files

[PATCH] x86_64: Fix off by one in IOMMU check



Fix off by one when checking if the machine has enougn memory to need IOMMU
This caused the IOMMUs to be needlessly enabled for mem=4G

Based on a patch from Jon Mason

Signed-off-by: default avatar <jdmason@us.ibm.com>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent d25bf7e5
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#include <asm/io.h>
#include <asm/proto.h>
#include <asm/pci-direct.h>
#include <asm/dma.h>

int iommu_aperture;
int iommu_aperture_disabled __initdata = 0;
@@ -247,7 +248,7 @@ void __init iommu_hole_init(void)
		/* Got the aperture from the AGP bridge */
	} else if (swiotlb && !valid_agp) {
		/* Do nothing */
	} else if ((!no_iommu && end_pfn >= 0xffffffff>>PAGE_SHIFT) ||
	} else if ((!no_iommu && end_pfn >= MAX_DMA32_PFN) ||
		   force_iommu ||
		   valid_agp ||
		   fallback_aper_force) { 
+2 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#include <asm/proto.h>
#include <asm/mach_apic.h>
#include <asm/acpi.h>
#include <asm/dma.h>

#define __apicdebuginit  __init

@@ -281,7 +282,7 @@ void __init check_ioapic(void)
				switch (vendor) { 
				case PCI_VENDOR_ID_VIA:
#ifdef CONFIG_GART_IOMMU
					if ((end_pfn >= (0xffffffff>>PAGE_SHIFT) ||
					if ((end_pfn > MAX_DMA32_PFN ||
					     force_iommu) &&
					    !iommu_aperture_allowed) {
						printk(KERN_INFO
+1 −1
Original line number Diff line number Diff line
@@ -804,7 +804,7 @@ static int __init pci_iommu_init(void)
	} 
	
	if (no_iommu ||
	    (!force_iommu && end_pfn < 0xffffffff>>PAGE_SHIFT) ||
	    (!force_iommu && (end_pfn-1) < 0xffffffff>>PAGE_SHIFT) ||
	    !iommu_aperture ||
	    (no_agp && init_k8_gatt(&info) < 0)) {
		printk(KERN_INFO "PCI-DMA: Disabling IOMMU.\n"); 
+1 −1
Original line number Diff line number Diff line
@@ -424,7 +424,7 @@ void __init mem_init(void)

#ifdef CONFIG_SWIOTLB
	if (!iommu_aperture &&
	    (end_pfn >= 0xffffffff>>PAGE_SHIFT || force_iommu))
	    ((end_pfn-1) >= 0xffffffff>>PAGE_SHIFT || force_iommu))
	       swiotlb = 1;
	if (swiotlb)
		swiotlb_init();