Date: Sun, 3 Jun 2012 19:25:48 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r236525 - projects/pf/head/sys/contrib/pf/net Message-ID: <201206031925.q53JPms8080061@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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();
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206031925.q53JPms8080061>