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

drm/fb-helper: Support smem_len in deferred I/O

The size of the framebuffer can either be stored in screen_info or
smem_len. Take both into account in the deferred I/O code.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Tested-by: Sui Jingfeng <suijingfeng@loongson.cn>
Link: https://patchwork.freedesktop.org/patch/msgid/20230320150751.20399-5-tzimmermann@suse.de

+6 -2
+6 -2
drivers/gpu/drm/drm_fb_helper.c
··· 672 672 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist) 673 673 { 674 674 struct drm_fb_helper *helper = info->par; 675 - unsigned long start, end, min_off, max_off; 675 + unsigned long start, end, min_off, max_off, total_size; 676 676 struct fb_deferred_io_pageref *pageref; 677 677 struct drm_rect damage_area; 678 678 ··· 690 690 * of the screen and account for non-existing scanlines. Hence, 691 691 * keep the covered memory area within the screen buffer. 692 692 */ 693 - max_off = min(max_off, info->screen_size); 693 + if (info->screen_size) 694 + total_size = info->screen_size; 695 + else 696 + total_size = info->fix.smem_len; 697 + max_off = min(max_off, total_size); 694 698 695 699 if (min_off < max_off) { 696 700 drm_fb_helper_memory_range_to_clip(info, min_off, max_off - min_off, &damage_area);