From owner-svn-src-user@FreeBSD.ORG Sun Jun 28 02:23:52 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 174D31065670; Sun, 28 Jun 2009 02:23:52 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B21888FC12; Sun, 28 Jun 2009 02:23:51 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5S2Npcn094795; Sun, 28 Jun 2009 02:23:51 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5S2NpSB094793; Sun, 28 Jun 2009 02:23:51 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200906280223.n5S2NpSB094793@svn.freebsd.org> From: Kip Macy Date: Sun, 28 Jun 2009 02:23:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195130 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jun 2009 02:23:52 -0000 Author: kmacy Date: Sun Jun 28 02:23:51 2009 New Revision: 195130 URL: http://svn.freebsd.org/changeset/base/195130 Log: make tryrelock_calls 64-bit to avoid wrapping Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Sat Jun 27 23:28:56 2009 (r195129) +++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Sun Jun 28 02:23:51 2009 (r195130) @@ -204,8 +204,8 @@ static int pg_ps_enabled; SYSCTL_INT(_vm_pmap, OID_AUTO, pg_ps_enabled, CTLFLAG_RD, &pg_ps_enabled, 0, "Are large page mappings enabled?"); -static int pmap_tryrelock_calls; -SYSCTL_INT(_vm_pmap, OID_AUTO, tryrelock_calls, CTLFLAG_RD, +static uint64_t pmap_tryrelock_calls; +SYSCTL_QUAD(_vm_pmap, OID_AUTO, tryrelock_calls, CTLFLAG_RD, &pmap_tryrelock_calls, 0, "Number of tryrelock calls"); static int pmap_tryrelock_restart; @@ -451,7 +451,7 @@ pa_tryrelock(pmap_t pmap, vm_paddr_t pa, vm_paddr_t lockpa; PMAP_LOCK_ASSERT(pmap, MA_OWNED); - atomic_add_int((volatile int *)&pmap_tryrelock_calls, 1); + atomic_add_long((volatile long *)&pmap_tryrelock_calls, 1); lockpa = *locked; *locked = pa; if (lockpa) { From owner-svn-src-user@FreeBSD.ORG Sun Jun 28 16:34:34 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 121A2106566C; Sun, 28 Jun 2009 16:34:34 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 00AD58FC17; Sun, 28 Jun 2009 16:34:34 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5SGYXLt016241; Sun, 28 Jun 2009 16:34:33 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5SGYXOq016239; Sun, 28 Jun 2009 16:34:33 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200906281634.n5SGYXOq016239@svn.freebsd.org> From: Kip Macy Date: Sun, 28 Jun 2009 16:34:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195138 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jun 2009 16:34:34 -0000 Author: kmacy Date: Sun Jun 28 16:34:33 2009 New Revision: 195138 URL: http://svn.freebsd.org/changeset/base/195138 Log: - add page lock to protect md pv list in pmap_pv_promote_pde - add pv_lock to protect stats in pmap_remove_pages Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Sun Jun 28 15:38:50 2009 (r195137) +++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Sun Jun 28 16:34:33 2009 (r195138) @@ -2227,7 +2227,9 @@ pmap_pv_promote_pde(pmap_t pmap, vm_offs do { m++; va += PAGE_SIZE; + vm_page_lock(m); pmap_pvh_free(&m->md, pmap, va, free); + vm_page_unlock(m); } while (va < va_last); } @@ -3984,9 +3986,11 @@ restart: } /* Mark free */ + mtx_lock(&pv_lock); PV_STAT(pv_entry_frees++); PV_STAT(pv_entry_spare++); pv_entry_count--; + mtx_unlock(&pv_lock); pc->pc_map[field] |= bitmask; if ((tpte & PG_PS) != 0) { pmap->pm_stats.resident_count -= NBPDR / PAGE_SIZE; From owner-svn-src-user@FreeBSD.ORG Sun Jun 28 17:24:27 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9CE311065672; Sun, 28 Jun 2009 17:24:27 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7124C8FC14; Sun, 28 Jun 2009 17:24:27 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5SHORZC017524; Sun, 28 Jun 2009 17:24:27 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5SHORYr017522; Sun, 28 Jun 2009 17:24:27 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200906281724.n5SHORYr017522@svn.freebsd.org> From: Kip Macy Date: Sun, 28 Jun 2009 17:24:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195145 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jun 2009 17:24:27 -0000 Author: kmacy Date: Sun Jun 28 17:24:27 2009 New Revision: 195145 URL: http://svn.freebsd.org/changeset/base/195145 Log: change pmap_pvh_free to take a vm_page so that it can assert that the page lock is held Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Sun Jun 28 17:22:07 2009 (r195144) +++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Sun Jun 28 17:24:27 2009 (r195145) @@ -245,7 +245,7 @@ static void pmap_pv_demote_pde(pmap_t pm static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa, vm_page_t *free); -static void pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va, +static void pmap_pvh_free(vm_page_t m, pmap_t pmap, vm_offset_t va, vm_page_t *free); static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap, vm_offset_t va); @@ -2228,7 +2228,7 @@ pmap_pv_promote_pde(pmap_t pmap, vm_offs m++; va += PAGE_SIZE; vm_page_lock(m); - pmap_pvh_free(&m->md, pmap, va, free); + pmap_pvh_free(m, pmap, va, free); vm_page_unlock(m); } while (va < va_last); } @@ -2239,10 +2239,13 @@ pmap_pv_promote_pde(pmap_t pmap, vm_offs * page mappings. */ static void -pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va, vm_page_t *free) +pmap_pvh_free(vm_page_t m, pmap_t pmap, vm_offset_t va, vm_page_t *free) { pv_entry_t pv; + struct md_page *pvh; + vm_page_lock_assert(m, MA_OWNED); + pvh = &m->md; pv = pmap_pvh_remove(pvh, pmap, va); KASSERT(pv != NULL, ("pmap_pvh_free: pv not found")); free_pv_entry(pmap, pv, free); @@ -2253,8 +2256,7 @@ pmap_remove_entry(pmap_t pmap, vm_page_t { struct md_page *pvh; - vm_page_lock_assert(m, MA_OWNED); - pmap_pvh_free(&m->md, pmap, va, free); + pmap_pvh_free(m, pmap, va, free); if (TAILQ_EMPTY(&m->md.pv_list)) { pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); if (TAILQ_EMPTY(&pvh->pv_list)) @@ -2430,7 +2432,8 @@ pmap_remove_pde(pmap_t pmap, pd_entry_t if (oldpde & PG_MANAGED) { PA_LOCK_ASSERT(oldpde & PG_PS_FRAME, MA_OWNED); pvh = pa_to_pvh(oldpde & PG_PS_FRAME); - pmap_pvh_free(pvh, pmap, sva, free); + pmap_pvh_free(PHYS_TO_VM_PAGE(oldpde & PG_PS_FRAME), + pmap, sva, free); eva = sva + NBPDR; for (va = sva, m = PHYS_TO_VM_PAGE(oldpde & PG_PS_FRAME); va < eva; va += PAGE_SIZE, m++) { From owner-svn-src-user@FreeBSD.ORG Tue Jun 30 22:31:51 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 378761065672; Tue, 30 Jun 2009 22:31:51 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 266198FC1D; Tue, 30 Jun 2009 22:31:51 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5UMVpAF093995; Tue, 30 Jun 2009 22:31:51 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5UMVpLd093993; Tue, 30 Jun 2009 22:31:51 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200906302231.n5UMVpLd093993@svn.freebsd.org> From: Kip Macy Date: Tue, 30 Jun 2009 22:31:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195215 - user/kmacy/head_ppacket/sys/net X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2009 22:31:51 -0000 Author: kmacy Date: Tue Jun 30 22:31:50 2009 New Revision: 195215 URL: http://svn.freebsd.org/changeset/base/195215 Log: set ret_nrt if we're not returning an error Modified: user/kmacy/head_ppacket/sys/net/route.c Modified: user/kmacy/head_ppacket/sys/net/route.c ============================================================================== --- user/kmacy/head_ppacket/sys/net/route.c Tue Jun 30 22:26:26 2009 (r195214) +++ user/kmacy/head_ppacket/sys/net/route.c Tue Jun 30 22:31:50 2009 (r195215) @@ -987,6 +987,8 @@ rn_mpath_update(int req, struct rt_addri (rt->rt_gateway->sa_len != gateway->sa_len || memcmp(rt->rt_gateway, gateway, gateway->sa_len))) error = ESRCH; + else + ret_nrt = rt; goto done; } /* From owner-svn-src-user@FreeBSD.ORG Tue Jun 30 22:48:29 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 31FF01065670; Tue, 30 Jun 2009 22:48:29 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 20CAF8FC0A; Tue, 30 Jun 2009 22:48:29 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5UMmT0r094428; Tue, 30 Jun 2009 22:48:29 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5UMmTPQ094426; Tue, 30 Jun 2009 22:48:29 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200906302248.n5UMmTPQ094426@svn.freebsd.org> From: Kip Macy Date: Tue, 30 Jun 2009 22:48:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195216 - user/kmacy/head_ppacket/sys/net X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2009 22:48:29 -0000 Author: kmacy Date: Tue Jun 30 22:48:28 2009 New Revision: 195216 URL: http://svn.freebsd.org/changeset/base/195216 Log: fix type and add reference to route being returned Modified: user/kmacy/head_ppacket/sys/net/route.c Modified: user/kmacy/head_ppacket/sys/net/route.c ============================================================================== --- user/kmacy/head_ppacket/sys/net/route.c Tue Jun 30 22:31:50 2009 (r195215) +++ user/kmacy/head_ppacket/sys/net/route.c Tue Jun 30 22:48:28 2009 (r195216) @@ -987,9 +987,12 @@ rn_mpath_update(int req, struct rt_addri (rt->rt_gateway->sa_len != gateway->sa_len || memcmp(rt->rt_gateway, gateway, gateway->sa_len))) error = ESRCH; - else - ret_nrt = rt; - goto done; + else { + *ret_nrt = rt; + RT_ADDREF(rt); + goto done; + } + } /* * use the normal delete code to remove From owner-svn-src-user@FreeBSD.ORG Tue Jun 30 22:59:38 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 89A7C10656F1; Tue, 30 Jun 2009 22:59:38 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7847C8FC26; Tue, 30 Jun 2009 22:59:38 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5UMxcOX094650; Tue, 30 Jun 2009 22:59:38 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5UMxclZ094648; Tue, 30 Jun 2009 22:59:38 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200906302259.n5UMxclZ094648@svn.freebsd.org> From: Kip Macy Date: Tue, 30 Jun 2009 22:59:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195217 - user/kmacy/head_ppacket/sys/net X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2009 22:59:38 -0000 Author: kmacy Date: Tue Jun 30 22:59:38 2009 New Revision: 195217 URL: http://svn.freebsd.org/changeset/base/195217 Log: acquire lock to bump refcnt on route Modified: user/kmacy/head_ppacket/sys/net/route.c Modified: user/kmacy/head_ppacket/sys/net/route.c ============================================================================== --- user/kmacy/head_ppacket/sys/net/route.c Tue Jun 30 22:48:28 2009 (r195216) +++ user/kmacy/head_ppacket/sys/net/route.c Tue Jun 30 22:59:38 2009 (r195217) @@ -988,8 +988,10 @@ rn_mpath_update(int req, struct rt_addri memcmp(rt->rt_gateway, gateway, gateway->sa_len))) error = ESRCH; else { + RT_LOCK(rt); *ret_nrt = rt; RT_ADDREF(rt); + RT_UNLOCK(rt); goto done; } From owner-svn-src-user@FreeBSD.ORG Wed Jul 1 00:07:56 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7B76A1065670; Wed, 1 Jul 2009 00:07:56 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6A6188FC08; Wed, 1 Jul 2009 00:07:56 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6107uTc095884; Wed, 1 Jul 2009 00:07:56 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6107u40095882; Wed, 1 Jul 2009 00:07:56 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907010007.n6107u40095882@svn.freebsd.org> From: Kip Macy Date: Wed, 1 Jul 2009 00:07:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195218 - user/kmacy/head_ppacket/sys/net X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2009 00:07:56 -0000 Author: kmacy Date: Wed Jul 1 00:07:55 2009 New Revision: 195218 URL: http://svn.freebsd.org/changeset/base/195218 Log: skip to delete Modified: user/kmacy/head_ppacket/sys/net/route.c Modified: user/kmacy/head_ppacket/sys/net/route.c ============================================================================== --- user/kmacy/head_ppacket/sys/net/route.c Tue Jun 30 22:59:38 2009 (r195217) +++ user/kmacy/head_ppacket/sys/net/route.c Wed Jul 1 00:07:55 2009 (r195218) @@ -988,11 +988,9 @@ rn_mpath_update(int req, struct rt_addri memcmp(rt->rt_gateway, gateway, gateway->sa_len))) error = ESRCH; else { - RT_LOCK(rt); - *ret_nrt = rt; - RT_ADDREF(rt); - RT_UNLOCK(rt); - goto done; + rn = rnh->rnh_deladdr(dst, netmask, rnh); + KASSERT(rn != NULL, ("radix node disappeared")); + goto gwdelete; } } @@ -1006,12 +1004,12 @@ rn_mpath_update(int req, struct rt_addri error = ENOENT; goto done; } - /* * if the entry is 2nd and on up */ if ((req == RTM_DELETE) && !rt_mpath_deldup(rto, rt)) panic ("rtrequest1: rt_mpath_deldup"); +gwdelete: RT_LOCK(rt); RT_ADDREF(rt); if (req == RTM_DELETE) { From owner-svn-src-user@FreeBSD.ORG Wed Jul 1 01:22:29 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3CAF3106564A; Wed, 1 Jul 2009 01:22:29 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1964F8FC12; Wed, 1 Jul 2009 01:22:29 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n611MSUC097371; Wed, 1 Jul 2009 01:22:28 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n611MS8w097369; Wed, 1 Jul 2009 01:22:28 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907010122.n611MS8w097369@svn.freebsd.org> From: Kip Macy Date: Wed, 1 Jul 2009 01:22:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195219 - user/kmacy/head_ppacket/sys/net X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2009 01:22:29 -0000 Author: kmacy Date: Wed Jul 1 01:22:28 2009 New Revision: 195219 URL: http://svn.freebsd.org/changeset/base/195219 Log: add ppacket to the flags mask Modified: user/kmacy/head_ppacket/sys/net/route.h Modified: user/kmacy/head_ppacket/sys/net/route.h ============================================================================== --- user/kmacy/head_ppacket/sys/net/route.h Wed Jul 1 00:07:55 2009 (r195218) +++ user/kmacy/head_ppacket/sys/net/route.h Wed Jul 1 01:22:28 2009 (r195219) @@ -205,7 +205,7 @@ struct ortentry { /* Mask of RTF flags that are allowed to be modified by RTM_CHANGE. */ #define RTF_FMASK \ (RTF_PROTO1 | RTF_PROTO2 | RTF_PROTO3 | RTF_BLACKHOLE | \ - RTF_REJECT | RTF_STATIC | RTF_STICKY) + RTF_REJECT | RTF_STATIC | RTF_STICKY | RTF_PPACKET) /* * Routing statistics. From owner-svn-src-user@FreeBSD.ORG Wed Jul 1 19:46:54 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4D50D106566C; Wed, 1 Jul 2009 19:46:54 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3C1768FC15; Wed, 1 Jul 2009 19:46:54 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n61Jks4A022061; Wed, 1 Jul 2009 19:46:54 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n61JkswS022059; Wed, 1 Jul 2009 19:46:54 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907011946.n61JkswS022059@svn.freebsd.org> From: Kip Macy Date: Wed, 1 Jul 2009 19:46:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195253 - user/kmacy/head_ppacket/sys/net X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2009 19:46:54 -0000 Author: kmacy Date: Wed Jul 1 19:46:53 2009 New Revision: 195253 URL: http://svn.freebsd.org/changeset/base/195253 Log: add comment, firm up assert Modified: user/kmacy/head_ppacket/sys/net/route.c Modified: user/kmacy/head_ppacket/sys/net/route.c ============================================================================== --- user/kmacy/head_ppacket/sys/net/route.c Wed Jul 1 18:54:49 2009 (r195252) +++ user/kmacy/head_ppacket/sys/net/route.c Wed Jul 1 19:46:53 2009 (r195253) @@ -988,8 +988,12 @@ rn_mpath_update(int req, struct rt_addri memcmp(rt->rt_gateway, gateway, gateway->sa_len))) error = ESRCH; else { + /* + * remove from tree before returning it + * to the caller + */ rn = rnh->rnh_deladdr(dst, netmask, rnh); - KASSERT(rn != NULL, ("radix node disappeared")); + KASSERT(rt == RNTORT(rn), ("radix node disappeared")); goto gwdelete; } From owner-svn-src-user@FreeBSD.ORG Wed Jul 1 19:55:07 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AABC41065675; Wed, 1 Jul 2009 19:55:07 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 989D08FC12; Wed, 1 Jul 2009 19:55:07 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n61Jt7pi022270; Wed, 1 Jul 2009 19:55:07 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n61Jt7MP022265; Wed, 1 Jul 2009 19:55:07 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907011955.n61Jt7MP022265@svn.freebsd.org> From: Kip Macy Date: Wed, 1 Jul 2009 19:55:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195254 - user/kmacy/head_ppacket/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2009 19:55:08 -0000 Author: kmacy Date: Wed Jul 1 19:55:07 2009 New Revision: 195254 URL: http://svn.freebsd.org/changeset/base/195254 Log: Cache rtentry and llentry in the inpcb Modified: user/kmacy/head_ppacket/sys/netinet/in_pcb.c user/kmacy/head_ppacket/sys/netinet/in_pcb.h user/kmacy/head_ppacket/sys/netinet/ip_output.c user/kmacy/head_ppacket/sys/netinet/tcp_usrreq.c Modified: user/kmacy/head_ppacket/sys/netinet/in_pcb.c ============================================================================== --- user/kmacy/head_ppacket/sys/netinet/in_pcb.c Wed Jul 1 19:46:53 2009 (r195253) +++ user/kmacy/head_ppacket/sys/netinet/in_pcb.c Wed Jul 1 19:55:07 2009 (r195254) @@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -494,6 +495,76 @@ in_pcbbind_setup(struct inpcb *inp, stru return (0); } +void +in_pcbrtalloc(struct inpcb *inp, in_addr_t faddr, struct route *sro) +{ + struct sockaddr_in *sin; + struct sockaddr *dst; + struct llentry *la; + struct rtentry *rt; + struct ifnet *ifp; + int flags = LLE_EXCLUSIVE; + struct route iproute; + + INP_WLOCK_ASSERT(inp); + if (sro == NULL) + sro = &iproute; + + bzero(sro, sizeof(*sro)); + sin = (struct sockaddr_in *)&sro->ro_dst; + sin->sin_family = AF_INET; + sin->sin_len = sizeof(struct sockaddr_in); + sin->sin_addr.s_addr = faddr; + /* + * If route is known our src addr is taken from the i/f, + * else punt. + * + * Find out route to destination. + */ + if ((inp->inp_socket->so_options & SO_DONTROUTE) == 0) { +#ifdef RADIX_MPATH + rtalloc_mpath_fib(sro, ntohl(faddr->s_addr), + inp->inp_inc.inc_fibnum); +#else + in_rtalloc_ign(sro, 0, inp->inp_inc.inc_fibnum); +#endif + } + + rt = sro->ro_rt; + if (rt == NULL) + return; + + inp->inp_rt = rt; + inp->inp_flags2 |= INP_RT_VALID; + + if (rt->rt_ifp == NULL) + return; + + ifp = rt->rt_ifp; + dst = &sro->ro_dst; + if (rt->rt_flags & RTF_GATEWAY) + dst = rt->rt_gateway; + + IF_AFDATA_RLOCK(ifp); + la = lla_lookup(LLTABLE(ifp), flags, dst); + IF_AFDATA_RUNLOCK(ifp); + if ((la == NULL) && + (ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0) { + flags |= (LLE_CREATE | LLE_EXCLUSIVE); + IF_AFDATA_WLOCK(ifp); + la = lla_lookup(LLTABLE(ifp), flags, dst); + IF_AFDATA_WUNLOCK(ifp); + } + if (la == NULL) + return; + + LLE_ADDREF(la); + LLE_WUNLOCK(la); + + inp->inp_lle = la; + inp->inp_flags2 |= INP_LLE_VALID; +} + /* * Connect from a socket to a specified address. * Both address and port must be specified in argument sin. @@ -529,6 +600,7 @@ in_pcbconnect(struct inpcb *inp, struct } } + in_pcbrtalloc(inp, faddr, NULL); /* Commit the remaining changes. */ inp->inp_lport = lport; inp->inp_laddr.s_addr = laddr; @@ -888,6 +960,17 @@ in_pcbdisconnect(struct inpcb *inp) INP_INFO_WLOCK_ASSERT(inp->inp_pcbinfo); INP_WLOCK_ASSERT(inp); + if (inp->inp_flags2 & INP_RT_VALID) { + inp->inp_flags2 &= ~INP_RT_VALID; + RTFREE(inp->inp_rt); + inp->inp_rt = NULL; + } + if (inp->inp_flags2 & INP_LLE_VALID) { + inp->inp_flags2 &= ~INP_LLE_VALID; + LLE_FREE(inp->inp_lle); + inp->inp_lle = NULL; + } + inp->inp_faddr.s_addr = INADDR_ANY; inp->inp_fport = 0; in_pcbrehash(inp); @@ -925,6 +1008,17 @@ in_pcbfree_internal(struct inpcb *inp) INP_INFO_WLOCK_ASSERT(ipi); INP_WLOCK_ASSERT(inp); + if (inp->inp_flags2 & INP_RT_VALID) { + inp->inp_flags2 &= ~INP_RT_VALID; + RTFREE(inp->inp_rt); + inp->inp_rt = NULL; + } + if (inp->inp_flags2 & INP_LLE_VALID) { + inp->inp_flags2 &= ~INP_LLE_VALID; + LLE_FREE(inp->inp_lle); + inp->inp_lle = NULL; + } + #ifdef IPSEC if (inp->inp_sp != NULL) ipsec_delete_pcbpolicy(inp); Modified: user/kmacy/head_ppacket/sys/netinet/in_pcb.h ============================================================================== --- user/kmacy/head_ppacket/sys/netinet/in_pcb.h Wed Jul 1 19:46:53 2009 (r195253) +++ user/kmacy/head_ppacket/sys/netinet/in_pcb.h Wed Jul 1 19:55:07 2009 (r195254) @@ -46,6 +46,7 @@ #define in6pcb inpcb /* for KAME src sync over BSD*'s */ #define in6p_sp inp_sp /* for KAME src sync over BSD*'s */ struct inpcbpolicy; +struct route; /* * struct inpcb is the common protocol control block structure used in most @@ -481,6 +482,7 @@ void in_pcbdisconnect(struct inpcb *); void in_pcbdrop(struct inpcb *); void in_pcbfree(struct inpcb *); int in_pcbinshash(struct inpcb *); +void in_pcbrtalloc(struct inpcb *inp, in_addr_t faddr, struct route *sro); struct inpcb * in_pcblookup_local(struct inpcbinfo *, struct in_addr, u_short, int, struct ucred *); Modified: user/kmacy/head_ppacket/sys/netinet/ip_output.c ============================================================================== --- user/kmacy/head_ppacket/sys/netinet/ip_output.c Wed Jul 1 19:46:53 2009 (r195253) +++ user/kmacy/head_ppacket/sys/netinet/ip_output.c Wed Jul 1 19:55:07 2009 (r195254) @@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -129,11 +130,13 @@ ip_output(struct mbuf *m, struct mbuf *o int mtu; int len, error = 0; int nortfree = 0; + int neednewroute = 0, neednewlle = 0; struct sockaddr_in *dst = NULL; /* keep compiler happy */ struct in_ifaddr *ia = NULL; int isbroadcast, sw_csum; struct route iproute; struct in_addr odst; + struct sockaddr_in *sin; #ifdef IPFIREWALL_FORWARD struct m_tag *fwd_tag = NULL; #endif @@ -207,7 +210,7 @@ again: if (ro->ro_rt && ((ro->ro_rt->rt_flags & RTF_UP) == 0 || dst->sin_family != AF_INET || dst->sin_addr.s_addr != ip->ip_dst.s_addr)) { - if (!nortfree) + if (!nortfree && (inp == NULL || (ro->ro_rt != inp->inp_rt))) RTFREE(ro->ro_rt); ro->ro_rt = (struct rtentry *)NULL; } @@ -422,6 +425,22 @@ again: if (ia != NULL) { ip->ip_src = IA_SIN(ia)->sin_addr; } + if ((ro == &iproute) && (inp->inp_flags2 & INP_RT_VALID)) { + if (inp->inp_rt->rt_flags & RTF_UP) { + sin = (struct sockaddr_in *)&ro->ro_dst; + sin->sin_family = AF_INET; + sin->sin_len = sizeof(struct sockaddr_in); + sin->sin_addr.s_addr = inp->inp_faddr.s_addr; + ro->ro_rt = inp->inp_rt; + } else + neednewroute = 1; + } + if ((ro == &iproute) && (inp->inp_flags2 & INP_LLE_VALID)) { + if (inp->inp_lle->la_flags & LLE_VALID) { + ro->ro_lle = inp->inp_lle; + } else + neednewlle = 1; + } } /* @@ -666,7 +685,45 @@ passout: done: if (ro == &iproute && ro->ro_rt && !nortfree) { - RTFREE(ro->ro_rt); + int wlocked = 0; + struct llentry *la; + + if (neednewlle || neednewroute) { + wlocked = INP_WLOCKED(inp); + if (!wlocked && INP_TRY_UPGRADE(inp) == 0) + return (error); + } + + if ((nortfree == 0) && + (inp == NULL || (inp->inp_vflag & INP_RT_VALID) == 0)) + RTFREE(ro->ro_rt); + else if (neednewroute && ro->ro_rt != inp->inp_rt) { + RTFREE(inp->inp_rt); + inp->inp_rt = ro->ro_rt; + } + if (neednewlle) { + IF_AFDATA_RLOCK(ifp); + la = lla_lookup(LLTABLE(ifp), LLE_EXCLUSIVE, + (struct sockaddr *)dst); + IF_AFDATA_RUNLOCK(ifp); + if ((la == NULL) && + (ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0) { + IF_AFDATA_WLOCK(ifp); + la = lla_lookup(LLTABLE(ifp), + (LLE_CREATE | LLE_EXCLUSIVE), + (struct sockaddr *)dst); + IF_AFDATA_WUNLOCK(ifp); + } + if (la != NULL && (inp->inp_lle != la)) { + LLE_FREE(inp->inp_lle); + LLE_ADDREF(la); + LLE_WUNLOCK(la); + inp->inp_lle = la; + } else if (la != NULL) + LLE_WUNLOCK(la); + } + if ((neednewlle || neednewroute) && !wlocked) + INP_DOWNGRADE(inp); } if (ia != NULL) ifa_free(&ia->ia_ifa); Modified: user/kmacy/head_ppacket/sys/netinet/tcp_usrreq.c ============================================================================== --- user/kmacy/head_ppacket/sys/netinet/tcp_usrreq.c Wed Jul 1 19:46:53 2009 (r195253) +++ user/kmacy/head_ppacket/sys/netinet/tcp_usrreq.c Wed Jul 1 19:55:07 2009 (r195254) @@ -1109,6 +1109,7 @@ tcp_connect(struct tcpcb *tp, struct soc inp->inp_laddr = laddr; in_pcbrehash(inp); + in_pcbrtalloc(inp, inp->inp_faddr.s_addr, NULL); /* * Compute window scaling to request: * Scale to fit into sweet spot. See tcp_syncache.c. From owner-svn-src-user@FreeBSD.ORG Wed Jul 1 20:42:18 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 866F41065670; Wed, 1 Jul 2009 20:42:18 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 755628FC12; Wed, 1 Jul 2009 20:42:18 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n61KgIWl023391; Wed, 1 Jul 2009 20:42:18 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n61KgIQY023389; Wed, 1 Jul 2009 20:42:18 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907012042.n61KgIQY023389@svn.freebsd.org> From: Kip Macy Date: Wed, 1 Jul 2009 20:42:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195258 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2009 20:42:18 -0000 Author: kmacy Date: Wed Jul 1 20:42:17 2009 New Revision: 195258 URL: http://svn.freebsd.org/changeset/base/195258 Log: drop pv lock while calling pmap_collect Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Wed Jul 1 20:16:29 2009 (r195257) +++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Wed Jul 1 20:42:17 2009 (r195258) @@ -2095,8 +2095,8 @@ retry: VM_ALLOC_SYSTEM : VM_ALLOC_NORMAL) | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED); if (m == NULL) { + pv_entry_count--; if (try) { - pv_entry_count--; PV_STAT(pc_chunk_tryfail++); mtx_unlock(&pv_lock); return (NULL); @@ -2114,7 +2114,10 @@ retry: pq = &vm_page_queues[PQ_ACTIVE]; } else panic("get_pv_entry: increase vm.pmap.shpgperproc"); + mtx_unlock(&pv_lock); pmap_collect(pmap, pq); + mtx_lock(&pv_lock); + pv_entry_count++; goto retry; } PV_STAT(pc_chunk_count++); From owner-svn-src-user@FreeBSD.ORG Wed Jul 1 22:18:05 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3C8ED1065672; Wed, 1 Jul 2009 22:18:05 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 200CE8FC0A; Wed, 1 Jul 2009 22:18:05 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n61MI52T025520; Wed, 1 Jul 2009 22:18:05 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n61MI5aX025518; Wed, 1 Jul 2009 22:18:05 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907012218.n61MI5aX025518@svn.freebsd.org> From: Kip Macy Date: Wed, 1 Jul 2009 22:18:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195262 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2009 22:18:05 -0000 Author: kmacy Date: Wed Jul 1 22:18:04 2009 New Revision: 195262 URL: http://svn.freebsd.org/changeset/base/195262 Log: undo recent ill-conceived changes - need to use pv table for super pages Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Wed Jul 1 22:15:04 2009 (r195261) +++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Wed Jul 1 22:18:04 2009 (r195262) @@ -245,7 +245,7 @@ static void pmap_pv_demote_pde(pmap_t pm static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa, vm_page_t *free); -static void pmap_pvh_free(vm_page_t m, pmap_t pmap, vm_offset_t va, +static void pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va, vm_page_t *free); static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap, vm_offset_t va); @@ -2058,6 +2058,7 @@ get_pv_entry(pmap_t pmap, int try) vm_page_t m; PMAP_LOCK_ASSERT(pmap, MA_OWNED); +retry: mtx_lock(&pv_lock); PV_STAT(pv_entry_allocs++); pv_entry_count++; @@ -2067,7 +2068,6 @@ get_pv_entry(pmap_t pmap, int try) "increasing either the vm.pmap.shpgperproc or the " "vm.pmap.pv_entry_max sysctl.\n"); pq = NULL; -retry: pc = TAILQ_FIRST(&pmap->pm_pvchunk); if (pc != NULL) { for (field = 0; field < _NPCM; field++) { @@ -2114,10 +2114,9 @@ retry: pq = &vm_page_queues[PQ_ACTIVE]; } else panic("get_pv_entry: increase vm.pmap.shpgperproc"); + PV_STAT(pv_entry_allocs--); mtx_unlock(&pv_lock); pmap_collect(pmap, pq); - mtx_lock(&pv_lock); - pv_entry_count++; goto retry; } PV_STAT(pc_chunk_count++); @@ -2230,9 +2229,7 @@ pmap_pv_promote_pde(pmap_t pmap, vm_offs do { m++; va += PAGE_SIZE; - vm_page_lock(m); - pmap_pvh_free(m, pmap, va, free); - vm_page_unlock(m); + pmap_pvh_free(&m->md, pmap, va, free); } while (va < va_last); } @@ -2242,13 +2239,10 @@ pmap_pv_promote_pde(pmap_t pmap, vm_offs * page mappings. */ static void -pmap_pvh_free(vm_page_t m, pmap_t pmap, vm_offset_t va, vm_page_t *free) +pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va, vm_page_t *free) { pv_entry_t pv; - struct md_page *pvh; - vm_page_lock_assert(m, MA_OWNED); - pvh = &m->md; pv = pmap_pvh_remove(pvh, pmap, va); KASSERT(pv != NULL, ("pmap_pvh_free: pv not found")); free_pv_entry(pmap, pv, free); @@ -2259,7 +2253,7 @@ pmap_remove_entry(pmap_t pmap, vm_page_t { struct md_page *pvh; - pmap_pvh_free(m, pmap, va, free); + pmap_pvh_free(&m->md, pmap, va, free); if (TAILQ_EMPTY(&m->md.pv_list)) { pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); if (TAILQ_EMPTY(&pvh->pv_list)) @@ -2435,8 +2429,7 @@ pmap_remove_pde(pmap_t pmap, pd_entry_t if (oldpde & PG_MANAGED) { PA_LOCK_ASSERT(oldpde & PG_PS_FRAME, MA_OWNED); pvh = pa_to_pvh(oldpde & PG_PS_FRAME); - pmap_pvh_free(PHYS_TO_VM_PAGE(oldpde & PG_PS_FRAME), - pmap, sva, free); + pmap_pvh_free(pvh, pmap, sva, free); eva = sva + NBPDR; for (va = sva, m = PHYS_TO_VM_PAGE(oldpde & PG_PS_FRAME); va < eva; va += PAGE_SIZE, m++) { From owner-svn-src-user@FreeBSD.ORG Wed Jul 1 22:45:19 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5B577106566C; Wed, 1 Jul 2009 22:45:19 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4A3758FC21; Wed, 1 Jul 2009 22:45:19 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n61MjJ0J026147; Wed, 1 Jul 2009 22:45:19 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n61MjJtv026145; Wed, 1 Jul 2009 22:45:19 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907012245.n61MjJtv026145@svn.freebsd.org> From: Kip Macy Date: Wed, 1 Jul 2009 22:45:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195266 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2009 22:45:19 -0000 Author: kmacy Date: Wed Jul 1 22:45:19 2009 New Revision: 195266 URL: http://svn.freebsd.org/changeset/base/195266 Log: pass free pointer to pmap_remove_page Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Wed Jul 1 22:30:36 2009 (r195265) +++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Wed Jul 1 22:45:19 2009 (r195266) @@ -4214,7 +4214,7 @@ pmap_ts_referenced(vm_page_t m) */ va += VM_PAGE_TO_PHYS(m) - (oldpde & PG_PS_FRAME); - pmap_remove_page(pmap, va, pde, NULL); + pmap_remove_page(pmap, va, pde, free); rtval++; if (rtval > 4) { PMAP_UNLOCK(pmap); @@ -4353,7 +4353,7 @@ pmap_clear_reference(vm_page_t m) */ va += VM_PAGE_TO_PHYS(m) - (oldpde & PG_PS_FRAME); - pmap_remove_page(pmap, va, pde, NULL); + pmap_remove_page(pmap, va, pde, free); } } PMAP_UNLOCK(pmap); From owner-svn-src-user@FreeBSD.ORG Wed Jul 1 22:49:24 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9DFB5106564A; Wed, 1 Jul 2009 22:49:24 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8CAE28FC12; Wed, 1 Jul 2009 22:49:24 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n61MnOmH026285; Wed, 1 Jul 2009 22:49:24 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n61MnOdg026283; Wed, 1 Jul 2009 22:49:24 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907012249.n61MnOdg026283@svn.freebsd.org> From: Kip Macy Date: Wed, 1 Jul 2009 22:49:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195268 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2009 22:49:24 -0000 Author: kmacy Date: Wed Jul 1 22:49:24 2009 New Revision: 195268 URL: http://svn.freebsd.org/changeset/base/195268 Log: fix type passed to pmap_remove_page Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Wed Jul 1 22:47:45 2009 (r195267) +++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Wed Jul 1 22:49:24 2009 (r195268) @@ -4214,7 +4214,7 @@ pmap_ts_referenced(vm_page_t m) */ va += VM_PAGE_TO_PHYS(m) - (oldpde & PG_PS_FRAME); - pmap_remove_page(pmap, va, pde, free); + pmap_remove_page(pmap, va, pde, &free); rtval++; if (rtval > 4) { PMAP_UNLOCK(pmap); @@ -4353,7 +4353,7 @@ pmap_clear_reference(vm_page_t m) */ va += VM_PAGE_TO_PHYS(m) - (oldpde & PG_PS_FRAME); - pmap_remove_page(pmap, va, pde, free); + pmap_remove_page(pmap, va, pde, &free); } } PMAP_UNLOCK(pmap); From owner-svn-src-user@FreeBSD.ORG Wed Jul 1 23:58:04 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 65E02106564A; Wed, 1 Jul 2009 23:58:04 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 54BE48FC16; Wed, 1 Jul 2009 23:58:04 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n61Nw4qU027678; Wed, 1 Jul 2009 23:58:04 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n61Nw3Vf027676; Wed, 1 Jul 2009 23:58:04 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907012358.n61Nw3Vf027676@svn.freebsd.org> From: Kip Macy Date: Wed, 1 Jul 2009 23:58:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195271 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jul 2009 23:58:04 -0000 Author: kmacy Date: Wed Jul 1 23:58:03 2009 New Revision: 195271 URL: http://svn.freebsd.org/changeset/base/195271 Log: assert that page is managed Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Wed Jul 1 23:14:21 2009 (r195270) +++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Wed Jul 1 23:58:03 2009 (r195271) @@ -2490,10 +2490,14 @@ pmap_remove_pte(pmap_t pmap, pt_entry_t ret = PMAP_REMOVE_LAST; if (oldpte & PG_MANAGED) { m = PHYS_TO_VM_PAGE(oldpte & PG_FRAME); + KASSERT((m->flags & PG_UNMANAGED) == 0, + ("page not managed")); if (vm_page_trylock(m) == 0) { PMAP_UNLOCK(pmap); vm_page_lock(m); PMAP_LOCK(pmap); + KASSERT((m->flags & PG_UNMANAGED) == 0, + ("page not managed")); } if ((oldpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) vm_page_dirty(m); From owner-svn-src-user@FreeBSD.ORG Thu Jul 2 00:50:20 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 22388106564A; Thu, 2 Jul 2009 00:50:20 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EBF048FC54; Thu, 2 Jul 2009 00:50:19 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n620oJPU029140; Thu, 2 Jul 2009 00:50:19 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n620oJSc029138; Thu, 2 Jul 2009 00:50:19 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907020050.n620oJSc029138@svn.freebsd.org> From: Kip Macy Date: Thu, 2 Jul 2009 00:50:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195278 - user/kmacy/head_ppacket/sys/net X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jul 2009 00:50:20 -0000 Author: kmacy Date: Thu Jul 2 00:50:19 2009 New Revision: 195278 URL: http://svn.freebsd.org/changeset/base/195278 Log: re-add whitespace to minimize diff with HEAD Modified: user/kmacy/head_ppacket/sys/net/route.c Modified: user/kmacy/head_ppacket/sys/net/route.c ============================================================================== --- user/kmacy/head_ppacket/sys/net/route.c Thu Jul 2 00:45:28 2009 (r195277) +++ user/kmacy/head_ppacket/sys/net/route.c Thu Jul 2 00:50:19 2009 (r195278) @@ -1008,6 +1008,7 @@ rn_mpath_update(int req, struct rt_addri error = ENOENT; goto done; } + /* * if the entry is 2nd and on up */ From owner-svn-src-user@FreeBSD.ORG Thu Jul 2 04:56:11 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E6AC3106564A; Thu, 2 Jul 2009 04:56:11 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D521D8FC16; Thu, 2 Jul 2009 04:56:11 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n624uBGI033927; Thu, 2 Jul 2009 04:56:11 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n624uBHt033925; Thu, 2 Jul 2009 04:56:11 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907020456.n624uBHt033925@svn.freebsd.org> From: Kip Macy Date: Thu, 2 Jul 2009 04:56:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195279 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jul 2009 04:56:12 -0000 Author: kmacy Date: Thu Jul 2 04:56:11 2009 New Revision: 195279 URL: http://svn.freebsd.org/changeset/base/195279 Log: avoid deadlock between pmap_collect and pageout Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Thu Jul 2 00:50:19 2009 (r195278) +++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Thu Jul 2 04:56:11 2009 (r195279) @@ -1953,7 +1953,17 @@ pmap_collect(pmap_t locked_pmap, struct vm_offset_t va; vm_page_t m, free = NULL; - vm_page_lock_queues(); + /* + * This isn't really a solid fix as we need to assure the caller + * that pmap state hasn't changed - but the way pageout works + * we typically need to call pmap functions with the page queue lock + * held + */ + if (vm_page_trylock_queues() == 0) { + PMAP_UNLOCK(locked_pmap); + vm_page_lock_queues(); + PMAP_LOCK(locked_pmap); + } TAILQ_FOREACH(m, &vpq->pl, pageq) { if (m->hold_count || m->busy || vm_page_trylock(m) == 0) continue; From owner-svn-src-user@FreeBSD.ORG Thu Jul 2 20:52:23 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8E3C2106564A; Thu, 2 Jul 2009 20:52:23 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7D3818FC14; Thu, 2 Jul 2009 20:52:23 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n62KqNkx054556; Thu, 2 Jul 2009 20:52:23 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n62KqNlu054554; Thu, 2 Jul 2009 20:52:23 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907022052.n62KqNlu054554@svn.freebsd.org> From: Kip Macy Date: Thu, 2 Jul 2009 20:52:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195297 - user/kmacy/releng_7_2_fcs/sys/vm X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jul 2009 20:52:23 -0000 Author: kmacy Date: Thu Jul 2 20:52:23 2009 New Revision: 195297 URL: http://svn.freebsd.org/changeset/base/195297 Log: - check for page held when freeing a page terminating an object - assert that page's object is the same as the locked object Modified: user/kmacy/releng_7_2_fcs/sys/vm/vm_object.c Modified: user/kmacy/releng_7_2_fcs/sys/vm/vm_object.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/vm/vm_object.c Thu Jul 2 20:05:21 2009 (r195296) +++ user/kmacy/releng_7_2_fcs/sys/vm/vm_object.c Thu Jul 2 20:52:23 2009 (r195297) @@ -686,7 +686,9 @@ vm_object_terminate(vm_object_t object) KASSERT(!p->busy && (p->oflags & VPO_BUSY) == 0, ("vm_object_terminate: freeing busy page %p " "p->busy = %d, p->flags %x\n", p, p->busy, p->flags)); - if (p->wire_count == 0) { + KASSERT(p->object == object, + ("page object changed from %p to %p", object, p->object)); + if (p->wire_count == 0 && p->hold_count == 0) { vm_page_free(p); cnt.v_pfree++; } else { From owner-svn-src-user@FreeBSD.ORG Thu Jul 2 22:52:11 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 95AF61065672; Thu, 2 Jul 2009 22:52:11 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 82A178FC17; Thu, 2 Jul 2009 22:52:11 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n62MqBUa060037; Thu, 2 Jul 2009 22:52:11 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n62MqBHI060031; Thu, 2 Jul 2009 22:52:11 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907022252.n62MqBHI060031@svn.freebsd.org> From: Kip Macy Date: Thu, 2 Jul 2009 22:52:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195299 - in user/kmacy/releng_7_2_fcs/sys: kern netgraph sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jul 2009 22:52:11 -0000 Author: kmacy Date: Thu Jul 2 22:52:10 2009 New Revision: 195299 URL: http://svn.freebsd.org/changeset/base/195299 Log: MFC 195148 - Turn the third (islocked) argument of the knote call into flags parameter. Introduce the new flag KNF_NOKQLOCK to allow event callers to be called without KQ_LOCK mtx held. - Modify VFS knote calls to always use KNF_NOKQLOCK flag. This is required for ZFS as its getattr implementation may sleep. Modified: user/kmacy/releng_7_2_fcs/sys/kern/kern_event.c user/kmacy/releng_7_2_fcs/sys/netgraph/ng_ksocket.c user/kmacy/releng_7_2_fcs/sys/sys/event.h user/kmacy/releng_7_2_fcs/sys/sys/mount.h user/kmacy/releng_7_2_fcs/sys/sys/vnode.h Modified: user/kmacy/releng_7_2_fcs/sys/kern/kern_event.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/kern/kern_event.c Thu Jul 2 22:34:42 2009 (r195298) +++ user/kmacy/releng_7_2_fcs/sys/kern/kern_event.c Thu Jul 2 22:52:10 2009 (r195299) @@ -1599,17 +1599,18 @@ kqueue_wakeup(struct kqueue *kq) * first. */ void -knote(struct knlist *list, long hint, int islocked) +knote(struct knlist *list, long hint, int lockflags) { struct kqueue *kq; struct knote *kn; + int error; if (list == NULL) return; - KNL_ASSERT_LOCK(list, islocked); + KNL_ASSERT_LOCK(list, lockflags & KNF_LISTLOCKED); - if (!islocked) + if ((lockflags & KNF_LISTLOCKED) == 0) list->kl_lock(list->kl_lockarg); /* @@ -1624,17 +1625,28 @@ knote(struct knlist *list, long hint, in kq = kn->kn_kq; if ((kn->kn_status & KN_INFLUX) != KN_INFLUX) { KQ_LOCK(kq); - if ((kn->kn_status & KN_INFLUX) != KN_INFLUX) { + if ((kn->kn_status & KN_INFLUX) == KN_INFLUX) { + KQ_UNLOCK(kq); + } else if ((lockflags & KNF_NOKQLOCK) != 0) { + kn->kn_status |= KN_INFLUX; + KQ_UNLOCK(kq); + error = kn->kn_fop->f_event(kn, hint); + KQ_LOCK(kq); + kn->kn_status &= ~KN_INFLUX; + if (error) + KNOTE_ACTIVATE(kn, 1); + KQ_UNLOCK_FLUX(kq); + } else { kn->kn_status |= KN_HASKQLOCK; if (kn->kn_fop->f_event(kn, hint)) KNOTE_ACTIVATE(kn, 1); kn->kn_status &= ~KN_HASKQLOCK; + KQ_UNLOCK(kq); } - KQ_UNLOCK(kq); } kq = NULL; } - if (!islocked) + if ((lockflags & KNF_LISTLOCKED) == 0) list->kl_unlock(list->kl_lockarg); } Modified: user/kmacy/releng_7_2_fcs/sys/netgraph/ng_ksocket.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/netgraph/ng_ksocket.c Thu Jul 2 22:34:42 2009 (r195298) +++ user/kmacy/releng_7_2_fcs/sys/netgraph/ng_ksocket.c Thu Jul 2 22:52:10 2009 (r195299) @@ -1214,7 +1214,7 @@ ng_ksocket_finish_accept(priv_p priv) SOCK_UNLOCK(so); ACCEPT_UNLOCK(); - /* XXX KNOTE(&head->so_rcv.sb_sel.si_note, 0); */ + /* XXX KNOTE_UNLOCKED(&head->so_rcv.sb_sel.si_note, 0); */ soaccept(so, &sa); Modified: user/kmacy/releng_7_2_fcs/sys/sys/event.h ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/sys/event.h Thu Jul 2 22:34:42 2009 (r195298) +++ user/kmacy/releng_7_2_fcs/sys/sys/event.h Thu Jul 2 22:52:10 2009 (r195299) @@ -135,8 +135,14 @@ struct knlist { MALLOC_DECLARE(M_KQUEUE); #endif -#define KNOTE(list, hist, lock) knote(list, hist, lock) -#define KNOTE_LOCKED(list, hint) knote(list, hint, 1) +/* + * Flags for knote call + */ +#define KNF_LISTLOCKED 0x0001 /* knlist is locked */ +#define KNF_NOKQLOCK 0x0002 /* do not keep KQ_LOCK */ + +#define KNOTE(list, hist, flags) knote(list, hist, flags) +#define KNOTE_LOCKED(list, hint) knote(list, hint, KNF_LISTLOCKED) #define KNOTE_UNLOCKED(list, hint) knote(list, hint, 0) #define KNLIST_EMPTY(list) SLIST_EMPTY(&(list)->kl_list) @@ -204,7 +210,7 @@ struct thread; struct proc; struct knlist; -extern void knote(struct knlist *list, long hint, int islocked); +extern void knote(struct knlist *list, long hint, int lockflags); extern void knote_fork(struct knlist *list, int pid); extern void knlist_add(struct knlist *knl, struct knote *kn, int islocked); extern void knlist_remove(struct knlist *knl, struct knote *kn, int islocked); Modified: user/kmacy/releng_7_2_fcs/sys/sys/mount.h ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/sys/mount.h Thu Jul 2 22:34:42 2009 (r195298) +++ user/kmacy/releng_7_2_fcs/sys/sys/mount.h Thu Jul 2 22:52:10 2009 (r195299) @@ -637,7 +637,7 @@ extern int mpsafe_vfs; #define VFS_KNOTE_LOCKED(vp, hint) do \ { \ if (((vp)->v_vflag & VV_NOKNOTE) == 0) \ - VN_KNOTE((vp), (hint), 1); \ + VN_KNOTE((vp), (hint), KNF_LISTLOCKED); \ } while (0) #define VFS_KNOTE_UNLOCKED(vp, hint) do \ Modified: user/kmacy/releng_7_2_fcs/sys/sys/vnode.h ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/sys/vnode.h Thu Jul 2 22:34:42 2009 (r195298) +++ user/kmacy/releng_7_2_fcs/sys/sys/vnode.h Thu Jul 2 22:52:10 2009 (r195299) @@ -222,9 +222,10 @@ struct xvnode { #define VN_KNOTE(vp, b, a) \ do { \ if (!VN_KNLIST_EMPTY(vp)) \ - KNOTE(&vp->v_pollinfo->vpi_selinfo.si_note, (b), (a)); \ + KNOTE(&vp->v_pollinfo->vpi_selinfo.si_note, (b), \ + (a) | KNF_NOKQLOCK); \ } while (0) -#define VN_KNOTE_LOCKED(vp, b) VN_KNOTE(vp, b, 1) +#define VN_KNOTE_LOCKED(vp, b) VN_KNOTE(vp, b, KNF_LISTLOCKED) #define VN_KNOTE_UNLOCKED(vp, b) VN_KNOTE(vp, b, 0) /* From owner-svn-src-user@FreeBSD.ORG Fri Jul 3 02:51:14 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 973411065673; Fri, 3 Jul 2009 02:51:14 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6B83A8FC26; Fri, 3 Jul 2009 02:51:14 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n632pELt064434; Fri, 3 Jul 2009 02:51:14 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n632pElw064432; Fri, 3 Jul 2009 02:51:14 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907030251.n632pElw064432@svn.freebsd.org> From: Kip Macy Date: Fri, 3 Jul 2009 02:51:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195301 - user/kmacy/releng_7_2_fcs/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Jul 2009 02:51:15 -0000 Author: kmacy Date: Fri Jul 3 02:51:14 2009 New Revision: 195301 URL: http://svn.freebsd.org/changeset/base/195301 Log: acquire page lock *before* calling pmap_remove_pte for managed pages to avoid race when dropping pmap lock Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Thu Jul 2 23:33:34 2009 (r195300) +++ user/kmacy/releng_7_2_fcs/sys/amd64/amd64/pmap.c Fri Jul 3 02:51:14 2009 (r195301) @@ -2500,21 +2500,14 @@ pmap_remove_pte(pmap_t pmap, pt_entry_t ret = PMAP_REMOVE_LAST; if (oldpte & PG_MANAGED) { m = PHYS_TO_VM_PAGE(oldpte & PG_FRAME); + vm_page_lock_assert(m, MA_OWNED); KASSERT((m->flags & PG_UNMANAGED) == 0, ("page not managed")); - if (vm_page_trylock(m) == 0) { - PMAP_UNLOCK(pmap); - vm_page_lock(m); - PMAP_LOCK(pmap); - KASSERT((m->flags & PG_UNMANAGED) == 0, - ("page not managed")); - } if ((oldpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) vm_page_dirty(m); if (oldpte & PG_A) vm_page_flag_set(m, PG_REFERENCED); pmap_remove_entry(pmap, m, va, free); - vm_page_unlock(m); } return (ret); } @@ -2526,6 +2519,7 @@ static void pmap_remove_page(pmap_t pmap, vm_offset_t va, pd_entry_t *pde, vm_page_t *free) { pt_entry_t *pte; + vm_page_t m; PMAP_LOCK_ASSERT(pmap, MA_OWNED); if ((*pde & PG_V) == 0) @@ -2533,7 +2527,18 @@ pmap_remove_page(pmap_t pmap, vm_offset_ pte = pmap_pde_to_pte(pde, va); if ((*pte & PG_V) == 0) return; + + if (*pte & PG_MANAGED) { + m = PHYS_TO_VM_PAGE(*pte & PG_FRAME); + if (vm_page_trylock(m) == 0) { + PMAP_UNLOCK(pmap); + vm_page_lock(m); + PMAP_LOCK(pmap); + } + } pmap_remove_pte(pmap, pte, va, *pde, free); + if (m != NULL) + vm_page_unlock(m); pmap_invalidate_page(pmap, va); } @@ -2660,9 +2665,23 @@ restart: for (pte = pmap_pde_to_pte(pde, sva); sva != va_next; pte++, sva += PAGE_SIZE) { int ret; + vm_page_t m = NULL; + if (*pte == 0) continue; + if (*pte & PG_MANAGED) { + m = PHYS_TO_VM_PAGE(*pte & PG_FRAME); + if (vm_page_trylock(m) == 0) { + PMAP_UNLOCK(pmap); + vm_page_lock(m); + PMAP_LOCK(pmap); + } + if (*pte != *pmap_pde_to_pte(pde, sva)) { + vm_page_unlock(m); + goto restart; + } + } /* * The TLB entry for a PG_G mapping is invalidated * by pmap_remove_pte(). @@ -2670,6 +2689,8 @@ restart: if ((*pte & PG_G) == 0) anyvalid = 1; ret = pmap_remove_pte(pmap, pte, sva, ptpaddr, &free); + if (m != NULL) + vm_page_unlock(m); if (ret & PMAP_REMOVE_LAST) break; if (ret & PMAP_REMOVE_UNLOCKED) {