Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fbdev: Use screen_buffer in fb_sys_{read,write}()

Use info->screen_buffer when reading and writing framebuffers in
system memory. It's the correct pointer for this address space.

The struct fb_info has a union to store the framebuffer memory. This can
either be info->screen_base if the framebuffer is stored in I/O memory,
or info->screen_buffer if the framebuffer is stored in system memory.

Since the fb_sys_{read,write}() functions operate on the latter address
space, it is wrong to use .screen_base and .screen_buffer must be used
instead. This also gets rid of all the casting needed due to not using
the correct data type.

v2:
* add detailed commit message (Javier)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Sui Jingfeng <suijingfeng@loongson.cn>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Helge Deller <deller@gmx.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20230428122452.4856-16-tzimmermann@suse.de

+2 -2
+2 -2
drivers/video/fbdev/core/fb_sys_fops.c
··· 39 39 if (count + p > total_size) 40 40 count = total_size - p; 41 41 42 - src = (void __force *)(info->screen_base + p); 42 + src = info->screen_buffer + p; 43 43 44 44 if (info->fbops->fb_sync) 45 45 info->fbops->fb_sync(info); ··· 87 87 count = total_size - p; 88 88 } 89 89 90 - dst = (void __force *) (info->screen_base + p); 90 + dst = info->screen_buffer + p; 91 91 92 92 if (info->fbops->fb_sync) 93 93 info->fbops->fb_sync(info);