]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
fbdev: make unregister/unlink functions not fail
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 28 May 2019 09:02:49 +0000 (11:02 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 12 Jun 2019 18:28:52 +0000 (20:28 +0200)
Except for driver bugs (which we'll catch with a WARN_ON) this is only
to report failures of the new driver taking over the console. There's
nothing the outgoing driver can do about that, and no one ever
bothered to actually look at these return values. So remove them all.

v2: fixup unregister_framebuffer in savagefb, fbtft, ivtvfb, and neofb
drivers, reported by kbuild.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.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>
Cc: linux-fbdev@vger.kernel.org
Link: https://patchwork.freedesktop.org/patch/msgid/20190528090304.9388-19-daniel.vetter@ffwll.ch
drivers/media/pci/ivtv/ivtvfb.c
drivers/staging/fbtft/fbtft-core.c
drivers/video/fbdev/core/fbmem.c
drivers/video/fbdev/neofb.c
drivers/video/fbdev/savage/savagefb_driver.c
include/linux/fb.h

index 66be490ec56306c732611a5dc659101d4056b0d6..299ff032f528a44f5fddf867f574e284c0a75547 100644 (file)
@@ -1246,11 +1246,7 @@ static int ivtvfb_callback_cleanup(struct device *dev, void *p)
        struct osd_info *oi = itv->osd_info;
 
        if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
-               if (unregister_framebuffer(&itv->osd_info->ivtvfb_info)) {
-                       IVTVFB_WARN("Framebuffer %d is in use, cannot unload\n",
-                                      itv->instance);
-                       return 0;
-               }
+               unregister_framebuffer(&itv->osd_info->ivtvfb_info);
                IVTVFB_INFO("Unregister framebuffer %d\n", itv->instance);
                itv->ivtvfb_restore = NULL;
                ivtvfb_blank(FB_BLANK_VSYNC_SUSPEND, &oi->ivtvfb_info);
index 9b07badf4c6ca85f4b71fac19e2a50a20d03c8a4..7cbc1bdd2d8a7ef6c2ca4f6b47fe02797c488e87 100644 (file)
@@ -891,7 +891,9 @@ int fbtft_unregister_framebuffer(struct fb_info *fb_info)
        if (par->fbtftops.unregister_backlight)
                par->fbtftops.unregister_backlight(par);
        fbtft_sysfs_exit(par);
-       return unregister_framebuffer(fb_info);
+       unregister_framebuffer(fb_info);
+
+       return 0;
 }
 EXPORT_SYMBOL(fbtft_unregister_framebuffer);
 
index f3fc2e5b193c64db5577dfc61866432cd6d6afa7..f3bcad30d3bae908ccc3c95328fb99bb313a48d2 100644 (file)
@@ -1590,13 +1590,13 @@ static bool fb_do_apertures_overlap(struct apertures_struct *gena,
        return false;
 }
 
-static int do_unregister_framebuffer(struct fb_info *fb_info);
+static void do_unregister_framebuffer(struct fb_info *fb_info);
 
 #define VGA_FB_PHYS 0xA0000
-static int do_remove_conflicting_framebuffers(struct apertures_struct *a,
-                                             const char *name, bool primary)
+static void do_remove_conflicting_framebuffers(struct apertures_struct *a,
+                                              const char *name, bool primary)
 {
-       int i, ret;
+       int i;
 
        /* check all firmware fbs and kick off if the base addr overlaps */
        for_each_registered_fb(i) {
@@ -1612,13 +1612,9 @@ static int do_remove_conflicting_framebuffers(struct apertures_struct *a,
 
                        printk(KERN_INFO "fb%d: switching to %s from %s\n",
                               i, name, registered_fb[i]->fix.id);
-                       ret = do_unregister_framebuffer(registered_fb[i]);
-                       if (ret)
-                               return ret;
+                       do_unregister_framebuffer(registered_fb[i]);
                }
        }
-
-       return 0;
 }
 
 static bool lockless_register_fb;
@@ -1634,11 +1630,9 @@ static int do_register_framebuffer(struct fb_info *fb_info)
        if (fb_check_foreignness(fb_info))
                return -ENOSYS;
 
-       ret = do_remove_conflicting_framebuffers(fb_info->apertures,
-                                                fb_info->fix.id,
-                                                fb_is_primary_device(fb_info));
-       if (ret)
-               return ret;
+       do_remove_conflicting_framebuffers(fb_info->apertures,
+                                          fb_info->fix.id,
+                                          fb_is_primary_device(fb_info));
 
        if (num_registered_fb == FB_MAX)
                return -ENXIO;
@@ -1714,32 +1708,25 @@ static int do_register_framebuffer(struct fb_info *fb_info)
        return ret;
 }
 
-static int unbind_console(struct fb_info *fb_info)
+static void unbind_console(struct fb_info *fb_info)
 {
        int i = fb_info->node;
 
-       if (i < 0 || i >= FB_MAX || registered_fb[i] != fb_info)
-               return -EINVAL;
+       if (WARN_ON(i < 0 || i >= FB_MAX || registered_fb[i] != fb_info))
+               return;
 
        console_lock();
        lock_fb_info(fb_info);
        fbcon_fb_unbind(fb_info);
        unlock_fb_info(fb_info);
        console_unlock();
-
-       return 0;
 }
 
-static int __unlink_framebuffer(struct fb_info *fb_info);
+static void __unlink_framebuffer(struct fb_info *fb_info);
 
-static int do_unregister_framebuffer(struct fb_info *fb_info)
+static void do_unregister_framebuffer(struct fb_info *fb_info)
 {
-       int ret;
-
-       ret = unbind_console(fb_info);
-
-       if (ret)
-               return -EINVAL;
+       unbind_console(fb_info);
 
        pm_vt_switch_unregister(fb_info->dev);
 
@@ -1764,36 +1751,27 @@ static int do_unregister_framebuffer(struct fb_info *fb_info)
 
        /* this may free fb info */
        put_fb_info(fb_info);
-       return 0;
 }
 
-static int __unlink_framebuffer(struct fb_info *fb_info)
+static void __unlink_framebuffer(struct fb_info *fb_info)
 {
        int i;
 
        i = fb_info->node;
-       if (i < 0 || i >= FB_MAX || registered_fb[i] != fb_info)
-               return -EINVAL;
+       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;
        }
-
-       return 0;
 }
 
-int unlink_framebuffer(struct fb_info *fb_info)
+void unlink_framebuffer(struct fb_info *fb_info)
 {
-       int ret;
-
-       ret = __unlink_framebuffer(fb_info);
-       if (ret)
-               return ret;
+       __unlink_framebuffer(fb_info);
 
        unbind_console(fb_info);
-
-       return 0;
 }
 EXPORT_SYMBOL(unlink_framebuffer);
 
@@ -1810,7 +1788,6 @@ EXPORT_SYMBOL(unlink_framebuffer);
 int remove_conflicting_framebuffers(struct apertures_struct *a,
                                    const char *name, bool primary)
 {
-       int ret;
        bool do_free = false;
 
        if (!a) {
@@ -1824,13 +1801,13 @@ int remove_conflicting_framebuffers(struct apertures_struct *a,
        }
 
        mutex_lock(&registration_lock);
-       ret = do_remove_conflicting_framebuffers(a, name, primary);
+       do_remove_conflicting_framebuffers(a, name, primary);
        mutex_unlock(&registration_lock);
 
        if (do_free)
                kfree(a);
 
-       return ret;
+       return 0;
 }
 EXPORT_SYMBOL(remove_conflicting_framebuffers);
 
@@ -1927,16 +1904,12 @@ EXPORT_SYMBOL(register_framebuffer);
  *      that the driver implements fb_open() and fb_release() to
  *      check that no processes are using the device.
  */
-int
+void
 unregister_framebuffer(struct fb_info *fb_info)
 {
-       int ret;
-
        mutex_lock(&registration_lock);
-       ret = do_unregister_framebuffer(fb_info);
+       do_unregister_framebuffer(fb_info);
        mutex_unlock(&registration_lock);
-
-       return ret;
 }
 EXPORT_SYMBOL(unregister_framebuffer);
 
index 5d3a444083f74c713b784a474586f64c69db1642..b770946a0920602576ca63ed0729a5ed87cbf746 100644 (file)
@@ -2122,14 +2122,7 @@ static void neofb_remove(struct pci_dev *dev)
        DBG("neofb_remove");
 
        if (info) {
-               /*
-                * If unregister_framebuffer fails, then
-                * we will be leaving hooks that could cause
-                * oopsen laying around.
-                */
-               if (unregister_framebuffer(info))
-                       printk(KERN_WARNING
-                              "neofb: danger danger!  Oopsen imminent!\n");
+               unregister_framebuffer(info);
 
                neo_unmap_video(info);
                fb_destroy_modedb(info->monspecs.modedb);
index 47b78f0138c382c1dfce9fb1afbcd46ad78c63a2..512789f5f8848b0a9c3df4b73ac9d3bafc691439 100644 (file)
@@ -2333,14 +2333,7 @@ static void savagefb_remove(struct pci_dev *dev)
        DBG("savagefb_remove");
 
        if (info) {
-               /*
-                * If unregister_framebuffer fails, then
-                * we will be leaving hooks that could cause
-                * oopsen laying around.
-                */
-               if (unregister_framebuffer(info))
-                       printk(KERN_WARNING "savagefb: danger danger! "
-                              "Oopsen imminent!\n");
+               unregister_framebuffer(info);
 
 #ifdef CONFIG_FB_SAVAGE_I2C
                savagefb_delete_i2c_busses(info);
index b6ce041d9e13359ff580f6add838de3752093492..b90cf7d56bd882cedf5f083b073b907d2d206bed 100644 (file)
@@ -634,8 +634,8 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
 
 /* drivers/video/fbmem.c */
 extern int register_framebuffer(struct fb_info *fb_info);
-extern int unregister_framebuffer(struct fb_info *fb_info);
-extern int unlink_framebuffer(struct fb_info *fb_info);
+extern void unregister_framebuffer(struct fb_info *fb_info);
+extern void unlink_framebuffer(struct fb_info *fb_info);
 extern int remove_conflicting_pci_framebuffers(struct pci_dev *pdev, int res_id,
                                               const char *name);
 extern int remove_conflicting_framebuffers(struct apertures_struct *a,