mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-27 17:21:34 +00:00
51 lines
1.9 KiB
Diff
51 lines
1.9 KiB
Diff
From 9f07bb0d4ada68f05b2e51c10720d4688e6adea4 Mon Sep 17 00:00:00 2001
|
|
From: Lucas Stach <l.stach@pengutronix.de>
|
|
Date: Mon, 25 Jan 2016 15:37:28 +0100
|
|
Subject: [PATCH] drm/etnaviv: fix get pages error path in etnaviv_gem_vaddr
|
|
|
|
In case that etnaviv_gem_get_pages is unable to get the required
|
|
pages the object mutex needs to be unlocked. Also return NULL in
|
|
this case instead of propagating the error, as callers of this
|
|
function might not be prepared to handle a pointer error, but
|
|
expect this call to follow the semantics of a plain vmap to return
|
|
NULL in case of an error.
|
|
|
|
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
|
|
---
|
|
drivers/gpu/drm/etnaviv/etnaviv_dump.c | 2 +-
|
|
drivers/gpu/drm/etnaviv/etnaviv_gem.c | 6 ++++--
|
|
2 files changed, 5 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_dump.c b/drivers/gpu/drm/etnaviv/etnaviv_dump.c
|
|
index fd7d3e9..09a759e 100644
|
|
--- a/drivers/gpu/drm/etnaviv/etnaviv_dump.c
|
|
+++ b/drivers/gpu/drm/etnaviv/etnaviv_dump.c
|
|
@@ -216,7 +216,7 @@ void etnaviv_core_dump(struct etnaviv_gpu *gpu)
|
|
iter.hdr->iova = cpu_to_le64(vram->iova);
|
|
|
|
vaddr = etnaviv_gem_vaddr(&obj->base);
|
|
- if (vaddr && !IS_ERR(vaddr))
|
|
+ if (vaddr)
|
|
memcpy(iter.data, vaddr, obj->base.size);
|
|
|
|
etnaviv_core_dump_header(&iter, ETDUMP_BUF_BO, iter.data +
|
|
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
|
|
index 9f77c3b..b22712f 100644
|
|
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
|
|
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
|
|
@@ -361,8 +361,10 @@ void *etnaviv_gem_vaddr(struct drm_gem_object *obj)
|
|
if (!etnaviv_obj->vaddr) {
|
|
struct page **pages = etnaviv_gem_get_pages(etnaviv_obj);
|
|
|
|
- if (IS_ERR(pages))
|
|
- return ERR_CAST(pages);
|
|
+ if (IS_ERR(pages)) {
|
|
+ mutex_unlock(&etnaviv_obj->lock);
|
|
+ return NULL;
|
|
+ }
|
|
|
|
etnaviv_obj->vaddr = vmap(pages, obj->size >> PAGE_SHIFT,
|
|
VM_MAP, pgprot_writecombine(PAGE_KERNEL));
|
|
--
|
|
2.7.0.rc3
|
|
|