diff options
Diffstat (limited to 'kernel/dma/mapping.c')
-rw-r--r-- | kernel/dma/mapping.c | 20 |
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 | } |
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 | ||