On Tue, Nov 15, 2016 at 03:41:48PM +0100, Martin Pieuchot wrote:
> Kill a bunch of recursive splsoftnet()s. pf_ioctl() already call
> splsoftnet() and for the functions that are also called from pf_test()
> the spl level is already IPL_SOFTNET.
>
> ok?
OK bluhm@
>
> Index: net/pf_if.c
> ===================================================================
> RCS file: /cvs/src/sys/net/pf_if.c,v
> retrieving revision 1.86
> diff -u -p -r1.86 pf_if.c
> --- net/pf_if.c 27 Sep 2016 04:57:17 -0000 1.86
> +++ net/pf_if.c 15 Nov 2016 14:27:47 -0000
> @@ -356,7 +356,7 @@ pfi_dynaddr_setup(struct pf_addr_wrap *a
> struct pfi_dynaddr *dyn;
> char tblname[PF_TABLE_NAME_SIZE];
> struct pf_ruleset *ruleset = NULL;
> - int s, rv = 0;
> + int rv = 0;
>
> if (aw->type != PF_ADDR_DYNIFTL)
> return (0);
> @@ -364,7 +364,6 @@ pfi_dynaddr_setup(struct pf_addr_wrap *a
> == NULL)
> return (1);
>
> - s = splsoftnet();
> if (!strcmp(aw->v.ifname, "self"))
> dyn->pfid_kif = pfi_kif_get(IFG_ALL);
> else
> @@ -407,7 +406,6 @@ pfi_dynaddr_setup(struct pf_addr_wrap *a
> TAILQ_INSERT_TAIL(&dyn->pfid_kif->pfik_dynaddrs, dyn, entry);
> aw->p.dyn = dyn;
> pfi_kif_update(dyn->pfid_kif);
> - splx(s);
> return (0);
>
> _bad:
> @@ -418,7 +416,6 @@ _bad:
> if (dyn->pfid_kif != NULL)
> pfi_kif_unref(dyn->pfid_kif, PFI_KIF_REF_RULE);
> pool_put(&pfi_addr_pl, dyn);
> - splx(s);
> return (rv);
> }
>
> @@ -589,13 +586,10 @@ pfi_address_add(struct sockaddr *sa, sa_
> void
> pfi_dynaddr_remove(struct pf_addr_wrap *aw)
> {
> - int s;
> -
> if (aw->type != PF_ADDR_DYNIFTL || aw->p.dyn == NULL ||
> aw->p.dyn->pfid_kif == NULL || aw->p.dyn->pfid_kt == NULL)
> return;
>
> - s = splsoftnet();
> TAILQ_REMOVE(&aw->p.dyn->pfid_kif->pfik_dynaddrs, aw->p.dyn, entry);
> pfi_kif_unref(aw->p.dyn->pfid_kif, PFI_KIF_REF_RULE);
> aw->p.dyn->pfid_kif = NULL;
> @@ -603,7 +597,6 @@ pfi_dynaddr_remove(struct pf_addr_wrap *
> aw->p.dyn->pfid_kt = NULL;
> pool_put(&pfi_addr_pl, aw->p.dyn);
> aw->p.dyn = NULL;
> - splx(s);
> }
>
> void
> @@ -640,23 +633,20 @@ pfi_update_status(const char *name, stru
> struct pfi_kif_cmp key;
> struct ifg_member p_member, *ifgm;
> TAILQ_HEAD(, ifg_member) ifg_members;
> - int i, j, k, s;
> + int i, j, k;
>
> - s = splsoftnet();
> if (*name == '\0' && pfs == NULL) {
> RB_FOREACH(p, pfi_ifhead, &pfi_ifs) {
> bzero(p->pfik_packets, sizeof(p->pfik_packets));
> bzero(p->pfik_bytes, sizeof(p->pfik_bytes));
> p->pfik_tzero = time_second;
> }
> - splx(s);
> return;
> }
>
> strlcpy(key.pfik_name, name, sizeof(key.pfik_name));
> p = RB_FIND(pfi_ifhead, &pfi_ifs, (struct pfi_kif *)&key);
> if (p == NULL) {
> - splx(s);
> return;
> }
> if (p->pfik_group != NULL) {
> @@ -694,16 +684,14 @@ pfi_update_status(const char *name, stru
> p->pfik_bytes[i][j][k];
> }
> }
> - splx(s);
> }
>
> int
> pfi_get_ifaces(const char *name, struct pfi_kif *buf, int *size)
> {
> struct pfi_kif *p, *nextp;
> - int s, n = 0;
> + int n = 0;
>
> - s = splsoftnet();
> for (p = RB_MIN(pfi_ifhead, &pfi_ifs); p; p = nextp) {
> nextp = RB_NEXT(pfi_ifhead, &pfi_ifs, p);
> if (pfi_skip_if(name, p))
> @@ -714,14 +702,12 @@ pfi_get_ifaces(const char *name, struct
> pfi_kif_ref(p, PFI_KIF_REF_RULE);
> if (copyout(p, buf++, sizeof(*buf))) {
> pfi_kif_unref(p, PFI_KIF_REF_RULE);
> - splx(s);
> return (EFAULT);
> }
> nextp = RB_NEXT(pfi_ifhead, &pfi_ifs, p);
> pfi_kif_unref(p, PFI_KIF_REF_RULE);
> }
> }
> - splx(s);
> *size = n;
> return (0);
> }
> @@ -752,15 +738,12 @@ int
> pfi_set_flags(const char *name, int flags)
> {
> struct pfi_kif *p;
> - int s;
>
> - s = splsoftnet();
> RB_FOREACH(p, pfi_ifhead, &pfi_ifs) {
> if (pfi_skip_if(name, p))
> continue;
> p->pfik_flags_new = p->pfik_flags | flags;
> }
> - splx(s);
> return (0);
> }
>
> @@ -768,15 +751,12 @@ int
> pfi_clear_flags(const char *name, int flags)
> {
> struct pfi_kif *p;
> - int s;
>
> - s = splsoftnet();
> RB_FOREACH(p, pfi_ifhead, &pfi_ifs) {
> if (pfi_skip_if(name, p))
> continue;
> p->pfik_flags_new = p->pfik_flags & ~flags;
> }
> - splx(s);
> return (0);
> }
>
> @@ -784,12 +764,9 @@ void
> pfi_xcommit(void)
> {
> struct pfi_kif *p;
> - int s;
>
> - s = splsoftnet();
> RB_FOREACH(p, pfi_ifhead, &pfi_ifs)
> p->pfik_flags = p->pfik_flags_new;
> - splx(s);
> }
>
> /* from pf_print_state.c */
> Index: net/pf_ioctl.c
> ===================================================================
> RCS file: /cvs/src/sys/net/pf_ioctl.c,v
> retrieving revision 1.304
> diff -u -p -r1.304 pf_ioctl.c
> --- net/pf_ioctl.c 28 Oct 2016 07:54:19 -0000 1.304
> +++ net/pf_ioctl.c 15 Nov 2016 14:26:42 -0000
> @@ -769,7 +769,7 @@ pf_commit_rules(u_int32_t ticket, char *
> struct pf_ruleset *rs;
> struct pf_rule *rule, **old_array;
> struct pf_rulequeue *old_rules;
> - int s, error;
> + int error;
> u_int32_t old_rcount;
>
> /* Make sure any expired rules get removed from active rules first. */
> @@ -788,7 +788,6 @@ pf_commit_rules(u_int32_t ticket, char *
> }
>
> /* Swap rules, keep the old. */
> - s = splsoftnet();
> old_rules = rs->rules.active.ptr;
> old_rcount = rs->rules.active.rcount;
> old_array = rs->rules.active.ptr_array;
> @@ -813,7 +812,6 @@ pf_commit_rules(u_int32_t ticket, char *
> rs->rules.inactive.rcount = 0;
> rs->rules.inactive.open = 0;
> pf_remove_if_empty_ruleset(rs);
> - splx(s);
>
> /* queue defs only in the main ruleset */
> if (anchor[0])