Re: [PATCH] drm/fb-helper: Fix clipping when damage area spans a single scanline
From: Francesco Lavra
Date: Thu Apr 30 2026 - 11:37:57 EST
Friendly ping
On Tue, 2026-02-10 at 18:35 +0100, Francesco Lavra wrote:
> When the damage area resulting from a dirty memory range spans a single
> scanline, the width of the rectangle is calculated dynamically because it
> may not coincide with the framebuffer width.
> If the dirty range ends exactly at the end of the scanline, the `bit_end`
> variable is incorrectly assigned a 0 value, which results in a bogus clip
> rectangle where the x2 coordinate is 0. This prevents the dirty scanline
> from being flushed to the hardware.
> Change the calculation of the `bit_end` value to fix the x2 coordinate
> value in the above edge case.
>
> Fixes: ded74cafeea9 ("drm/fb-helper: Clip damage area horizontally")
> Signed-off-by: Francesco Lavra <flavra@xxxxxxxxxxxx>
> ---
> drivers/gpu/drm/drm_fb_helper.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_fb_helper.c
> b/drivers/gpu/drm/drm_fb_helper.c
> index 4b47aa0dab35..d545342d24b3 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -608,7 +608,7 @@ static void drm_fb_helper_memory_range_to_clip(struct
> fb_info *info, off_t off,
> * the number of horizontal pixels that need an update.
> */
> off_t bit_off = (off % line_length) * 8;
> - off_t bit_end = (end % line_length) * 8;
> + off_t bit_end = bit_off + len * 8;
>
> x1 = bit_off / info->var.bits_per_pixel;
> x2 = DIV_ROUND_UP(bit_end, info->var.bits_per_pixel);