diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2010-08-06 08:58:36 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2010-08-06 08:58:36 +0000 |
commit | 3a138c7fc3c38433f75cf3d44a4a78d80a6da705 (patch) | |
tree | 2cd0ab881d445277630d8e74e756639d19f5649f /main/linux-vserver | |
parent | 579ba619a6a0d799c5cf1632003fa79e9551aa68 (diff) | |
download | aports-3a138c7fc3c38433f75cf3d44a4a78d80a6da705.tar.bz2 aports-3a138c7fc3c38433f75cf3d44a4a78d80a6da705.tar.xz |
main/linux-vserver: add fix for screen output on boot
was never applied to linux-vserver kernel.
ref #339
Diffstat (limited to 'main/linux-vserver')
-rw-r--r-- | main/linux-vserver/APKBUILD | 17 | ||||
-rw-r--r-- | main/linux-vserver/x86-setup-When-restoring-the-screen-update-boot_params-screen_info.patch | 48 |
2 files changed, 60 insertions, 5 deletions
diff --git a/main/linux-vserver/APKBUILD b/main/linux-vserver/APKBUILD index 912954526..ff2597f75 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 000000000..a4f94d7fa --- /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 <hpa@zytor.com> +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 <wim@djo.tudelft.nl> +Bugzilla-Reference: http://bugzilla.kernel.org/show_bug.cgi?id=15329 +Signed-off-by: H. Peter Anvin <hpa@zytor.com> +--- + 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 + |