Push the test for info->screen_base from fb_read() and fb_write() into
the implementations of struct fb_ops.{fb_read,fb_write}. In cases where
the driver operates on info->screen_buffer, test this field instead.

Signed-off-by: Thomas Zimmermann <tzimmerm...@suse.de>
---
 drivers/video/fbdev/cobalt_lcdfb.c     |  6 ++++++
 drivers/video/fbdev/core/fb_sys_fops.c |  6 ++++++
 drivers/video/fbdev/core/fbmem.c       | 10 ++++++++--
 drivers/video/fbdev/sm712fb.c          |  4 ++--
 4 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/video/fbdev/cobalt_lcdfb.c 
b/drivers/video/fbdev/cobalt_lcdfb.c
index 5f8b6324d2e8..26dbd1c78195 100644
--- a/drivers/video/fbdev/cobalt_lcdfb.c
+++ b/drivers/video/fbdev/cobalt_lcdfb.c
@@ -129,6 +129,9 @@ static ssize_t cobalt_lcdfb_read(struct fb_info *info, char 
__user *buf,
        unsigned long pos;
        int len, retval = 0;
 
+       if (!info->screen_base)
+               return -ENODEV;
+
        pos = *ppos;
        if (pos >= LCD_CHARS_MAX || count == 0)
                return 0;
@@ -175,6 +178,9 @@ static ssize_t cobalt_lcdfb_write(struct fb_info *info, 
const char __user *buf,
        unsigned long pos;
        int len, retval = 0;
 
+       if (!info->screen_base)
+               return -ENODEV;
+
        pos = *ppos;
        if (pos >= LCD_CHARS_MAX || count == 0)
                return 0;
diff --git a/drivers/video/fbdev/core/fb_sys_fops.c 
b/drivers/video/fbdev/core/fb_sys_fops.c
index 7dee5d3c7fb1..0cb0989abda6 100644
--- a/drivers/video/fbdev/core/fb_sys_fops.c
+++ b/drivers/video/fbdev/core/fb_sys_fops.c
@@ -22,6 +22,9 @@ ssize_t fb_sys_read(struct fb_info *info, char __user *buf, 
size_t count,
        unsigned long total_size, c;
        ssize_t ret;
 
+       if (!info->screen_buffer)
+               return -ENODEV;
+
        total_size = info->screen_size;
 
        if (total_size == 0)
@@ -61,6 +64,9 @@ ssize_t fb_sys_write(struct fb_info *info, const char __user 
*buf,
        unsigned long total_size, c;
        size_t ret;
 
+       if (!info->screen_buffer)
+               return -ENODEV;
+
        total_size = info->screen_size;
 
        if (total_size == 0)
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index abc92d79a295..b993bb97058f 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -768,7 +768,7 @@ fb_read(struct file *file, char __user *buf, size_t count, 
loff_t *ppos)
        int c, cnt = 0, err = 0;
        unsigned long total_size;
 
-       if (!info || ! info->screen_base)
+       if (!info)
                return -ENODEV;
 
        if (info->state != FBINFO_STATE_RUNNING)
@@ -777,6 +777,9 @@ fb_read(struct file *file, char __user *buf, size_t count, 
loff_t *ppos)
        if (info->fbops->fb_read)
                return info->fbops->fb_read(info, buf, count, ppos);
 
+       if (!info->screen_base)
+               return -ENODEV;
+
        total_size = info->screen_size;
 
        if (total_size == 0)
@@ -833,7 +836,7 @@ fb_write(struct file *file, const char __user *buf, size_t 
count, loff_t *ppos)
        int c, cnt = 0, err = 0;
        unsigned long total_size;
 
-       if (!info || !info->screen_base)
+       if (!info)
                return -ENODEV;
 
        if (info->state != FBINFO_STATE_RUNNING)
@@ -842,6 +845,9 @@ fb_write(struct file *file, const char __user *buf, size_t 
count, loff_t *ppos)
        if (info->fbops->fb_write)
                return info->fbops->fb_write(info, buf, count, ppos);
 
+       if (!info->screen_base)
+               return -ENODEV;
+
        total_size = info->screen_size;
 
        if (total_size == 0)
diff --git a/drivers/video/fbdev/sm712fb.c b/drivers/video/fbdev/sm712fb.c
index 6f852cd756c5..b7ad3c644e13 100644
--- a/drivers/video/fbdev/sm712fb.c
+++ b/drivers/video/fbdev/sm712fb.c
@@ -1028,7 +1028,7 @@ static ssize_t smtcfb_read(struct fb_info *info, char 
__user *buf,
        int c, i, cnt = 0, err = 0;
        unsigned long total_size;
 
-       if (!info || !info->screen_base)
+       if (!info->screen_base)
                return -ENODEV;
 
        total_size = info->screen_size;
@@ -1091,7 +1091,7 @@ static ssize_t smtcfb_write(struct fb_info *info, const 
char __user *buf,
        int c, i, cnt = 0, err = 0;
        unsigned long total_size;
 
-       if (!info || !info->screen_base)
+       if (!info->screen_base)
                return -ENODEV;
 
        total_size = info->screen_size;
-- 
2.40.0

Reply via email to