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);