]> git.hungrycats.org Git - linux/commit
[PATCH] Critical x86-64 IOMMU fixes for 2.6.0
authorAndrew Morton <akpm@osdl.org>
Mon, 29 Dec 2003 13:49:45 +0000 (05:49 -0800)
committerLinus Torvalds <torvalds@home.osdl.org>
Mon, 29 Dec 2003 13:49:45 +0000 (05:49 -0800)
commitf2059100b50774d36e94d2cb633c3a6edbe921a9
tree8af14020c13a7a9f7556d316588128935556b55e
parentb14a4258a69ee74c226097e0ed36f1b3ae6bbcfc
[PATCH] Critical x86-64 IOMMU fixes for 2.6.0

From: Andi Kleen <ak@muc.de>

Please consider applying this patch, I would consider it critical for x86-64.

The 2.6.0 x86-64 IOMMU code unfortunately had a few problems, leading
to non booting systems and in a few cases to data corruption.

It fixes a two serious bugs in handling special kinds of scatter gather
lists in pci_map_sg.

AGP was completely broken with IOMMU because of a wrong #ifdef.
Fix that.

One TLB flush optimization I did a long time ago seems to break on
some 3ware boards (who require IOMMU because they don't support 64bit
addresses).  The breakage lead to data corruption. This patch diables
the optimization for now and fixes a potential SMP race in the flush
code too. The TLB flush is done in a slower, but more reliable way
now too.

This patch fixes them. Please consider applying, because some of these
problems hit quite many people.

This also disables the IOMMU_DEBUG in the defconfig. A lot of people
were using the IOMMU when they didn't need to, which multiplied the
problems.

IOMMU merge is disabled for now. This was an experimental optimization
which helped with some block devices, but for production it seems to
be better to disable it for now because there are some questionable
corner cases when the IOMMU aperture fragments. The same is done
for IOMMU SAC force, which was related to that.

i386 has quite broken semantics for pci_alloc_consistent(). It uses
the standard device DMA mask instead of the consistent mask. Make us
bug-to-bug compatible here. This fixes problems with some sound
drivers that don't support full 32bit addressing.
arch/x86_64/Kconfig
arch/x86_64/defconfig
arch/x86_64/kernel/pci-gart.c
arch/x86_64/kernel/pci-nommu.c
include/asm-x86_64/io.h