Skip to content

Commit

Permalink
[PATCH] x86_64: Fix off by one in IOMMU check
Browse files Browse the repository at this point in the history
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: jdmason@us.ibm.com
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Andi Kleen authored and Linus Torvalds committed Jan 12, 2006
1 parent d25bf7e commit ca8642f
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 4 deletions.
3 changes: 2 additions & 1 deletion arch/x86_64/kernel/aperture.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
3 changes: 2 additions & 1 deletion arch/x86_64/kernel/io_apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <asm/proto.h>
#include <asm/mach_apic.h>
#include <asm/acpi.h>
#include <asm/dma.h>

#define __apicdebuginit __init

Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion arch/x86_64/kernel/pci-gart.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
2 changes: 1 addition & 1 deletion arch/x86_64/mm/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit ca8642f

Please sign in to comment.