[PATCH 19/33] fbdev: unify unlink_framebuffer paths

2019-05-28 Thread Daniel Vetter
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.

v3: Fix typoe in subject (Maarten).

Signed-off-by: Daniel Vetter 
Reviewed-by: Sam Ravnborg 
Reviewed-by: Maarten Lankhorst 
Cc: Maarten Lankhorst 
Cc: Bartlomiej Zolnierkiewicz 
Cc: Daniel Vetter 
Cc: "Michał Mirosław" 
Cc: Peter Rosin 
Cc: Hans de Goede 
Cc: Mikulas Patocka 
---
 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 f3bcad30d3ba..bee45e9405b8 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -1722,15 +1722,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);
@@ -1753,28 +1768,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

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

[PATCH 19/33] fbdev: unify unlink_framebuffer paths

2019-05-24 Thread Daniel Vetter
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.

v3: Fix typoe in subject (Maarten).

Signed-off-by: Daniel Vetter 
Cc: Maarten Lankhorst 
Cc: Bartlomiej Zolnierkiewicz 
Cc: Daniel Vetter 
Cc: "Michał Mirosław" 
Cc: Peter Rosin 
Cc: Hans de Goede 
Cc: Mikulas Patocka 
---
 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 f3bcad30d3ba..bee45e9405b8 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -1722,15 +1722,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);
@@ -1753,28 +1768,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

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel