Fork us on GitHub Follow us on Facebook Follow us on Twitter

Opened 11 years ago

Closed 11 years ago

Last modified 8 months ago

#241 closed defect (fixed)

ia32 won't boot if there is 2 GB physical memory or more

Reported by: Jiri Svoboda Owned by:
Priority: critical Milestone: 0.4.3
Component: helenos/kernel/generic Version: mainline
Keywords: Cc: martin@…
Blocker for: Depends on:
See also:

Description

On ia32 with 2 GB of physical memory or more the kernel will appear hung early in the boot process (before printing anything). This is a problem with kernel address space management.

One problem is in init_e820_memory():

#ifdef __32_BITS__
                /* Ignore physical memory above 4 GB */
                if ((base >> 32) != 0)
                        continue;

                /* Clip regions above 4 GB */
                if (((base + size) >> 32) != 0)
                        size = 0xffffffff - base;
#endif

We should clip regions above 2 GB, not 4 GB.

Another problem is with hw_map(). hw_map() relies on available unsused kernel address space to perform mapping. But with 2 GB or more of physical memory there is no such address space. hw_map() cannot detect this (or when it just runs out).

hw_map() needs to detect when it runs out of address space and fall back to wasting physical memory.

Change History (2)

comment:1 Changed 11 years ago by Martin Decky

Cc: martin@… added
Component: unspecifiedkernel/generic
Priority: majorcritical

This ticket is very closely related to the following tickets:

  • #3 (a long discussion about various kernel memory management limitations and possible ways how to overcome them)
  • #11 (a call for PAE support on IA-32 which should induce many changes in effect overcoming current limitations)
  • #34 (a call for a proper replacement of LOW_4GiB macro [which has been since removed without any replacement])

comment:2 Changed 11 years ago by Martin Decky

Resolution: fixed
Status: newclosed

A workaround (which limits the accessible physical memory to 2 GB - 64 MB) is implemented since mainline,555.

A proper solution should be tracked by ticket #3.

Note: See TracTickets for help on using tickets.