8445253ad3
physical memory is sized by a loop that writes data to the first word in a page, (writes something else to settle the bus) and then reads back the word it wrote. If the read succeeds, the amount of physical memory is increased by one page. This fails on a 5000/1xx with a memory subsystem filled with 8 low-density (4Mbyte) SIMMs. The memory-decoding hardware aliases the 32Mbytes of physical memory at physical addresses 0, and at 32M (and presumably at 64 and 96Mbytes.) The contiguous aliasing causes the memory-sizing loop to continue at 32 MBytes, testing the memory that's really at address 0, overwriting and crashing the kernel. Fixed (for 1.2) by reading the SIMM-decoder stride size from the motherboard, and reducing the loop bound to 32Mbytes on a 5000/1xx with low-density SIMMs. (Other models have a non-power-of-2 maximum memory and so are not subject to _contigous_ aliasing of physical memory). |
||
---|---|---|
.. | ||
compile | ||
conf | ||
dev | ||
dist | ||
include | ||
pmax | ||
stand | ||
tc | ||
Makefile |