From owner-p4-projects@FreeBSD.ORG Sun Jun 26 21:17:19 2005 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A0DEE16A420; Sun, 26 Jun 2005 21:17:18 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 79A4816A41C for ; Sun, 26 Jun 2005 21:17:18 +0000 (GMT) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4B2FD43D1D for ; Sun, 26 Jun 2005 21:17:18 +0000 (GMT) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j5QLHIJs000444 for ; Sun, 26 Jun 2005 21:17:18 GMT (envelope-from peter@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j5QLHHLi000441 for perforce@freebsd.org; Sun, 26 Jun 2005 21:17:18 GMT (envelope-from peter@freebsd.org) Date: Sun, 26 Jun 2005 21:17:18 GMT Message-Id: <200506262117.j5QLHHLi000441@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm To: Perforce Change Reviews Cc: Subject: PERFORCE change 79016 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jun 2005 21:17:19 -0000 http://perforce.freebsd.org/chv.cgi?CH=79016 Change 79016 by peter@peter_daintree on 2005/06/26 21:16:20 Checkpoint in case I lose it. Build dump_avail[] array alongside phys_avail[], so that we have an accurate complete list of things to dump, without the hacking that goes on in vm_page.c and later in machdep.c Affected files ... .. //depot/projects/hammer/sys/i386/i386/machdep.c#53 edit Differences ... ==== //depot/projects/hammer/sys/i386/i386/machdep.c#53 (text+ko) ==== @@ -185,10 +185,12 @@ long realmem = 0; vm_paddr_t phys_avail[10]; +vm_paddr_t dump_avail[10]; vm_paddr_t kernphys[2]; /* must be 2 less so 0 0 can signal end of chunks */ -#define PHYS_AVAIL_ARRAY_END ((sizeof(phys_avail) / sizeof(vm_offset_t)) - 2) +#define PHYS_AVAIL_ARRAY_END ((sizeof(phys_avail) / sizeof(phys_avail[0])) - 2) +#define DUMP_AVAIL_ARRAY_END ((sizeof(dump_avail) / sizeof(dump_avail[0])) - 2) struct kva_md_info kmi; @@ -1612,7 +1614,7 @@ static void getmemsize(int first) { - int i, physmap_idx, pa_indx; + int i, physmap_idx, pa_indx, da_indx; int hasbrokenint12; u_long physmem_tunable; u_int extmem; @@ -1897,14 +1899,15 @@ if (physmap[i + 1] < end) end = trunc_page(physmap[i + 1]); for (pa = round_page(physmap[i]); pa < end; pa += PAGE_SIZE) { - int tmp, page_bad; + int tmp, page_bad, full; int *ptr = (int *)CADDR1; + full = FALSE; /* * block out kernel memory as not available. */ if (pa >= kernphys[0] && pa < kernphys[1]) - continue; + goto do_dump_avail; /* * block out dcons buffer @@ -1912,7 +1915,7 @@ if (dcons_addr > 0 && pa >= trunc_page(dcons_addr) && pa < dcons_addr + dcons_size) - continue; + goto do_dump_avail; page_bad = FALSE; @@ -1981,12 +1984,28 @@ printf( "Too many holes in the physical address space, giving up\n"); pa_indx--; - break; + full = TRUE; + goto do_dump_avail; } phys_avail[pa_indx++] = pa; /* start */ phys_avail[pa_indx] = pa + PAGE_SIZE; /* end */ } physmem++; +do_dump_avail: + if (dump_avail[da_indx] == pa) { + dump_avail[da_indx] += PAGE_SIZE; + } else { + da_indx++; + if (da_indx == DUMP_AVAIL_ARRAY_END) { + da_indx--; + goto do_next; + } + dump_avail[da_indx++] = pa; /* start */ + dump_avail[da_indx] = pa + PAGE_SIZE; /* end */ + } +do_next; + if (full) + break; } } *pte = 0;