[PATCH] x86_64: no_iommu removal in pci-gart.c

In previous versions of pci-gart.c, no_iommu was used to determine if IOMMU was
disabled in the GART DMA mapping functions.  This changed in 2.6.16 and now
gart_xxx() functions are only called if gart is enabled.  Therefore, uses of
no_iommu in the GART code are no longer necessary and can be removed.

Also, it removes double deceleration of no_iommu and force_iommu in pci.h and
proto.h, by removing the deceleration in pci.h.

Lastly, end_pfn off by one error.

Tested (along with patch 1/2) on dual opteron with gart enabled, iommu=soft,
and iommu=off.

Signed-off-by: Jon Mason <jdmason@us.ibm.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Jon Mason 2006-02-26 04:18:22 +01:00 committed by Linus Torvalds
parent 04a3d311c0
commit 60b08c6722
3 changed files with 6 additions and 20 deletions

View file

@ -248,7 +248,7 @@ void __init iommu_hole_init(void)
/* Got the aperture from the AGP bridge */ /* Got the aperture from the AGP bridge */
} else if (swiotlb && !valid_agp) { } else if (swiotlb && !valid_agp) {
/* Do nothing */ /* Do nothing */
} else if ((!no_iommu && end_pfn >= MAX_DMA32_PFN) || } else if ((!no_iommu && end_pfn > MAX_DMA32_PFN) ||
force_iommu || force_iommu ||
valid_agp || valid_agp ||
fallback_aper_force) { fallback_aper_force) {

View file

@ -228,11 +228,6 @@ static inline int need_iommu(struct device *dev, unsigned long addr, size_t size
int mmu = high; int mmu = high;
if (force_iommu) if (force_iommu)
mmu = 1; mmu = 1;
if (no_iommu) {
if (high)
panic("PCI-DMA: high address but no IOMMU.\n");
mmu = 0;
}
return mmu; return mmu;
} }
@ -241,11 +236,6 @@ static inline int nonforced_iommu(struct device *dev, unsigned long addr, size_t
u64 mask = *dev->dma_mask; u64 mask = *dev->dma_mask;
int high = addr + size >= mask; int high = addr + size >= mask;
int mmu = high; int mmu = high;
if (no_iommu) {
if (high)
panic("PCI-DMA: high address but no IOMMU.\n");
mmu = 0;
}
return mmu; return mmu;
} }
@ -310,7 +300,7 @@ void gart_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, int di
for (i = 0; i < nents; i++) { for (i = 0; i < nents; i++) {
struct scatterlist *s = &sg[i]; struct scatterlist *s = &sg[i];
if (!s->dma_length) if (!s->dma_length || !s->length)
break; break;
dma_unmap_single(dev, s->dma_address, s->dma_length, dir); dma_unmap_single(dev, s->dma_address, s->dma_length, dir);
} }
@ -364,6 +354,7 @@ static int __dma_map_cont(struct scatterlist *sg, int start, int stopat,
BUG_ON(i > start && s->offset); BUG_ON(i > start && s->offset);
if (i == start) { if (i == start) {
*sout = *s;
sout->dma_address = iommu_bus_base; sout->dma_address = iommu_bus_base;
sout->dma_address += iommu_page*PAGE_SIZE + s->offset; sout->dma_address += iommu_page*PAGE_SIZE + s->offset;
sout->dma_length = s->length; sout->dma_length = s->length;
@ -390,6 +381,7 @@ static inline int dma_map_cont(struct scatterlist *sg, int start, int stopat,
{ {
if (!need) { if (!need) {
BUG_ON(stopat - start != 1); BUG_ON(stopat - start != 1);
*sout = sg[start];
sout->dma_length = sg[start].length; sout->dma_length = sg[start].length;
return 0; return 0;
} }
@ -632,17 +624,13 @@ static int __init pci_iommu_init(void)
(agp_copy_info(agp_bridge, &info) < 0); (agp_copy_info(agp_bridge, &info) < 0);
#endif #endif
if (swiotlb) { if (swiotlb)
no_iommu = 1;
return -1; return -1;
}
if (no_iommu || if (no_iommu ||
(!force_iommu && end_pfn <= MAX_DMA32_PFN) || (!force_iommu && end_pfn <= MAX_DMA32_PFN) ||
!iommu_aperture || !iommu_aperture ||
(no_agp && init_k8_gatt(&info) < 0)) { (no_agp && init_k8_gatt(&info) < 0)) {
no_iommu = 1;
no_iommu_init();
printk(KERN_INFO "PCI-DMA: Disabling IOMMU.\n"); printk(KERN_INFO "PCI-DMA: Disabling IOMMU.\n");
if (end_pfn > MAX_DMA32_PFN) { if (end_pfn > MAX_DMA32_PFN) {
printk(KERN_ERR "WARNING more than 4GB of memory " printk(KERN_ERR "WARNING more than 4GB of memory "

View file

@ -19,8 +19,6 @@ extern unsigned int pcibios_assign_all_busses(void);
#endif #endif
#define pcibios_scan_all_fns(a, b) 0 #define pcibios_scan_all_fns(a, b) 0
extern int no_iommu, force_iommu;
extern unsigned long pci_mem_start; extern unsigned long pci_mem_start;
#define PCIBIOS_MIN_IO 0x1000 #define PCIBIOS_MIN_IO 0x1000
#define PCIBIOS_MIN_MEM (pci_mem_start) #define PCIBIOS_MIN_MEM (pci_mem_start)