On 01/08/2011 12:58 PM, Chris Samuel wrote: > On my Toshiba Libretto 70CT Pentium notebook with 32MB of RAM I > see this on my lsmmap: > > base_addr = 0x100000, length = 0x1f20000, type = 0x1 > > ..and yes, I have this same issue with Squeeze. > > Please try the attached patch > This is with grub-pc 1.98+20100804-11 after debootstrapping an > install after removing the harddisk. > > cheers! > Chris >
-- Regards Vladimir 'φ-coder/phcoder' Serbinenko
=== modified file 'grub-core/kern/i386/pc/init.c' --- grub-core/kern/i386/pc/init.c 2010-09-18 22:04:31 +0000 +++ grub-core/kern/i386/pc/init.c 2011-01-08 12:23:55 +0000 @@ -140,36 +140,27 @@ } } -/* - * - * grub_get_conv_memsize(i) : return the conventional memory size in KB. - * BIOS call "INT 12H" to get conventional memory size - * The return value in AX. - */ -static inline grub_uint16_t -grub_get_conv_memsize (void) -{ - struct grub_bios_int_registers regs; - - regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; - grub_bios_interrupt (0x12, ®s); - return regs.eax & 0xffff; -} - void grub_machine_init (void) { int i; +#if 0 int grub_lower_mem; +#endif /* Initialize the console as early as possible. */ grub_console_init (); + /* This sanity check is useless since top of GRUB_MEMORY_MACHINE_RESERVED_END + is used for stack and if it's unavailable we wouldn't have gotten so far. + */ +#if 0 grub_lower_mem = grub_get_conv_memsize () << 10; /* Sanity check. */ if (grub_lower_mem < GRUB_MEMORY_MACHINE_RESERVED_END) grub_fatal ("too small memory"); +#endif /* FIXME: This prevents loader/i386/linux.c from using low memory. When our heap implements support for requesting a chunk in low memory, this should === modified file 'grub-core/kern/i386/pc/mmap.c' --- grub-core/kern/i386/pc/mmap.c 2010-09-18 22:04:31 +0000 +++ grub-core/kern/i386/pc/mmap.c 2011-01-08 12:25:10 +0000 @@ -37,6 +37,22 @@ /* + * + * grub_get_conv_memsize(i) : return the conventional memory size in KB. + * BIOS call "INT 12H" to get conventional memory size + * The return value in AX. + */ +static inline grub_uint16_t +grub_get_conv_memsize (void) +{ + struct grub_bios_int_registers regs; + + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x12, ®s); + return regs.eax & 0xffff; +} + +/* * grub_get_ext_memsize() : return the extended memory size in KB. * BIOS call "INT 15H, AH=88H" to get extended memory size * The return value in AX. @@ -155,6 +171,9 @@ { grub_uint32_t eisa_mmap = grub_get_eisa_mmap (); + hook (0x0, ((grub_uint32_t) grub_get_conv_memsize ()) << 10, + GRUB_MEMORY_AVAILABLE); + if (eisa_mmap) { if (hook (0x100000, (eisa_mmap & 0xFFFF) << 10, @@ -162,7 +181,8 @@ hook (0x1000000, eisa_mmap & ~0xFFFF, GRUB_MEMORY_AVAILABLE); } else - hook (0x100000, grub_get_ext_memsize () << 10, GRUB_MEMORY_AVAILABLE); + hook (0x100000, ((grub_uint32_t) grub_get_ext_memsize ()) << 10, + GRUB_MEMORY_AVAILABLE); } return 0;
signature.asc
Description: OpenPGP digital signature