Date: Mon, 18 Nov 2013 22:18:07 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r258322 - in projects/pf/head/sys: net netpfil/pf Message-ID: <201311182218.rAIMI84r018865@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Mon Nov 18 22:18:07 2013 New Revision: 258322 URL: http://svnweb.freebsd.org/changeset/base/258322 Log: - Split functions that initialize various pf parts into their vimage parts and global parts. - Since global parts appeared to be only mutex initializations, just abandon them and use MTX_SYSINIT() instead. - Kill my incorrect VNET_FOREACH() iterator and instead use correct approach with VNET_SYSINIT(). Submitted by: Nikos Vassiliadis <nvass gmx.com> Reviewed by: trociny Modified: projects/pf/head/sys/net/pfvar.h projects/pf/head/sys/netpfil/pf/pf.c projects/pf/head/sys/netpfil/pf/pf_if.c projects/pf/head/sys/netpfil/pf/pf_ioctl.c projects/pf/head/sys/netpfil/pf/pf_norm.c Modified: projects/pf/head/sys/net/pfvar.h ============================================================================== --- projects/pf/head/sys/net/pfvar.h Mon Nov 18 20:21:44 2013 (r258321) +++ projects/pf/head/sys/net/pfvar.h Mon Nov 18 22:18:07 2013 (r258322) @@ -1522,7 +1522,7 @@ VNET_DECLARE(struct pf_altqqueue *, pf_ VNET_DECLARE(struct pf_rulequeue, pf_unlinked_rules); #define V_pf_unlinked_rules VNET(pf_unlinked_rules) -void pf_initialize(void); +void pf_vnet_initialize(void); void pf_cleanup(void); struct pf_mtag *pf_get_mtag(struct mbuf *); @@ -1609,7 +1609,7 @@ int pf_match_addr_range(struct pf_addr * struct pf_addr *, sa_family_t); int pf_match_port(u_int8_t, u_int16_t, u_int16_t, u_int16_t); -void pf_normalize_init(void); +void pf_vnet_normalize_init(void); void pf_normalize_cleanup(void); int pf_normalize_ip(struct mbuf **, int, struct pfi_kif *, u_short *, struct pf_pdesc *); @@ -1671,7 +1671,7 @@ MALLOC_DECLARE(PFI_MTYPE); VNET_DECLARE(struct pfi_kif *, pfi_all); #define V_pfi_all VNET(pfi_all) -void pfi_initialize(void); +void pfi_vnet_initialize(void); void pfi_cleanup(void); void pfi_kif_ref(struct pfi_kif *); void pfi_kif_unref(struct pfi_kif *); Modified: projects/pf/head/sys/netpfil/pf/pf.c ============================================================================== --- projects/pf/head/sys/netpfil/pf/pf.c Mon Nov 18 20:21:44 2013 (r258321) +++ projects/pf/head/sys/netpfil/pf/pf.c Mon Nov 18 22:18:07 2013 (r258322) @@ -158,6 +158,7 @@ static VNET_DEFINE(struct pf_send_head, #define V_pf_sendqueue VNET(pf_sendqueue) static struct mtx pf_sendqueue_mtx; +MTX_SYSINIT(pf_sendqueue_mtx, &pf_sendqueue_mtx, "pf send queue", MTX_DEF); #define PF_SENDQ_LOCK() mtx_lock(&pf_sendqueue_mtx) #define PF_SENDQ_UNLOCK() mtx_unlock(&pf_sendqueue_mtx) @@ -179,11 +180,15 @@ static VNET_DEFINE(struct task, pf_overl #define V_pf_overloadtask VNET(pf_overloadtask) static struct mtx pf_overloadqueue_mtx; +MTX_SYSINIT(pf_overloadqueue_mtx, &pf_overloadqueue_mtx, + "pf overload/flush queue", MTX_DEF); #define PF_OVERLOADQ_LOCK() mtx_lock(&pf_overloadqueue_mtx) #define PF_OVERLOADQ_UNLOCK() mtx_unlock(&pf_overloadqueue_mtx) VNET_DEFINE(struct pf_rulequeue, pf_unlinked_rules); struct mtx pf_unlnkdrules_mtx; +MTX_SYSINIT(pf_unlnkdrules_mtx, &pf_unlnkdrules_mtx, "pf unlinked rules", + MTX_DEF); static VNET_DEFINE(uma_zone_t, pf_sources_z); #define V_pf_sources_z VNET(pf_sources_z) @@ -697,7 +702,7 @@ pf_remove_src_node(struct pf_src_node *s /* Data storage structures initialization. */ void -pf_initialize() +pf_vnet_initialize() { struct pf_keyhash *kh; struct pf_idhash *ih; @@ -763,13 +768,9 @@ pf_initialize() STAILQ_INIT(&V_pf_sendqueue); SLIST_INIT(&V_pf_overloadqueue); TASK_INIT(&V_pf_overloadtask, 0, pf_overload_task, &V_pf_overloadqueue); - mtx_init(&pf_sendqueue_mtx, "pf send queue", NULL, MTX_DEF); - mtx_init(&pf_overloadqueue_mtx, "pf overload/flush queue", NULL, - MTX_DEF); /* Unlinked, but may be referenced rules. */ TAILQ_INIT(&V_pf_unlinked_rules); - mtx_init(&pf_unlnkdrules_mtx, "pf unlinked rules", NULL, MTX_DEF); } void @@ -805,10 +806,6 @@ pf_cleanup() free(pfse, M_PFTEMP); } - mtx_destroy(&pf_sendqueue_mtx); - mtx_destroy(&pf_overloadqueue_mtx); - mtx_destroy(&pf_unlnkdrules_mtx); - uma_zdestroy(V_pf_mtag_z); uma_zdestroy(V_pf_sources_z); uma_zdestroy(V_pf_state_z); Modified: projects/pf/head/sys/netpfil/pf/pf_if.c ============================================================================== --- projects/pf/head/sys/netpfil/pf/pf_if.c Mon Nov 18 20:21:44 2013 (r258321) +++ projects/pf/head/sys/netpfil/pf/pf_if.c Mon Nov 18 22:18:07 2013 (r258322) @@ -102,10 +102,13 @@ MALLOC_DEFINE(PFI_MTYPE, "pf_ifnet", "pf LIST_HEAD(pfi_list, pfi_kif); static VNET_DEFINE(struct pfi_list, pfi_unlinked_kifs); #define V_pfi_unlinked_kifs VNET(pfi_unlinked_kifs) + static struct mtx pfi_unlnkdkifs_mtx; +MTX_SYSINIT(pfi_unlnkdkifs_mtx, &pfi_unlnkdkifs_mtx, "pf unlinked interfaces", + MTX_DEF); void -pfi_initialize(void) +pfi_vnet_initialize(void) { struct ifg_group *ifg; struct ifnet *ifp; @@ -115,8 +118,6 @@ pfi_initialize(void) V_pfi_buffer = malloc(V_pfi_buffer_max * sizeof(*V_pfi_buffer), PFI_MTYPE, M_WAITOK); - mtx_init(&pfi_unlnkdkifs_mtx, "pf unlinked interfaces", NULL, MTX_DEF); - kif = malloc(sizeof(*kif), PFI_MTYPE, M_WAITOK); PF_RULES_WLOCK(); V_pfi_all = pfi_kif_attach(kif, IFG_ALL); @@ -166,8 +167,6 @@ pfi_cleanup(void) free(p, PFI_MTYPE); } - mtx_destroy(&pfi_unlnkdkifs_mtx); - free(V_pfi_buffer, PFI_MTYPE); } Modified: projects/pf/head/sys/netpfil/pf/pf_ioctl.c ============================================================================== --- projects/pf/head/sys/netpfil/pf/pf_ioctl.c Mon Nov 18 20:21:44 2013 (r258321) +++ projects/pf/head/sys/netpfil/pf/pf_ioctl.c Mon Nov 18 22:18:07 2013 (r258322) @@ -86,7 +86,7 @@ __FBSDID("$FreeBSD$"); #include <altq/altq.h> #endif -static int pfattach(void); +static int pf_vnet_init(void); static struct pf_pool *pf_get_pool(char *, u_int32_t, u_int8_t, u_int32_t, u_int8_t, u_int8_t, u_int8_t); @@ -202,15 +202,18 @@ pfsync_defer_t *pfsync_defer_ptr = NUL pflog_packet_t *pflog_packet_ptr = NULL; static int -pfattach(void) +pf_vnet_init(void) { u_int32_t *my_timeout = V_pf_default_rule.timeout; int error; - pf_initialize(); + TAILQ_INIT(&V_pf_tags); + TAILQ_INIT(&V_pf_qids); + + pf_vnet_initialize(); pfr_initialize(); - pfi_initialize(); - pf_normalize_init(); + pfi_vnet_initialize(); + pf_vnet_normalize_init(); V_pf_limits[PF_LIMIT_STATES].limit = PFSTATE_HIWAT; V_pf_limits[PF_LIMIT_SRC_NODES].limit = PFSNODE_HIWAT; @@ -3634,26 +3637,9 @@ dehook_pf(void) static int pf_load(void) { - int error; - - VNET_ITERATOR_DECL(vnet_iter); - - VNET_LIST_RLOCK(); - VNET_FOREACH(vnet_iter) { - CURVNET_SET(vnet_iter); - V_pf_pfil_hooked = 0; - V_pf_end_threads = 0; - TAILQ_INIT(&V_pf_tags); - TAILQ_INIT(&V_pf_qids); - CURVNET_RESTORE(); - } - VNET_LIST_RUNLOCK(); rw_init(&pf_rules_lock, "pf rulesets"); - pf_dev = make_dev(&pf_cdevsw, 0, 0, 0, 0600, PF_NAME); - if ((error = pfattach()) != 0) - return (error); return (0); } @@ -3730,3 +3716,6 @@ static moduledata_t pf_mod = { DECLARE_MODULE(pf, pf_mod, SI_SUB_PSEUDO, SI_ORDER_FIRST); MODULE_VERSION(pf, PF_MODVER); + +VNET_SYSINIT(pf_vnet_init, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY - 255, + pf_vnet_init, NULL); Modified: projects/pf/head/sys/netpfil/pf/pf_norm.c ============================================================================== --- projects/pf/head/sys/netpfil/pf/pf_norm.c Mon Nov 18 20:21:44 2013 (r258321) +++ projects/pf/head/sys/netpfil/pf/pf_norm.c Mon Nov 18 22:18:07 2013 (r258322) @@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$"); #include "opt_pf.h" #include <sys/param.h> +#include <sys/kernel.h> #include <sys/lock.h> #include <sys/mbuf.h> #include <sys/mutex.h> @@ -92,6 +93,7 @@ struct pf_fragment { }; static struct mtx pf_frag_mtx; +MTX_SYSINIT(pf_frag_mtx, &pf_frag_mtx, "pf fragments", MTX_DEF); #define PF_FRAG_LOCK() mtx_lock(&pf_frag_mtx) #define PF_FRAG_UNLOCK() mtx_unlock(&pf_frag_mtx) #define PF_FRAG_ASSERT() mtx_assert(&pf_frag_mtx, MA_OWNED) @@ -146,7 +148,7 @@ static void pf_scrub_ip6(struct mbuf * } while(0) void -pf_normalize_init(void) +pf_vnet_normalize_init(void) { V_pf_frag_z = uma_zcreate("pf frags", sizeof(struct pf_fragment), @@ -162,8 +164,6 @@ pf_normalize_init(void) uma_zone_set_max(V_pf_frent_z, PFFRAG_FRENT_HIWAT); uma_zone_set_warning(V_pf_frent_z, "PF frag entries limit reached"); - mtx_init(&pf_frag_mtx, "pf fragments", NULL, MTX_DEF); - TAILQ_INIT(&V_pf_fragqueue); TAILQ_INIT(&V_pf_cachequeue); } @@ -175,8 +175,6 @@ pf_normalize_cleanup(void) uma_zdestroy(V_pf_state_scrub_z); uma_zdestroy(V_pf_frent_z); uma_zdestroy(V_pf_frag_z); - - mtx_destroy(&pf_frag_mtx); } static int
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311182218.rAIMI84r018865>