From owner-p4-projects@FreeBSD.ORG Fri May 25 19:58:02 2007 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 364C516A488; Fri, 25 May 2007 19:58:02 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DAE0D16A484 for ; Fri, 25 May 2007 19:58:01 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id CD63C13C48C for ; Fri, 25 May 2007 19:58:01 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l4PJw1hx021634 for ; Fri, 25 May 2007 19:58:01 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l4PJw107021625 for perforce@freebsd.org; Fri, 25 May 2007 19:58:01 GMT (envelope-from hselasky@FreeBSD.org) Date: Fri, 25 May 2007 19:58:01 GMT Message-Id: <200705251958.l4PJw107021625@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 120398 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: Fri, 25 May 2007 19:58:02 -0000 http://perforce.freebsd.org/chv.cgi?CH=120398 Change 120398 by hselasky@hselasky_mini_itx on 2007/05/25 19:57:40 Fix a showstopper or panic source in vm_contig.c. Affected files ... .. //depot/projects/usb/src/sys/vm/vm_contig.c#6 edit Differences ... ==== //depot/projects/usb/src/sys/vm/vm_contig.c#6 (text+ko) ==== @@ -400,7 +400,10 @@ static vm_pindex_t np = 0; static vm_pindex_t start = 0; vm_pindex_t startl = 0; - int i, pass, pqtype; + vm_pindex_t temp; + int i, pqtype; + uint8_t pass; + uint8_t j; size = npages << PAGE_SHIFT; if (size == 0) @@ -485,7 +488,18 @@ pqtype != PQ_CACHE) { if (m->queue == PQ_ACTIVE || m->queue == PQ_INACTIVE) { - if (vm_contig_launder_page(m) != 0) + /* NOTE: The function + * "vm_config_launder_page()" + * can sleep. To ensure that + * this function operates + * coherently we need to + * suspend/resume the "start" + * variable: + */ + temp = start; + j = vm_contig_launder_page(m) ? 1 : 0; + start = temp; + if (j) goto cleanup_freed; pqtype = m->queue - m->pc; if (pqtype != PQ_FREE && @@ -520,7 +534,7 @@ goto retry_page; } /* - * We've found a contiguous chunk that meets are requirements. + * We've found a contiguous chunk that meets our requirements. */ np = npages; startl = start;