Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1ab5dac authored by James Simmons's avatar James Simmons Committed by Linus Torvalds
Browse files

[PATCH] fbdev: stack reduction



Shrink the stack when calling the drawing alignment functions.

Signed-off-by: default avatarJames Simmons <jsimmons@www.infradead.org>
Cc: "Antonino A. Daplas" <adaplas@hotpop.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 303b86d9
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -157,9 +157,9 @@ static void bit_putcs(struct vc_data *vc, struct fb_info *info,
					src = buf;
				}

				fb_sysmove_buf_unaligned(info, &info->pixmap, dst, pitch,
					       src, idx, image.height,
					       shift_high, shift_low, mod);
				fb_pad_unaligned_buffer(dst, pitch, src, idx,
						image.height, shift_high,
						shift_low, mod);
				shift_low += mod;
				dst += (shift_low >= 8) ? width : width - 1;
				shift_low &= 7;
@@ -175,8 +175,7 @@ static void bit_putcs(struct vc_data *vc, struct fb_info *info,
					src = buf;
				}

				fb_sysmove_buf_aligned(info, &info->pixmap, dst, pitch,
					     src, idx, image.height);
				fb_pad_aligned_buffer(dst, pitch, src, idx, image.height);
				dst += width;
			}
		}
+5 −9
Original line number Diff line number Diff line
@@ -78,9 +78,7 @@ EXPORT_SYMBOL(fb_get_color_depth);
/*
 * Data padding functions.
 */
void fb_sysmove_buf_aligned(struct fb_info *info, struct fb_pixmap *buf,
			    u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch,
			    u32 height)
void fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, u32 height)
{
	int i;

@@ -90,12 +88,10 @@ void fb_sysmove_buf_aligned(struct fb_info *info, struct fb_pixmap *buf,
		dst += d_pitch;
	}
}
EXPORT_SYMBOL(fb_sysmove_buf_aligned);
EXPORT_SYMBOL(fb_pad_aligned_buffer);

void fb_sysmove_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf,
			      u8 *dst, u32 d_pitch, u8 *src, u32 idx,
			      u32 height, u32 shift_high, u32 shift_low,
			      u32 mod)
void fb_pad_unaligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 idx, u32 height,
				u32 shift_high, u32 shift_low, u32 mod)
{
	u8 mask = (u8) (0xfff << shift_high), tmp;
	int i, j;
@@ -122,7 +118,7 @@ void fb_sysmove_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf,
		dst += d_pitch;
	}
}
EXPORT_SYMBOL(fb_sysmove_buf_unaligned);
EXPORT_SYMBOL(fb_pad_unaligned_buffer);

/*
 * we need to lock this section since fb_cursor
+7 −10
Original line number Diff line number Diff line
@@ -516,9 +516,9 @@ static struct backlight_controller nvidia_backlight_controller = {
static void nvidiafb_load_cursor_image(struct nvidia_par *par, u8 * data8,
				       u16 bg, u16 fg, u32 w, u32 h)
{
	u32 *data = (u32 *) data8;
	int i, j, k = 0;
	u32 b, tmp;
	u32 *data = (u32 *) data8;

	w = (w + 1) & ~1;

@@ -890,11 +890,11 @@ static int nvidiafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
{
	struct nvidia_par *par = info->par;
	u8 data[MAX_CURS * MAX_CURS / 8];
	u16 fg, bg;
	int i, set = cursor->set;
	u16 fg, bg;

	if (cursor->image.width > MAX_CURS || cursor->image.height > MAX_CURS)
		return soft_cursor(info, cursor);
		return -ENXIO;

	NVShowHideCursor(par, 0);

@@ -931,20 +931,17 @@ static int nvidiafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
		if (src) {
			switch (cursor->rop) {
			case ROP_XOR:
				for (i = 0; i < s_pitch * cursor->image.height;
				     i++)
				for (i = 0; i < s_pitch * cursor->image.height; i++)
					src[i] = dat[i] ^ msk[i];
				break;
			case ROP_COPY:
			default:
				for (i = 0; i < s_pitch * cursor->image.height;
				     i++)
				for (i = 0; i < s_pitch * cursor->image.height; i++)
					src[i] = dat[i] & msk[i];
				break;
			}

			fb_sysmove_buf_aligned(info, &info->pixmap, data,
					       d_pitch, src, s_pitch,
			fb_pad_aligned_buffer(data, d_pitch, src, s_pitch,
						cursor->image.height);

			bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) |
+7 −11
Original line number Diff line number Diff line
@@ -1582,12 +1582,11 @@ static int rivafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
{
	struct riva_par *par = (struct riva_par *) info->par;
	u8 data[MAX_CURS * MAX_CURS/8];
	u16 fg, bg;
	int i, set = cursor->set;
	u16 fg, bg;

	if (cursor->image.width > MAX_CURS ||
	    cursor->image.height > MAX_CURS)
		return soft_cursor(info, cursor);
	if (cursor->image.width > MAX_CURS || cursor->image.height > MAX_CURS)
		return -ENXIO;

	par->riva.ShowHideCursor(&par->riva, 0);

@@ -1625,20 +1624,17 @@ static int rivafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
		if (src) {
			switch (cursor->rop) {
			case ROP_XOR:
				for (i = 0; i < s_pitch * cursor->image.height;
				     i++)
				for (i = 0; i < s_pitch * cursor->image.height; i++)
					src[i] = dat[i] ^ msk[i];
				break;
			case ROP_COPY:
			default:
				for (i = 0; i < s_pitch * cursor->image.height;
				     i++)
				for (i = 0; i < s_pitch * cursor->image.height; i++)
					src[i] = dat[i] & msk[i];
				break;
			}

			fb_sysmove_buf_aligned(info, &info->pixmap, data,
					       d_pitch, src, s_pitch,
			fb_pad_aligned_buffer(data, d_pitch, src, s_pitch,
						cursor->image.height);

			bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) |
+1 −4
Original line number Diff line number Diff line
@@ -58,13 +58,10 @@ int soft_cursor(struct fb_info *info, struct fb_cursor *cursor)
	} else 
		memcpy(src, image->data, dsize);
	
	fb_sysmove_buf_aligned(info, &info->pixmap, dst, d_pitch, src,
				s_pitch, image->height);

	fb_pad_aligned_buffer(dst, d_pitch, src, s_pitch, image->height);
	image->data = dst;
	info->fbops->fb_imageblit(info, image);
	kfree(src);

	return 0;
}

Loading