#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 by , 14 years ago
Cc: | added |
---|---|
Component: | unspecified → kernel/generic |
Priority: | major → critical |
comment:2 by , 14 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
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.
This ticket is very closely related to the following tickets: