linux/drivers
Alex Williamson e8bb910d1b intel-iommu: Obey coherent_dma_mask for alloc_coherent on passthrough
The model for IOMMU passthrough is that decent devices that can cope
with DMA to all of memory get passthrough; crappy devices with a limited
dma_mask don't -- they get to use the IOMMU anyway.

This is done on the basis that IOMMU passthrough is usually wanted for
performance reasons, and it's only the decent PCI devices that you
really care about performance for, while the crappy 32-bit ones like
your USB controller can just use the IOMMU and you won't really care.

Unfortunately, the check for this was only looking at dev->dma_mask, not
at dev->coherent_dma_mask. And some devices have a 32-bit
coherent_dma_mask even though they have a full 64-bit dma_mask.

Even more unfortunately, fixing that simple oversight would upset
certain broken HP devices. Not only do they have a 32-bit
coherent_dma_mask, but they also have a tendency to do stray DMA to
unmapped addresses. And then they die when they take the DMA fault they
so richly deserve.

So if we do the 'correct' fix, it'll mean that affected users have to
disable IOMMU support completely on "a large percentage of servers from
a major vendor."

Personally, I have little sympathy -- given that this is the _same_
'major vendor' who is shipping machines which claim to have IOMMU
support but have obviously never _once_ booted a VT-d capable OS to do
any form of QA. But strictly speaking, it _would_ be a regression even
though it only ever worked by fluke.

For 2.6.33, we'll come up with a quirk which gives swiotlb support
for this particular device, and other devices with an inadequate
coherent_dma_mask will just get normal IOMMU mapping.

The simplest fix for 2.6.32, though, is just to jump through some hoops
to try to allocate coherent DMA memory for such devices in a place that
they can reach. We'd use dma_generic_alloc_coherent() for this if it
existed on IA64.

Signed-off-by: Alex Williamson <alex.williamson@hp.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
2009-11-12 02:10:34 +00:00
..
accessibility
acpi Merge branch 'bugzilla-13449' into release 2009-11-06 01:45:11 -05:00
amba
ata sata_via: Remove redundant device ID for VIA VT8261 2009-11-03 14:27:06 -05:00
atm net: Make setsockopt() optlen be unsigned. 2009-09-30 16:12:20 -07:00
auxdisplay
base PM: Remove some debug messages producing too much noise 2009-11-03 11:18:18 +01:00
block loop: fix NULL dereference if mount fails 2009-10-29 07:39:27 -07:00
bluetooth
cdrom sysctl: remove "struct file *" argument of ->proc_handler 2009-09-24 07:21:04 -07:00
char Merge branch 'bugfix' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen 2009-11-05 10:58:07 -08:00
clocksource
connector connector: Fix incompatible pointer type warning 2009-10-06 01:39:51 -07:00
cpufreq
cpuidle cpuidle: always return with interrupts enabled 2009-10-29 07:39:31 -07:00
crypto
dca
dio
dma Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx into for-linus 2009-09-23 18:31:11 +10:00
edac amd64_edac: fix CECCs reporting 2009-11-04 14:04:06 +01:00
eisa
firewire Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6 2009-10-14 15:36:19 -07:00
firmware iSCSI/iBFT: use proper address translation 2009-10-05 12:05:40 -07:00
gpio twl4030-gpio: remove __devexit markings from remove func 2009-10-29 07:39:30 -07:00
gpu Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/anholt/drm-intel 2009-11-04 07:05:43 -08:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid 2009-10-13 10:10:33 -07:00
hwmon Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging 2009-10-29 08:14:58 -07:00
i2c i2c-piix4: Modify code name SB900 to Hudson-2 2009-11-07 13:10:46 +01:00
ide Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6 2009-11-09 09:50:55 -08:00
idle
ieee1394 headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
ieee802154
infiniband headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
input Input: gpio-keys - use IRQF_SHARED 2009-11-02 22:12:37 -08:00
isdn Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2009-11-09 09:51:42 -08:00
leds leds: leds-pca9532 - Drop unused module parameters 2009-10-04 22:53:43 +02:00
lguest headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
macintosh powerpc/pmac: Fix issues with sleep on some powerbooks 2009-10-14 16:58:35 +11:00
mca
md md/raid5: make sure curr_sync_completes is uptodate when reshape starts 2009-11-06 14:59:29 +11:00
media headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
memstick memstick: move dev_dbg 2009-09-24 07:21:05 -07:00
message headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
mfd mfd: Do not dereference null pointer in twl4030 error path 2009-10-27 00:20:33 +01:00
misc sgi-gru: decrapfiy options_write() function 2009-11-05 10:48:30 -08:00
mmc omap_hsmmc: add missing probe handler hook 2009-10-29 07:39:25 -07:00
mtd Merge git://git.infradead.org/users/dwmw2/mtd-2.6.32 2009-11-05 13:23:16 -08:00
net Merge branch 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging 2009-11-09 09:58:31 -08:00
nubus
of of: Remove nested function 2009-10-15 09:58:27 -06:00
oprofile oprofile: warn on freeing event buffer too early 2009-10-09 21:32:05 +02:00
parisc
parport sysctl: remove "struct file *" argument of ->proc_handler 2009-09-24 07:21:04 -07:00
pci intel-iommu: Obey coherent_dma_mask for alloc_coherent on passthrough 2009-11-12 02:10:34 +00:00
pcmcia PM / yenta: Split resume into early and late parts (rev. 4) 2009-11-03 10:54:58 +01:00
platform eeepc-laptop: don't enable camera at startup if it's already on. 2009-11-03 10:24:19 -05:00
pnp ACPI: remove acpi_device.flags.hardware_id 2009-09-25 15:09:48 -04:00
power
pps
ps3
rapidio
regulator
rtc headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
s390 Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6 2009-10-31 12:14:56 -07:00
sbus
scsi dpt_i2o: Fix typo of EINVAL 2009-10-31 12:11:38 -07:00
serial serial: sh-sci: disable callback typo fix 2009-11-06 17:23:04 +09:00
sfi SFI: remove __init from sfi_verify_table 2009-10-03 01:16:12 -04:00
sh
sn
spi ARM: 5741/1: pl022: fix peripheral id for ST vendor 2009-10-05 17:55:55 +01:00
ssb ssb/sdio: fix printk format warnings 2009-09-23 11:35:41 -04:00
staging Staging: fix wireless drivers depends 2009-10-30 14:47:44 -07:00
tc
telephony
thermal acpi: thermal: Add EOL to the trip_point_N_type strings 2009-11-05 17:33:24 -05:00
uio headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
usb USB: fsl_udc_core: Fix kernel oops on module removal 2009-10-30 14:57:33 -07:00
uwb headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
video Merge branch 'omap-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6 2009-10-08 12:01:01 -07:00
virtio virtio: order used ring after used index read 2009-10-29 08:50:37 +10:30
vlynq drivers/vlynq/vlynq.c: fix resource size off by 1 error 2009-09-24 07:21:05 -07:00
w1 ds2482: Discard obsolete detect method 2009-10-04 22:53:41 +02:00
watchdog watchdog: Fix rio watchdog probe function 2009-10-14 01:18:26 -07:00
xen headers: remove sched.h from poll.h 2009-10-04 15:05:10 -07:00
zorro
Kconfig
Makefile Merge git://git.infradead.org/mtd-2.6 2009-09-23 10:07:49 -07:00