From 81577a9eef9caf93627f01d8ea65137149aa708c Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 2 Nov 2001 00:41:00 +0000 Subject: "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... --- sys/alpha/alpha/machdep.c | 4 +++- sys/ia64/ia64/machdep.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/sys/alpha/alpha/machdep.c b/sys/alpha/alpha/machdep.c index d9a5104..e31b2cd 100644 --- a/sys/alpha/alpha/machdep.c +++ b/sys/alpha/alpha/machdep.c @@ -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)) diff --git a/sys/ia64/ia64/machdep.c b/sys/ia64/ia64/machdep.c index c0f9409..2faa954 100644 --- a/sys/ia64/ia64/machdep.c +++ b/sys/ia64/ia64/machdep.c @@ -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)) -- cgit v1.1