[PATCH 18/33] fbdev: make unregister/unlink functions not fail

Subsystems: framebuffer core, framebuffer layer, the rest

STALE2715d

Revision v1 of 2 in this series.

Revisions (2)
  1. v1 current
  2. v1

4 messages, 2 authors, 2019-05-20 · open the first message on its own page

[PATCH 18/33] fbdev: make unregister/unlink functions not fail

From: Daniel Vetter <hidden>
Date: 2019-05-20 08:23:44

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.

Signed-off-by: Daniel Vetter <redacted>
Cc: Bartlomiej Zolnierkiewicz <redacted>
Cc: Daniel Vetter <redacted>
Cc: "Michał Mirosław" <mirq-linux@rere.qmqm.pl>
Cc: Peter Rosin <redacted>
Cc: Hans de Goede <redacted>
Cc: Mikulas Patocka <mpatocka@redhat.com>
Cc: <redacted>
---
 drivers/video/fbdev/core/fbmem.c | 73 ++++++++++----------------------
 include/linux/fb.h               |  4 +-
 2 files changed, 25 insertions(+), 52 deletions(-)
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 156523cc48bf..032506576aa0 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -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;
@@ -1706,32 +1700,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);
 
@@ -1749,36 +1736,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);
 
@@ -1795,7 +1773,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) {
@@ -1809,13 +1786,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);
 
@@ -1891,16 +1868,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);
 
diff --git a/include/linux/fb.h b/include/linux/fb.h
index 38fae1678939..44021e55b15c 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -627,8 +627,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,
-- 
2.20.1

Re: [Intel-gfx] [PATCH 18/33] fbdev: make unregister/unlink functions not fail

From: kbuild test robot <hidden>
Date: 2019-05-20 19:09:02

Hi Daniel,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.2-rc1 next-20190520]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Daniel-Vetter/fbcon-notifier-begone/20190521-021841
config: x86_64-randconfig-x004-201920 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <redacted>

All errors (new ones prefixed by >>):

   drivers/video/fbdev/neofb.c: In function 'neofb_remove':
quoted
drivers/video/fbdev/neofb.c:2130:7: error: void value not ignored as it ought to be
      if (unregister_framebuffer(info))
          ^~~~~~~~~~~~~~~~~~~~~~

vim +2130 drivers/video/fbdev/neofb.c

^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2117  
48c68c4f drivers/video/neofb.c Greg Kroah-Hartman 2012-12-21  2118  static void neofb_remove(struct pci_dev *dev)
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2119  {
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2120  	struct fb_info *info = pci_get_drvdata(dev);
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2121  
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2122  	DBG("neofb_remove");
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2123  
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2124  	if (info) {
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2125  		/*
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2126  		 * If unregister_framebuffer fails, then
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2127  		 * we will be leaving hooks that could cause
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2128  		 * oopsen laying around.
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2129  		 */
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16 @2130  		if (unregister_framebuffer(info))
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2131  			printk(KERN_WARNING
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2132  			       "neofb: danger danger!  Oopsen imminent!\n");
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2133  
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2134  		neo_unmap_video(info);
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2135  		fb_destroy_modedb(info->monspecs.modedb);
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2136  		neo_unmap_mmio(info);
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2137  		neo_free_fb_info(info);
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2138  	}
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2139  }
^1da177e drivers/video/neofb.c Linus Torvalds     2005-04-16  2140  

:::::: The code at line 2130 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds [off-list ref]
:::::: CC: Linus Torvalds [off-list ref]

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Re: [Intel-gfx] [PATCH 18/33] fbdev: make unregister/unlink functions not fail

From: kbuild test robot <hidden>
Date: 2019-05-20 19:26:04

Hi Daniel,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.2-rc1 next-20190520]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Daniel-Vetter/fbcon-notifier-begone/20190521-021841
config: x86_64-randconfig-x003-201920 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <redacted>

All errors (new ones prefixed by >>):

   drivers/video/fbdev/savage/savagefb_driver.c: In function 'savagefb_remove':
quoted
drivers/video/fbdev/savage/savagefb_driver.c:2341:7: error: void value not ignored as it ought to be
      if (unregister_framebuffer(info))
          ^~~~~~~~~~~~~~~~~~~~~~

vim +2341 drivers/video/fbdev/savage/savagefb_driver.c

^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2328  
48c68c4f drivers/video/savage/savagefb_driver.c Greg Kroah-Hartman 2012-12-21  2329  static void savagefb_remove(struct pci_dev *dev)
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2330  {
b8901b09 drivers/video/savage/savagefb_driver.c Antonino A. Daplas 2006-01-09  2331  	struct fb_info *info = pci_get_drvdata(dev);
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2332  
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2333  	DBG("savagefb_remove");
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2334  
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2335  	if (info) {
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2336  		/*
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2337  		 * If unregister_framebuffer fails, then
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2338  		 * we will be leaving hooks that could cause
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2339  		 * oopsen laying around.
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2340  		 */
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16 @2341  		if (unregister_framebuffer(info))
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2342  			printk(KERN_WARNING "savagefb: danger danger! "
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2343  			       "Oopsen imminent!\n");
^1da177e drivers/video/savage/savagefb_driver.c Linus Torvalds     2005-04-16  2344  

:::::: The code at line 2341 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds [off-list ref]
:::::: CC: Linus Torvalds [off-list ref]

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Re: [Intel-gfx] [PATCH 18/33] fbdev: make unregister/unlink functions not fail

From: kbuild test robot <hidden>
Date: 2019-05-20 21:46:23

Hi Daniel,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v5.2-rc1 next-20190520]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Daniel-Vetter/fbcon-notifier-begone/20190521-021841
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <redacted>


sparse warnings: (new ones prefixed by >>)
quoted
drivers/staging/fbtft/fbtft-core.c:894:38: sparse: sparse: incorrect type in return expression (different base types) @@    expected int @@    got vint @@
drivers/staging/fbtft/fbtft-core.c:894:38: sparse:    expected int
drivers/staging/fbtft/fbtft-core.c:894:38: sparse:    got void
--
quoted
drivers/media/pci/ivtv/ivtvfb.c:1261:43: sparse: sparse: incorrect type in conditional (non-scalar type)
drivers/media/pci/ivtv/ivtvfb.c:1261:43: sparse:    got void
--
quoted
drivers/video/fbdev/neofb.c:2130:43: sparse: sparse: incorrect type in conditional (non-scalar type)
drivers/video/fbdev/neofb.c:2130:43: sparse:    got void
--
quoted
drivers/video/fbdev/savage/savagefb_driver.c:2341:43: sparse: sparse: incorrect type in conditional (non-scalar type)
drivers/video/fbdev/savage/savagefb_driver.c:2341:43: sparse:    got void
vim +894 drivers/staging/fbtft/fbtft-core.c

c296d5f9 Thomas Petazzoni 2014-12-31  877  
c296d5f9 Thomas Petazzoni 2014-12-31  878  /**
c296d5f9 Thomas Petazzoni 2014-12-31  879   *	fbtft_unregister_framebuffer - releases a tft frame buffer device
c296d5f9 Thomas Petazzoni 2014-12-31  880   *	@fb_info: frame buffer info structure
c296d5f9 Thomas Petazzoni 2014-12-31  881   *
c296d5f9 Thomas Petazzoni 2014-12-31  882   *  Frees SPI driverdata if needed
c296d5f9 Thomas Petazzoni 2014-12-31  883   *  Frees gpios.
c296d5f9 Thomas Petazzoni 2014-12-31  884   *	Unregisters frame buffer device.
c296d5f9 Thomas Petazzoni 2014-12-31  885   *
c296d5f9 Thomas Petazzoni 2014-12-31  886   */
c296d5f9 Thomas Petazzoni 2014-12-31  887  int fbtft_unregister_framebuffer(struct fb_info *fb_info)
c296d5f9 Thomas Petazzoni 2014-12-31  888  {
c296d5f9 Thomas Petazzoni 2014-12-31  889  	struct fbtft_par *par = fb_info->par;
c296d5f9 Thomas Petazzoni 2014-12-31  890  
c296d5f9 Thomas Petazzoni 2014-12-31  891  	if (par->fbtftops.unregister_backlight)
c296d5f9 Thomas Petazzoni 2014-12-31  892  		par->fbtftops.unregister_backlight(par);
c296d5f9 Thomas Petazzoni 2014-12-31  893  	fbtft_sysfs_exit(par);
11107ffe Aya Mahfouz      2015-02-27 @894  	return unregister_framebuffer(fb_info);
c296d5f9 Thomas Petazzoni 2014-12-31  895  }
c296d5f9 Thomas Petazzoni 2014-12-31  896  EXPORT_SYMBOL(fbtft_unregister_framebuffer);
c296d5f9 Thomas Petazzoni 2014-12-31  897  

:::::: The code at line 894 was first introduced by commit
:::::: 11107ffe2cd1c1dc5948713fc08a1372185be0d5 staging: fbtft: remove unused variable

:::::: TO: Aya Mahfouz [off-list ref]
:::::: CC: Greg Kroah-Hartman [off-list ref]

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help