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

drm/fbdev-generic: Set screen size to size of GEM buffer

The size of the screen memory should be equivalent to the size of
the screen's GEM buffer. Don't recalculate the value.

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-6-tzimmermann@suse.de

+6 -5
+6 -5
drivers/gpu/drm/drm_fbdev_generic.c
··· 7 7 #include <drm/drm_drv.h> 8 8 #include <drm/drm_fb_helper.h> 9 9 #include <drm/drm_framebuffer.h> 10 + #include <drm/drm_gem.h> 10 11 #include <drm/drm_print.h> 11 12 12 13 #include <drm/drm_fbdev_generic.h> ··· 75 74 struct drm_client_dev *client = &fb_helper->client; 76 75 struct drm_device *dev = fb_helper->dev; 77 76 struct drm_client_buffer *buffer; 78 - struct drm_framebuffer *fb; 79 77 struct fb_info *info; 78 + size_t screen_size; 80 79 u32 format; 81 80 int ret; 82 81 ··· 92 91 93 92 fb_helper->buffer = buffer; 94 93 fb_helper->fb = buffer->fb; 95 - fb = buffer->fb; 94 + screen_size = buffer->gem->size; 96 95 97 96 info = drm_fb_helper_alloc_info(fb_helper); 98 97 if (IS_ERR(info)) 99 98 return PTR_ERR(info); 100 99 101 100 info->fbops = &drm_fbdev_fb_ops; 102 - info->screen_size = sizes->surface_height * fb->pitches[0]; 103 - info->fix.smem_len = info->screen_size; 101 + info->screen_size = screen_size; 102 + info->fix.smem_len = screen_size; 104 103 info->flags = FBINFO_DEFAULT; 105 104 106 105 drm_fb_helper_fill_info(info, fb_helper, sizes); 107 106 108 - info->screen_buffer = vzalloc(info->screen_size); 107 + info->screen_buffer = vzalloc(screen_size); 109 108 if (!info->screen_buffer) 110 109 return -ENOMEM; 111 110 info->flags |= FBINFO_VIRTFB | FBINFO_READS_FAST;