aboutsummaryrefslogtreecommitdiff
path: root/sys/net
diff options
context:
space:
mode:
authorPawel Biernacki <kaktus@FreeBSD.org>2020-02-26 14:26:36 +0000
committerPawel Biernacki <kaktus@FreeBSD.org>2020-02-26 14:26:36 +0000
commit7029da5c36f2d3cf6bb6c81bf551229f416399e8 (patch)
tree53cae9da1371117a3ac21d0d0f3f030a692807ae /sys/net
parentd7313dc6f5fcab29946951936597772dfff6a4be (diff)
downloadsrc-7029da5c36f2d3cf6bb6c81bf551229f416399e8.tar.gz
src-7029da5c36f2d3cf6bb6c81bf551229f416399e8.zip
Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many)
r357614 added CTLFLAG_NEEDGIANT to make it easier to find nodes that are still not MPSAFE (or already are but aren’t properly marked). Use it in preparation for a general review of all nodes. This is non-functional change that adds annotations to SYSCTL_NODE and SYSCTL_PROC nodes using one of the soon-to-be-required flags. Mark all obvious cases as MPSAFE. All entries that haven't been marked as MPSAFE before are by default marked as NEEDGIANT Approved by: kib (mentor, blanket) Commented by: kib, gallatin, melifaro Differential Revision: https://reviews.freebsd.org/D23718
Notes
Notes: svn path=/head/; revision=358333
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/bpf.c3
-rw-r--r--sys/net/bpf_jitter.c3
-rw-r--r--sys/net/debugnet.c2
-rw-r--r--sys/net/ieee8023ad_lacp.c3
-rw-r--r--sys/net/if.c6
-rw-r--r--sys/net/if_bridge.c5
-rw-r--r--sys/net/if_enc.c9
-rw-r--r--sys/net/if_epair.c8
-rw-r--r--sys/net/if_ethersubr.c8
-rw-r--r--sys/net/if_gif.c2
-rw-r--r--sys/net/if_gre.c2
-rw-r--r--sys/net/if_lagg.c2
-rw-r--r--sys/net/if_me.c2
-rw-r--r--sys/net/if_mib.c10
-rw-r--r--sys/net/if_stf.c3
-rw-r--r--sys/net/if_tuntap.c4
-rw-r--r--sys/net/if_vxlan.c8
-rw-r--r--sys/net/iflib.c31
-rw-r--r--sys/net/netisr.c6
-rw-r--r--sys/net/raw_cb.c2
-rw-r--r--sys/net/route.c6
-rw-r--r--sys/net/rss_config.c5
-rw-r--r--sys/net/rtsock.c6
-rw-r--r--sys/net/vnet.h3
24 files changed, 82 insertions, 57 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index 2d4f31369862..5f29684c3faa 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -214,7 +214,8 @@ static int filt_bpfread(struct knote *, long);
static void bpf_drvinit(void *);
static int bpf_stats_sysctl(SYSCTL_HANDLER_ARGS);
-SYSCTL_NODE(_net, OID_AUTO, bpf, CTLFLAG_RW, 0, "bpf sysctl");
+SYSCTL_NODE(_net, OID_AUTO, bpf, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "bpf sysctl");
int bpf_maxinsns = BPF_MAXINSNS;
SYSCTL_INT(_net_bpf, OID_AUTO, maxinsns, CTLFLAG_RW,
&bpf_maxinsns, 0, "Maximum bpf program instructions");
diff --git a/sys/net/bpf_jitter.c b/sys/net/bpf_jitter.c
index abe7bfa465fd..8fd8c1e411b2 100644
--- a/sys/net/bpf_jitter.c
+++ b/sys/net/bpf_jitter.c
@@ -57,7 +57,8 @@ static u_int bpf_jit_accept_all(u_char *, u_int, u_int);
#ifdef _KERNEL
MALLOC_DEFINE(M_BPFJIT, "BPF_JIT", "BPF JIT compiler");
-SYSCTL_NODE(_net, OID_AUTO, bpf_jitter, CTLFLAG_RW, 0, "BPF JIT compiler");
+SYSCTL_NODE(_net, OID_AUTO, bpf_jitter, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "BPF JIT compiler");
int bpf_jitter_enable = 1;
SYSCTL_INT(_net_bpf_jitter, OID_AUTO, enable, CTLFLAG_RW,
&bpf_jitter_enable, 0, "enable BPF JIT compiler");
diff --git a/sys/net/debugnet.c b/sys/net/debugnet.c
index 1090b2d3f4df..a69482d47c74 100644
--- a/sys/net/debugnet.c
+++ b/sys/net/debugnet.c
@@ -72,7 +72,7 @@ __FBSDID("$FreeBSD$");
FEATURE(debugnet, "Debugnet support");
-SYSCTL_NODE(_net, OID_AUTO, debugnet, CTLFLAG_RD, NULL,
+SYSCTL_NODE(_net, OID_AUTO, debugnet, CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"debugnet parameters");
unsigned debugnet_debug;
diff --git a/sys/net/ieee8023ad_lacp.c b/sys/net/ieee8023ad_lacp.c
index c5e4125d1d8b..907c7f958cdd 100644
--- a/sys/net/ieee8023ad_lacp.c
+++ b/sys/net/ieee8023ad_lacp.c
@@ -197,7 +197,8 @@ static void lacp_dprintf(const struct lacp_port *, const char *, ...)
VNET_DEFINE_STATIC(int, lacp_debug);
#define V_lacp_debug VNET(lacp_debug)
-SYSCTL_NODE(_net_link_lagg, OID_AUTO, lacp, CTLFLAG_RD, 0, "ieee802.3ad");
+SYSCTL_NODE(_net_link_lagg, OID_AUTO, lacp, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
+ "ieee802.3ad");
SYSCTL_INT(_net_link_lagg_lacp, OID_AUTO, debug, CTLFLAG_RWTUN | CTLFLAG_VNET,
&VNET_NAME(lacp_debug), 0, "Enable LACP debug logging (1=debug, 2=trace)");
diff --git a/sys/net/if.c b/sys/net/if.c
index d1c3cfba811c..a69f1b7f438f 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -192,8 +192,10 @@ union ifgroupreq_union {
#endif
};
-SYSCTL_NODE(_net, PF_LINK, link, CTLFLAG_RW, 0, "Link layers");
-SYSCTL_NODE(_net_link, 0, generic, CTLFLAG_RW, 0, "Generic link-management");
+SYSCTL_NODE(_net, PF_LINK, link, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "Link layers");
+SYSCTL_NODE(_net_link, 0, generic, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "Generic link-management");
SYSCTL_INT(_net_link, OID_AUTO, ifqmaxlen, CTLFLAG_RDTUN,
&ifqmaxlen, 0, "max send queue size");
diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c
index e619abf1f37c..f2521e7dd3c1 100644
--- a/sys/net/if_bridge.c
+++ b/sys/net/if_bridge.c
@@ -401,7 +401,8 @@ static struct bstp_cb_ops bridge_ops = {
};
SYSCTL_DECL(_net_link);
-static SYSCTL_NODE(_net_link, IFT_BRIDGE, bridge, CTLFLAG_RW, 0, "Bridge");
+static SYSCTL_NODE(_net_link, IFT_BRIDGE, bridge, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "Bridge");
/* only pass IP[46] packets when pfil is enabled */
VNET_DEFINE_STATIC(int, pfil_onlyip) = 1;
@@ -663,7 +664,7 @@ sysctl_pfil_ipfw(SYSCTL_HANDLER_ARGS)
return (error);
}
SYSCTL_PROC(_net_link_bridge, OID_AUTO, ipfw,
- CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_VNET,
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_VNET | CTLFLAG_NEEDGIANT,
&VNET_NAME(pfil_ipfw), 0, &sysctl_pfil_ipfw, "I",
"Layer2 filter with IPFW");
diff --git a/sys/net/if_enc.c b/sys/net/if_enc.c
index 7bb196b672c1..26886d0052bb 100644
--- a/sys/net/if_enc.c
+++ b/sys/net/if_enc.c
@@ -120,9 +120,12 @@ VNET_DEFINE_STATIC(int, bpf_mask_out) = IPSEC_ENC_BEFORE | IPSEC_ENC_AFTER;
#define V_filter_mask_out VNET(filter_mask_out)
#define V_bpf_mask_out VNET(bpf_mask_out)
-static SYSCTL_NODE(_net, OID_AUTO, enc, CTLFLAG_RW, 0, "enc sysctl");
-static SYSCTL_NODE(_net_enc, OID_AUTO, in, CTLFLAG_RW, 0, "enc input sysctl");
-static SYSCTL_NODE(_net_enc, OID_AUTO, out, CTLFLAG_RW, 0, "enc output sysctl");
+static SYSCTL_NODE(_net, OID_AUTO, enc, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "enc sysctl");
+static SYSCTL_NODE(_net_enc, OID_AUTO, in, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "enc input sysctl");
+static SYSCTL_NODE(_net_enc, OID_AUTO, out, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "enc output sysctl");
SYSCTL_INT(_net_enc_in, OID_AUTO, ipsec_filter_mask,
CTLFLAG_RW | CTLFLAG_VNET, &VNET_NAME(filter_mask_in), 0,
"IPsec input firewall filter mask");
diff --git a/sys/net/if_epair.c b/sys/net/if_epair.c
index 376bdbe9117f..63e3d5e862b8 100644
--- a/sys/net/if_epair.c
+++ b/sys/net/if_epair.c
@@ -81,7 +81,8 @@ __FBSDID("$FreeBSD$");
#include <net/vnet.h>
SYSCTL_DECL(_net_link);
-static SYSCTL_NODE(_net_link, OID_AUTO, epair, CTLFLAG_RW, 0, "epair sysctl");
+static SYSCTL_NODE(_net_link, OID_AUTO, epair, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "epair sysctl");
#ifdef EPAIR_DEBUG
static int epair_debug = 0;
@@ -132,8 +133,9 @@ sysctl_epair_netisr_maxqlen(SYSCTL_HANDLER_ARGS)
return (EINVAL);
return (netisr_setqlimit(&epair_nh, qlimit));
}
-SYSCTL_PROC(_net_link_epair, OID_AUTO, netisr_maxqlen, CTLTYPE_INT|CTLFLAG_RW,
- 0, 0, sysctl_epair_netisr_maxqlen, "I",
+SYSCTL_PROC(_net_link_epair, OID_AUTO, netisr_maxqlen,
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, 0, 0,
+ sysctl_epair_netisr_maxqlen, "I",
"Maximum if_epair(4) netisr \"hw\" queue length");
struct epair_softc {
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index 6d33173462cb..d005ada179db 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -1052,7 +1052,8 @@ ether_reassign(struct ifnet *ifp, struct vnet *new_vnet, char *unused __unused)
#endif
SYSCTL_DECL(_net_link);
-SYSCTL_NODE(_net_link, IFT_ETHER, ether, CTLFLAG_RW, 0, "Ethernet");
+SYSCTL_NODE(_net_link, IFT_ETHER, ether, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "Ethernet");
#if 0
/*
@@ -1334,9 +1335,10 @@ ether_vlanencap(struct mbuf *m, uint16_t tag)
return (m);
}
-static SYSCTL_NODE(_net_link, IFT_L2VLAN, vlan, CTLFLAG_RW, 0,
+static SYSCTL_NODE(_net_link, IFT_L2VLAN, vlan, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"IEEE 802.1Q VLAN");
-static SYSCTL_NODE(_net_link_vlan, PF_LINK, link, CTLFLAG_RW, 0,
+static SYSCTL_NODE(_net_link_vlan, PF_LINK, link,
+ CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"for consistency");
VNET_DEFINE_STATIC(int, soft_pad);
diff --git a/sys/net/if_gif.c b/sys/net/if_gif.c
index 5985eba63a0d..94e88615d3bb 100644
--- a/sys/net/if_gif.c
+++ b/sys/net/if_gif.c
@@ -114,7 +114,7 @@ VNET_DEFINE_STATIC(struct if_clone *, gif_cloner);
#define V_gif_cloner VNET(gif_cloner)
SYSCTL_DECL(_net_link);
-static SYSCTL_NODE(_net_link, IFT_GIF, gif, CTLFLAG_RW, 0,
+static SYSCTL_NODE(_net_link, IFT_GIF, gif, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"Generic Tunnel Interface");
#ifndef MAX_GIF_NEST
/*
diff --git a/sys/net/if_gre.c b/sys/net/if_gre.c
index 91eb0d69b812..bd940b579393 100644
--- a/sys/net/if_gre.c
+++ b/sys/net/if_gre.c
@@ -115,7 +115,7 @@ static int gre_output(struct ifnet *, struct mbuf *,
static void gre_delete_tunnel(struct gre_softc *);
SYSCTL_DECL(_net_link);
-static SYSCTL_NODE(_net_link, IFT_TUNNEL, gre, CTLFLAG_RW, 0,
+static SYSCTL_NODE(_net_link, IFT_TUNNEL, gre, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"Generic Routing Encapsulation");
#ifndef MAX_GRE_NEST
/*
diff --git a/sys/net/if_lagg.c b/sys/net/if_lagg.c
index d38f772f6895..37b3a708f8a9 100644
--- a/sys/net/if_lagg.c
+++ b/sys/net/if_lagg.c
@@ -268,7 +268,7 @@ static const struct lagg_proto {
};
SYSCTL_DECL(_net_link);
-SYSCTL_NODE(_net_link, OID_AUTO, lagg, CTLFLAG_RW, 0,
+SYSCTL_NODE(_net_link, OID_AUTO, lagg, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"Link Aggregation");
/* Allow input on any failover links */
diff --git a/sys/net/if_me.c b/sys/net/if_me.c
index 4d11b5930841..6e4e49cac5b9 100644
--- a/sys/net/if_me.c
+++ b/sys/net/if_me.c
@@ -124,7 +124,7 @@ static int me_set_tunnel(struct me_softc *, in_addr_t, in_addr_t);
static void me_delete_tunnel(struct me_softc *);
SYSCTL_DECL(_net_link);
-static SYSCTL_NODE(_net_link, IFT_TUNNEL, me, CTLFLAG_RW, 0,
+static SYSCTL_NODE(_net_link, IFT_TUNNEL, me, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"Minimal Encapsulation for IP (RFC 2004)");
#ifndef MAX_ME_NEST
#define MAX_ME_NEST 1
diff --git a/sys/net/if_mib.c b/sys/net/if_mib.c
index 198e45691e03..ff5e61029762 100644
--- a/sys/net/if_mib.c
+++ b/sys/net/if_mib.c
@@ -65,8 +65,9 @@
*/
SYSCTL_DECL(_net_link_generic);
-static SYSCTL_NODE(_net_link_generic, IFMIB_SYSTEM, system, CTLFLAG_RW, 0,
- "Variables global to all interfaces");
+static SYSCTL_NODE(_net_link_generic, IFMIB_SYSTEM, system,
+ CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "Variables global to all interfaces");
SYSCTL_INT(_net_link_generic_system, IFMIB_IFCOUNT, ifcount,
CTLFLAG_VNET | CTLFLAG_RD, &VNET_NAME(if_index), 0,
@@ -150,6 +151,7 @@ out:
return error;
}
-static SYSCTL_NODE(_net_link_generic, IFMIB_IFDATA, ifdata, CTLFLAG_RW,
- sysctl_ifdata, "Interface table");
+static SYSCTL_NODE(_net_link_generic, IFMIB_IFDATA, ifdata,
+ CTLFLAG_RW | CTLFLAG_NEEDGIANT, sysctl_ifdata,
+ "Interface table");
diff --git a/sys/net/if_stf.c b/sys/net/if_stf.c
index 3cf59b11c833..f7a07d98ee4e 100644
--- a/sys/net/if_stf.c
+++ b/sys/net/if_stf.c
@@ -122,7 +122,8 @@
#include <security/mac/mac_framework.h>
SYSCTL_DECL(_net_link);
-static SYSCTL_NODE(_net_link, IFT_STF, stf, CTLFLAG_RW, 0, "6to4 Interface");
+static SYSCTL_NODE(_net_link, IFT_STF, stf, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "6to4 Interface");
static int stf_permit_rfc1918 = 0;
SYSCTL_INT(_net_link_stf, OID_AUTO, permit_rfc1918, CTLFLAG_RWTUN,
diff --git a/sys/net/if_tuntap.c b/sys/net/if_tuntap.c
index ab22d8402c30..00b4a0a44ad1 100644
--- a/sys/net/if_tuntap.c
+++ b/sys/net/if_tuntap.c
@@ -195,13 +195,13 @@ SX_SYSINIT(tun_ioctl_sx, &tun_ioctl_sx, "tun_ioctl");
SYSCTL_DECL(_net_link);
/* tun */
-static SYSCTL_NODE(_net_link, OID_AUTO, tun, CTLFLAG_RW, 0,
+static SYSCTL_NODE(_net_link, OID_AUTO, tun, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"IP tunnel software network interface");
SYSCTL_INT(_net_link_tun, OID_AUTO, devfs_cloning, CTLFLAG_RWTUN, &tundclone, 0,
"Enable legacy devfs interface creation");
/* tap */
-static SYSCTL_NODE(_net_link, OID_AUTO, tap, CTLFLAG_RW, 0,
+static SYSCTL_NODE(_net_link, OID_AUTO, tap, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"Ethernet tunnel software network interface");
SYSCTL_INT(_net_link_tap, OID_AUTO, user_open, CTLFLAG_RW, &tap_allow_uopen, 0,
"Enable legacy devfs interface creation for all users");
diff --git a/sys/net/if_vxlan.c b/sys/net/if_vxlan.c
index ac83ff183d74..66f6fe1ac632 100644
--- a/sys/net/if_vxlan.c
+++ b/sys/net/if_vxlan.c
@@ -399,7 +399,7 @@ static LIST_HEAD(, vxlan_socket) vxlan_socket_list;
static eventhandler_tag vxlan_ifdetach_event_tag;
SYSCTL_DECL(_net_link);
-SYSCTL_NODE(_net_link, OID_AUTO, vxlan, CTLFLAG_RW, 0,
+SYSCTL_NODE(_net_link, OID_AUTO, vxlan, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"Virtual eXtensible Local Area Network");
static int vxlan_legacy_port = 0;
@@ -3060,10 +3060,10 @@ vxlan_sysctl_setup(struct vxlan_softc *sc)
sysctl_ctx_init(ctx);
sc->vxl_sysctl_node = SYSCTL_ADD_NODE(ctx,
SYSCTL_STATIC_CHILDREN(_net_link_vxlan), OID_AUTO, namebuf,
- CTLFLAG_RD, NULL, "");
+ CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "");
node = SYSCTL_ADD_NODE(ctx, SYSCTL_CHILDREN(sc->vxl_sysctl_node),
- OID_AUTO, "ftable", CTLFLAG_RD, NULL, "");
+ OID_AUTO, "ftable", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "");
SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(node), OID_AUTO, "count",
CTLFLAG_RD, &sc->vxl_ftable_cnt, 0,
"Number of entries in fowarding table");
@@ -3079,7 +3079,7 @@ vxlan_sysctl_setup(struct vxlan_softc *sc)
"Dump the forwarding table entries");
node = SYSCTL_ADD_NODE(ctx, SYSCTL_CHILDREN(sc->vxl_sysctl_node),
- OID_AUTO, "stats", CTLFLAG_RD, NULL, "");
+ OID_AUTO, "stats", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "");
SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(node), OID_AUTO,
"ftable_nospace", CTLFLAG_RD, &stats->ftable_nospace, 0,
"Fowarding table reached maximum entries");
diff --git a/sys/net/iflib.c b/sys/net/iflib.c
index 95fbdbf7c446..30c09a7d43ad 100644
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -575,8 +575,8 @@ TASKQGROUP_DEFINE(if_config_tqg, 1, 1);
#endif /* !INVARIANTS */
#endif
-static SYSCTL_NODE(_net, OID_AUTO, iflib, CTLFLAG_RD, 0,
- "iflib driver parameters");
+static SYSCTL_NODE(_net, OID_AUTO, iflib, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
+ "iflib driver parameters");
/*
* XXX need to ensure that this can't accidentally cause the head to be moved backwards
@@ -6280,7 +6280,7 @@ iflib_add_int_delay_sysctl(if_ctx_t ctx, const char *name,
info->iidi_value = value;
SYSCTL_ADD_PROC(device_get_sysctl_ctx(ctx->ifc_dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(ctx->ifc_dev)),
- OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW,
+ OID_AUTO, name, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
info, 0, iflib_sysctl_int_delay, "I", description);
}
@@ -6542,7 +6542,7 @@ iflib_add_device_sysctl_pre(if_ctx_t ctx)
ctx_list = device_get_sysctl_ctx(dev);
child = SYSCTL_CHILDREN(device_get_sysctl_tree(dev));
ctx->ifc_sysctl_node = node = SYSCTL_ADD_NODE(ctx_list, child, OID_AUTO, "iflib",
- CTLFLAG_RD, NULL, "IFLIB fields");
+ CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "IFLIB fields");
oid_list = SYSCTL_CHILDREN(node);
SYSCTL_ADD_CONST_STRING(ctx_list, oid_list, OID_AUTO, "driver_version",
@@ -6577,13 +6577,13 @@ iflib_add_device_sysctl_pre(if_ctx_t ctx)
/* XXX change for per-queue sizes */
SYSCTL_ADD_PROC(ctx_list, oid_list, OID_AUTO, "override_ntxds",
- CTLTYPE_STRING|CTLFLAG_RWTUN, ctx, IFLIB_NTXD_HANDLER,
- mp_ndesc_handler, "A",
- "list of # of TX descriptors to use, 0 = use default #");
+ CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, ctx,
+ IFLIB_NTXD_HANDLER, mp_ndesc_handler, "A",
+ "list of # of TX descriptors to use, 0 = use default #");
SYSCTL_ADD_PROC(ctx_list, oid_list, OID_AUTO, "override_nrxds",
- CTLTYPE_STRING|CTLFLAG_RWTUN, ctx, IFLIB_NRXD_HANDLER,
- mp_ndesc_handler, "A",
- "list of # of RX descriptors to use, 0 = use default #");
+ CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, ctx,
+ IFLIB_NRXD_HANDLER, mp_ndesc_handler, "A",
+ "list of # of RX descriptors to use, 0 = use default #");
}
static void
@@ -6616,7 +6616,7 @@ iflib_add_device_sysctl_post(if_ctx_t ctx)
for (i = 0, txq = ctx->ifc_txqs; i < scctx->isc_ntxqsets; i++, txq++) {
snprintf(namebuf, NAME_BUFLEN, qfmt, i);
queue_node = SYSCTL_ADD_NODE(ctx_list, child, OID_AUTO, namebuf,
- CTLFLAG_RD, NULL, "Queue Name");
+ CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Queue Name");
queue_list = SYSCTL_CHILDREN(queue_node);
#if MEMORY_LOGGING
SYSCTL_ADD_QUAD(ctx_list, queue_list, OID_AUTO, "txq_dequeued",
@@ -6666,8 +6666,9 @@ iflib_add_device_sysctl_post(if_ctx_t ctx)
CTLFLAG_RD,
&txq->ift_cleaned, "total cleaned");
SYSCTL_ADD_PROC(ctx_list, queue_list, OID_AUTO, "ring_state",
- CTLTYPE_STRING | CTLFLAG_RD, __DEVOLATILE(uint64_t *, &txq->ift_br->state),
- 0, mp_ring_state_handler, "A", "soft ring state");
+ CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
+ __DEVOLATILE(uint64_t *, &txq->ift_br->state), 0,
+ mp_ring_state_handler, "A", "soft ring state");
SYSCTL_ADD_COUNTER_U64(ctx_list, queue_list, OID_AUTO, "r_enqueues",
CTLFLAG_RD, &txq->ift_br->enqueues,
"# of enqueues to the mp_ring for this queue");
@@ -6697,7 +6698,7 @@ iflib_add_device_sysctl_post(if_ctx_t ctx)
for (i = 0, rxq = ctx->ifc_rxqs; i < scctx->isc_nrxqsets; i++, rxq++) {
snprintf(namebuf, NAME_BUFLEN, qfmt, i);
queue_node = SYSCTL_ADD_NODE(ctx_list, child, OID_AUTO, namebuf,
- CTLFLAG_RD, NULL, "Queue Name");
+ CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Queue Name");
queue_list = SYSCTL_CHILDREN(queue_node);
if (sctx->isc_flags & IFLIB_HAS_RXCQ) {
SYSCTL_ADD_U16(ctx_list, queue_list, OID_AUTO, "rxq_cq_cidx",
@@ -6708,7 +6709,7 @@ iflib_add_device_sysctl_post(if_ctx_t ctx)
for (j = 0, fl = rxq->ifr_fl; j < rxq->ifr_nfl; j++, fl++) {
snprintf(namebuf, NAME_BUFLEN, "rxq_fl%d", j);
fl_node = SYSCTL_ADD_NODE(ctx_list, queue_list, OID_AUTO, namebuf,
- CTLFLAG_RD, NULL, "freelist Name");
+ CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "freelist Name");
fl_list = SYSCTL_CHILDREN(fl_node);
SYSCTL_ADD_U16(ctx_list, fl_list, OID_AUTO, "pidx",
CTLFLAG_RD,
diff --git a/sys/net/netisr.c b/sys/net/netisr.c
index 870015a487e8..05dc6273b50c 100644
--- a/sys/net/netisr.c
+++ b/sys/net/netisr.c
@@ -127,7 +127,8 @@ static struct rmlock netisr_rmlock;
#define NETISR_WUNLOCK() rm_wunlock(&netisr_rmlock)
/* #define NETISR_LOCKING */
-static SYSCTL_NODE(_net, OID_AUTO, isr, CTLFLAG_RW, 0, "netisr");
+static SYSCTL_NODE(_net, OID_AUTO, isr, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "netisr");
/*-
* Three global direct dispatch policies are supported:
@@ -152,7 +153,8 @@ static SYSCTL_NODE(_net, OID_AUTO, isr, CTLFLAG_RW, 0, "netisr");
#define NETISR_DISPATCH_POLICY_MAXSTR 20 /* Used for temporary buffers. */
static u_int netisr_dispatch_policy = NETISR_DISPATCH_POLICY_DEFAULT;
static int sysctl_netisr_dispatch_policy(SYSCTL_HANDLER_ARGS);
-SYSCTL_PROC(_net_isr, OID_AUTO, dispatch, CTLTYPE_STRING | CTLFLAG_RWTUN,
+SYSCTL_PROC(_net_isr, OID_AUTO, dispatch,
+ CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT,
0, 0, sysctl_netisr_dispatch_policy, "A",
"netisr dispatch policy");
diff --git a/sys/net/raw_cb.c b/sys/net/raw_cb.c
index fa2de5379b02..78a117a2c2d8 100644
--- a/sys/net/raw_cb.c
+++ b/sys/net/raw_cb.c
@@ -61,7 +61,7 @@
struct mtx rawcb_mtx;
VNET_DEFINE(struct rawcb_list_head, rawcb_list);
-static SYSCTL_NODE(_net, OID_AUTO, raw, CTLFLAG_RW, 0,
+static SYSCTL_NODE(_net, OID_AUTO, raw, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"Raw socket infrastructure");
static u_long raw_sendspace = RAWSNDQ;
diff --git a/sys/net/route.c b/sys/net/route.c
index 9ea93e74ca03..7343e6e0ead4 100644
--- a/sys/net/route.c
+++ b/sys/net/route.c
@@ -179,8 +179,10 @@ sysctl_my_fibnum(SYSCTL_HANDLER_ARGS)
return (error);
}
-SYSCTL_PROC(_net, OID_AUTO, my_fibnum, CTLTYPE_INT|CTLFLAG_RD,
- NULL, 0, &sysctl_my_fibnum, "I", "default FIB of caller");
+SYSCTL_PROC(_net, OID_AUTO, my_fibnum,
+ CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, 0,
+ &sysctl_my_fibnum, "I",
+ "default FIB of caller");
static __inline struct rib_head **
rt_tables_get_rnh_ptr(int table, int fam)
diff --git a/sys/net/rss_config.c b/sys/net/rss_config.c
index 0fc62c740a06..d0f62e1afef1 100644
--- a/sys/net/rss_config.c
+++ b/sys/net/rss_config.c
@@ -81,7 +81,8 @@ __FBSDID("$FreeBSD$");
*/
SYSCTL_DECL(_net_inet);
-SYSCTL_NODE(_net_inet, OID_AUTO, rss, CTLFLAG_RW, 0, "Receive-side steering");
+SYSCTL_NODE(_net_inet, OID_AUTO, rss, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
+ "Receive-side steering");
/*
* Toeplitz is the only required hash function in the RSS spec, so use it by
@@ -549,5 +550,5 @@ sysctl_rss_bucket_mapping(SYSCTL_HANDLER_ARGS)
return (error);
}
SYSCTL_PROC(_net_inet_rss, OID_AUTO, bucket_mapping,
- CTLTYPE_STRING | CTLFLAG_RD, NULL, 0,
+ CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, 0,
sysctl_rss_bucket_mapping, "", "RSS bucket -> CPU mapping");
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 74307fad4b62..521d2fdc3d99 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -158,7 +158,8 @@ MTX_SYSINIT(rtsock, &rtsock_mtx, "rtsock route_cb lock", MTX_DEF);
#define RTSOCK_UNLOCK() mtx_unlock(&rtsock_mtx)
#define RTSOCK_LOCK_ASSERT() mtx_assert(&rtsock_mtx, MA_OWNED)
-static SYSCTL_NODE(_net, OID_AUTO, route, CTLFLAG_RD, 0, "");
+static SYSCTL_NODE(_net, OID_AUTO, route, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
+ "");
struct walkarg {
int w_tmemsize;
@@ -211,7 +212,8 @@ sysctl_route_netisr_maxqlen(SYSCTL_HANDLER_ARGS)
return (EINVAL);
return (netisr_setqlimit(&rtsock_nh, qlimit));
}
-SYSCTL_PROC(_net_route, OID_AUTO, netisr_maxqlen, CTLTYPE_INT|CTLFLAG_RW,
+SYSCTL_PROC(_net_route, OID_AUTO, netisr_maxqlen,
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
0, 0, sysctl_route_netisr_maxqlen, "I",
"maximum routing socket dispatch queue length");
diff --git a/sys/net/vnet.h b/sys/net/vnet.h
index 3886da1ccace..a7ec773871b6 100644
--- a/sys/net/vnet.h
+++ b/sys/net/vnet.h
@@ -142,7 +142,8 @@ array##_sysctl(SYSCTL_HANDLER_ARGS) \
sizeof(type) / sizeof(uint64_t)); \
return (SYSCTL_OUT(req, &s, sizeof(type))); \
} \
-SYSCTL_PROC(parent, nbr, name, CTLFLAG_VNET | CTLTYPE_OPAQUE | CTLFLAG_RW, \
+SYSCTL_PROC(parent, nbr, name, \
+ CTLFLAG_VNET | CTLTYPE_OPAQUE | CTLFLAG_RW | CTLFLAG_NEEDGIANT, \
NULL, 0, array ## _sysctl, "I", desc)
#endif /* SYSCTL_OID */