linux/arch/powerpc/kernel
Linas Vepstas 5d2efba64b [POWERPC] Use 4kB iommu pages even on 64kB-page systems
The 10Gigabit ethernet device drivers appear to be able to chew
up all 256MB of TCE mappings on pSeries systems, as evidenced by
numerous error messages:

 iommu_alloc failed, tbl c0000000010d5c48 vaddr c0000000d875eff0 npages 1

Some experimentation indicates that this is essentially because
one 1500 byte ethernet MTU gets mapped as a 64K DMA region when
the large 64K pages are enabled. Thus, it doesn't take much to
exhaust all of the available DMA mappings for a high-speed card.

This patch changes the iommu allocator to work with its own
unique, distinct page size. Although the patch is long, its
actually quite simple: it just #defines a distinct IOMMU_PAGE_SIZE
and then uses this in all the places that matter.

As a side effect, it also dramatically improves network performance
on platforms with H-calls on iommu translation inserts/removes (since
we no longer call it 16 times for a 1500 bytes packet when the iommu HW
is still 4k).

In the future, we might want to make the IOMMU_PAGE_SIZE a variable
in the iommu_table instance, thus allowing support for different HW
page sizes in the iommu itself.

Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Olof Johansson <olof@lixom.net>
Acked-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-11-01 14:52:48 +11:00
..
vdso32 [POWERPC] Support feature fixups in vdso's 2006-10-25 11:54:07 +10:00
vdso64 [POWERPC] Cell timebase bug workaround 2006-10-25 11:54:18 +10:00
Makefile [POWERPC] Fix oprofile support for e500 in arch/powerpc 2006-11-01 14:52:48 +11:00
align.c
asm-offsets.c [POWERPC] Fix non-smp build 2006-09-14 10:36:11 +10:00
audit.c [PATCH] audit: AUDIT_PERM support 2006-09-11 13:32:30 -04:00
binfmt_elf32.c
btext.c [POWERPC] Fix various offb issues 2006-11-01 14:52:48 +11:00
compat_audit.c [PATCH] audit: AUDIT_PERM support 2006-09-11 13:32:30 -04:00
cpu_setup_6xx.S
cpu_setup_ppc970.S Merge branch 'merge' 2006-08-25 14:56:07 +10:00
cputable.c [POWERPC] Support feature fixups in vdso's 2006-10-25 11:54:07 +10:00
crash.c [POWERPC] Fix interrupt clearing in kdump shutdown sequence 2006-09-13 18:31:23 +10:00
crash_dump.c [POWERPC] Make doc comments extractable 2006-08-08 17:07:04 +10:00
dma_64.c [POWERPC] Simplify dma_ops bug conditions 2006-07-31 15:55:06 +10:00
entry_32.S
entry_64.S [POWERPC] implement BEGIN/END_FW_FTR_SECTION 2006-10-03 16:50:21 +10:00
firmware.c
fpu.S [POWERPC] Restore copyright notice in arch/powerpc/kernel/fpu.S 2006-08-30 14:45:35 +10:00
head_4xx.S
head_8xx.S
head_32.S
head_44x.S
head_64.S [POWERPC] Make sure __cpu_preinit_ppc970 gets called on 970GX processors 2006-10-26 09:20:07 +10:00
head_booke.h
head_fsl_booke.S
ibmebus.c IRQ: Use the new typedef for interrupt handler function pointers 2006-10-09 12:19:47 +01:00
idle.c
idle_6xx.S
idle_power4.S
init_task.c [PATCH] nsproxy: move init_nsproxy into kernel/nsproxy.c 2006-10-02 07:57:20 -07:00
io.c [POWERPC] Merge iSeries i/o operations with the rest 2006-09-22 15:19:58 +10:00
iomap.c
iommu.c [POWERPC] Use 4kB iommu pages even on 64kB-page systems 2006-11-01 14:52:48 +11:00
irq.c [PATCH] extern doesn't make sense on a definition of function... 2006-10-09 14:19:07 -07:00
kprobes.c [PATCH] kretprobe spinlock deadlock patch 2006-10-02 07:57:16 -07:00
l2cr_6xx.S
legacy_serial.c Merge branch 'merge' 2006-08-25 14:56:07 +10:00
lparcfg.c [POWERPC] clean up pseries hcall interfaces 2006-08-01 16:19:15 +10:00
lparmap.c
machine_kexec.c [POWERPC] Move some kexec logic into machine_kexec.c 2006-08-17 16:41:10 +10:00
machine_kexec_32.c
machine_kexec_64.c Merge branch 'merge' 2006-08-25 14:56:07 +10:00
misc.S [POWERPC] convert string i/o operations to C 2006-09-20 14:06:18 +10:00
misc_32.S [POWERPC] Consolidate feature fixup code 2006-10-25 11:42:10 +10:00
misc_64.S [POWERPC] Consolidate feature fixup code 2006-10-25 11:42:10 +10:00
module_32.c [POWERPC] Support feature fixups in modules 2006-10-25 11:54:13 +10:00
module_64.c [POWERPC] Support feature fixups in modules 2006-10-25 11:54:13 +10:00
nvram_64.c
of_device.c [POWERPC] Remove linux,device properties 2006-07-07 20:19:16 +10:00
paca.c [POWERPC] Implement SLB shadow buffer 2006-08-08 17:08:56 +10:00
pci_32.c [POWERPC] Fix IO Window Updates on P2P bridges. 2006-10-16 15:53:30 +10:00
pci_64.c [POWERPC] Check for offline nodes in pci NUMA code 2006-10-16 15:53:30 +10:00
pci_direct_iommu.c
pci_dn.c [POWERPC] Constify & voidify get_property() 2006-07-31 15:55:04 +10:00
pci_iommu.c
pmc.c [POWERPC] Fix oprofile support for e500 in arch/powerpc 2006-11-01 14:52:48 +11:00
ppc32.h
ppc_ksyms.c [POWERPC] convert string i/o operations to C 2006-09-20 14:06:18 +10:00
proc_ppc64.c
process.c [POWERPC] Better check in show_instructions 2006-10-16 15:53:30 +10:00
prom.c [POWERPC] Fix device_is_compatible() const warning 2006-10-25 11:54:24 +10:00
prom_init.c Merge branch 'merge' 2006-08-31 15:45:48 +10:00
prom_parse.c Revert "[POWERPC] Don't get PCI IRQ from OF for devices with no IRQ" 2006-10-08 15:38:22 -07:00
ptrace-common.h
ptrace.c [POWERPC] Fix PPC32 SECCOMP, unexport do_syscall_trace_{enter,leave} 2006-09-26 15:24:34 +10:00
ptrace32.c
rtas-proc.c [POWERPC] Constify & voidify get_property() 2006-07-31 15:55:04 +10:00
rtas-rtc.c
rtas.c [POWERPC] reboot when panic_timout is set 2006-08-25 13:30:26 +10:00
rtas_flash.c
rtas_pci.c [POWERPC] Add a helper for calculating RTAS "config_addr" parameters 2006-08-25 13:27:35 +10:00
semaphore.c
setup-common.c [POWERPC] Fix xmon=off and cleanup xmon initialisation 2006-10-04 14:52:22 +10:00
setup.h
setup_32.c [POWERPC] Support feature fixups in vdso's 2006-10-25 11:54:07 +10:00
setup_64.c [POWERPC] Support feature fixups in vdso's 2006-10-25 11:54:07 +10:00
signal_32.c
signal_64.c
smp-tbsync.c [POWERPC] Fix irq enable/disable in smp_generic_take_timebase 2006-08-30 16:10:47 +10:00
smp.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
swsusp_32.S [PATCH] Change the name of pagedir_nosave 2006-09-26 08:49:01 -07:00
sys_ppc32.c [PATCH] VFS: Make filldir_t and struct kstat deal in 64-bit inode numbers 2006-10-03 08:03:40 -07:00
syscalls.c [PATCH] namespaces: utsname: switch to using uts namespaces 2006-10-02 07:57:21 -07:00
sysfs.c [POWERPC] Always call cede in pseries dedicated idle loop 2006-09-26 15:24:34 +10:00
systbl.S
tau_6xx.c
time.c [POWERPC] Simplify stolen time calculation 2006-10-23 18:20:12 +10:00
traps.c [POWERPC] Never panic when taking altivec exceptions from userspace 2006-10-16 15:53:30 +10:00
udbg.c
udbg_16550.c [POWERPC] Fix default clock for udbg_16550 2006-07-26 01:27:13 +10:00
vdso.c [POWERPC] Support feature fixups in vdso's 2006-10-25 11:54:07 +10:00
vecemu.c
vector.S
vio.c [POWERPC] Use 4kB iommu pages even on 64kB-page systems 2006-11-01 14:52:48 +11:00
vmlinux.lds.S [PATCH] vmlinux.lds: consolidate initcall sections 2006-10-27 15:34:51 -07:00