diff -uNr linux-2.6.11-gentoo-r4.orig/drivers/video/console/bitblit.c linux-2.6.11-gentoo-r4/drivers/video/console/bitblit.c --- linux-2.6.11-gentoo-r4.orig/drivers/video/console/bitblit.c 2005-04-14 07:45:20.000000000 +0300 +++ linux-2.6.11-gentoo-r4/drivers/video/console/bitblit.c 2005-04-14 21:58:13.000000000 +0300 @@ -244,7 +244,7 @@ } static void bit_cursor(struct vc_data *vc, struct fb_info *info, - struct display *p, int mode, int fg, int bg) + struct display *p, int mode, int softback_lines, int fg, int bg) { struct fb_cursor cursor; struct fbcon_ops *ops = (struct fbcon_ops *) info->fbcon_par; @@ -256,6 +256,15 @@ cursor.set = 0; + if (softback_lines) { + if (y + softback_lines >= vc->vc_rows) { + mode = CM_ERASE; + ops->cursor_flash = 0; + return; + } else + y += softback_lines; + } + c = scr_readw((u16 *) vc->vc_pos); attribute = get_attribute(info, c); src = vc->vc_font.data + ((c & charmask) * (w * vc->vc_font.height)); diff -uNr linux-2.6.11-gentoo-r4.orig/drivers/video/console/fbcon.c linux-2.6.11-gentoo-r4/drivers/video/console/fbcon.c --- linux-2.6.11-gentoo-r4.orig/drivers/video/console/fbcon.c 2005-04-14 07:45:20.000000000 +0300 +++ linux-2.6.11-gentoo-r4/drivers/video/console/fbcon.c 2005-04-14 22:06:36.000000000 +0300 @@ -278,7 +278,7 @@ c = scr_readw((u16 *) vc->vc_pos); mode = (!ops->cursor_flash || ops->cursor_state.enable) ? CM_ERASE : CM_DRAW; - ops->cursor(vc, info, p, mode, get_color(vc, info, c, 1), + ops->cursor(vc, info, p, mode, softback_lines, get_color(vc, info, c, 1), get_color(vc, info, c, 0)); release_console_sem(); @@ -1112,27 +1112,23 @@ struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; struct fbcon_ops *ops = info->fbcon_par; struct display *p = &fb_display[vc->vc_num]; - int y = real_y(p, vc->vc_y); + int y; int c = scr_readw((u16 *) vc->vc_pos); if (fbcon_is_inactive(vc, info)) return; - ops->cursor_flash = 1; + ops->cursor_flash = (mode == CM_ERASE) ? 0 : 1; if (mode & CM_SOFTBACK) { mode &= ~CM_SOFTBACK; - if (softback_lines) { - if (y + softback_lines >= vc->vc_rows) { - mode = CM_ERASE; - ops->cursor_flash = 0; - } - else - y += softback_lines; - } - } else if (softback_lines) - fbcon_set_origin(vc); + y = softback_lines; + } else { + if (softback_lines) + fbcon_set_origin(vc); + y = 0; + } - ops->cursor(vc, info, p, mode, get_color(vc, info, c, 1), + ops->cursor(vc, info, p, mode, y, get_color(vc, info, c, 1), get_color(vc, info, c, 0)); vbl_cursor_cnt = CURSOR_DRAW_DELAY; } diff -uNr linux-2.6.11-gentoo-r4.orig/drivers/video/console/fbcon.h linux-2.6.11-gentoo-r4/drivers/video/console/fbcon.h --- linux-2.6.11-gentoo-r4.orig/drivers/video/console/fbcon.h 2005-04-14 07:45:20.000000000 +0300 +++ linux-2.6.11-gentoo-r4/drivers/video/console/fbcon.h 2005-04-14 22:09:57.000000000 +0300 @@ -59,7 +59,7 @@ void (*clear_margins)(struct vc_data *vc, struct fb_info *info, int bottom_only); void (*cursor)(struct vc_data *vc, struct fb_info *info, - struct display *p, int mode, int fg, int bg); + struct display *p, int mode, int softback_lines, int fg, int bg); struct timer_list cursor_timer; /* Cursor timer */ struct fb_cursor cursor_state; diff -uNr linux-2.6.11-gentoo-r4.orig/drivers/video/console/tileblit.c linux-2.6.11-gentoo-r4/drivers/video/console/tileblit.c --- linux-2.6.11-gentoo-r4.orig/drivers/video/console/tileblit.c 2005-04-14 07:45:20.000000000 +0300 +++ linux-2.6.11-gentoo-r4/drivers/video/console/tileblit.c 2005-04-14 22:11:32.000000000 +0300 @@ -81,7 +81,8 @@ } static void tile_cursor(struct vc_data *vc, struct fb_info *info, - struct display *p, int mode, int fg, int bg) + struct display *p, int mode, int softback_lines, + int fg, int bg) { struct fb_tilecursor cursor; int use_sw = (vc->vc_cursor_type & 0x01);