"Fix" a problem that got copied from alpha to ia64 and broke there.
When we truncate the msgbuf size because the last chunk is too small, correctly terminate the phys_avail[] array - the VM system tests the *end* for zero, not the start. This leads the VM startup to attempt to recreate a duplicate set of pages for all physical memory. XXX the msgbuf handling is suspiciously different on i386 vs alpha/ia64...
This commit is contained in:
parent
00b8804712
commit
97c97bb16b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=85850
@ -879,8 +879,10 @@ alpha_init(pfn, ptb, bim, bip, biv)
|
||||
msgbufinit(msgbufp, sz);
|
||||
|
||||
/* Remove the last segment if it now has no pages. */
|
||||
if (phys_avail[i] == phys_avail[i+1])
|
||||
if (phys_avail[i] == phys_avail[i+1]) {
|
||||
phys_avail[i] = 0;
|
||||
phys_avail[i+1] = 0;
|
||||
}
|
||||
|
||||
/* warn if the message buffer had to be shrunk */
|
||||
if (sz != round_page(MSGBUF_SIZE))
|
||||
|
@ -748,8 +748,10 @@ ia64_init(u_int64_t arg1, u_int64_t arg2)
|
||||
msgbufinit(msgbufp, sz);
|
||||
|
||||
/* Remove the last segment if it now has no pages. */
|
||||
if (phys_avail[i] == phys_avail[i+1])
|
||||
if (phys_avail[i] == phys_avail[i+1]) {
|
||||
phys_avail[i] = 0;
|
||||
phys_avail[i+] = 0;
|
||||
}
|
||||
|
||||
/* warn if the message buffer had to be shrunk */
|
||||
if (sz != round_page(MSGBUF_SIZE))
|
||||
|
Loading…
Reference in New Issue
Block a user