Skip to content

Commit 713befe

Browse files
author
Thomas Zimmermann
committed
Revert "drm/fb-helper: Remove damage worker"
This reverts commit 27c3e94. Needed to restore the fbdev damage worker. There have been bug reports about locking order [1] and incorrectly takens branches. [2] Restore the damage worker until these problems have been resovled. Signed-off-by: Thomas Zimmermann <[email protected]> Acked-by: Daniel Vetter <[email protected]> Link: https://intel-gfx-ci.01.org/tree/drm-tip/fi-kbl-8809g.html # 1 Link: https://lore.kernel.org/dri-devel/[email protected]/T/#m06eedc0a468940e4cbbd14ca026733b639bc445a # 2 Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] (cherry picked from commit 7aa3d63)
1 parent 0c0860d commit 713befe

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

drivers/gpu/drm/drm_fb_helper.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,13 @@ static void drm_fb_helper_fb_dirty(struct drm_fb_helper *helper)
403403
spin_unlock_irqrestore(&helper->damage_lock, flags);
404404
}
405405

406+
static void drm_fb_helper_damage_work(struct work_struct *work)
407+
{
408+
struct drm_fb_helper *helper = container_of(work, struct drm_fb_helper, damage_work);
409+
410+
drm_fb_helper_fb_dirty(helper);
411+
}
412+
406413
/**
407414
* drm_fb_helper_prepare - setup a drm_fb_helper structure
408415
* @dev: DRM device
@@ -418,6 +425,7 @@ void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper,
418425
INIT_LIST_HEAD(&helper->kernel_fb_list);
419426
spin_lock_init(&helper->damage_lock);
420427
INIT_WORK(&helper->resume_work, drm_fb_helper_resume_worker);
428+
INIT_WORK(&helper->damage_work, drm_fb_helper_damage_work);
421429
helper->damage_clip.x1 = helper->damage_clip.y1 = ~0;
422430
mutex_init(&helper->lock);
423431
helper->funcs = funcs;
@@ -549,6 +557,7 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
549557
return;
550558

551559
cancel_work_sync(&fb_helper->resume_work);
560+
cancel_work_sync(&fb_helper->damage_work);
552561

553562
info = fb_helper->info;
554563
if (info) {

include/drm/drm_fb_helper.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ struct drm_fb_helper_funcs {
116116
* @damage_clip: clip rectangle used with deferred_io to accumulate damage to
117117
* the screen buffer
118118
* @damage_lock: spinlock protecting @damage_clip
119+
* @damage_work: worker used to flush the framebuffer
119120
* @resume_work: worker used during resume if the console lock is already taken
120121
*
121122
* This is the main structure used by the fbdev helpers. Drivers supporting
@@ -145,6 +146,7 @@ struct drm_fb_helper {
145146
u32 pseudo_palette[17];
146147
struct drm_clip_rect damage_clip;
147148
spinlock_t damage_lock;
149+
struct work_struct damage_work;
148150
struct work_struct resume_work;
149151

150152
/**

0 commit comments

Comments
 (0)