Support 2GB of memory on Malta systems with FreeBSD/mips.

When 2GB of memory is enabled for QEMU's Malta emulation, the physical
memory ends at an address of 2^32 - 1.  This causes an integer overflow
to zero when computing the upper bound of the second phys_avail[] range.
As a result, FreeBSD/mips kernels were only using the first 256MB of
RAM and ignoring the remaining 1.75GB.  To work around this, truncate
the extended memory size to 2GB minus one page for 32-bit mips kernels.

Sponsored by:	DARPA / AFRL
Differential Revision:	https://reviews.freebsd.org/D16027
This commit is contained in:
John Baldwin 2018-06-28 21:27:34 +00:00
parent 151578dc5f
commit a0399b42a5
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=335783

View File

@ -344,6 +344,15 @@ platform_start(__register_t a0, __register_t a1, __register_t a2,
printf("memsize = %llu (0x%08x)\n",
(unsigned long long) memsize, memsize);
printf("ememsize = %llu\n", (unsigned long long) ememsize);
#ifdef __mips_o32
/*
* For O32 phys_avail[] can't address memory beyond 2^32,
* so cap extended memory to 2GB minus one page.
*/
if (ememsize >= 2ULL * 1024 * 1024 * 1024)
ememsize = 2ULL * 1024 * 1024 * 1024 - PAGE_SIZE;
#endif
}
/*