summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_fbdev_generic.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2023-01-27 12:31:02 +1000
committerDave Airlie <airlied@redhat.com>2023-01-27 12:31:09 +1000
commitd23db89883962d9b4cb3ad03dfd02e525ed2cc03 (patch)
tree522755ecf4283e74e87295c39aa59e351bc766ac /drivers/gpu/drm/drm_fbdev_generic.c
parentf439a959dcfb6b39d6fd4b85ca1110a1d1de1587 (diff)
parentd6591da5f3ff284a376d56b5f7a48a34e9cb159d (diff)
downloadlinux-d23db89883962d9b4cb3ad03dfd02e525ed2cc03.tar.bz2
Merge tag 'drm-misc-fixes-2023-01-26' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes
A fix and a preliminary patch to fix a memory leak in i915, and a use after free fix for fbdev deferred io Signed-off-by: Dave Airlie <airlied@redhat.com> From: Maxime Ripard <maxime@cerno.tech> Link: https://patchwork.freedesktop.org/patch/msgid/20230126104018.cbrcjxl5wefdbb2f@houat
Diffstat (limited to 'drivers/gpu/drm/drm_fbdev_generic.c')
-rw-r--r--drivers/gpu/drm/drm_fbdev_generic.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/gpu/drm/drm_fbdev_generic.c b/drivers/gpu/drm/drm_fbdev_generic.c
index ab8695669279..593aa3283792 100644
--- a/drivers/gpu/drm/drm_fbdev_generic.c
+++ b/drivers/gpu/drm/drm_fbdev_generic.c
@@ -171,11 +171,6 @@ static const struct fb_ops drm_fbdev_fb_ops = {
.fb_imageblit = drm_fbdev_fb_imageblit,
};
-static struct fb_deferred_io drm_fbdev_defio = {
- .delay = HZ / 20,
- .deferred_io = drm_fb_helper_deferred_io,
-};
-
/*
* This function uses the client API to create a framebuffer backed by a dumb buffer.
*/
@@ -222,8 +217,14 @@ static int drm_fbdev_fb_probe(struct drm_fb_helper *fb_helper,
return -ENOMEM;
fbi->flags |= FBINFO_VIRTFB | FBINFO_READS_FAST;
- fbi->fbdefio = &drm_fbdev_defio;
- fb_deferred_io_init(fbi);
+ /* Set a default deferred I/O handler */
+ fb_helper->fbdefio.delay = HZ / 20;
+ fb_helper->fbdefio.deferred_io = drm_fb_helper_deferred_io;
+
+ fbi->fbdefio = &fb_helper->fbdefio;
+ ret = fb_deferred_io_init(fbi);
+ if (ret)
+ return ret;
} else {
/* buffer is mapped for HW framebuffer */
ret = drm_client_buffer_vmap(fb_helper->buffer, &map);