aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/sfxge
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/dev/sfxge
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/dev/sfxge')
-rw-r--r--sys/dev/sfxge/sfxge.c25
-rw-r--r--sys/dev/sfxge/sfxge_ev.c33
-rw-r--r--sys/dev/sfxge/sfxge_port.c25
-rw-r--r--sys/dev/sfxge/sfxge_rx.c14
-rw-r--r--sys/dev/sfxge/sfxge_tx.c26
5 files changed, 55 insertions, 68 deletions
diff --git a/sys/dev/sfxge/sfxge.c b/sys/dev/sfxge/sfxge.c
index 7932e204ddf5..b9ee63569d99 100644
--- a/sys/dev/sfxge/sfxge.c
+++ b/sys/dev/sfxge/sfxge.c
@@ -86,8 +86,8 @@ __FBSDID("$FreeBSD$");
MALLOC_DEFINE(M_SFXGE, "sfxge", "Solarflare 10GigE driver");
-SYSCTL_NODE(_hw, OID_AUTO, sfxge, CTLFLAG_RD, 0,
- "SFXGE driver parameters");
+SYSCTL_NODE(_hw, OID_AUTO, sfxge, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
+ "SFXGE driver parameters");
#define SFXGE_PARAM_RX_RING SFXGE_PARAM(rx_ring)
static int sfxge_rx_ring_entries = SFXGE_NDESCS;
@@ -704,10 +704,9 @@ sfxge_create(struct sfxge_softc *sc)
TUNABLE_INT_FETCH(mcdi_log_param_name, &sc->mcdi_logging);
#endif
- sc->stats_node = SYSCTL_ADD_NODE(
- device_get_sysctl_ctx(dev),
- SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
- OID_AUTO, "stats", CTLFLAG_RD, NULL, "Statistics");
+ sc->stats_node = SYSCTL_ADD_NODE(device_get_sysctl_ctx(dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "stats",
+ CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Statistics");
if (sc->stats_node == NULL) {
error = ENOMEM;
goto fail;
@@ -970,10 +969,10 @@ sfxge_vpd_try_add(struct sfxge_softc *sc, struct sysctl_oid_list *list,
if (efx_vpd_get(sc->enp, sc->vpd_data, sc->vpd_size, &value) != 0)
return;
- SYSCTL_ADD_PROC(
- ctx, list, OID_AUTO, keyword, CTLTYPE_STRING|CTLFLAG_RD,
- sc, tag << 16 | EFX_VPD_KEYWORD(keyword[0], keyword[1]),
- sfxge_vpd_handler, "A", "");
+ SYSCTL_ADD_PROC(ctx, list, OID_AUTO, keyword,
+ CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
+ sc, tag << 16 | EFX_VPD_KEYWORD(keyword[0], keyword[1]),
+ sfxge_vpd_handler, "A", "");
}
static int
@@ -1007,9 +1006,9 @@ sfxge_vpd_init(struct sfxge_softc *sc)
device_printf(sc->dev, "%s\n", value.evv_value);
}
- vpd_node = SYSCTL_ADD_NODE(
- ctx, SYSCTL_CHILDREN(device_get_sysctl_tree(sc->dev)),
- OID_AUTO, "vpd", CTLFLAG_RD, NULL, "Vital Product Data");
+ vpd_node = SYSCTL_ADD_NODE(ctx,
+ SYSCTL_CHILDREN(device_get_sysctl_tree(sc->dev)), OID_AUTO, "vpd",
+ CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Vital Product Data");
vpd_list = SYSCTL_CHILDREN(vpd_node);
/* Add sysctls for all expected and any vendor-defined keywords. */
diff --git a/sys/dev/sfxge/sfxge_ev.c b/sys/dev/sfxge/sfxge_ev.c
index ea452c9e13e6..bcc18fb31d64 100644
--- a/sys/dev/sfxge/sfxge_ev.c
+++ b/sys/dev/sfxge/sfxge_ev.c
@@ -494,18 +494,16 @@ sfxge_evq_stat_init(struct sfxge_evq *evq)
snprintf(name, sizeof(name), "%u", evq->index);
evq_stats_node = SYSCTL_ADD_NODE(ctx,
- SYSCTL_CHILDREN(sc->evqs_stats_node),
- OID_AUTO, name, CTLFLAG_RD, NULL, "");
+ SYSCTL_CHILDREN(sc->evqs_stats_node), OID_AUTO, name,
+ CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "");
if (evq_stats_node == NULL)
return (ENOMEM);
for (id = 0; id < EV_NQSTATS; id++) {
- SYSCTL_ADD_PROC(
- ctx, SYSCTL_CHILDREN(evq_stats_node),
- OID_AUTO, efx_ev_qstat_name(sc->enp, id),
- CTLTYPE_U64|CTLFLAG_RD,
- evq, id, sfxge_evq_stat_handler, "Q",
- "");
+ SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(evq_stats_node),
+ OID_AUTO, efx_ev_qstat_name(sc->enp, id),
+ CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_MPSAFE, evq, id,
+ sfxge_evq_stat_handler, "Q", "");
}
return (0);
@@ -564,11 +562,9 @@ sfxge_ev_stat_init(struct sfxge_softc *sc)
for (id = 0; id < EV_NQSTATS; id++) {
snprintf(name, sizeof(name), "ev_%s",
efx_ev_qstat_name(sc->enp, id));
- SYSCTL_ADD_PROC(
- ctx, stat_list,
- OID_AUTO, name, CTLTYPE_U64|CTLFLAG_RD,
- sc, id, sfxge_ev_stat_handler, "Q",
- "");
+ SYSCTL_ADD_PROC(ctx, stat_list, OID_AUTO, name,
+ CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_MPSAFE,
+ sc, id, sfxge_ev_stat_handler, "Q", "");
}
}
@@ -1004,14 +1000,15 @@ sfxge_ev_init(struct sfxge_softc *sc)
*/
sc->ev_moderation = SFXGE_MODERATION;
SYSCTL_ADD_PROC(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree),
- OID_AUTO, "int_mod", CTLTYPE_UINT|CTLFLAG_RW,
- sc, 0, sfxge_int_mod_handler, "IU",
- "sfxge interrupt moderation (us)");
+ OID_AUTO, "int_mod", CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE,
+ sc, 0, sfxge_int_mod_handler, "IU",
+ "sfxge interrupt moderation (us)");
#if EFSYS_OPT_QSTATS
sc->evqs_stats_node = SYSCTL_ADD_NODE(
- device_get_sysctl_ctx(sc->dev), SYSCTL_CHILDREN(sc->stats_node),
- OID_AUTO, "evq", CTLFLAG_RD, NULL, "Event queues stats");
+ device_get_sysctl_ctx(sc->dev), SYSCTL_CHILDREN(sc->stats_node),
+ OID_AUTO, "evq", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
+ "Event queues stats");
if (sc->evqs_stats_node == NULL) {
rc = ENOMEM;
goto fail_evqs_stats_node;
diff --git a/sys/dev/sfxge/sfxge_port.c b/sys/dev/sfxge/sfxge_port.c
index 3407a176d863..2100d1d647cd 100644
--- a/sys/dev/sfxge/sfxge_port.c
+++ b/sys/dev/sfxge/sfxge_port.c
@@ -194,11 +194,9 @@ sfxge_mac_stat_init(struct sfxge_softc *sc)
/* Initialise the named stats */
for (id = 0; id < EFX_MAC_NSTATS; id++) {
name = efx_mac_stat_name(sc->enp, id);
- SYSCTL_ADD_PROC(
- ctx, stat_list,
- OID_AUTO, name, CTLTYPE_U64|CTLFLAG_RD,
- sc, id, sfxge_mac_stat_handler, "Q",
- "");
+ SYSCTL_ADD_PROC(ctx, stat_list, OID_AUTO, name,
+ CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_MPSAFE,
+ sc, id, sfxge_mac_stat_handler, "Q", "");
}
}
@@ -650,12 +648,10 @@ sfxge_phy_stat_init(struct sfxge_softc *sc)
if (!(stat_mask & ((uint64_t)1 << id)))
continue;
name = efx_phy_stat_name(sc->enp, id);
- SYSCTL_ADD_PROC(
- ctx, stat_list,
- OID_AUTO, name, CTLTYPE_UINT|CTLFLAG_RD,
- sc, id, sfxge_phy_stat_handler,
- id == EFX_PHY_STAT_OUI ? "IX" : "IU",
- "");
+ SYSCTL_ADD_PROC(ctx, stat_list, OID_AUTO, name,
+ CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE,
+ sc, id, sfxge_phy_stat_handler,
+ id == EFX_PHY_STAT_OUI ? "IX" : "IU", "");
}
}
@@ -787,10 +783,10 @@ sfxge_port_init(struct sfxge_softc *sc)
* ifmedia, provide sysctls for it. */
port->wanted_fc = EFX_FCNTL_RESPOND | EFX_FCNTL_GENERATE;
SYSCTL_ADD_PROC(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
- "wanted_fc", CTLTYPE_UINT|CTLFLAG_RW, sc, 0,
+ "wanted_fc", CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0,
sfxge_port_wanted_fc_handler, "IU", "wanted flow control mode");
SYSCTL_ADD_PROC(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
- "link_fc", CTLTYPE_UINT|CTLFLAG_RD, sc, 0,
+ "link_fc", CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
sfxge_port_link_fc_handler, "IU", "link flow control mode");
#endif
@@ -806,7 +802,8 @@ sfxge_port_init(struct sfxge_softc *sc)
sfxge_mac_stat_init(sc);
SYSCTL_ADD_PROC(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
- "stats_update_period_ms", CTLTYPE_UINT|CTLFLAG_RW, sc, 0,
+ "stats_update_period_ms",
+ CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0,
sfxge_port_stats_update_period_ms_handler, "IU",
"interface statistics refresh period");
diff --git a/sys/dev/sfxge/sfxge_rx.c b/sys/dev/sfxge/sfxge_rx.c
index cb1caae80165..c1fd93728594 100644
--- a/sys/dev/sfxge/sfxge_rx.c
+++ b/sys/dev/sfxge/sfxge_rx.c
@@ -73,8 +73,8 @@ __FBSDID("$FreeBSD$");
#ifdef SFXGE_LRO
-SYSCTL_NODE(_hw_sfxge, OID_AUTO, lro, CTLFLAG_RD, NULL,
- "Large receive offload (LRO) parameters");
+SYSCTL_NODE(_hw_sfxge, OID_AUTO, lro, CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
+ "Large receive offload (LRO) parameters");
#define SFXGE_LRO_PARAM(_param) SFXGE_PARAM(lro._param)
@@ -1356,12 +1356,10 @@ sfxge_rx_stat_init(struct sfxge_softc *sc)
stat_list = SYSCTL_CHILDREN(sc->stats_node);
for (id = 0; id < nitems(sfxge_rx_stats); id++) {
- SYSCTL_ADD_PROC(
- ctx, stat_list,
- OID_AUTO, sfxge_rx_stats[id].name,
- CTLTYPE_UINT|CTLFLAG_RD,
- sc, id, sfxge_rx_stat_handler, "IU",
- "");
+ SYSCTL_ADD_PROC(ctx, stat_list, OID_AUTO,
+ sfxge_rx_stats[id].name,
+ CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
+ sc, id, sfxge_rx_stat_handler, "IU", "");
}
}
diff --git a/sys/dev/sfxge/sfxge_tx.c b/sys/dev/sfxge/sfxge_tx.c
index 25841e10e381..bdf698881301 100644
--- a/sys/dev/sfxge/sfxge_tx.c
+++ b/sys/dev/sfxge/sfxge_tx.c
@@ -1760,8 +1760,7 @@ sfxge_txq_stat_init(struct sfxge_txq *txq, struct sysctl_oid *txq_node)
unsigned int id;
stat_node = SYSCTL_ADD_NODE(ctx, SYSCTL_CHILDREN(txq_node), OID_AUTO,
- "stats", CTLFLAG_RD, NULL,
- "Tx queue statistics");
+ "stats", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Tx queue statistics");
if (stat_node == NULL)
return (ENOMEM);
@@ -1872,7 +1871,7 @@ sfxge_tx_qinit(struct sfxge_softc *sc, unsigned int txq_index,
snprintf(name, sizeof(name), "%u", txq_index);
txq_node = SYSCTL_ADD_NODE(ctx, SYSCTL_CHILDREN(sc->txqs_node),
- OID_AUTO, name, CTLFLAG_RD, NULL, "");
+ OID_AUTO, name, CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "");
if (txq_node == NULL) {
rc = ENOMEM;
goto fail_txq_node;
@@ -1892,8 +1891,8 @@ sfxge_tx_qinit(struct sfxge_softc *sc, unsigned int txq_index,
SFXGE_TXQ_LOCK_INIT(txq, device_get_nameunit(sc->dev), txq_index);
dpl_node = SYSCTL_ADD_NODE(ctx, SYSCTL_CHILDREN(txq_node), OID_AUTO,
- "dpl", CTLFLAG_RD, NULL,
- "Deferred packet list statistics");
+ "dpl", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
+ "Deferred packet list statistics");
if (dpl_node == NULL) {
rc = ENOMEM;
goto fail_dpl_node;
@@ -1966,12 +1965,10 @@ sfxge_tx_stat_init(struct sfxge_softc *sc)
stat_list = SYSCTL_CHILDREN(sc->stats_node);
for (id = 0; id < nitems(sfxge_tx_stats); id++) {
- SYSCTL_ADD_PROC(
- ctx, stat_list,
- OID_AUTO, sfxge_tx_stats[id].name,
- CTLTYPE_ULONG|CTLFLAG_RD,
- sc, id, sfxge_tx_stat_handler, "LU",
- "");
+ SYSCTL_ADD_PROC(ctx, stat_list, OID_AUTO,
+ sfxge_tx_stats[id].name,
+ CTLTYPE_ULONG | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
+ sc, id, sfxge_tx_stat_handler, "LU", "");
}
}
@@ -2054,10 +2051,9 @@ sfxge_tx_init(struct sfxge_softc *sc)
(!encp->enc_fw_assisted_tso_v2_enabled))
sc->tso_fw_assisted &= ~SFXGE_FATSOV2;
- sc->txqs_node = SYSCTL_ADD_NODE(
- device_get_sysctl_ctx(sc->dev),
- SYSCTL_CHILDREN(device_get_sysctl_tree(sc->dev)),
- OID_AUTO, "txq", CTLFLAG_RD, NULL, "Tx queues");
+ sc->txqs_node = SYSCTL_ADD_NODE(device_get_sysctl_ctx(sc->dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(sc->dev)), OID_AUTO,
+ "txq", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Tx queues");
if (sc->txqs_node == NULL) {
rc = ENOMEM;
goto fail_txq_node;