diff options
| author | Krzysztof Kozlowski <k.kozlowski@samsung.com> | 2016-08-03 16:46:00 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-08-04 08:50:07 -0400 |
| commit | 00085f1efa387a8ce100e3734920f7639c80caa3 (patch) | |
| tree | 41ff3d6e6884918b4fc4f1ae96a284098167c5b0 /drivers/gpu/drm/rockchip | |
| parent | 1605d2715ad2e67ddd0485a26e05ed670a4285ca (diff) | |
dma-mapping: use unsigned long for dma_attrs
The dma-mapping core and the implementations do not change the DMA
attributes passed by pointer. Thus the pointer can point to const data.
However the attributes do not have to be a bitfield. Instead unsigned
long will do fine:
1. This is just simpler. Both in terms of reading the code and setting
attributes. Instead of initializing local attributes on the stack
and passing pointer to it to dma_set_attr(), just set the bits.
2. It brings safeness and checking for const correctness because the
attributes are passed by value.
Semantic patches for this change (at least most of them):
virtual patch
virtual context
@r@
identifier f, attrs;
@@
f(...,
- struct dma_attrs *attrs
+ unsigned long attrs
, ...)
{
...
}
@@
identifier r.f;
@@
f(...,
- NULL
+ 0
)
and
// Options: --all-includes
virtual patch
virtual context
@r@
identifier f, attrs;
type t;
@@
t f(..., struct dma_attrs *attrs);
@@
identifier r.f;
@@
f(...,
- NULL
+ 0
)
Link: http://lkml.kernel.org/r/1468399300-5399-2-git-send-email-k.kozlowski@samsung.com
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Acked-by: Vineet Gupta <vgupta@synopsys.com>
Acked-by: Robin Murphy <robin.murphy@arm.com>
Acked-by: Hans-Christian Noren Egtvedt <egtvedt@samfundet.no>
Acked-by: Mark Salter <msalter@redhat.com> [c6x]
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com> [cris]
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> [drm]
Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com>
Acked-by: Joerg Roedel <jroedel@suse.de> [iommu]
Acked-by: Fabien Dessenne <fabien.dessenne@st.com> [bdisp]
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com> [vb2-core]
Acked-by: David Vrabel <david.vrabel@citrix.com> [xen]
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> [xen swiotlb]
Acked-by: Joerg Roedel <jroedel@suse.de> [iommu]
Acked-by: Richard Kuo <rkuo@codeaurora.org> [hexagon]
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> [m68k]
Acked-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> [s390]
Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Acked-by: Hans-Christian Noren Egtvedt <egtvedt@samfundet.no> [avr32]
Acked-by: Vineet Gupta <vgupta@synopsys.com> [arc]
Acked-by: Robin Murphy <robin.murphy@arm.com> [arm64 and dma-iommu]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/gpu/drm/rockchip')
| -rw-r--r-- | drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 17 | ||||
| -rw-r--r-- | drivers/gpu/drm/rockchip/rockchip_drm_gem.h | 2 |
2 files changed, 8 insertions, 11 deletions
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c index 059e902f872d..b70f9423379c 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c | |||
| @@ -17,8 +17,6 @@ | |||
| 17 | #include <drm/drm_gem.h> | 17 | #include <drm/drm_gem.h> |
| 18 | #include <drm/drm_vma_manager.h> | 18 | #include <drm/drm_vma_manager.h> |
| 19 | 19 | ||
| 20 | #include <linux/dma-attrs.h> | ||
| 21 | |||
| 22 | #include "rockchip_drm_drv.h" | 20 | #include "rockchip_drm_drv.h" |
| 23 | #include "rockchip_drm_gem.h" | 21 | #include "rockchip_drm_gem.h" |
| 24 | 22 | ||
| @@ -28,15 +26,14 @@ static int rockchip_gem_alloc_buf(struct rockchip_gem_object *rk_obj, | |||
| 28 | struct drm_gem_object *obj = &rk_obj->base; | 26 | struct drm_gem_object *obj = &rk_obj->base; |
| 29 | struct drm_device *drm = obj->dev; | 27 | struct drm_device *drm = obj->dev; |
| 30 | 28 | ||
| 31 | init_dma_attrs(&rk_obj->dma_attrs); | 29 | rk_obj->dma_attrs = DMA_ATTR_WRITE_COMBINE; |
| 32 | dma_set_attr(DMA_ATTR_WRITE_COMBINE, &rk_obj->dma_attrs); | ||
| 33 | 30 | ||
| 34 | if (!alloc_kmap) | 31 | if (!alloc_kmap) |
| 35 | dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &rk_obj->dma_attrs); | 32 | rk_obj->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING; |
| 36 | 33 | ||
| 37 | rk_obj->kvaddr = dma_alloc_attrs(drm->dev, obj->size, | 34 | rk_obj->kvaddr = dma_alloc_attrs(drm->dev, obj->size, |
| 38 | &rk_obj->dma_addr, GFP_KERNEL, | 35 | &rk_obj->dma_addr, GFP_KERNEL, |
| 39 | &rk_obj->dma_attrs); | 36 | rk_obj->dma_attrs); |
| 40 | if (!rk_obj->kvaddr) { | 37 | if (!rk_obj->kvaddr) { |
| 41 | DRM_ERROR("failed to allocate %zu byte dma buffer", obj->size); | 38 | DRM_ERROR("failed to allocate %zu byte dma buffer", obj->size); |
| 42 | return -ENOMEM; | 39 | return -ENOMEM; |
| @@ -51,7 +48,7 @@ static void rockchip_gem_free_buf(struct rockchip_gem_object *rk_obj) | |||
| 51 | struct drm_device *drm = obj->dev; | 48 | struct drm_device *drm = obj->dev; |
| 52 | 49 | ||
| 53 | dma_free_attrs(drm->dev, obj->size, rk_obj->kvaddr, rk_obj->dma_addr, | 50 | dma_free_attrs(drm->dev, obj->size, rk_obj->kvaddr, rk_obj->dma_addr, |
| 54 | &rk_obj->dma_attrs); | 51 | rk_obj->dma_attrs); |
| 55 | } | 52 | } |
| 56 | 53 | ||
| 57 | static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj, | 54 | static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj, |
| @@ -70,7 +67,7 @@ static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj, | |||
| 70 | vma->vm_pgoff = 0; | 67 | vma->vm_pgoff = 0; |
| 71 | 68 | ||
| 72 | ret = dma_mmap_attrs(drm->dev, vma, rk_obj->kvaddr, rk_obj->dma_addr, | 69 | ret = dma_mmap_attrs(drm->dev, vma, rk_obj->kvaddr, rk_obj->dma_addr, |
| 73 | obj->size, &rk_obj->dma_attrs); | 70 | obj->size, rk_obj->dma_attrs); |
| 74 | if (ret) | 71 | if (ret) |
| 75 | drm_gem_vm_close(vma); | 72 | drm_gem_vm_close(vma); |
| 76 | 73 | ||
| @@ -262,7 +259,7 @@ struct sg_table *rockchip_gem_prime_get_sg_table(struct drm_gem_object *obj) | |||
| 262 | 259 | ||
| 263 | ret = dma_get_sgtable_attrs(drm->dev, sgt, rk_obj->kvaddr, | 260 | ret = dma_get_sgtable_attrs(drm->dev, sgt, rk_obj->kvaddr, |
| 264 | rk_obj->dma_addr, obj->size, | 261 | rk_obj->dma_addr, obj->size, |
| 265 | &rk_obj->dma_attrs); | 262 | rk_obj->dma_attrs); |
| 266 | if (ret) { | 263 | if (ret) { |
| 267 | DRM_ERROR("failed to allocate sgt, %d\n", ret); | 264 | DRM_ERROR("failed to allocate sgt, %d\n", ret); |
| 268 | kfree(sgt); | 265 | kfree(sgt); |
| @@ -276,7 +273,7 @@ void *rockchip_gem_prime_vmap(struct drm_gem_object *obj) | |||
| 276 | { | 273 | { |
| 277 | struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj); | 274 | struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj); |
| 278 | 275 | ||
| 279 | if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, &rk_obj->dma_attrs)) | 276 | if (rk_obj->dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING) |
| 280 | return NULL; | 277 | return NULL; |
| 281 | 278 | ||
| 282 | return rk_obj->kvaddr; | 279 | return rk_obj->kvaddr; |
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h index ad22618473a4..18b3488db4ec 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.h | |||
| @@ -23,7 +23,7 @@ struct rockchip_gem_object { | |||
| 23 | 23 | ||
| 24 | void *kvaddr; | 24 | void *kvaddr; |
| 25 | dma_addr_t dma_addr; | 25 | dma_addr_t dma_addr; |
| 26 | struct dma_attrs dma_attrs; | 26 | unsigned long dma_attrs; |
| 27 | }; | 27 | }; |
| 28 | 28 | ||
| 29 | struct sg_table *rockchip_gem_prime_get_sg_table(struct drm_gem_object *obj); | 29 | struct sg_table *rockchip_gem_prime_get_sg_table(struct drm_gem_object *obj); |
