diff options
Diffstat (limited to 'drivers/gpu/drm/udl/udl_transfer.c')
| -rw-r--r-- | drivers/gpu/drm/udl/udl_transfer.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/gpu/drm/udl/udl_transfer.c b/drivers/gpu/drm/udl/udl_transfer.c index 0c87b1ac6b68..b992644c17e6 100644 --- a/drivers/gpu/drm/udl/udl_transfer.c +++ b/drivers/gpu/drm/udl/udl_transfer.c @@ -153,11 +153,11 @@ static void udl_compress_hline16(  		raw_pixels_count_byte = cmd++; /*  we'll know this later */  		raw_pixel_start = pixel; -		cmd_pixel_end = pixel + (min(MAX_CMD_PIXELS + 1, -			min((int)(pixel_end - pixel) / bpp, -			    (int)(cmd_buffer_end - cmd) / 2))) * bpp; +		cmd_pixel_end = pixel + min3(MAX_CMD_PIXELS + 1UL, +					(unsigned long)(pixel_end - pixel) / bpp, +					(unsigned long)(cmd_buffer_end - 1 - cmd) / 2) * bpp; -		prefetch_range((void *) pixel, (cmd_pixel_end - pixel) * bpp); +		prefetch_range((void *) pixel, cmd_pixel_end - pixel);  		pixel_val16 = get_pixel_val16(pixel, bpp);  		while (pixel < cmd_pixel_end) { @@ -193,6 +193,9 @@ static void udl_compress_hline16(  		if (pixel > raw_pixel_start) {  			/* finalize last RAW span */  			*raw_pixels_count_byte = ((pixel-raw_pixel_start) / bpp) & 0xFF; +		} else { +			/* undo unused byte */ +			cmd--;  		}  		*cmd_pixels_count_byte = ((pixel - cmd_pixel_start) / bpp) & 0xFF;  |