From owner-p4-projects Fri Nov 29 20: 4:54 2002 Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DE2B337B404; Fri, 29 Nov 2002 20:04:51 -0800 (PST) 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 8DFAF37B401 for ; Fri, 29 Nov 2002 20:04:51 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 44FC643EB2 for ; Fri, 29 Nov 2002 20:04:51 -0800 (PST) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id gAU40xmV013327 for ; Fri, 29 Nov 2002 20:00:59 -0800 (PST) (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id gAU40wMR013324 for perforce@freebsd.org; Fri, 29 Nov 2002 20:00:58 -0800 (PST) Date: Fri, 29 Nov 2002 20:00:58 -0800 (PST) Message-Id: <200211300400.gAU40wMR013324@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar Subject: PERFORCE change 21688 for review To: Perforce Change Reviews Sender: owner-p4-projects@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG http://perforce.freebsd.org/chv.cgi?CH=21688 Change 21688 by marcel@marcel_nfs on 2002/11/29 20:00:13 Make the handling of sparse physical memory conditional. At this time it causes instability in form of failing processes and kernel panics triggered by passing (region 7) virtual addresses to vm_page_from_phys or addresses that are not covered by phys_avail. This clearly needs more thought and testing... Affected files ... .. //depot/projects/ia64/sys/vm/vm_page.c#27 edit .. //depot/projects/ia64/sys/vm/vm_page.h#19 edit Differences ... ==== //depot/projects/ia64/sys/vm/vm_page.c#27 (text+ko) ==== @@ -150,6 +150,7 @@ panic("vm_set_page_size: page size not a power of two"); } +#ifdef SPARSE_PHYSICAL_MEMORY /* * vm_page_from_phys * @@ -170,6 +171,7 @@ panic("vm_page_from_phys: unmanaged physical address."); return (0); } +#endif /* * vm_page_startup: @@ -254,12 +256,16 @@ * page). */ first_page = phys_avail[0] / PAGE_SIZE; +#ifdef SPARSE_PHYSICAL_MEMORY /* * Don't use the pysical address range for the actual page range. * On architectures with sparse memory addressing this is wrong. * Instead, use the total memory obtained above. */ page_range = total / PAGE_SIZE; +#else + page_range = phys_avail[(nblocks-1) * 2 + 1] / PAGE_SIZE - first_page; +#endif npages = (total - (page_range * sizeof(struct vm_page)) - (end - new_end)) / PAGE_SIZE; end = new_end; ==== //depot/projects/ia64/sys/vm/vm_page.h#19 (text+ko) ==== @@ -293,7 +293,11 @@ #define VM_PAGE_TO_PHYS(entry) ((entry)->phys_addr) -#define PHYS_TO_VM_PAGE(pa) vm_page_from_phys(pa) +#ifdef SPARSE_PHYSICAL_MEMORY +#define PHYS_TO_VM_PAGE(pa) vm_page_from_phys(pa) +#else +#define PHYS_TO_VM_PAGE(pa) (&vm_page_array[atop(pa) - first_page ]) +#endif extern struct mtx vm_page_queue_mtx; #define vm_page_lock_queues() mtx_lock(&vm_page_queue_mtx) To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message