2019-05-20 08:25:02

by Daniel Vetter

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

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 <[email protected]>
Cc: Bartlomiej Zolnierkiewicz <[email protected]>
Cc: Daniel Vetter <[email protected]>
Cc: "Michał Mirosław" <[email protected]>
Cc: Peter Rosin <[email protected]>
Cc: Hans de Goede <[email protected]>
Cc: Mikulas Patocka <[email protected]>
Cc: [email protected]
---
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



2019-05-20 19:11:52

by kernel test robot

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

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 <[email protected]>

All errors (new ones prefixed by >>):

drivers/video/fbdev/neofb.c: In function 'neofb_remove':
>> 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 <[email protected]>
:::::: CC: Linus Torvalds <[email protected]>

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


Attachments:
(No filename) (3.44 kB)
.config.gz (30.14 kB)
Download all attachments

2019-05-20 19:28:40

by kernel test robot

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

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 <[email protected]>

All errors (new ones prefixed by >>):

drivers/video/fbdev/savage/savagefb_driver.c: In function 'savagefb_remove':
>> 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 <[email protected]>
:::::: CC: Linus Torvalds <[email protected]>

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


Attachments:
(No filename) (3.19 kB)
.config.gz (35.00 kB)
Download all attachments

2019-05-20 21:48:48

by kernel test robot

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

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 <[email protected]>


sparse warnings: (new ones prefixed by >>)

>> 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
--
>> 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
--
>> 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
--
>> 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 <[email protected]>
:::::: CC: Greg Kroah-Hartman <[email protected]>

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