diff options
Diffstat (limited to 'arch/x86/kernel/pci-swiotlb.c')
| -rw-r--r-- | arch/x86/kernel/pci-swiotlb.c | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c index aaa6b7839f1..e3c0a66b9e7 100644 --- a/arch/x86/kernel/pci-swiotlb.c +++ b/arch/x86/kernel/pci-swiotlb.c @@ -42,18 +42,28 @@ static struct dma_map_ops swiotlb_dma_ops = {  	.dma_supported = NULL,  }; -void __init pci_swiotlb_init(void) +/* + * pci_swiotlb_init - initialize swiotlb if necessary + * + * This returns non-zero if we are forced to use swiotlb (by the boot + * option). + */ +int __init pci_swiotlb_init(void)  { +	int use_swiotlb = swiotlb | swiotlb_force; +  	/* don't initialize swiotlb if iommu=off (no_iommu=1) */  #ifdef CONFIG_X86_64 -	if ((!iommu_detected && !no_iommu && max_pfn > MAX_DMA32_PFN)) +	if (!no_iommu && max_pfn > MAX_DMA32_PFN)  		swiotlb = 1;  #endif  	if (swiotlb_force)  		swiotlb = 1; +  	if (swiotlb) { -		printk(KERN_INFO "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\n"); -		swiotlb_init(); +		swiotlb_init(0);  		dma_ops = &swiotlb_dma_ops;  	} + +	return use_swiotlb;  }  |