summaryrefslogtreecommitdiffstats
path: root/kernel/dma/mapping.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/dma/mapping.c')
-rw-r--r--kernel/dma/mapping.c20
1 files changed, 12 insertions, 8 deletions
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}
162EXPORT_SYMBOL(dma_get_sgtable_attrs); 163EXPORT_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}
247EXPORT_SYMBOL(dma_mmap_attrs); 251EXPORT_SYMBOL(dma_mmap_attrs);
248 252