The expression (~0 >> x) will always yield all-ones, because the right shift is an arithmetic right shift that will always shift ones in. Accordingly ~(~0 >> x) will always be zero. Hence 'mask' will always be zero in this case. Fix this by forcing a logical right shift instead of an arithmetic right shift by using an unsigned int constant. Signed-off-by: Michael Buesch <m@xxxxxxx> --- This patch is untested, because I do not have the hardware. Index: linux/drivers/gpu/drm/nouveau/nv50_fbcon.c =================================================================== --- linux.orig/drivers/gpu/drm/nouveau/nv50_fbcon.c +++ linux/drivers/gpu/drm/nouveau/nv50_fbcon.c @@ -96,7 +96,7 @@ nv50_fbcon_imageblit(struct fb_info *inf struct nouveau_drm *drm = nouveau_drm(nfbdev->dev); struct nouveau_channel *chan = drm->channel; uint32_t width, dwords, *data = (uint32_t *)image->data; - uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel)); + uint32_t mask = ~(~0U >> (32 - info->var.bits_per_pixel)); uint32_t *palette = info->pseudo_palette; int ret; Index: linux/drivers/gpu/drm/nouveau/nvc0_fbcon.c =================================================================== --- linux.orig/drivers/gpu/drm/nouveau/nvc0_fbcon.c +++ linux/drivers/gpu/drm/nouveau/nvc0_fbcon.c @@ -96,7 +96,7 @@ nvc0_fbcon_imageblit(struct fb_info *inf struct nouveau_drm *drm = nouveau_drm(nfbdev->dev); struct nouveau_channel *chan = drm->channel; uint32_t width, dwords, *data = (uint32_t *)image->data; - uint32_t mask = ~(~0 >> (32 - info->var.bits_per_pixel)); + uint32_t mask = ~(~0U >> (32 - info->var.bits_per_pixel)); uint32_t *palette = info->pseudo_palette; int ret; Index: linux/drivers/video/fbdev/nvidia/nv_accel.c =================================================================== --- linux.orig/drivers/video/fbdev/nvidia/nv_accel.c +++ linux/drivers/video/fbdev/nvidia/nv_accel.c @@ -351,7 +351,7 @@ static void nvidiafb_mono_color_expand(s const struct fb_image *image) { struct nvidia_par *par = info->par; - u32 fg, bg, mask = ~(~0 >> (32 - info->var.bits_per_pixel)); + u32 fg, bg, mask = ~(~0U >> (32 - info->var.bits_per_pixel)); u32 dsize, width, *data = (u32 *) image->data, tmp; int j, k = 0;
Attachment:
pgpHykw9hiLaB.pgp
Description: OpenPGP digital signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel