[PATCH] fbdev: Possible endian fix in cfbimageblit
Fix possible endian bug(?) when bit testing in slow_imageblit(). This function is rarely called (only if (width * bpp) % 32 != 0) thus the bug is not triggered. However, if the console is rotated at 90 or 270 degrees, the height becomes the width, and a variety of fonts have heights that will force a call to slow_imageblit(). Signed-off-by: Antonino Daplas <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
120ddb41f1
commit
81d3e147ec
|
@ -80,10 +80,12 @@ static u32 cfb_tab32[] = {
|
|||
#define LEFT_POS(bpp) (32 - bpp)
|
||||
#define SHIFT_HIGH(val, bits) ((val) >> (bits))
|
||||
#define SHIFT_LOW(val, bits) ((val) << (bits))
|
||||
#define BIT_NR(b) (7 - (b))
|
||||
#else
|
||||
#define LEFT_POS(bpp) (0)
|
||||
#define SHIFT_HIGH(val, bits) ((val) << (bits))
|
||||
#define SHIFT_LOW(val, bits) ((val) >> (bits))
|
||||
#define BIT_NR(b) (b)
|
||||
#endif
|
||||
|
||||
static inline void color_imageblit(const struct fb_image *image,
|
||||
|
@ -177,7 +179,7 @@ static inline void slow_imageblit(const struct fb_image *image, struct fb_info *
|
|||
|
||||
while (j--) {
|
||||
l--;
|
||||
color = (*s & (1 << l)) ? fgcolor : bgcolor;
|
||||
color = (*s & 1 << (BIT_NR(l))) ? fgcolor : bgcolor;
|
||||
color <<= LEFT_POS(bpp);
|
||||
val |= SHIFT_HIGH(color, shift);
|
||||
|
||||
|
|
Loading…
Reference in a new issue