Commit 9622349e authored by Thomas Zimmermann's avatar Thomas Zimmermann

drm/fb-helper: Rename dirty worker to damage worker

The dirty worker handles all damage updates, instead of just calling
the framebuffer's dirty callback. Rename it to damage worker. Also
rename related variables accordingly. No functional changes are made.
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarSam Ravnborg <sam@ravnborg.org>
Acked-by: default avatarMaxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20201120102545.4047-5-tzimmermann@suse.de
parent c1acbf08
...@@ -371,7 +371,7 @@ static void drm_fb_helper_resume_worker(struct work_struct *work) ...@@ -371,7 +371,7 @@ static void drm_fb_helper_resume_worker(struct work_struct *work)
console_unlock(); console_unlock();
} }
static void drm_fb_helper_dirty_blit_real(struct drm_fb_helper *fb_helper, static void drm_fb_helper_damage_blit_real(struct drm_fb_helper *fb_helper,
struct drm_clip_rect *clip, struct drm_clip_rect *clip,
struct dma_buf_map *dst) struct dma_buf_map *dst)
{ {
...@@ -391,21 +391,21 @@ static void drm_fb_helper_dirty_blit_real(struct drm_fb_helper *fb_helper, ...@@ -391,21 +391,21 @@ static void drm_fb_helper_dirty_blit_real(struct drm_fb_helper *fb_helper,
} }
} }
static void drm_fb_helper_dirty_work(struct work_struct *work) static void drm_fb_helper_damage_work(struct work_struct *work)
{ {
struct drm_fb_helper *helper = container_of(work, struct drm_fb_helper, struct drm_fb_helper *helper = container_of(work, struct drm_fb_helper,
dirty_work); damage_work);
struct drm_clip_rect *clip = &helper->dirty_clip; struct drm_clip_rect *clip = &helper->damage_clip;
struct drm_clip_rect clip_copy; struct drm_clip_rect clip_copy;
unsigned long flags; unsigned long flags;
struct dma_buf_map map; struct dma_buf_map map;
int ret; int ret;
spin_lock_irqsave(&helper->dirty_lock, flags); spin_lock_irqsave(&helper->damage_lock, flags);
clip_copy = *clip; clip_copy = *clip;
clip->x1 = clip->y1 = ~0; clip->x1 = clip->y1 = ~0;
clip->x2 = clip->y2 = 0; clip->x2 = clip->y2 = 0;
spin_unlock_irqrestore(&helper->dirty_lock, flags); spin_unlock_irqrestore(&helper->damage_lock, flags);
/* call dirty callback only when it has been really touched */ /* call dirty callback only when it has been really touched */
if (clip_copy.x1 < clip_copy.x2 && clip_copy.y1 < clip_copy.y2) { if (clip_copy.x1 < clip_copy.x2 && clip_copy.y1 < clip_copy.y2) {
...@@ -415,7 +415,7 @@ static void drm_fb_helper_dirty_work(struct work_struct *work) ...@@ -415,7 +415,7 @@ static void drm_fb_helper_dirty_work(struct work_struct *work)
ret = drm_client_buffer_vmap(helper->buffer, &map); ret = drm_client_buffer_vmap(helper->buffer, &map);
if (ret) if (ret)
return; return;
drm_fb_helper_dirty_blit_real(helper, &clip_copy, &map); drm_fb_helper_damage_blit_real(helper, &clip_copy, &map);
} }
if (helper->fb->funcs->dirty) if (helper->fb->funcs->dirty)
...@@ -440,10 +440,10 @@ void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper, ...@@ -440,10 +440,10 @@ void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper,
const struct drm_fb_helper_funcs *funcs) const struct drm_fb_helper_funcs *funcs)
{ {
INIT_LIST_HEAD(&helper->kernel_fb_list); INIT_LIST_HEAD(&helper->kernel_fb_list);
spin_lock_init(&helper->dirty_lock); spin_lock_init(&helper->damage_lock);
INIT_WORK(&helper->resume_work, drm_fb_helper_resume_worker); INIT_WORK(&helper->resume_work, drm_fb_helper_resume_worker);
INIT_WORK(&helper->dirty_work, drm_fb_helper_dirty_work); INIT_WORK(&helper->damage_work, drm_fb_helper_damage_work);
helper->dirty_clip.x1 = helper->dirty_clip.y1 = ~0; helper->damage_clip.x1 = helper->damage_clip.y1 = ~0;
mutex_init(&helper->lock); mutex_init(&helper->lock);
helper->funcs = funcs; helper->funcs = funcs;
helper->dev = dev; helper->dev = dev;
...@@ -579,7 +579,7 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper) ...@@ -579,7 +579,7 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
return; return;
cancel_work_sync(&fb_helper->resume_work); cancel_work_sync(&fb_helper->resume_work);
cancel_work_sync(&fb_helper->dirty_work); cancel_work_sync(&fb_helper->damage_work);
info = fb_helper->fbdev; info = fb_helper->fbdev;
if (info) { if (info) {
...@@ -614,30 +614,30 @@ static bool drm_fbdev_use_shadow_fb(struct drm_fb_helper *fb_helper) ...@@ -614,30 +614,30 @@ static bool drm_fbdev_use_shadow_fb(struct drm_fb_helper *fb_helper)
fb->funcs->dirty; fb->funcs->dirty;
} }
static void drm_fb_helper_dirty(struct fb_info *info, u32 x, u32 y, static void drm_fb_helper_damage(struct fb_info *info, u32 x, u32 y,
u32 width, u32 height) u32 width, u32 height)
{ {
struct drm_fb_helper *helper = info->par; struct drm_fb_helper *helper = info->par;
struct drm_clip_rect *clip = &helper->dirty_clip; struct drm_clip_rect *clip = &helper->damage_clip;
unsigned long flags; unsigned long flags;
if (!drm_fbdev_use_shadow_fb(helper)) if (!drm_fbdev_use_shadow_fb(helper))
return; return;
spin_lock_irqsave(&helper->dirty_lock, flags); spin_lock_irqsave(&helper->damage_lock, flags);
clip->x1 = min_t(u32, clip->x1, x); clip->x1 = min_t(u32, clip->x1, x);
clip->y1 = min_t(u32, clip->y1, y); clip->y1 = min_t(u32, clip->y1, y);
clip->x2 = max_t(u32, clip->x2, x + width); clip->x2 = max_t(u32, clip->x2, x + width);
clip->y2 = max_t(u32, clip->y2, y + height); clip->y2 = max_t(u32, clip->y2, y + height);
spin_unlock_irqrestore(&helper->dirty_lock, flags); spin_unlock_irqrestore(&helper->damage_lock, flags);
schedule_work(&helper->dirty_work); schedule_work(&helper->damage_work);
} }
/** /**
* drm_fb_helper_deferred_io() - fbdev deferred_io callback function * drm_fb_helper_deferred_io() - fbdev deferred_io callback function
* @info: fb_info struct pointer * @info: fb_info struct pointer
* @pagelist: list of dirty mmap framebuffer pages * @pagelist: list of mmap framebuffer pages that have to be flushed
* *
* This function is used as the &fb_deferred_io.deferred_io * This function is used as the &fb_deferred_io.deferred_io
* callback function for flushing the fbdev mmap writes. * callback function for flushing the fbdev mmap writes.
...@@ -662,7 +662,7 @@ void drm_fb_helper_deferred_io(struct fb_info *info, ...@@ -662,7 +662,7 @@ void drm_fb_helper_deferred_io(struct fb_info *info,
y1 = min / info->fix.line_length; y1 = min / info->fix.line_length;
y2 = min_t(u32, DIV_ROUND_UP(max, info->fix.line_length), y2 = min_t(u32, DIV_ROUND_UP(max, info->fix.line_length),
info->var.yres); info->var.yres);
drm_fb_helper_dirty(info, 0, y1, info->var.xres, y2 - y1); drm_fb_helper_damage(info, 0, y1, info->var.xres, y2 - y1);
} }
} }
EXPORT_SYMBOL(drm_fb_helper_deferred_io); EXPORT_SYMBOL(drm_fb_helper_deferred_io);
...@@ -699,8 +699,7 @@ ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf, ...@@ -699,8 +699,7 @@ ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
ret = fb_sys_write(info, buf, count, ppos); ret = fb_sys_write(info, buf, count, ppos);
if (ret > 0) if (ret > 0)
drm_fb_helper_dirty(info, 0, 0, info->var.xres, drm_fb_helper_damage(info, 0, 0, info->var.xres, info->var.yres);
info->var.yres);
return ret; return ret;
} }
...@@ -717,8 +716,7 @@ void drm_fb_helper_sys_fillrect(struct fb_info *info, ...@@ -717,8 +716,7 @@ void drm_fb_helper_sys_fillrect(struct fb_info *info,
const struct fb_fillrect *rect) const struct fb_fillrect *rect)
{ {
sys_fillrect(info, rect); sys_fillrect(info, rect);
drm_fb_helper_dirty(info, rect->dx, rect->dy, drm_fb_helper_damage(info, rect->dx, rect->dy, rect->width, rect->height);
rect->width, rect->height);
} }
EXPORT_SYMBOL(drm_fb_helper_sys_fillrect); EXPORT_SYMBOL(drm_fb_helper_sys_fillrect);
...@@ -733,8 +731,7 @@ void drm_fb_helper_sys_copyarea(struct fb_info *info, ...@@ -733,8 +731,7 @@ void drm_fb_helper_sys_copyarea(struct fb_info *info,
const struct fb_copyarea *area) const struct fb_copyarea *area)
{ {
sys_copyarea(info, area); sys_copyarea(info, area);
drm_fb_helper_dirty(info, area->dx, area->dy, drm_fb_helper_damage(info, area->dx, area->dy, area->width, area->height);
area->width, area->height);
} }
EXPORT_SYMBOL(drm_fb_helper_sys_copyarea); EXPORT_SYMBOL(drm_fb_helper_sys_copyarea);
...@@ -749,8 +746,7 @@ void drm_fb_helper_sys_imageblit(struct fb_info *info, ...@@ -749,8 +746,7 @@ void drm_fb_helper_sys_imageblit(struct fb_info *info,
const struct fb_image *image) const struct fb_image *image)
{ {
sys_imageblit(info, image); sys_imageblit(info, image);
drm_fb_helper_dirty(info, image->dx, image->dy, drm_fb_helper_damage(info, image->dx, image->dy, image->width, image->height);
image->width, image->height);
} }
EXPORT_SYMBOL(drm_fb_helper_sys_imageblit); EXPORT_SYMBOL(drm_fb_helper_sys_imageblit);
...@@ -765,8 +761,7 @@ void drm_fb_helper_cfb_fillrect(struct fb_info *info, ...@@ -765,8 +761,7 @@ void drm_fb_helper_cfb_fillrect(struct fb_info *info,
const struct fb_fillrect *rect) const struct fb_fillrect *rect)
{ {
cfb_fillrect(info, rect); cfb_fillrect(info, rect);
drm_fb_helper_dirty(info, rect->dx, rect->dy, drm_fb_helper_damage(info, rect->dx, rect->dy, rect->width, rect->height);
rect->width, rect->height);
} }
EXPORT_SYMBOL(drm_fb_helper_cfb_fillrect); EXPORT_SYMBOL(drm_fb_helper_cfb_fillrect);
...@@ -781,8 +776,7 @@ void drm_fb_helper_cfb_copyarea(struct fb_info *info, ...@@ -781,8 +776,7 @@ void drm_fb_helper_cfb_copyarea(struct fb_info *info,
const struct fb_copyarea *area) const struct fb_copyarea *area)
{ {
cfb_copyarea(info, area); cfb_copyarea(info, area);
drm_fb_helper_dirty(info, area->dx, area->dy, drm_fb_helper_damage(info, area->dx, area->dy, area->width, area->height);
area->width, area->height);
} }
EXPORT_SYMBOL(drm_fb_helper_cfb_copyarea); EXPORT_SYMBOL(drm_fb_helper_cfb_copyarea);
...@@ -797,8 +791,7 @@ void drm_fb_helper_cfb_imageblit(struct fb_info *info, ...@@ -797,8 +791,7 @@ void drm_fb_helper_cfb_imageblit(struct fb_info *info,
const struct fb_image *image) const struct fb_image *image)
{ {
cfb_imageblit(info, image); cfb_imageblit(info, image);
drm_fb_helper_dirty(info, image->dx, image->dy, drm_fb_helper_damage(info, image->dx, image->dy, image->width, image->height);
image->width, image->height);
} }
EXPORT_SYMBOL(drm_fb_helper_cfb_imageblit); EXPORT_SYMBOL(drm_fb_helper_cfb_imageblit);
...@@ -2195,7 +2188,7 @@ static ssize_t drm_fbdev_fb_write(struct fb_info *info, const char __user *buf, ...@@ -2195,7 +2188,7 @@ static ssize_t drm_fbdev_fb_write(struct fb_info *info, const char __user *buf,
*ppos += ret; *ppos += ret;
if (ret > 0) if (ret > 0)
drm_fb_helper_dirty(info, 0, 0, info->var.xres_virtual, info->var.yres_virtual); drm_fb_helper_damage(info, 0, 0, info->var.xres_virtual, info->var.yres_virtual);
return ret ? ret : err; return ret ? ret : err;
} }
......
...@@ -100,10 +100,10 @@ struct drm_fb_helper_funcs { ...@@ -100,10 +100,10 @@ struct drm_fb_helper_funcs {
* @funcs: driver callbacks for fb helper * @funcs: driver callbacks for fb helper
* @fbdev: emulated fbdev device info struct * @fbdev: emulated fbdev device info struct
* @pseudo_palette: fake palette of 16 colors * @pseudo_palette: fake palette of 16 colors
* @dirty_clip: clip rectangle used with deferred_io to accumulate damage to * @damage_clip: clip rectangle used with deferred_io to accumulate damage to
* the screen buffer * the screen buffer
* @dirty_lock: spinlock protecting @dirty_clip * @damage_lock: spinlock protecting @damage_clip
* @dirty_work: worker used to flush the framebuffer * @damage_work: worker used to flush the framebuffer
* @resume_work: worker used during resume if the console lock is already taken * @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 * This is the main structure used by the fbdev helpers. Drivers supporting
...@@ -131,9 +131,9 @@ struct drm_fb_helper { ...@@ -131,9 +131,9 @@ struct drm_fb_helper {
const struct drm_fb_helper_funcs *funcs; const struct drm_fb_helper_funcs *funcs;
struct fb_info *fbdev; struct fb_info *fbdev;
u32 pseudo_palette[17]; u32 pseudo_palette[17];
struct drm_clip_rect dirty_clip; struct drm_clip_rect damage_clip;
spinlock_t dirty_lock; spinlock_t damage_lock;
struct work_struct dirty_work; struct work_struct damage_work;
struct work_struct resume_work; struct work_struct resume_work;
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment