lkml.org 
[lkml]   [2019]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 19/33] fbdev: unify unlink_framebufer paths
    Date
    For some reasons the pm_vt_switch_unregister call was missing from the
    direct unregister_framebuffer path. Fix this.

    v2: fbinfo->dev is used to decided whether unlink_framebuffer has been
    called already. I botched that in v1. Make this all clearer by
    inlining __unlink_framebuffer.

    Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
    Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: "Michał Mirosław" <mirq-linux@rere.qmqm.pl>
    Cc: Peter Rosin <peda@axentia.se>
    Cc: Hans de Goede <hdegoede@redhat.com>
    Cc: Mikulas Patocka <mpatocka@redhat.com>
    ---
    drivers/video/fbdev/core/fbmem.c | 47 ++++++++++++++------------------
    1 file changed, 20 insertions(+), 27 deletions(-)

    diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
    index 032506576aa0..f059b0b1a030 100644
    --- a/drivers/video/fbdev/core/fbmem.c
    +++ b/drivers/video/fbdev/core/fbmem.c
    @@ -1714,15 +1714,30 @@ static void unbind_console(struct fb_info *fb_info)
    console_unlock();
    }

    -static void __unlink_framebuffer(struct fb_info *fb_info);
    -
    -static void do_unregister_framebuffer(struct fb_info *fb_info)
    +void unlink_framebuffer(struct fb_info *fb_info)
    {
    - unbind_console(fb_info);
    + int i;
    +
    + i = fb_info->node;
    + if (WARN_ON(i < 0 || i >= FB_MAX || registered_fb[i] != fb_info))
    + return;
    +
    + if (!fb_info->dev)
    + return;
    +
    + device_destroy(fb_class, MKDEV(FB_MAJOR, i));

    pm_vt_switch_unregister(fb_info->dev);

    - __unlink_framebuffer(fb_info);
    + unbind_console(fb_info);
    +
    + fb_info->dev = NULL;
    +}
    +EXPORT_SYMBOL(unlink_framebuffer);
    +
    +static void do_unregister_framebuffer(struct fb_info *fb_info)
    +{
    + unlink_framebuffer(fb_info);
    if (fb_info->pixmap.addr &&
    (fb_info->pixmap.flags & FB_PIXMAP_DEFAULT))
    kfree(fb_info->pixmap.addr);
    @@ -1738,28 +1753,6 @@ static void do_unregister_framebuffer(struct fb_info *fb_info)
    put_fb_info(fb_info);
    }

    -static void __unlink_framebuffer(struct fb_info *fb_info)
    -{
    - int i;
    -
    - i = fb_info->node;
    - if (WARN_ON(i < 0 || i >= FB_MAX || registered_fb[i] != fb_info))
    - return;
    -
    - if (fb_info->dev) {
    - device_destroy(fb_class, MKDEV(FB_MAJOR, i));
    - fb_info->dev = NULL;
    - }
    -}
    -
    -void unlink_framebuffer(struct fb_info *fb_info)
    -{
    - __unlink_framebuffer(fb_info);
    -
    - unbind_console(fb_info);
    -}
    -EXPORT_SYMBOL(unlink_framebuffer);
    -
    /**
    * remove_conflicting_framebuffers - remove firmware-configured framebuffers
    * @a: memory range, users of which are to be removed
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-05-20 10:23    [W:2.382 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site