linux/arch
Kevin VanMaren a1002a48e1 [PATCH] x86_64: When allocation of merged SG lists fails in the IOMMU don't merge
[ AK: I redid Kevin's fix to be simpler, but the idea and original
  analysis of the problem is from Kevin]

This avoid allocation failures on some SATA systems like Nvidia CK8
when the IOMMU gets fragmented. Modern SATA devices have quite large queues
(128 entries) and the FS with ext2/3 is good enough now that it often
passes whole 128 page sg lists down to the driver. These require
512K of continuous free space in the IOMMU aperture to map when merged.
When the IOMMU is fragmented this could lead to spurious IO errors
due to failing mappings.

Short term fix is to just try to map the SG list again unmerged
page by page - this way fragmentation doesn't matter anymore.
The code for that was already there, but it just wasn't enabled for the
merge case.

According to Kevin at least the Nvidia device doesn't seem to benefit
from merging much anyways, so the only slowdown is from trying
to do an unnecessary merge attempt.

Kevin plans to implement better fragmentation avoidance in the future,
but that wouldn't be 2.6.16 material.

TBD: should add some statistic counters to count how often that really
happens.

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-02-04 16:43:14 -08:00
..
alpha [PATCH] alpha show_interrups() trashes argument 2006-02-01 08:53:21 -08:00
arm [ARM] Remove ARCH_CAMELOT from at91 defconfigs 2006-02-03 23:03:21 +00:00
arm26 [PATCH] arm26: select BLK_DEV_FD only on A5K 2006-02-01 08:53:22 -08:00
cris [PATCH] cris: task_thread_info() 2006-01-12 09:08:58 -08:00
frv [PATCH] Handle TIF_RESTORE_SIGMASK for FRV 2006-01-18 19:20:29 -08:00
h8300 [PATCH] h8300: task_stack_page() 2006-01-12 09:08:55 -08:00
i386 [PATCH] OProfile: fixed x86_64 incorrect kernel call graphs 2006-02-03 08:32:04 -08:00
ia64 [PATCH] Export cpu topology in sysfs 2006-02-03 08:32:09 -08:00
m32r [PATCH] m32r: task_pt_regs(), task_stack_page(), task_thread_info() 2006-01-12 09:08:54 -08:00
m68k [PATCH] m68k: console code in head.S needs framebuffer support built in 2006-01-12 09:09:06 -08:00
m68knommu [PATCH] m68knommu: task_stack_page() 2006-01-12 09:08:55 -08:00
mips [PATCH] mips: gdb-stub.c: fix parse error before ; token 2006-02-01 08:53:12 -08:00
parisc [PARISC] New syscalls (inotify, *at, pselect6/ppoll, migrate_pages) 2006-01-30 00:53:14 -05:00
powerpc [PATCH] PowerPC/PCI Hotplug build break 2006-02-01 16:35:29 -08:00
ppc [PATCH] mv643xx_eth: Fix for building as a module 2006-01-27 11:09:24 -05:00
s390 [PATCH] s390: fix compat syscall wrapper 2006-02-03 08:32:01 -08:00
sh [PATCH] sh: machine_halt()/machine_power_off() cleanups 2006-02-01 08:53:20 -08:00
sh64 [PATCH] arch/sh64/kernel/time.c: add module.h 2006-02-01 08:53:20 -08:00
sparc [SPARC]: Fix compile failures in math-emu. 2006-01-30 16:46:24 -08:00
sparc64 [SPARC64]: Kill compat_sys_clock_settime sign extension stub. 2006-01-30 01:31:09 -08:00
um [PATCH] uml: avoid "CONFIG_NR_CPUS undeclared" bogus error messages 2006-02-01 08:53:23 -08:00
v850 [PATCH] Fix some ucLinux breakage from the tty updates 2006-02-03 08:32:04 -08:00
x86_64 [PATCH] x86_64: When allocation of merged SG lists fails in the IOMMU don't merge 2006-02-04 16:43:14 -08:00
xtensa [PATCH] Fix some ucLinux breakage from the tty updates 2006-02-03 08:32:04 -08:00