Loading drivers/gpu/drm/udl/udl_fb.c +11 −2 Original line number Original line Diff line number Diff line Loading @@ -156,8 +156,17 @@ int udl_handle_damage(struct udl_framebuffer *fb, int x, int y, if (!fb->active_16) if (!fb->active_16) return 0; return 0; if (!fb->obj->vmapping) if (!fb->obj->vmapping) { udl_gem_vmap(fb->obj); ret = udl_gem_vmap(fb->obj); if (ret == -ENOMEM) { DRM_ERROR("failed to vmap fb\n"); return 0; } if (!fb->obj->vmapping) { DRM_ERROR("failed to vmapping\n"); return 0; } } start_cycles = get_cycles(); start_cycles = get_cycles(); Loading drivers/gpu/drm/udl/udl_gem.c +22 −3 Original line number Original line Diff line number Diff line Loading @@ -180,6 +180,18 @@ int udl_gem_vmap(struct udl_gem_object *obj) int page_count = obj->base.size / PAGE_SIZE; int page_count = obj->base.size / PAGE_SIZE; int ret; int ret; if (obj->base.import_attach) { ret = dma_buf_begin_cpu_access(obj->base.import_attach->dmabuf, 0, obj->base.size, DMA_BIDIRECTIONAL); if (ret) return -EINVAL; obj->vmapping = dma_buf_vmap(obj->base.import_attach->dmabuf); if (!obj->vmapping) return -ENOMEM; return 0; } ret = udl_gem_get_pages(obj, GFP_KERNEL); ret = udl_gem_get_pages(obj, GFP_KERNEL); if (ret) if (ret) return ret; return ret; Loading @@ -192,6 +204,13 @@ int udl_gem_vmap(struct udl_gem_object *obj) void udl_gem_vunmap(struct udl_gem_object *obj) void udl_gem_vunmap(struct udl_gem_object *obj) { { if (obj->base.import_attach) { dma_buf_vunmap(obj->base.import_attach->dmabuf, obj->vmapping); dma_buf_end_cpu_access(obj->base.import_attach->dmabuf, 0, obj->base.size, DMA_BIDIRECTIONAL); return; } if (obj->vmapping) if (obj->vmapping) vunmap(obj->vmapping); vunmap(obj->vmapping); Loading @@ -202,12 +221,12 @@ void udl_gem_free_object(struct drm_gem_object *gem_obj) { { struct udl_gem_object *obj = to_udl_bo(gem_obj); struct udl_gem_object *obj = to_udl_bo(gem_obj); if (gem_obj->import_attach) drm_prime_gem_destroy(gem_obj, obj->sg); if (obj->vmapping) if (obj->vmapping) udl_gem_vunmap(obj); udl_gem_vunmap(obj); if (gem_obj->import_attach) drm_prime_gem_destroy(gem_obj, obj->sg); if (obj->pages) if (obj->pages) udl_gem_put_pages(obj); udl_gem_put_pages(obj); Loading Loading
drivers/gpu/drm/udl/udl_fb.c +11 −2 Original line number Original line Diff line number Diff line Loading @@ -156,8 +156,17 @@ int udl_handle_damage(struct udl_framebuffer *fb, int x, int y, if (!fb->active_16) if (!fb->active_16) return 0; return 0; if (!fb->obj->vmapping) if (!fb->obj->vmapping) { udl_gem_vmap(fb->obj); ret = udl_gem_vmap(fb->obj); if (ret == -ENOMEM) { DRM_ERROR("failed to vmap fb\n"); return 0; } if (!fb->obj->vmapping) { DRM_ERROR("failed to vmapping\n"); return 0; } } start_cycles = get_cycles(); start_cycles = get_cycles(); Loading
drivers/gpu/drm/udl/udl_gem.c +22 −3 Original line number Original line Diff line number Diff line Loading @@ -180,6 +180,18 @@ int udl_gem_vmap(struct udl_gem_object *obj) int page_count = obj->base.size / PAGE_SIZE; int page_count = obj->base.size / PAGE_SIZE; int ret; int ret; if (obj->base.import_attach) { ret = dma_buf_begin_cpu_access(obj->base.import_attach->dmabuf, 0, obj->base.size, DMA_BIDIRECTIONAL); if (ret) return -EINVAL; obj->vmapping = dma_buf_vmap(obj->base.import_attach->dmabuf); if (!obj->vmapping) return -ENOMEM; return 0; } ret = udl_gem_get_pages(obj, GFP_KERNEL); ret = udl_gem_get_pages(obj, GFP_KERNEL); if (ret) if (ret) return ret; return ret; Loading @@ -192,6 +204,13 @@ int udl_gem_vmap(struct udl_gem_object *obj) void udl_gem_vunmap(struct udl_gem_object *obj) void udl_gem_vunmap(struct udl_gem_object *obj) { { if (obj->base.import_attach) { dma_buf_vunmap(obj->base.import_attach->dmabuf, obj->vmapping); dma_buf_end_cpu_access(obj->base.import_attach->dmabuf, 0, obj->base.size, DMA_BIDIRECTIONAL); return; } if (obj->vmapping) if (obj->vmapping) vunmap(obj->vmapping); vunmap(obj->vmapping); Loading @@ -202,12 +221,12 @@ void udl_gem_free_object(struct drm_gem_object *gem_obj) { { struct udl_gem_object *obj = to_udl_bo(gem_obj); struct udl_gem_object *obj = to_udl_bo(gem_obj); if (gem_obj->import_attach) drm_prime_gem_destroy(gem_obj, obj->sg); if (obj->vmapping) if (obj->vmapping) udl_gem_vunmap(obj); udl_gem_vunmap(obj); if (gem_obj->import_attach) drm_prime_gem_destroy(gem_obj, obj->sg); if (obj->pages) if (obj->pages) udl_gem_put_pages(obj); udl_gem_put_pages(obj); Loading