diff --git a/drivers/gpu/nvgpu/common/linux/dma.c b/drivers/gpu/nvgpu/common/linux/dma.c index ec9c3b5a8..fe4e9bc84 100644 --- a/drivers/gpu/nvgpu/common/linux/dma.c +++ b/drivers/gpu/nvgpu/common/linux/dma.c @@ -14,7 +14,6 @@ * along with this program. If not, see . */ -#include #include #include @@ -35,6 +34,17 @@ #include "platform_gk20a.h" #include "os_linux.h" +#ifdef __DMA_ATTRS_LONGS +#define NVGPU_DEFINE_DMA_ATTRS(x) \ + struct dma_attrs x = { \ + .flags = { [0 ... __DMA_ATTRS_LONGS-1] = 0 }, \ + } +#define NVGPU_DMA_ATTR(attrs) &attrs +#else +#define NVGPU_DEFINE_DMA_ATTRS(attrs) unsigned long attrs = 0 +#define NVGPU_DMA_ATTR(attrs) attrs +#endif + /* * Enough to hold all the possible flags in string form. When a new flag is * added it must be added here as well!! @@ -211,7 +221,7 @@ int nvgpu_dma_alloc_flags_sys(struct gk20a *g, unsigned long flags, struct device *d = dev_from_gk20a(g); int err; dma_addr_t iova; - DEFINE_DMA_ATTRS(dma_attrs); + NVGPU_DEFINE_DMA_ATTRS(dma_attrs); void *alloc_ret; /* @@ -233,7 +243,7 @@ int nvgpu_dma_alloc_flags_sys(struct gk20a *g, unsigned long flags, alloc_ret = dma_alloc_attrs(d, size, &iova, GFP_KERNEL|__GFP_ZERO, - __DMA_ATTR(dma_attrs)); + NVGPU_DMA_ATTR(dma_attrs)); if (!alloc_ret) return -ENOMEM; @@ -260,7 +270,7 @@ int nvgpu_dma_alloc_flags_sys(struct gk20a *g, unsigned long flags, fail_free: g->dma_memory_used -= mem->aligned_size; - dma_free_attrs(d, size, alloc_ret, iova, __DMA_ATTR(dma_attrs)); + dma_free_attrs(d, size, alloc_ret, iova, NVGPU_DMA_ATTR(dma_attrs)); mem->cpu_va = NULL; mem->priv.sgt = NULL; mem->size = 0; @@ -460,18 +470,18 @@ static void nvgpu_dma_free_sys(struct gk20a *g, struct nvgpu_mem *mem) !(mem->mem_flags & __NVGPU_MEM_FLAG_NO_DMA) && (mem->cpu_va || mem->priv.pages)) { if (mem->priv.flags) { - DEFINE_DMA_ATTRS(dma_attrs); + NVGPU_DEFINE_DMA_ATTRS(dma_attrs); nvgpu_dma_flags_to_attrs(&dma_attrs, mem->priv.flags); if (mem->priv.flags & NVGPU_DMA_NO_KERNEL_MAPPING) { dma_free_attrs(d, mem->aligned_size, mem->priv.pages, sg_dma_address(mem->priv.sgt->sgl), - __DMA_ATTR(dma_attrs)); + NVGPU_DMA_ATTR(dma_attrs)); } else { dma_free_attrs(d, mem->aligned_size, mem->cpu_va, sg_dma_address(mem->priv.sgt->sgl), - __DMA_ATTR(dma_attrs)); + NVGPU_DMA_ATTR(dma_attrs)); } } else { dma_free_coherent(d, mem->aligned_size, mem->cpu_va, @@ -563,7 +573,7 @@ int nvgpu_get_sgtable_attrs(struct gk20a *g, struct sg_table **sgt, { int err = 0; struct sg_table *tbl; - DEFINE_DMA_ATTRS(dma_attrs); + NVGPU_DEFINE_DMA_ATTRS(dma_attrs); tbl = nvgpu_kzalloc(g, sizeof(struct sg_table)); if (!tbl) { @@ -573,7 +583,7 @@ int nvgpu_get_sgtable_attrs(struct gk20a *g, struct sg_table **sgt, nvgpu_dma_flags_to_attrs(&dma_attrs, flags); err = dma_get_sgtable_attrs(dev_from_gk20a(g), tbl, cpuva, iova, - size, __DMA_ATTR(dma_attrs)); + size, NVGPU_DMA_ATTR(dma_attrs)); if (err) goto fail;