--- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c @@ -562,7 +562,7 @@ static void fbcon_prepare_logo(struct vc /* Need to make room for the logo */ struct fbcon_ops *ops = info->fbcon_par; int cnt, erase = vc->vc_video_erase_char, step; - unsigned short *save = NULL, *r, *q; + unsigned short *r, *q; int logo_height; if (info->flags & FBINFO_MODULE) { @@ -581,37 +581,18 @@ static void fbcon_prepare_logo(struct vc q = (unsigned short *) (vc->vc_origin + vc->vc_size_row * rows); step = logo_lines * cols; - for (r = q - logo_lines * cols; r < q; r++) - if (scr_readw(r) != vc->vc_video_erase_char) - break; - if (r != q && new_rows >= rows + logo_lines) { - save = kmalloc(logo_lines * new_cols * 2, GFP_KERNEL); - if (save) { - int i = cols < new_cols ? cols : new_cols; - scr_memsetw(save, erase, logo_lines * new_cols * 2); - r = q - step; - for (cnt = 0; cnt < logo_lines; cnt++, r += i) - scr_memcpyw(save + cnt * new_cols, r, 2 * i); - r = q; - } - } - if (r == q) { - /* We can scroll screen down */ - r = q - step - cols; - for (cnt = rows - logo_lines; cnt > 0; cnt--) { - scr_memcpyw(r + step, r, vc->vc_size_row); - r -= cols; - } - if (!save) { - int lines; - if (vc->vc_y + logo_lines >= rows) - lines = rows - vc->vc_y - 1; - else - lines = logo_lines; - vc->vc_y += lines; - vc->vc_pos += lines * vc->vc_size_row; - } - } + r = q - step - cols; + for (cnt = rows - logo_lines; cnt > 0; cnt--) { + scr_memcpyw(r + step, r, vc->vc_size_row); + r -= cols; + } + int lines; + if (vc->vc_y + logo_lines >= rows) + lines = rows - vc->vc_y - 1; + else + lines = logo_lines; + vc->vc_y += lines; + vc->vc_pos += lines * vc->vc_size_row; scr_memsetw((unsigned short *) vc->vc_origin, erase, vc->vc_size_row * logo_lines); @@ -621,16 +602,6 @@ static void fbcon_prepare_logo(struct vc update_screen(vc); } - if (save) { - q = (unsigned short *) (vc->vc_origin + - vc->vc_size_row * - rows); - scr_memcpyw(q, save, logo_lines * new_cols * 2); - vc->vc_y += logo_lines; - vc->vc_pos += logo_lines * vc->vc_size_row; - kfree(save); - } - if (logo_lines > vc->vc_bottom) { logo_shown = FBCON_LOGO_CANSHOW; printk(KERN_INFO