mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-03 17:14:14 +08:00
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>
This commit is contained in:
parent
45d16a6d94
commit
9f07bb0d4a
@ -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 +
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user