From 5b24f715042da2a7f3fd059f15cc5a6fbd4f4ec6 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Thu, 16 May 2019 18:27:46 +0200 Subject: 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 Reported-by: kernel test robot 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 Signed-off-by: Gerd Hoffmann --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 6 ------ drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c | 17 +---------------- 2 files changed, 1 insertion(+), 22 deletions(-) (limited to 'drivers/gpu/drm/hisilicon') 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); -- cgit v1.2.3