diff options
-rw-r--r-- | arch/alpha/kernel/pci_iommu.c | 2 | ||||
-rw-r--r-- | arch/ia64/hp/common/sba_iommu.c | 2 | ||||
-rw-r--r-- | arch/ia64/sn/pci/pci_dma.c | 2 | ||||
-rw-r--r-- | arch/mips/jazz/jazzdma.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/dma-iommu.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/system-bus.c | 4 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/vio.c | 2 | ||||
-rw-r--r-- | arch/s390/pci/pci_dma.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/amd_gart_64.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/pci-calgary_64.c | 2 | ||||
-rw-r--r-- | drivers/iommu/amd_iommu.c | 2 | ||||
-rw-r--r-- | drivers/iommu/intel-iommu.c | 2 | ||||
-rw-r--r-- | drivers/parisc/ccio-dma.c | 2 | ||||
-rw-r--r-- | drivers/parisc/sba_iommu.c | 2 | ||||
-rw-r--r-- | kernel/dma/mapping.c | 20 |
15 files changed, 42 insertions, 8 deletions
diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c index 242108439f42..7f1925a32c99 100644 --- a/arch/alpha/kernel/pci_iommu.c +++ b/arch/alpha/kernel/pci_iommu.c | |||
@@ -955,5 +955,7 @@ const struct dma_map_ops alpha_pci_ops = { | |||
955 | .map_sg = alpha_pci_map_sg, | 955 | .map_sg = alpha_pci_map_sg, |
956 | .unmap_sg = alpha_pci_unmap_sg, | 956 | .unmap_sg = alpha_pci_unmap_sg, |
957 | .dma_supported = alpha_pci_supported, | 957 | .dma_supported = alpha_pci_supported, |
958 | .mmap = dma_common_mmap, | ||
959 | .get_sgtable = dma_common_get_sgtable, | ||
958 | }; | 960 | }; |
959 | EXPORT_SYMBOL(alpha_pci_ops); | 961 | EXPORT_SYMBOL(alpha_pci_ops); |
diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c index 3d24cc43385b..4c0ea6c2833d 100644 --- a/arch/ia64/hp/common/sba_iommu.c +++ b/arch/ia64/hp/common/sba_iommu.c | |||
@@ -2183,6 +2183,8 @@ const struct dma_map_ops sba_dma_ops = { | |||
2183 | .map_sg = sba_map_sg_attrs, | 2183 | .map_sg = sba_map_sg_attrs, |
2184 | .unmap_sg = sba_unmap_sg_attrs, | 2184 | .unmap_sg = sba_unmap_sg_attrs, |
2185 | .dma_supported = sba_dma_supported, | 2185 | .dma_supported = sba_dma_supported, |
2186 | .mmap = dma_common_mmap, | ||
2187 | .get_sgtable = dma_common_get_sgtable, | ||
2186 | }; | 2188 | }; |
2187 | 2189 | ||
2188 | void sba_dma_init(void) | 2190 | void sba_dma_init(void) |
diff --git a/arch/ia64/sn/pci/pci_dma.c b/arch/ia64/sn/pci/pci_dma.c index b7d42e4edc1f..12ffb9c0d738 100644 --- a/arch/ia64/sn/pci/pci_dma.c +++ b/arch/ia64/sn/pci/pci_dma.c | |||
@@ -438,6 +438,8 @@ static struct dma_map_ops sn_dma_ops = { | |||
438 | .unmap_sg = sn_dma_unmap_sg, | 438 | .unmap_sg = sn_dma_unmap_sg, |
439 | .dma_supported = sn_dma_supported, | 439 | .dma_supported = sn_dma_supported, |
440 | .get_required_mask = sn_dma_get_required_mask, | 440 | .get_required_mask = sn_dma_get_required_mask, |
441 | .mmap = dma_common_mmap, | ||
442 | .get_sgtable = dma_common_get_sgtable, | ||
441 | }; | 443 | }; |
442 | 444 | ||
443 | void sn_dma_init(void) | 445 | void sn_dma_init(void) |
diff --git a/arch/mips/jazz/jazzdma.c b/arch/mips/jazz/jazzdma.c index 1804dc9d8136..a01e14955187 100644 --- a/arch/mips/jazz/jazzdma.c +++ b/arch/mips/jazz/jazzdma.c | |||
@@ -682,5 +682,7 @@ const struct dma_map_ops jazz_dma_ops = { | |||
682 | .sync_sg_for_device = jazz_dma_sync_sg_for_device, | 682 | .sync_sg_for_device = jazz_dma_sync_sg_for_device, |
683 | .dma_supported = dma_direct_supported, | 683 | .dma_supported = dma_direct_supported, |
684 | .cache_sync = arch_dma_cache_sync, | 684 | .cache_sync = arch_dma_cache_sync, |
685 | .mmap = dma_common_mmap, | ||
686 | .get_sgtable = dma_common_get_sgtable, | ||
685 | }; | 687 | }; |
686 | EXPORT_SYMBOL(jazz_dma_ops); | 688 | EXPORT_SYMBOL(jazz_dma_ops); |
diff --git a/arch/powerpc/kernel/dma-iommu.c b/arch/powerpc/kernel/dma-iommu.c index a0879674a9c8..2f5a53874f6d 100644 --- a/arch/powerpc/kernel/dma-iommu.c +++ b/arch/powerpc/kernel/dma-iommu.c | |||
@@ -208,4 +208,6 @@ const struct dma_map_ops dma_iommu_ops = { | |||
208 | .sync_single_for_device = dma_iommu_sync_for_device, | 208 | .sync_single_for_device = dma_iommu_sync_for_device, |
209 | .sync_sg_for_cpu = dma_iommu_sync_sg_for_cpu, | 209 | .sync_sg_for_cpu = dma_iommu_sync_sg_for_cpu, |
210 | .sync_sg_for_device = dma_iommu_sync_sg_for_device, | 210 | .sync_sg_for_device = dma_iommu_sync_sg_for_device, |
211 | .mmap = dma_common_mmap, | ||
212 | .get_sgtable = dma_common_get_sgtable, | ||
211 | }; | 213 | }; |
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c index 98410119c47b..70fcc9736a8c 100644 --- a/arch/powerpc/platforms/ps3/system-bus.c +++ b/arch/powerpc/platforms/ps3/system-bus.c | |||
@@ -700,6 +700,8 @@ static const struct dma_map_ops ps3_sb_dma_ops = { | |||
700 | .get_required_mask = ps3_dma_get_required_mask, | 700 | .get_required_mask = ps3_dma_get_required_mask, |
701 | .map_page = ps3_sb_map_page, | 701 | .map_page = ps3_sb_map_page, |
702 | .unmap_page = ps3_unmap_page, | 702 | .unmap_page = ps3_unmap_page, |
703 | .mmap = dma_common_mmap, | ||
704 | .get_sgtable = dma_common_get_sgtable, | ||
703 | }; | 705 | }; |
704 | 706 | ||
705 | static const struct dma_map_ops ps3_ioc0_dma_ops = { | 707 | static const struct dma_map_ops ps3_ioc0_dma_ops = { |
@@ -711,6 +713,8 @@ static const struct dma_map_ops ps3_ioc0_dma_ops = { | |||
711 | .get_required_mask = ps3_dma_get_required_mask, | 713 | .get_required_mask = ps3_dma_get_required_mask, |
712 | .map_page = ps3_ioc0_map_page, | 714 | .map_page = ps3_ioc0_map_page, |
713 | .unmap_page = ps3_unmap_page, | 715 | .unmap_page = ps3_unmap_page, |
716 | .mmap = dma_common_mmap, | ||
717 | .get_sgtable = dma_common_get_sgtable, | ||
714 | }; | 718 | }; |
715 | 719 | ||
716 | /** | 720 | /** |
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c index 6601b9d404dc..3473eef7628c 100644 --- a/arch/powerpc/platforms/pseries/vio.c +++ b/arch/powerpc/platforms/pseries/vio.c | |||
@@ -605,6 +605,8 @@ static const struct dma_map_ops vio_dma_mapping_ops = { | |||
605 | .unmap_page = vio_dma_iommu_unmap_page, | 605 | .unmap_page = vio_dma_iommu_unmap_page, |
606 | .dma_supported = dma_iommu_dma_supported, | 606 | .dma_supported = dma_iommu_dma_supported, |
607 | .get_required_mask = dma_iommu_get_required_mask, | 607 | .get_required_mask = dma_iommu_get_required_mask, |
608 | .mmap = dma_common_mmap, | ||
609 | .get_sgtable = dma_common_get_sgtable, | ||
608 | }; | 610 | }; |
609 | 611 | ||
610 | /** | 612 | /** |
diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c index 9e52d1527f71..03d8c1c9f82f 100644 --- a/arch/s390/pci/pci_dma.c +++ b/arch/s390/pci/pci_dma.c | |||
@@ -668,6 +668,8 @@ const struct dma_map_ops s390_pci_dma_ops = { | |||
668 | .unmap_sg = s390_dma_unmap_sg, | 668 | .unmap_sg = s390_dma_unmap_sg, |
669 | .map_page = s390_dma_map_pages, | 669 | .map_page = s390_dma_map_pages, |
670 | .unmap_page = s390_dma_unmap_pages, | 670 | .unmap_page = s390_dma_unmap_pages, |
671 | .mmap = dma_common_mmap, | ||
672 | .get_sgtable = dma_common_get_sgtable, | ||
671 | /* dma_supported is unconditionally true without a callback */ | 673 | /* dma_supported is unconditionally true without a callback */ |
672 | }; | 674 | }; |
673 | EXPORT_SYMBOL_GPL(s390_pci_dma_ops); | 675 | EXPORT_SYMBOL_GPL(s390_pci_dma_ops); |
diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c index a585ea6f686a..f72c487d68a8 100644 --- a/arch/x86/kernel/amd_gart_64.c +++ b/arch/x86/kernel/amd_gart_64.c | |||
@@ -677,6 +677,8 @@ static const struct dma_map_ops gart_dma_ops = { | |||
677 | .unmap_page = gart_unmap_page, | 677 | .unmap_page = gart_unmap_page, |
678 | .alloc = gart_alloc_coherent, | 678 | .alloc = gart_alloc_coherent, |
679 | .free = gart_free_coherent, | 679 | .free = gart_free_coherent, |
680 | .mmap = dma_common_mmap, | ||
681 | .get_sgtable = dma_common_get_sgtable, | ||
680 | .dma_supported = dma_direct_supported, | 682 | .dma_supported = dma_direct_supported, |
681 | }; | 683 | }; |
682 | 684 | ||
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index 9d4343aa481b..23fdec030c37 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c | |||
@@ -468,6 +468,8 @@ static const struct dma_map_ops calgary_dma_ops = { | |||
468 | .map_page = calgary_map_page, | 468 | .map_page = calgary_map_page, |
469 | .unmap_page = calgary_unmap_page, | 469 | .unmap_page = calgary_unmap_page, |
470 | .dma_supported = dma_direct_supported, | 470 | .dma_supported = dma_direct_supported, |
471 | .mmap = dma_common_mmap, | ||
472 | .get_sgtable = dma_common_get_sgtable, | ||
471 | }; | 473 | }; |
472 | 474 | ||
473 | static inline void __iomem * busno_to_bbar(unsigned char num) | 475 | static inline void __iomem * busno_to_bbar(unsigned char num) |
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index b607a92791d3..2e74ad659985 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c | |||
@@ -2722,6 +2722,8 @@ static const struct dma_map_ops amd_iommu_dma_ops = { | |||
2722 | .map_sg = map_sg, | 2722 | .map_sg = map_sg, |
2723 | .unmap_sg = unmap_sg, | 2723 | .unmap_sg = unmap_sg, |
2724 | .dma_supported = amd_iommu_dma_supported, | 2724 | .dma_supported = amd_iommu_dma_supported, |
2725 | .mmap = dma_common_mmap, | ||
2726 | .get_sgtable = dma_common_get_sgtable, | ||
2725 | }; | 2727 | }; |
2726 | 2728 | ||
2727 | static int init_reserved_iova_ranges(void) | 2729 | static int init_reserved_iova_ranges(void) |
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index 12d094d08c0a..dca1b06ce4ec 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c | |||
@@ -3738,6 +3738,8 @@ static const struct dma_map_ops intel_dma_ops = { | |||
3738 | .map_resource = intel_map_resource, | 3738 | .map_resource = intel_map_resource, |
3739 | .unmap_resource = intel_unmap_resource, | 3739 | .unmap_resource = intel_unmap_resource, |
3740 | .dma_supported = dma_direct_supported, | 3740 | .dma_supported = dma_direct_supported, |
3741 | .mmap = dma_common_mmap, | ||
3742 | .get_sgtable = dma_common_get_sgtable, | ||
3741 | }; | 3743 | }; |
3742 | 3744 | ||
3743 | static inline int iommu_domain_cache_init(void) | 3745 | static inline int iommu_domain_cache_init(void) |
diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c index 217f15aafa4a..1d7125d29bee 100644 --- a/drivers/parisc/ccio-dma.c +++ b/drivers/parisc/ccio-dma.c | |||
@@ -1024,6 +1024,8 @@ static const struct dma_map_ops ccio_ops = { | |||
1024 | .unmap_page = ccio_unmap_page, | 1024 | .unmap_page = ccio_unmap_page, |
1025 | .map_sg = ccio_map_sg, | 1025 | .map_sg = ccio_map_sg, |
1026 | .unmap_sg = ccio_unmap_sg, | 1026 | .unmap_sg = ccio_unmap_sg, |
1027 | .mmap = dma_common_mmap, | ||
1028 | .get_sgtable = dma_common_get_sgtable, | ||
1027 | }; | 1029 | }; |
1028 | 1030 | ||
1029 | #ifdef CONFIG_PROC_FS | 1031 | #ifdef CONFIG_PROC_FS |
diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c index 296668caf7e5..fa4df65b7e28 100644 --- a/drivers/parisc/sba_iommu.c +++ b/drivers/parisc/sba_iommu.c | |||
@@ -1084,6 +1084,8 @@ static const struct dma_map_ops sba_ops = { | |||
1084 | .unmap_page = sba_unmap_page, | 1084 | .unmap_page = sba_unmap_page, |
1085 | .map_sg = sba_map_sg, | 1085 | .map_sg = sba_map_sg, |
1086 | .unmap_sg = sba_unmap_sg, | 1086 | .unmap_sg = sba_unmap_sg, |
1087 | .mmap = dma_common_mmap, | ||
1088 | .get_sgtable = dma_common_get_sgtable, | ||
1087 | }; | 1089 | }; |
1088 | 1090 | ||
1089 | 1091 | ||
diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c index a136932b8e6d..c8b4e46407ba 100644 --- a/kernel/dma/mapping.c +++ b/kernel/dma/mapping.c | |||
@@ -153,11 +153,12 @@ int dma_get_sgtable_attrs(struct device *dev, struct sg_table *sgt, | |||
153 | { | 153 | { |
154 | const struct dma_map_ops *ops = get_dma_ops(dev); | 154 | const struct dma_map_ops *ops = get_dma_ops(dev); |
155 | 155 | ||
156 | if (!dma_is_direct(ops) && ops->get_sgtable) | 156 | if (dma_is_direct(ops)) |
157 | return ops->get_sgtable(dev, sgt, cpu_addr, dma_addr, size, | 157 | return dma_common_get_sgtable(dev, sgt, cpu_addr, dma_addr, |
158 | attrs); | 158 | size, attrs); |
159 | return dma_common_get_sgtable(dev, sgt, cpu_addr, dma_addr, size, | 159 | if (!ops->get_sgtable) |
160 | attrs); | 160 | return -ENXIO; |
161 | return ops->get_sgtable(dev, sgt, cpu_addr, dma_addr, size, attrs); | ||
161 | } | 162 | } |
162 | EXPORT_SYMBOL(dma_get_sgtable_attrs); | 163 | EXPORT_SYMBOL(dma_get_sgtable_attrs); |
163 | 164 | ||
@@ -240,9 +241,12 @@ int dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, | |||
240 | { | 241 | { |
241 | const struct dma_map_ops *ops = get_dma_ops(dev); | 242 | const struct dma_map_ops *ops = get_dma_ops(dev); |
242 | 243 | ||
243 | if (!dma_is_direct(ops) && ops->mmap) | 244 | if (dma_is_direct(ops)) |
244 | return ops->mmap(dev, vma, cpu_addr, dma_addr, size, attrs); | 245 | return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size, |
245 | return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size, attrs); | 246 | attrs); |
247 | if (!ops->mmap) | ||
248 | return -ENXIO; | ||
249 | return ops->mmap(dev, vma, cpu_addr, dma_addr, size, attrs); | ||
246 | } | 250 | } |
247 | EXPORT_SYMBOL(dma_mmap_attrs); | 251 | EXPORT_SYMBOL(dma_mmap_attrs); |
248 | 252 | ||