Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915: Export intel_framebuffer_fini

Rather than open-code the teardown of a framebuffer, export the routine
from intel_display.c. This then make intel_fbdev symmetric in its use of
the common intel_framebuffer routines to initialise and clean up the
struct intel_framebuffer. (And new features need only be added in one
location!)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

authored by

Chris Wilson and committed by
Daniel Vetter
ddfe1567 350ec881

+13 -13
+7 -3
drivers/gpu/drm/i915/intel_display.c
··· 9402 9402 drm_helper_move_panel_connectors_to_head(dev); 9403 9403 } 9404 9404 9405 + void intel_framebuffer_fini(struct intel_framebuffer *fb) 9406 + { 9407 + drm_framebuffer_cleanup(&fb->base); 9408 + drm_gem_object_unreference_unlocked(&fb->obj->base); 9409 + } 9410 + 9405 9411 static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb) 9406 9412 { 9407 9413 struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); 9408 9414 9409 - drm_framebuffer_cleanup(fb); 9410 - drm_gem_object_unreference_unlocked(&intel_fb->obj->base); 9411 - 9415 + intel_framebuffer_fini(intel_fb); 9412 9416 kfree(intel_fb); 9413 9417 } 9414 9418
+1
drivers/gpu/drm/i915/intel_drv.h
··· 720 720 struct intel_framebuffer *ifb, 721 721 struct drm_mode_fb_cmd2 *mode_cmd, 722 722 struct drm_i915_gem_object *obj); 723 + extern void intel_framebuffer_fini(struct intel_framebuffer *fb); 723 724 extern int intel_fbdev_init(struct drm_device *dev); 724 725 extern void intel_fbdev_initial_config(struct drm_device *dev); 725 726 extern void intel_fbdev_fini(struct drm_device *dev);
+5 -10
drivers/gpu/drm/i915/intel_fb.c
··· 193 193 static void intel_fbdev_destroy(struct drm_device *dev, 194 194 struct intel_fbdev *ifbdev) 195 195 { 196 - struct fb_info *info; 197 - struct intel_framebuffer *ifb = &ifbdev->ifb; 198 - 199 196 if (ifbdev->helper.fbdev) { 200 - info = ifbdev->helper.fbdev; 197 + struct fb_info *info = ifbdev->helper.fbdev; 198 + 201 199 unregister_framebuffer(info); 202 200 iounmap(info->screen_base); 203 201 if (info->cmap.len) 204 202 fb_dealloc_cmap(&info->cmap); 203 + 205 204 framebuffer_release(info); 206 205 } 207 206 208 207 drm_fb_helper_fini(&ifbdev->helper); 209 208 210 - drm_framebuffer_unregister_private(&ifb->base); 211 - drm_framebuffer_cleanup(&ifb->base); 212 - if (ifb->obj) { 213 - drm_gem_object_unreference_unlocked(&ifb->obj->base); 214 - ifb->obj = NULL; 215 - } 209 + drm_framebuffer_unregister_private(&ifbdev->ifb.base); 210 + intel_framebuffer_fini(&ifbdev->ifb); 216 211 } 217 212 218 213 int intel_fbdev_init(struct drm_device *dev)