Revert "drm/fb-helper: Remove damage worker"
This reverts commit 27c3e9452d
.
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 <tzimmermann@suse.de>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://intel-gfx-ci.01.org/tree/drm-tip/fi-kbl-8809g.html # 1
Link: https://lore.kernel.org/dri-devel/20221115115819.23088-6-tzimmermann@suse.de/T/#m06eedc0a468940e4cbbd14ca026733b639bc445a # 2
Link: https://patchwork.freedesktop.org/patch/msgid/20221118133535.9739-2-tzimmermann@suse.de
This commit is contained in:
parent
7ae2e68485
commit
7aa3d63e1a
|
@ -403,6 +403,13 @@ err:
|
|||
spin_unlock_irqrestore(&helper->damage_lock, flags);
|
||||
}
|
||||
|
||||
static void drm_fb_helper_damage_work(struct work_struct *work)
|
||||
{
|
||||
struct drm_fb_helper *helper = container_of(work, struct drm_fb_helper, damage_work);
|
||||
|
||||
drm_fb_helper_fb_dirty(helper);
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_fb_helper_prepare - setup a drm_fb_helper structure
|
||||
* @dev: DRM device
|
||||
|
@ -418,6 +425,7 @@ void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper,
|
|||
INIT_LIST_HEAD(&helper->kernel_fb_list);
|
||||
spin_lock_init(&helper->damage_lock);
|
||||
INIT_WORK(&helper->resume_work, drm_fb_helper_resume_worker);
|
||||
INIT_WORK(&helper->damage_work, drm_fb_helper_damage_work);
|
||||
helper->damage_clip.x1 = helper->damage_clip.y1 = ~0;
|
||||
mutex_init(&helper->lock);
|
||||
helper->funcs = funcs;
|
||||
|
@ -549,6 +557,7 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
|
|||
return;
|
||||
|
||||
cancel_work_sync(&fb_helper->resume_work);
|
||||
cancel_work_sync(&fb_helper->damage_work);
|
||||
|
||||
info = fb_helper->info;
|
||||
if (info) {
|
||||
|
|
|
@ -116,6 +116,7 @@ struct drm_fb_helper_funcs {
|
|||
* @damage_clip: clip rectangle used with deferred_io to accumulate damage to
|
||||
* the screen buffer
|
||||
* @damage_lock: spinlock protecting @damage_clip
|
||||
* @damage_work: worker used to flush the framebuffer
|
||||
* @resume_work: worker used during resume if the console lock is already taken
|
||||
*
|
||||
* This is the main structure used by the fbdev helpers. Drivers supporting
|
||||
|
@ -145,6 +146,7 @@ struct drm_fb_helper {
|
|||
u32 pseudo_palette[17];
|
||||
struct drm_clip_rect damage_clip;
|
||||
spinlock_t damage_lock;
|
||||
struct work_struct damage_work;
|
||||
struct work_struct resume_work;
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue