From 3a138c7fc3c38433f75cf3d44a4a78d80a6da705 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Fri, 6 Aug 2010 08:58:36 +0000 Subject: main/linux-vserver: add fix for screen output on boot was never applied to linux-vserver kernel. ref #339 --- main/linux-vserver/APKBUILD | 17 +++++--- ...the-screen-update-boot_params-screen_info.patch | 48 ++++++++++++++++++++++ 2 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 main/linux-vserver/x86-setup-When-restoring-the-screen-update-boot_params-screen_info.patch diff --git a/main/linux-vserver/APKBUILD b/main/linux-vserver/APKBUILD index 912954526a..ff2597f754 100644 --- a/main/linux-vserver/APKBUILD +++ b/main/linux-vserver/APKBUILD @@ -5,7 +5,7 @@ pkgname=linux-${_flavor} pkgver=2.6.32.16 _kernver=2.6.32 -pkgrel=1 +pkgrel=2 pkgdesc="Linux kernel with vserver" url="http://linux-vserver.org/" depends="mkinitfs linux-firmware" @@ -16,6 +16,7 @@ install= source="ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-$_kernver.tar.bz2 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-$pkgver.bz2 http://vserver.13thfloor.at/Experimental/patch-2.6.32.16-vs2.3.0.36.29.4.diff + x86-setup-When-restoring-the-screen-update-boot_params-screen_info.patch kernelconfig.x86 " subpackages="$pkgname-dev" @@ -29,10 +30,15 @@ prepare() { bunzip2 -c < ../patch-$pkgver.bz2 | patch -p1 -N || return 1 fi - for i in ../*.diff ../*.patch; do - [ -f $i ] || continue - msg "Applying $i..." - patch -p1 -N < $i || return 1 + # first apply patches in specified order + for i in $source; do + i=${i##*/} + case $i in + *.patch|*.diff) + msg "Applying $i..." + patch -s -p1 -N < "$srcdir"/$i || return 1 + ;; + esac done mkdir -p "$srcdir"/build @@ -120,4 +126,5 @@ dev() { md5sums="260551284ac224c3a43c4adac7df4879 linux-2.6.32.tar.bz2 744890f9651962ceae7663d44b19df65 patch-2.6.32.16.bz2 24354a6fd8798792b9ee21f086721cd9 patch-2.6.32.16-vs2.3.0.36.29.4.diff +a1bcf76870b63a4a4035a8948fb758e2 x86-setup-When-restoring-the-screen-update-boot_params-screen_info.patch 884ba32b4edb6c51426e826c44063e98 kernelconfig.x86" diff --git a/main/linux-vserver/x86-setup-When-restoring-the-screen-update-boot_params-screen_info.patch b/main/linux-vserver/x86-setup-When-restoring-the-screen-update-boot_params-screen_info.patch new file mode 100644 index 0000000000..a4f94d7fa4 --- /dev/null +++ b/main/linux-vserver/x86-setup-When-restoring-the-screen-update-boot_params-screen_info.patch @@ -0,0 +1,48 @@ +From f1f6baf8f1df29be38003089787e378567ce0086 Mon Sep 17 00:00:00 2001 +From: H. Peter Anvin +Date: Wed, 17 Feb 2010 18:32:06 -0800 +Subject: [PATCH] x86, setup: When restoring the screen, update boot_params.screen_info + +When we restore the screen content after a mode change, we return the +cursor to its former position. However, we need to also update +boot_params.screen_info accordingly, so that the decompression code +knows where on the screen the cursor is. Just in case the video BIOS +does something extra screwy, read the cursor position back from the +BIOS instead of relying on it doing the right thing. + +While we're at it, make sure we cap the cursor position to the new +screen coordinates. + +Reported-by: Wim Osterholt +Bugzilla-Reference: http://bugzilla.kernel.org/show_bug.cgi?id=15329 +Signed-off-by: H. Peter Anvin +--- + arch/x86/boot/video.c | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +diff --git a/arch/x86/boot/video.c b/arch/x86/boot/video.c +index f767164..43eda28 100644 +--- a/arch/x86/boot/video.c ++++ b/arch/x86/boot/video.c +@@ -298,11 +298,18 @@ static void restore_screen(void) + } + + /* Restore cursor position */ ++ if (saved.curx >= xs) ++ saved.curx = xs-1; ++ if (saved.cury >= ys) ++ saved.cury = ys-1; ++ + initregs(&ireg); + ireg.ah = 0x02; /* Set cursor position */ + ireg.dh = saved.cury; + ireg.dl = saved.curx; + intcall(0x10, &ireg, NULL); ++ ++ store_cursor_position(); + } + + void set_video(void) +-- +1.7.1 + -- cgit v1.2.3