From owner-svn-src-projects@FreeBSD.ORG Sun Jun 3 19:25:49 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 348031065751; Sun, 3 Jun 2012 19:25:49 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1F12D8FC0A; Sun, 3 Jun 2012 19:25:49 +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 q53JPmOi080063; Sun, 3 Jun 2012 19:25:48 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q53JPms8080061; Sun, 3 Jun 2012 19:25:48 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201206031925.q53JPms8080061@svn.freebsd.org> From: Gleb Smirnoff Date: Sun, 3 Jun 2012 19:25:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236525 - projects/pf/head/sys/contrib/pf/net X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 03 Jun 2012 19:25:49 -0000 Author: glebius Date: Sun Jun 3 19:25:48 2012 New Revision: 236525 URL: http://svn.freebsd.org/changeset/base/236525 Log: Return back pfsync_timeout(), that I've removed in r234056. pfsync_timeout() is needed to perform a delayed swi_sched(). Modified: projects/pf/head/sys/contrib/pf/net/if_pfsync.c Modified: projects/pf/head/sys/contrib/pf/net/if_pfsync.c ============================================================================== --- projects/pf/head/sys/contrib/pf/net/if_pfsync.c Sun Jun 3 18:34:32 2012 (r236524) +++ projects/pf/head/sys/contrib/pf/net/if_pfsync.c Sun Jun 3 19:25:48 2012 (r236525) @@ -205,6 +205,7 @@ struct pfsync_softc { #define PFSYNCF_DEFER 0x00000002 uint8_t sc_maxupdates; struct ip sc_template; + struct callout sc_tmo; struct mtx sc_mtx; /* Queued data */ @@ -246,6 +247,7 @@ static VNET_DEFINE(struct pfsyncstats, p static VNET_DEFINE(int, pfsync_carp_adj) = CARP_MAXSKEW; #define V_pfsync_carp_adj VNET(pfsync_carp_adj) +static void pfsync_timeout(void *); static void pfsyncintr(void *); static int pfsync_multicast_setup(struct pfsync_softc *, struct ifnet *, void *); @@ -334,6 +336,7 @@ pfsync_clone_create(struct if_clone *ifc ifp->if_mtu = ETHERMTU; mtx_init(&sc->sc_mtx, "pfsync", NULL, MTX_DEF); mtx_init(&sc->sc_bulk_mtx, "pfsync bulk", NULL, MTX_DEF); + callout_init(&sc->sc_tmo, CALLOUT_MPSAFE); callout_init_mtx(&sc->sc_bulk_tmo, &sc->sc_bulk_mtx, 0); callout_init_mtx(&sc->sc_bulkfail_tmo, &sc->sc_bulk_mtx, 0); @@ -376,6 +379,7 @@ relock: } } + callout_drain(&sc->sc_tmo); callout_drain(&sc->sc_bulkfail_tmo); callout_drain(&sc->sc_bulk_tmo); @@ -1662,7 +1666,7 @@ pfsync_insert_state(struct pf_state *st) PFSYNC_LOCK(sc); if (sc->sc_len == PFSYNC_MINPKT) - swi_sched(V_pfsync_swi_cookie, 0); + callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, V_pfsyncif); pfsync_q_ins(st, PFSYNC_S_INS); PFSYNC_UNLOCK(sc); @@ -1800,7 +1804,7 @@ pfsync_update_state(struct pf_state *st) } if (sc->sc_len == PFSYNC_MINPKT) - sync = 1; + callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, V_pfsyncif); switch (st->sync_state) { case PFSYNC_S_UPD_C: @@ -1908,7 +1912,6 @@ static void pfsync_delete_state(struct pf_state *st) { struct pfsync_softc *sc = V_pfsyncif; - int schedswi = 0; PFSYNC_LOCK(sc); if (st->state_flags & PFSTATE_ACK) @@ -1921,7 +1924,7 @@ pfsync_delete_state(struct pf_state *st) } if (sc->sc_len == PFSYNC_MINPKT) - schedswi = 1; + callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, V_pfsyncif); switch (st->sync_state) { case PFSYNC_S_INS: @@ -1943,9 +1946,6 @@ pfsync_delete_state(struct pf_state *st) panic("%s: unexpected sync state %d", __func__, st->sync_state); } PFSYNC_UNLOCK(sc); - - if (schedswi) - swi_sched(V_pfsync_swi_cookie, 0); } static void @@ -2175,6 +2175,18 @@ pfsync_send_plus(void *plus, size_t plus pfsync_sendout(1); } +static void +pfsync_timeout(void *arg) +{ +#ifdef VIMAGE + struct pfsync_softc *sc = arg; +#endif + + CURVNET_SET(sc->sc_ifp->if_vnet); + swi_sched(V_pfsync_swi_cookie, 0); + CURVNET_RESTORE(); +} + /* this is a softnet/netisr handler */ static void pfsyncintr(void *arg) @@ -2338,8 +2350,8 @@ pfsync_uninit() VNET_LIST_RLOCK(); VNET_FOREACH(vnet_iter) { CURVNET_SET(vnet_iter); - swi_remove(V_pfsync_swi_cookie); if_clone_detach(&V_pfsync_cloner); + swi_remove(V_pfsync_swi_cookie); CURVNET_RESTORE(); } VNET_LIST_RUNLOCK();