diff options
author | 2006-09-30 01:47:55 +0200 | |
---|---|---|
committer | 2006-09-30 01:47:55 +0200 | |
commit | ece668401250c1d0419ed078c1d26ccdd30d3289 (patch) | |
tree | 6a8fc43edbee644cc6af3cf8252795c858a99b6a /arch | |
parent | [PATCH] Add proper sparse __user casts to __copy_to_user_inatomic (diff) | |
download | linux-ece668401250c1d0419ed078c1d26ccdd30d3289.tar.gz linux-ece668401250c1d0419ed078c1d26ccdd30d3289.tar.bz2 linux-ece668401250c1d0419ed078c1d26ccdd30d3289.zip |
[PATCH] Allow disabling DAC using command line options
Might or might not work around some reported bugs on VIA systems.
Signed-off-by: Andi Kleen <ak@suse.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86_64/kernel/pci-dma.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/x86_64/kernel/pci-dma.c b/arch/x86_64/kernel/pci-dma.c index 4dcb671bd19f..225e19941b67 100644 --- a/arch/x86_64/kernel/pci-dma.c +++ b/arch/x86_64/kernel/pci-dma.c @@ -170,8 +170,20 @@ void dma_free_coherent(struct device *dev, size_t size, } EXPORT_SYMBOL(dma_free_coherent); +static int forbid_dac __read_mostly; + int dma_supported(struct device *dev, u64 mask) { +#ifdef CONFIG_PCI + if (mask > 0xffffffff && forbid_dac > 0) { + + + + printk(KERN_INFO "PCI: Disallowing DAC for device %s\n", dev->bus_id); + return 0; + } +#endif + if (dma_ops->dma_supported) return dma_ops->dma_supported(dev, mask); @@ -231,6 +243,8 @@ EXPORT_SYMBOL(dma_set_mask); allowed overwrite iommu off workarounds for specific chipsets. soft Use software bounce buffering (default for Intel machines) noaperture Don't touch the aperture for AGP. + allowdac Allow DMA >4GB + nodac Forbid DMA >4GB */ __init int iommu_setup(char *p) { @@ -267,6 +281,10 @@ __init int iommu_setup(char *p) iommu_merge = 0; if (!strncmp(p, "forcesac",8)) iommu_sac_force = 1; + if (!strncmp(p, "allowdac", 8)) + forbid_dac = 0; + if (!strncmp(p, "nodac", 5)) + forbid_dac = -1; #ifdef CONFIG_SWIOTLB if (!strncmp(p, "soft",4)) |