From: James Simmons <jsimmons@pentafluge.infradead.org>

Shrink the stack when calling the drawing alignment functions.

Signed-off-by: James Simmons <jsimmons@www.infradead.org>
Cc: "Antonino A. Daplas" <adaplas@hotpop.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 drivers/video/console/bitblit.c |    9 ++++-----
 drivers/video/fbmem.c           |   14 +++++---------
 drivers/video/nvidia/nvidia.c   |   17 +++++++----------
 drivers/video/riva/fbdev.c      |   18 +++++++-----------
 drivers/video/softcursor.c      |    5 +----
 include/linux/fb.h              |    7 ++-----
 6 files changed, 26 insertions(+), 44 deletions(-)

diff -puN drivers/video/console/bitblit.c~fbdev-stack-reduction drivers/video/console/bitblit.c
--- 25/drivers/video/console/bitblit.c~fbdev-stack-reduction	Mon Jun 13 16:46:57 2005
+++ 25-akpm/drivers/video/console/bitblit.c	Mon Jun 13 16:46:57 2005
@@ -157,9 +157,9 @@ static void bit_putcs(struct vc_data *vc
 					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
 					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;
 			}
 		}
diff -puN drivers/video/fbmem.c~fbdev-stack-reduction drivers/video/fbmem.c
--- 25/drivers/video/fbmem.c~fbdev-stack-reduction	Mon Jun 13 16:46:57 2005
+++ 25-akpm/drivers/video/fbmem.c	Mon Jun 13 16:46:57 2005
@@ -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_in
 		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_
 		dst += d_pitch;
 	}
 }
-EXPORT_SYMBOL(fb_sysmove_buf_unaligned);
+EXPORT_SYMBOL(fb_pad_unaligned_buffer);
 
 /*
  * we need to lock this section since fb_cursor
diff -puN drivers/video/nvidia/nvidia.c~fbdev-stack-reduction drivers/video/nvidia/nvidia.c
--- 25/drivers/video/nvidia/nvidia.c~fbdev-stack-reduction	Mon Jun 13 16:46:57 2005
+++ 25-akpm/drivers/video/nvidia/nvidia.c	Mon Jun 13 16:46:57 2005
@@ -516,9 +516,9 @@ static struct backlight_controller nvidi
 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_inf
 {
 	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,21 +931,18 @@ static int nvidiafb_cursor(struct fb_inf
 		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,
-					       cursor->image.height);
+			fb_pad_aligned_buffer(data, d_pitch, src, s_pitch,
+						cursor->image.height);
 
 			bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) |
 			    ((info->cmap.green[bg_idx] & 0xf8) << 2) |
diff -puN drivers/video/riva/fbdev.c~fbdev-stack-reduction drivers/video/riva/fbdev.c
--- 25/drivers/video/riva/fbdev.c~fbdev-stack-reduction	Mon Jun 13 16:46:57 2005
+++ 25-akpm/drivers/video/riva/fbdev.c	Mon Jun 13 16:46:57 2005
@@ -1582,12 +1582,11 @@ static int rivafb_cursor(struct fb_info 
 {
 	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,21 +1624,18 @@ static int rivafb_cursor(struct fb_info 
 		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,
-					       cursor->image.height);
+			fb_pad_aligned_buffer(data, d_pitch, src, s_pitch,
+						cursor->image.height);
 
 			bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) |
 				((info->cmap.green[bg_idx] & 0xf8) << 2) |
diff -puN drivers/video/softcursor.c~fbdev-stack-reduction drivers/video/softcursor.c
--- 25/drivers/video/softcursor.c~fbdev-stack-reduction	Mon Jun 13 16:46:57 2005
+++ 25-akpm/drivers/video/softcursor.c	Mon Jun 13 16:46:57 2005
@@ -58,13 +58,10 @@ int soft_cursor(struct fb_info *info, st
 	} 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;
 }
 
diff -puN include/linux/fb.h~fbdev-stack-reduction include/linux/fb.h
--- 25/include/linux/fb.h~fbdev-stack-reduction	Mon Jun 13 16:46:57 2005
+++ 25-akpm/include/linux/fb.h	Mon Jun 13 16:46:57 2005
@@ -816,12 +816,9 @@ extern int unregister_framebuffer(struct
 extern int fb_prepare_logo(struct fb_info *fb_info);
 extern int fb_show_logo(struct fb_info *fb_info);
 extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size);
-extern void fb_sysmove_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf,
-				u8 *dst, u32 d_pitch, u8 *src, u32 idx,
+extern void fb_pad_unaligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 idx,
 				u32 height, u32 shift_high, u32 shift_low, u32 mod);
-extern 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);
+extern void fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, u32 height);
 extern void fb_set_suspend(struct fb_info *info, int state);
 extern int fb_get_color_depth(struct fb_var_screeninfo *var);
 extern int fb_get_options(char *name, char **option);
_