Commit 995f54ea authored by Thomas Zimmermann's avatar Thomas Zimmermann
Browse files

drm/cma-helper: Release non-coherent memory with dma_free_noncoherent()



The GEM CMA helpers allocate non-coherent (i.e., cached) backing storage
with dma_alloc_noncoherent(), but release it with dma_free_wc(). Fix this
with a call to dma_free_noncoherent(). Writecombining storage is still
released with dma_free_wc().

Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Fixes: cf8ccbc7 ("drm: Add support for GEM buffers backed by non-coherent memory")
Acked-by: default avatarPaul Cercueil <paul@crapouillou.net>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: dri-devel@lists.freedesktop.org
Cc: <stable@vger.kernel.org> # v5.14+
Link: https://patchwork.freedesktop.org/patch/msgid/20210708175146.10618-1-tzimmermann@suse.de
parent 3cc1ae1f
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -210,6 +210,11 @@ void drm_gem_cma_free_object(struct drm_gem_object *gem_obj)
			dma_buf_vunmap(gem_obj->import_attach->dmabuf, &map);
		drm_prime_gem_destroy(gem_obj, cma_obj->sgt);
	} else if (cma_obj->vaddr) {
		if (cma_obj->map_noncoherent)
			dma_free_noncoherent(gem_obj->dev->dev, cma_obj->base.size,
					     cma_obj->vaddr, cma_obj->paddr,
					     DMA_TO_DEVICE);
		else
			dma_free_wc(gem_obj->dev->dev, cma_obj->base.size,
				    cma_obj->vaddr, cma_obj->paddr);
	}