summaryrefslogtreecommitdiffstats
path: root/main/linux-vserver
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2010-08-06 08:58:36 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2010-08-06 08:58:36 +0000
commit3a138c7fc3c38433f75cf3d44a4a78d80a6da705 (patch)
tree2cd0ab881d445277630d8e74e756639d19f5649f /main/linux-vserver
parent579ba619a6a0d799c5cf1632003fa79e9551aa68 (diff)
downloadaports-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/APKBUILD17
-rw-r--r--main/linux-vserver/x86-setup-When-restoring-the-screen-update-boot_params-screen_info.patch48
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
+