Hello community, here is the log from the commit of package grub checked in at Fri Aug 24 23:27:43 CEST 2007. -------- --- arch/i386/grub/grub.changes 2007-06-21 15:56:08.000000000 +0200 +++ /mounts/work_src_done/STABLE/grub/grub.changes 2007-08-23 17:35:10.000000000 +0200 @@ -1,0 +2,7 @@ +Thu Aug 23 17:25:44 CEST 2007 - duwe@suse.de + +- Allow A20 only to be opened, but take extra care to ensure + it works and breaks nothing else. This will/may fix bugs + #269771,#299576,#228083,#190030 and maybe more. + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ grub.spec ++++++ --- /var/tmp/diff_new_pack.vk8683/_old 2007-08-24 23:27:24.000000000 +0200 +++ /var/tmp/diff_new_pack.vk8683/_new 2007-08-24 23:27:24.000000000 +0200 @@ -15,10 +15,10 @@ %ifarch x86_64 BuildRequires: gcc-32bit glibc-devel-32bit ncurses-32bit ncurses-devel-32bit %endif -License: GNU General Public License (GPL) +License: GPL v2 or later Group: System/Boot Version: 0.97 -Release: 64 +Release: 77 Source0: %{name}-%{version}.tar.gz Source1: installgrub Source2: grubonce @@ -36,8 +36,7 @@ Patch10: force-LBA-off.diff Patch11: gcc4-diff Patch12: %{name}-%{version}-initrdaddr.diff -#Patch13: grub-A20-sysctlportA -Patch13: http://www.scl.ameslab.gov/Projects/mini-xen/grub-a20.patch +Patch13: grub-a20.patch Patch14: disk-by-ID Patch15: e100-newIDs Patch16: recognise-zen @@ -200,6 +199,10 @@ exit 0 %changelog +* Thu Aug 23 2007 - duwe@suse.de +- Allow A20 only to be opened, but take extra care to ensure + it works and breaks nothing else. This will/may fix bugs + [#269771],#299576,#228083,#190030 and maybe more. * Thu Jun 21 2007 - adrian@suse.de - fix changelog entry order * Fri Mar 16 2007 - duwe@suse.de ++++++ grub-a20.patch ++++++ --- /var/tmp/diff_new_pack.vk8683/_old 2007-08-24 23:27:25.000000000 +0200 +++ /var/tmp/diff_new_pack.vk8683/_new 2007-08-24 23:27:25.000000000 +0200 @@ -1,68 +1,119 @@ -diff -u -r grub-0.97/stage2/asm.S grub-0.97-new/stage2/asm.S ---- grub-0.97/stage2/asm.S 2004-06-19 16:55:22.000000000 +0000 -+++ grub-0.97-new/stage2/asm.S 2006-05-19 10:56:12.000000000 +0000 -@@ -1651,7 +1651,29 @@ - jnz 3f +--- grub-0.97/stage2/asm.S.orig 2007-08-24 13:03:39.000000000 +0200 ++++ grub-0.97/stage2/asm.S 2007-08-24 13:08:37.000000000 +0200 +@@ -1620,42 +1620,83 @@ ENTRY(set_vbe_mode) + * + * Gate address-line 20 for high memory. + * +- * This routine is probably overconservative in what it does, but so what? +- * +- * It also eats any keystrokes in the keyboard buffer. :-( ++ * Try to disable the A20 gate by all means. (The argument is ignored) ++ * On success (the memory world is free), a -1 is returned, 0 on failure. ++ * It may also eat any keystrokes in the keyboard buffer. :-( + */ + + ENTRY(gateA20) ++ pushl %ebx ++ pushl %edx ++ call testA20 ++ jnz 1f ++ call A20_BIOS ++ call testA20 ++ jnz 1f ++ call A20_PORT92 ++ call testA20 ++ jnz 1f ++ call A20_KBDCTL ++ call testA20 ++ jnz 1f ++ movl $0,%eax ++ jmp 2f ++1: movl $-1,%eax ++2: popl %edx ++ popl %ebx ++ ret ++ ++testA20: ++ movl 0x500,%eax ++ movl 0x100500,%ebx ++ notl %eax ++ movl %eax,0x100500 ++ cmpl %eax,0x500 ++ pushfl ++ movl %ebx,0x100500 ++ notl %eax ++ movl %eax,0x500 ++ popfl ++ ret ++ ++A20_BIOS: + /* first, try a BIOS call */ +- pushl %ebp +- movl 8(%esp), %edx + + call EXT_C(prot_to_real) + + .code16 +- movw $0x2400, %ax +- testw %dx, %dx +- jz 1f +- incw %ax ++ movw $0x2401, %ax + 1: stc + int $0x15 +- jnc 2f +- +- /* set non-zero if failed */ +- movb $1, %ah +- +- /* save the status */ +-2: movb %ah, %dl + + DATA32 call EXT_C(real_to_prot) + .code32 +- +- popl %ebp +- testb %dl, %dl +- jnz 3f ret -3: /* use keyboard controller */ -+3: /* -+ * try to switch gateA20 using PORT92, the "Fast A20 and Init" -+ * register -+ */ -+ mov $0x92, %dx -+ inb %dx, %al -+ /* skip the port92 code if it's unimplemented (read returns 0xff) */ -+ cmpb $0xff, %al -+ jz 6f -+ -+ /* set or clear bit1, the ALT_A20_GATE bit */ -+ movb 4(%esp), %ah -+ testb %ah, %ah -+ jz 4f -+ orb $2, %al -+ jmp 5f -+4: and $0xfd, %al -+ -+ /* clear the INIT_NOW bit; don't accidently reset the machine */ -+5: and $0xfe, %al -+ outb %al, %dx + -+6: /* use keyboard controller */ ++A20_PORT92: ++ /* ++ * try to switch gateA20 using PORT92, the "Fast A20 and Init" ++ * register ++ */ ++ mov $0x92, %dx ++ inb %dx, %al ++ /* skip the port92 code if it's unimplemented (read returns 0xff) */ ++ cmpb $0xff, %al ++ jz 6f ++ ++ /* set bit1, the ALT_A20_GATE bit */ ++ orb $2, %al ++/* and $0xfd, %al */ ++ ++ /* clear the INIT_NOW bit; don't accidently reset the machine */ ++ and $0xfe, %al ++ outb %al, %dx ++6: ret ++ ++ ++A20_KBDCTL: ++ /* use keyboard controller */ pushl %eax call gloop1 -@@ -1661,9 +1683,12 @@ - - gloopint1: - inb $K_STATUS -+ cmpb $0xff, %al -+ jz gloopint1_done - andb $K_IBUF_FUL, %al +@@ -1669,11 +1710,7 @@ gloopint1: jnz gloopint1 -+gloopint1_done: movb $KB_OUTPUT_MASK, %al - cmpb $0, 0x8(%esp) - jz gdoit -@@ -1684,6 +1709,8 @@ - - gloop1: - inb $K_STATUS -+ cmpb $0xff, %al -+ jz gloop2ret - andb $K_IBUF_FUL, %al - jnz gloop1 - -@@ -1991,6 +2018,11 @@ - ENTRY(console_getkey) - push %ebp - -+wait_for_key: -+ call EXT_C(console_checkkey) -+ incl %eax -+ jz wait_for_key -+ - call EXT_C(prot_to_real) - .code16 +- cmpb $0, 0x8(%esp) +- jz gdoit +- + orb $KB_A20_ENABLE, %al +-gdoit: + outb $K_RDWR + call gloop1 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org