diff options
| author | Antonino A. Daplas <adaplas@gmail.com> | 2005-11-09 00:39:17 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-09 10:56:36 -0500 |
| commit | 81d3e147ec9ffc6ef04b5f05afa4bef22487b32b (patch) | |
| tree | 68f3e0779b1bc45aa639d977ce0c36db4228fa4c | |
| parent | 120ddb41f18c2d41702af561f4acfbcbd8d6fb46 (diff) | |
[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>
| -rw-r--r-- | drivers/video/cfbimgblt.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/video/cfbimgblt.c b/drivers/video/cfbimgblt.c index da664cea7eca..a7770c4f17d0 100644 --- a/drivers/video/cfbimgblt.c +++ b/drivers/video/cfbimgblt.c | |||
| @@ -80,10 +80,12 @@ static u32 cfb_tab32[] = { | |||
| 80 | #define LEFT_POS(bpp) (32 - bpp) | 80 | #define LEFT_POS(bpp) (32 - bpp) |
| 81 | #define SHIFT_HIGH(val, bits) ((val) >> (bits)) | 81 | #define SHIFT_HIGH(val, bits) ((val) >> (bits)) |
| 82 | #define SHIFT_LOW(val, bits) ((val) << (bits)) | 82 | #define SHIFT_LOW(val, bits) ((val) << (bits)) |
| 83 | #define BIT_NR(b) (7 - (b)) | ||
| 83 | #else | 84 | #else |
| 84 | #define LEFT_POS(bpp) (0) | 85 | #define LEFT_POS(bpp) (0) |
| 85 | #define SHIFT_HIGH(val, bits) ((val) << (bits)) | 86 | #define SHIFT_HIGH(val, bits) ((val) << (bits)) |
| 86 | #define SHIFT_LOW(val, bits) ((val) >> (bits)) | 87 | #define SHIFT_LOW(val, bits) ((val) >> (bits)) |
| 88 | #define BIT_NR(b) (b) | ||
| 87 | #endif | 89 | #endif |
| 88 | 90 | ||
| 89 | static inline void color_imageblit(const struct fb_image *image, | 91 | 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 * | |||
| 177 | 179 | ||
| 178 | while (j--) { | 180 | while (j--) { |
| 179 | l--; | 181 | l--; |
| 180 | color = (*s & (1 << l)) ? fgcolor : bgcolor; | 182 | color = (*s & 1 << (BIT_NR(l))) ? fgcolor : bgcolor; |
| 181 | color <<= LEFT_POS(bpp); | 183 | color <<= LEFT_POS(bpp); |
| 182 | val |= SHIFT_HIGH(color, shift); | 184 | val |= SHIFT_HIGH(color, shift); |
| 183 | 185 | ||
