Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da7bdda2 authored by Daniel Vetter's avatar Daniel Vetter
Browse files

drm/fb-helper: Automatically clean up fb_info



Noticed that everyone duplicates the same logic here and we could safe
a few lines per driver. Yay for lots of drivers to make such tiny
refactors worth-while!

v2: Forgot to git add everything :(

v3: Actually remove release_fbi (Sean, Emil, Chris) ...

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Sean Paul <seanpaul@chromium.org>
Cc: Noralf Trønnes <noralf@tronnes.org>
Cc: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: default avatarSean Paul <seanpaul@chromium.org>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170207161603.17611-1-daniel.vetter@ffwll.ch
parent ed84e254
Loading
Loading
Loading
Loading
+4 −7
Original line number Original line Diff line number Diff line
@@ -224,7 +224,7 @@ static int amdgpufb_create(struct drm_fb_helper *helper,
	info = drm_fb_helper_alloc_fbi(helper);
	info = drm_fb_helper_alloc_fbi(helper);
	if (IS_ERR(info)) {
	if (IS_ERR(info)) {
		ret = PTR_ERR(info);
		ret = PTR_ERR(info);
		goto out_unref;
		goto out;
	}
	}


	info->par = rfbdev;
	info->par = rfbdev;
@@ -233,7 +233,7 @@ static int amdgpufb_create(struct drm_fb_helper *helper,
	ret = amdgpu_framebuffer_init(adev->ddev, &rfbdev->rfb, &mode_cmd, gobj);
	ret = amdgpu_framebuffer_init(adev->ddev, &rfbdev->rfb, &mode_cmd, gobj);
	if (ret) {
	if (ret) {
		DRM_ERROR("failed to initialize framebuffer %d\n", ret);
		DRM_ERROR("failed to initialize framebuffer %d\n", ret);
		goto out_destroy_fbi;
		goto out;
	}
	}


	fb = &rfbdev->rfb.base;
	fb = &rfbdev->rfb.base;
@@ -266,7 +266,7 @@ static int amdgpufb_create(struct drm_fb_helper *helper,


	if (info->screen_base == NULL) {
	if (info->screen_base == NULL) {
		ret = -ENOSPC;
		ret = -ENOSPC;
		goto out_destroy_fbi;
		goto out;
	}
	}


	DRM_INFO("fb mappable at 0x%lX\n",  info->fix.smem_start);
	DRM_INFO("fb mappable at 0x%lX\n",  info->fix.smem_start);
@@ -278,9 +278,7 @@ static int amdgpufb_create(struct drm_fb_helper *helper,
	vga_switcheroo_client_fb_set(adev->ddev->pdev, info);
	vga_switcheroo_client_fb_set(adev->ddev->pdev, info);
	return 0;
	return 0;


out_destroy_fbi:
out:
	drm_fb_helper_release_fbi(helper);
out_unref:
	if (abo) {
	if (abo) {


	}
	}
@@ -304,7 +302,6 @@ static int amdgpu_fbdev_destroy(struct drm_device *dev, struct amdgpu_fbdev *rfb
	struct amdgpu_framebuffer *rfb = &rfbdev->rfb;
	struct amdgpu_framebuffer *rfb = &rfbdev->rfb;


	drm_fb_helper_unregister_fbi(&rfbdev->helper);
	drm_fb_helper_unregister_fbi(&rfbdev->helper);
	drm_fb_helper_release_fbi(&rfbdev->helper);


	if (rfb->obj) {
	if (rfb->obj) {
		amdgpufb_destroy_pinned_object(rfb->obj);
		amdgpufb_destroy_pinned_object(rfb->obj);
+0 −2
Original line number Original line Diff line number Diff line
@@ -157,7 +157,6 @@ int armada_fbdev_init(struct drm_device *dev)


	return 0;
	return 0;
 err_fb_setup:
 err_fb_setup:
	drm_fb_helper_release_fbi(fbh);
	drm_fb_helper_fini(fbh);
	drm_fb_helper_fini(fbh);
 err_fb_helper:
 err_fb_helper:
	priv->fbdev = NULL;
	priv->fbdev = NULL;
@@ -179,7 +178,6 @@ void armada_fbdev_fini(struct drm_device *dev)


	if (fbh) {
	if (fbh) {
		drm_fb_helper_unregister_fbi(fbh);
		drm_fb_helper_unregister_fbi(fbh);
		drm_fb_helper_release_fbi(fbh);


		drm_fb_helper_fini(fbh);
		drm_fb_helper_fini(fbh);


+3 −6
Original line number Original line Diff line number Diff line
@@ -215,13 +215,13 @@ static int astfb_create(struct drm_fb_helper *helper,
	info = drm_fb_helper_alloc_fbi(helper);
	info = drm_fb_helper_alloc_fbi(helper);
	if (IS_ERR(info)) {
	if (IS_ERR(info)) {
		ret = PTR_ERR(info);
		ret = PTR_ERR(info);
		goto err_free_vram;
		goto out;
	}
	}
	info->par = afbdev;
	info->par = afbdev;


	ret = ast_framebuffer_init(dev, &afbdev->afb, &mode_cmd, gobj);
	ret = ast_framebuffer_init(dev, &afbdev->afb, &mode_cmd, gobj);
	if (ret)
	if (ret)
		goto err_release_fbi;
		goto out;


	afbdev->sysram = sysram;
	afbdev->sysram = sysram;
	afbdev->size = size;
	afbdev->size = size;
@@ -250,9 +250,7 @@ static int astfb_create(struct drm_fb_helper *helper,


	return 0;
	return 0;


err_release_fbi:
out:
	drm_fb_helper_release_fbi(helper);
err_free_vram:
	vfree(sysram);
	vfree(sysram);
	return ret;
	return ret;
}
}
@@ -287,7 +285,6 @@ static void ast_fbdev_destroy(struct drm_device *dev,
	struct ast_framebuffer *afb = &afbdev->afb;
	struct ast_framebuffer *afb = &afbdev->afb;


	drm_fb_helper_unregister_fbi(&afbdev->helper);
	drm_fb_helper_unregister_fbi(&afbdev->helper);
	drm_fb_helper_release_fbi(&afbdev->helper);


	if (afb->obj) {
	if (afb->obj) {
		drm_gem_object_unreference_unlocked(afb->obj);
		drm_gem_object_unreference_unlocked(afb->obj);
+1 −4
Original line number Original line Diff line number Diff line
@@ -107,10 +107,8 @@ static int bochsfb_create(struct drm_fb_helper *helper,
	info->par = &bochs->fb.helper;
	info->par = &bochs->fb.helper;


	ret = bochs_framebuffer_init(bochs->dev, &bochs->fb.gfb, &mode_cmd, gobj);
	ret = bochs_framebuffer_init(bochs->dev, &bochs->fb.gfb, &mode_cmd, gobj);
	if (ret) {
	if (ret)
		drm_fb_helper_release_fbi(helper);
		return ret;
		return ret;
	}


	bochs->fb.size = size;
	bochs->fb.size = size;


@@ -144,7 +142,6 @@ static int bochs_fbdev_destroy(struct bochs_device *bochs)
	DRM_DEBUG_DRIVER("\n");
	DRM_DEBUG_DRIVER("\n");


	drm_fb_helper_unregister_fbi(&bochs->fb.helper);
	drm_fb_helper_unregister_fbi(&bochs->fb.helper);
	drm_fb_helper_release_fbi(&bochs->fb.helper);


	if (gfb->obj) {
	if (gfb->obj) {
		drm_gem_object_unreference_unlocked(gfb->obj);
		drm_gem_object_unreference_unlocked(gfb->obj);
+0 −1
Original line number Original line Diff line number Diff line
@@ -250,7 +250,6 @@ static int cirrus_fbdev_destroy(struct drm_device *dev,
	struct cirrus_framebuffer *gfb = &gfbdev->gfb;
	struct cirrus_framebuffer *gfb = &gfbdev->gfb;


	drm_fb_helper_unregister_fbi(&gfbdev->helper);
	drm_fb_helper_unregister_fbi(&gfbdev->helper);
	drm_fb_helper_release_fbi(&gfbdev->helper);


	if (gfb->obj) {
	if (gfb->obj) {
		drm_gem_object_unreference_unlocked(gfb->obj);
		drm_gem_object_unreference_unlocked(gfb->obj);
Loading