On Thu, Nov 24, 2022 at 11:23:51AM +1000, David Gwynne wrote: > > we're working toward dropping the need for NET_LOCK before PF_LOCK. could > > we try the diff below as a compromise? > > > > sashan@ and mvs@ have pushed that forward, so this diff should be enough > now.
I have tested the previous version of the diff in my performance setup and this diff in my regress setup. OK bluhm@ > Index: pf.c > =================================================================== > RCS file: /cvs/src/sys/net/pf.c,v > retrieving revision 1.1153 > diff -u -p -r1.1153 pf.c > --- pf.c 12 Nov 2022 02:48:14 -0000 1.1153 > +++ pf.c 24 Nov 2022 01:21:48 -0000 > @@ -1603,9 +1603,6 @@ pf_purge(void *null) > { > unsigned int interval = max(1, pf_default_rule.timeout[PFTM_INTERVAL]); > > - /* XXX is NET_LOCK necessary? */ > - NET_LOCK(); > - > PF_LOCK(); > > pf_purge_expired_src_nodes(); > @@ -1616,7 +1613,6 @@ pf_purge(void *null) > * Fragments don't require PF_LOCK(), they use their own lock. > */ > pf_purge_expired_fragments(); > - NET_UNLOCK(); > > /* interpret the interval as idle time between runs */ > timeout_add_sec(&pf_purge_to, interval); > @@ -1891,7 +1887,6 @@ pf_purge_expired_states(const unsigned i > if (SLIST_EMPTY(&gcl)) > return (scanned); > > - NET_LOCK(); > rw_enter_write(&pf_state_list.pfs_rwl); > PF_LOCK(); > PF_STATE_ENTER_WRITE(); > @@ -1904,7 +1899,6 @@ pf_purge_expired_states(const unsigned i > PF_STATE_EXIT_WRITE(); > PF_UNLOCK(); > rw_exit_write(&pf_state_list.pfs_rwl); > - NET_UNLOCK(); > > while ((st = SLIST_FIRST(&gcl)) != NULL) { > SLIST_REMOVE_HEAD(&gcl, gc_list);