From owner-svn-src-all@FreeBSD.ORG Wed Oct 19 11:04:50 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 27244106564A; Wed, 19 Oct 2011 11:04:50 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0D49B8FC0A; Wed, 19 Oct 2011 11:04:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p9JB4nd8021381; Wed, 19 Oct 2011 11:04:49 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p9JB4nlK021378; Wed, 19 Oct 2011 11:04:49 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201110191104.p9JB4nlK021378@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Wed, 19 Oct 2011 11:04:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r226536 - head/sys/contrib/pf/net X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Oct 2011 11:04:50 -0000 Author: bz Date: Wed Oct 19 11:04:49 2011 New Revision: 226536 URL: http://svn.freebsd.org/changeset/base/226536 Log: De-virtualize the pf_task_mtx lock. At the current state of pf locking and virtualization it is not helpful but complicates things. Current state of art is to not virtualize these kinds of locks - inp_group/hash/info/.. are all not virtualized either. MFC after: 3 days Modified: head/sys/contrib/pf/net/pf_ioctl.c head/sys/contrib/pf/net/pfvar.h Modified: head/sys/contrib/pf/net/pf_ioctl.c ============================================================================== --- head/sys/contrib/pf/net/pf_ioctl.c Wed Oct 19 10:16:42 2011 (r226535) +++ head/sys/contrib/pf/net/pf_ioctl.c Wed Oct 19 11:04:49 2011 (r226536) @@ -266,7 +266,7 @@ static struct cdevsw pf_cdevsw = { static volatile VNET_DEFINE(int, pf_pfil_hooked); #define V_pf_pfil_hooked VNET(pf_pfil_hooked) VNET_DEFINE(int, pf_end_threads); -VNET_DEFINE(struct mtx, pf_task_mtx); +struct mtx pf_task_mtx; /* pfsync */ pfsync_state_import_t *pfsync_state_import_ptr = NULL; @@ -287,18 +287,18 @@ SYSCTL_VNET_INT(_debug, OID_AUTO, pfugid &VNET_NAME(debug_pfugidhack), 0, "Enable/disable pf user/group rules mpsafe hack"); -void +static void init_pf_mutex(void) { - mtx_init(&V_pf_task_mtx, "pf task mtx", NULL, MTX_DEF); + mtx_init(&pf_task_mtx, "pf task mtx", NULL, MTX_DEF); } -void +static void destroy_pf_mutex(void) { - mtx_destroy(&V_pf_task_mtx); + mtx_destroy(&pf_task_mtx); } void init_zone_var(void) @@ -4381,11 +4381,8 @@ pf_load(void) init_zone_var(); sx_init(&V_pf_consistency_lock, "pf_statetbl_lock"); - init_pf_mutex(); - if (pfattach() < 0) { - destroy_pf_mutex(); + if (pfattach() < 0) return (ENOMEM); - } return (0); } @@ -4413,14 +4410,13 @@ pf_unload(void) V_pf_end_threads = 1; while (V_pf_end_threads < 2) { wakeup_one(pf_purge_thread); - msleep(pf_purge_thread, &V_pf_task_mtx, 0, "pftmo", hz); + msleep(pf_purge_thread, &pf_task_mtx, 0, "pftmo", hz); } pfi_cleanup(); pf_osfp_flush(); pf_osfp_cleanup(); cleanup_pf_zone(); PF_UNLOCK(); - destroy_pf_mutex(); sx_destroy(&V_pf_consistency_lock); return error; } @@ -4432,10 +4428,12 @@ pf_modevent(module_t mod, int type, void switch(type) { case MOD_LOAD: + init_pf_mutex(); pf_dev = make_dev(&pf_cdevsw, 0, 0, 0, 0600, PF_NAME); break; case MOD_UNLOAD: destroy_dev(pf_dev); + destroy_pf_mutex(); break; default: error = EINVAL; Modified: head/sys/contrib/pf/net/pfvar.h ============================================================================== --- head/sys/contrib/pf/net/pfvar.h Wed Oct 19 10:16:42 2011 (r226535) +++ head/sys/contrib/pf/net/pfvar.h Wed Oct 19 11:04:49 2011 (r226536) @@ -237,19 +237,18 @@ struct pfi_dynaddr { uma_zdestroy(var) #ifdef __FreeBSD__ -VNET_DECLARE(struct mtx, pf_task_mtx); -#define V_pf_task_mtx VNET(pf_task_mtx) +extern struct mtx pf_task_mtx; -#define PF_LOCK_ASSERT() mtx_assert(&V_pf_task_mtx, MA_OWNED) -#define PF_UNLOCK_ASSERT() mtx_assert(&V_pf_task_mtx, MA_NOTOWNED) +#define PF_LOCK_ASSERT() mtx_assert(&pf_task_mtx, MA_OWNED) +#define PF_UNLOCK_ASSERT() mtx_assert(&pf_task_mtx, MA_NOTOWNED) #define PF_LOCK() do { \ PF_UNLOCK_ASSERT(); \ - mtx_lock(&V_pf_task_mtx); \ + mtx_lock(&pf_task_mtx); \ } while(0) #define PF_UNLOCK() do { \ PF_LOCK_ASSERT(); \ - mtx_unlock(&V_pf_task_mtx); \ + mtx_unlock(&pf_task_mtx); \ } while(0) #else #define PF_LOCK_ASSERT() @@ -270,9 +269,6 @@ VNET_DECLARE(struct mtx, pf_task_mtx); PF_LOCK(); \ } while(0) -extern void init_pf_mutex(void); -extern void destroy_pf_mutex(void); - #define PF_MODVER 1 #define PFLOG_MODVER 1 #define PFSYNC_MODVER 1