[patch-2.4.0-test1-ac4]linux-2.4.0-test1-ac4+grub

From: HIBINO Kei (ex8k-hbn@asahi-net.or.jp)
Date: Tue May 30 2000 - 05:44:14 EST


Hello.

We found linux-2.4.0-test1-ac1 can't boot with GNU GRUB + User
'mem=' parameter on iX86 architecture

1. The problem of Linux kernel memory region setting code
(arch/i386/kernel/setup.c in Linux kernel tree)

On linux-2.2.XX, only one memory region is prepared at boot time.

For example, the following command line is passed to kernel,

mem=66550K mem=128M

a 'mem=128M' parameter overwrite 'mem=66550K' parameter as
 the following. There is no problem.

start end
0x100000 0x8000000

But, on linux-2.4.0-test1-ac[1-4](also 2.3.99preX), several
memory region is prepared at boot time.
For example, following command line as above is passed to kernel.

mem=66550K mem=128M

Three memory regions are set as the following.

start end
0x00000000 0x0009f000
0x00100000 0x04000000
0x00100000 0x08000000

Two memory region have the same start address.
A 'request_resource' call conflicts with these regions.

2. The problem of GNU GRUB
(Version 0.94 or later)
(About grub, see http://www.gnu.org/software/grub/)

The GRUB adds 'mem=XXXK' parameter to kernel command
line.(In function 'load_image' in stage2/boot.c)
This parameter is inconsistent with 'mem=<size>' parameter
specified by an user.

For example, when GRUB detects 65550K bytes memory size,
and an user specifies the following command.

kernel (hd0,0)/vmlinuz mem=128M

The command line passed to kernel is the following which has
two 'mem=<size>' parameters.

mem=66550K mem=128M

3. To avoid this problem

There is two way.

(1) GRUB Configuration
Command 'uppermem' make GRUB to generate 'mem=<size>'
parameter which an user want to specify as the following.
(128 * 1024 - 1024 = 130048)

uppermem 130048
kernel (hd0,0)/vmlinuz

In this case, the command line passed to kernel is the following.

mem=131072K

(2) Fix kernel code

Fix kernel code as the last 'mem=<size>' parameter
overwrites former 'mem=<size>' parameter.

--- linux-2.4.0.test1.ac4/arch/i386/kernel/setup-old.c Mon May 29 14:06:04 2000
+++ linux-2.4.0.test1.ac4/arch/i386/kernel/setup.c Tue May 30 19:26:22 2000
@@ -532,6 +532,7 @@
                                else {
                                        start_at = HIGH_MEMORY;
                                        mem_size -= HIGH_MEMORY;
+ usermem = 0;
                                }
                                add_memory_region(start_at, mem_size, E820_RAM);
                        }

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed May 31 2000 - 21:00:24 EST