drm/rockchip: avoid duplicate mappings for IOMMU devices
If a buffer is allocated with alloc_kmap, then it is vmap'd on creation and there is no reason to map it again in rockchip_gem_prime_vmap() when the existing mapping can be used. Signed-off-by: John Keeping <john@metanate.com> Signed-off-by: Heiko Stuebner <heiko@sntech.de> Link: https://patchwork.freedesktop.org/patch/msgid/20221110172415.2853420-1-john@metanate.com
This commit is contained in:
parent
582212ee16
commit
0020d4cfa3
@ -519,8 +519,14 @@ int rockchip_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map)
|
||||
struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj);
|
||||
|
||||
if (rk_obj->pages) {
|
||||
void *vaddr = vmap(rk_obj->pages, rk_obj->num_pages, VM_MAP,
|
||||
pgprot_writecombine(PAGE_KERNEL));
|
||||
void *vaddr;
|
||||
|
||||
if (rk_obj->kvaddr)
|
||||
vaddr = rk_obj->kvaddr;
|
||||
else
|
||||
vaddr = vmap(rk_obj->pages, rk_obj->num_pages, VM_MAP,
|
||||
pgprot_writecombine(PAGE_KERNEL));
|
||||
|
||||
if (!vaddr)
|
||||
return -ENOMEM;
|
||||
iosys_map_set_vaddr(map, vaddr);
|
||||
@ -540,7 +546,8 @@ void rockchip_gem_prime_vunmap(struct drm_gem_object *obj,
|
||||
struct rockchip_gem_object *rk_obj = to_rockchip_obj(obj);
|
||||
|
||||
if (rk_obj->pages) {
|
||||
vunmap(map->vaddr);
|
||||
if (map->vaddr != rk_obj->kvaddr)
|
||||
vunmap(map->vaddr);
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user