| 1 | --- a/drivers/video/console/fbcon.c |
| 2 | +++ b/drivers/video/console/fbcon.c |
| 3 | @@ -562,7 +562,7 @@ static void fbcon_prepare_logo(struct vc |
| 4 | /* Need to make room for the logo */ |
| 5 | struct fbcon_ops *ops = info->fbcon_par; |
| 6 | int cnt, erase = vc->vc_video_erase_char, step; |
| 7 | - unsigned short *save = NULL, *r, *q; |
| 8 | + unsigned short *r, *q; |
| 9 | int logo_height; |
| 10 | |
| 11 | if (info->flags & FBINFO_MODULE) { |
| 12 | @@ -581,37 +581,18 @@ static void fbcon_prepare_logo(struct vc |
| 13 | q = (unsigned short *) (vc->vc_origin + |
| 14 | vc->vc_size_row * rows); |
| 15 | step = logo_lines * cols; |
| 16 | - for (r = q - logo_lines * cols; r < q; r++) |
| 17 | - if (scr_readw(r) != vc->vc_video_erase_char) |
| 18 | - break; |
| 19 | - if (r != q && new_rows >= rows + logo_lines) { |
| 20 | - save = kmalloc(logo_lines * new_cols * 2, GFP_KERNEL); |
| 21 | - if (save) { |
| 22 | - int i = cols < new_cols ? cols : new_cols; |
| 23 | - scr_memsetw(save, erase, logo_lines * new_cols * 2); |
| 24 | - r = q - step; |
| 25 | - for (cnt = 0; cnt < logo_lines; cnt++, r += i) |
| 26 | - scr_memcpyw(save + cnt * new_cols, r, 2 * i); |
| 27 | - r = q; |
| 28 | - } |
| 29 | - } |
| 30 | - if (r == q) { |
| 31 | - /* We can scroll screen down */ |
| 32 | - r = q - step - cols; |
| 33 | - for (cnt = rows - logo_lines; cnt > 0; cnt--) { |
| 34 | - scr_memcpyw(r + step, r, vc->vc_size_row); |
| 35 | - r -= cols; |
| 36 | - } |
| 37 | - if (!save) { |
| 38 | - int lines; |
| 39 | - if (vc->vc_y + logo_lines >= rows) |
| 40 | - lines = rows - vc->vc_y - 1; |
| 41 | - else |
| 42 | - lines = logo_lines; |
| 43 | - vc->vc_y += lines; |
| 44 | - vc->vc_pos += lines * vc->vc_size_row; |
| 45 | - } |
| 46 | - } |
| 47 | + r = q - step - cols; |
| 48 | + for (cnt = rows - logo_lines; cnt > 0; cnt--) { |
| 49 | + scr_memcpyw(r + step, r, vc->vc_size_row); |
| 50 | + r -= cols; |
| 51 | + } |
| 52 | + int lines; |
| 53 | + if (vc->vc_y + logo_lines >= rows) |
| 54 | + lines = rows - vc->vc_y - 1; |
| 55 | + else |
| 56 | + lines = logo_lines; |
| 57 | + vc->vc_y += lines; |
| 58 | + vc->vc_pos += lines * vc->vc_size_row; |
| 59 | scr_memsetw((unsigned short *) vc->vc_origin, |
| 60 | erase, |
| 61 | vc->vc_size_row * logo_lines); |
| 62 | @@ -621,16 +602,6 @@ static void fbcon_prepare_logo(struct vc |
| 63 | update_screen(vc); |
| 64 | } |
| 65 | |
| 66 | - if (save) { |
| 67 | - q = (unsigned short *) (vc->vc_origin + |
| 68 | - vc->vc_size_row * |
| 69 | - rows); |
| 70 | - scr_memcpyw(q, save, logo_lines * new_cols * 2); |
| 71 | - vc->vc_y += logo_lines; |
| 72 | - vc->vc_pos += logo_lines * vc->vc_size_row; |
| 73 | - kfree(save); |
| 74 | - } |
| 75 | - |
| 76 | if (logo_lines > vc->vc_bottom) { |
| 77 | logo_shown = FBCON_LOGO_CANSHOW; |
| 78 | printk(KERN_INFO |
| 79 | |