Check whether the SMBIOS reports reasonable amount of memory. If it is
less than "avail memory", fall back to Maxmem to avoid user confusion. We use SMBIOS information to display "real memory" since r190599 but some broken SMBIOS implementation reported only half of actual memory. Tested by: bz Approved by: re (kib)
This commit is contained in:
parent
b4e7e7a065
commit
66406b8f25
@ -236,19 +236,21 @@ cpu_startup(dummy)
|
||||
#ifdef PERFMON
|
||||
perfmon_init();
|
||||
#endif
|
||||
realmem = Maxmem;
|
||||
|
||||
/*
|
||||
* Display physical memory if SMBIOS reports reasonable amount.
|
||||
*/
|
||||
memsize = 0;
|
||||
sysenv = getenv("smbios.memory.enabled");
|
||||
if (sysenv != NULL) {
|
||||
memsize = (uintmax_t)strtoul(sysenv, (char **)NULL, 10);
|
||||
memsize = (uintmax_t)strtoul(sysenv, (char **)NULL, 10) << 10;
|
||||
freeenv(sysenv);
|
||||
} else
|
||||
memsize = 0;
|
||||
if (memsize > 0)
|
||||
printf("real memory = %ju (%ju MB)\n", memsize << 10,
|
||||
memsize >> 10);
|
||||
else
|
||||
printf("real memory = %ju (%ju MB)\n", ptoa((uintmax_t)Maxmem),
|
||||
ptoa((uintmax_t)Maxmem) / 1048576);
|
||||
realmem = Maxmem;
|
||||
}
|
||||
if (memsize < ptoa((uintmax_t)cnt.v_free_count))
|
||||
memsize = ptoa((uintmax_t)Maxmem);
|
||||
printf("real memory = %ju (%ju MB)\n", memsize, memsize >> 20);
|
||||
|
||||
/*
|
||||
* Display any holes after the first chunk of extended memory.
|
||||
*/
|
||||
|
@ -280,19 +280,21 @@ cpu_startup(dummy)
|
||||
#ifdef PERFMON
|
||||
perfmon_init();
|
||||
#endif
|
||||
realmem = Maxmem;
|
||||
|
||||
/*
|
||||
* Display physical memory if SMBIOS reports reasonable amount.
|
||||
*/
|
||||
memsize = 0;
|
||||
sysenv = getenv("smbios.memory.enabled");
|
||||
if (sysenv != NULL) {
|
||||
memsize = (uintmax_t)strtoul(sysenv, (char **)NULL, 10);
|
||||
memsize = (uintmax_t)strtoul(sysenv, (char **)NULL, 10) << 10;
|
||||
freeenv(sysenv);
|
||||
} else
|
||||
memsize = 0;
|
||||
if (memsize > 0)
|
||||
printf("real memory = %ju (%ju MB)\n", memsize << 10,
|
||||
memsize >> 10);
|
||||
else
|
||||
printf("real memory = %ju (%ju MB)\n", ptoa((uintmax_t)Maxmem),
|
||||
ptoa((uintmax_t)Maxmem) / 1048576);
|
||||
realmem = Maxmem;
|
||||
}
|
||||
if (memsize < ptoa((uintmax_t)cnt.v_free_count))
|
||||
memsize = ptoa((uintmax_t)Maxmem);
|
||||
printf("real memory = %ju (%ju MB)\n", memsize, memsize >> 20);
|
||||
|
||||
/*
|
||||
* Display any holes after the first chunk of extended memory.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user