summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/hisilicon
diff options
context:
space:
mode:
authorThomas Zimmermann <tzimmermann@suse.de>2019-05-16 18:27:46 +0200
committerGerd Hoffmann <kraxel@redhat.com>2019-05-17 13:14:11 +0200
commit5b24f715042da2a7f3fd059f15cc5a6fbd4f4ec6 (patch)
tree10786a77f38388273e4a631717232ba30cd3557c /drivers/gpu/drm/hisilicon
parent82ff2fb5d184e95c7877c58359cef4f5d43df9c1 (diff)
downloadlinux-5b24f715042da2a7f3fd059f15cc5a6fbd4f4ec6.tar.bz2
drm: Reserve/unreserve GEM VRAM BOs from within pin/unpin functions
The original bochs and vbox implementations of pin and unpin functions automatically reserved BOs during validation. This functionality got lost while converting the code to a generic implementation. This may result in validating unlocked TTM BOs. Adding the reserve and unreserve operations to GEM VRAM's pin and unpin functions fixes the bochs and vbox drivers. Additionally the patch changes the mgag200, ast and hibmc drivers to not reserve BOs by themselves. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reported-by: kernel test robot <lkp@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20190516162746.11636-3-tzimmermann@suse.de Fixes: a3232987fdbf ("drm/bochs: Convert bochs driver to |struct drm_gem_vram_object|") Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/hisilicon')
-rw-r--r--drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c6
-rw-r--r--drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c17
2 files changed, 1 insertions, 22 deletions
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
index db0dfa57844e..fbdf495779e0 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
@@ -107,14 +107,8 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane,
hibmc_fb = to_hibmc_framebuffer(state->fb);
gbo = drm_gem_vram_of_gem(hibmc_fb->obj);
- ret = drm_gem_vram_reserve(gbo, false);
- if (ret) {
- DRM_ERROR("failed to reserve BO: %d", ret);
- return;
- }
ret = drm_gem_vram_pin(gbo, DRM_GEM_VRAM_PL_FLAG_VRAM);
- drm_gem_vram_unreserve(gbo);
if (ret) {
DRM_ERROR("failed to pin bo: %d", ret);
return;
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
index 9d2025fa16f8..bd5fbb23973a 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
@@ -63,7 +63,6 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
struct drm_mode_fb_cmd2 mode_cmd;
struct drm_gem_object *gobj = NULL;
int ret = 0;
- int ret1;
size_t size;
unsigned int bytes_per_pixel;
struct drm_gem_vram_object *gbo = NULL;
@@ -91,16 +90,10 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
gbo = drm_gem_vram_of_gem(gobj);
- ret = drm_gem_vram_reserve(gbo, false);
- if (ret) {
- DRM_ERROR("failed to reserve bo: %d\n", ret);
- goto out_unref_gem;
- }
-
ret = drm_gem_vram_pin(gbo, DRM_GEM_VRAM_PL_FLAG_VRAM);
if (ret) {
DRM_ERROR("failed to pin fbcon: %d\n", ret);
- goto out_unreserve_ttm_bo;
+ goto out_unref_gem;
}
base = drm_gem_vram_kmap(gbo, true, NULL);
@@ -109,7 +102,6 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
DRM_ERROR("failed to kmap fbcon: %d\n", ret);
goto out_unpin_bo;
}
- drm_gem_vram_unreserve(gbo);
info = drm_fb_helper_alloc_fbi(helper);
if (IS_ERR(info)) {
@@ -141,16 +133,9 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
return 0;
out_release_fbi:
- ret1 = drm_gem_vram_reserve(gbo, false);
- if (ret1) {
- DRM_ERROR("failed to rsv ttm_bo when release fbi: %d\n", ret1);
- goto out_unref_gem;
- }
drm_gem_vram_kunmap(gbo);
out_unpin_bo:
drm_gem_vram_unpin(gbo);
-out_unreserve_ttm_bo:
- drm_gem_vram_unreserve(gbo);
out_unref_gem:
drm_gem_object_put_unlocked(gobj);