git: a7494467d176 - stable/13 - cxgbe: Remove most uses of sysctl_wire_old_buffer
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 30 Nov 2024 16:51:34 UTC
The branch stable/13 has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=a7494467d1763b295c8fadde174ca954b4ac2bc9
commit a7494467d1763b295c8fadde174ca954b4ac2bc9
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2024-07-03 15:04:52 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2024-11-29 19:23:05 +0000
cxgbe: Remove most uses of sysctl_wire_old_buffer
Most of these sysctls don't call sbuf_* while holding any locks. Of
the ones that do hold locks, all but one can be fixed to drop the lock
before calling sbuf_*.
Reviewed by: np
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D45186
(cherry picked from commit 61089df8147eb7109696476c891514296d543bad)
---
sys/dev/cxgbe/t4_main.c | 167 ++++++++----------------------------------------
1 file changed, 27 insertions(+), 140 deletions(-)
diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c
index 17969d45ff0c..89cb7c528679 100644
--- a/sys/dev/cxgbe/t4_main.c
+++ b/sys/dev/cxgbe/t4_main.c
@@ -8216,10 +8216,6 @@ sysctl_bitfield_8b(SYSCTL_HANDLER_ARGS)
int rc;
struct sbuf *sb;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return(rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
if (sb == NULL)
return (ENOMEM);
@@ -8237,10 +8233,6 @@ sysctl_bitfield_16b(SYSCTL_HANDLER_ARGS)
int rc;
struct sbuf *sb;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return(rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
if (sb == NULL)
return (ENOMEM);
@@ -8498,10 +8490,6 @@ sysctl_pause_settings(SYSCTL_HANDLER_ARGS)
struct sbuf *sb;
static char *bits = "\20\1RX\2TX\3AUTO";
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return(rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
if (sb == NULL)
return (ENOMEM);
@@ -8563,10 +8551,6 @@ sysctl_link_fec(SYSCTL_HANDLER_ARGS)
struct sbuf *sb;
static char *bits = "\20\1RS-FEC\2FC-FEC\3NO-FEC\4RSVD1\5RSVD2";
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return(rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
if (sb == NULL)
return (ENOMEM);
@@ -8594,10 +8578,6 @@ sysctl_requested_fec(SYSCTL_HANDLER_ARGS)
static char *bits = "\20\1RS-FEC\2FC-FEC\3NO-FEC\4RSVD2"
"\5RSVD3\6auto\7module";
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return(rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
if (sb == NULL)
return (ENOMEM);
@@ -8673,10 +8653,6 @@ sysctl_module_fec(SYSCTL_HANDLER_ARGS)
struct sbuf *sb;
static char *bits = "\20\1RS-FEC\2FC-FEC\3NO-FEC\4RSVD2\5RSVD3";
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 128, req);
if (sb == NULL)
return (ENOMEM);
@@ -8703,14 +8679,15 @@ sysctl_module_fec(SYSCTL_HANDLER_ARGS)
fec = lc->fec_hint;
if (pi->mod_type == FW_PORT_MOD_TYPE_NONE ||
!fec_supported(lc->pcaps)) {
+ PORT_UNLOCK(pi);
sbuf_printf(sb, "n/a");
} else {
if (fec == 0)
fec = FEC_NONE;
+ PORT_UNLOCK(pi);
sbuf_printf(sb, "%b", fec & M_FW_PORT_CAP32_FEC, bits);
}
rc = sbuf_finish(sb);
- PORT_UNLOCK(pi);
done:
sbuf_delete(sb);
end_synchronized_op(sc, 0);
@@ -8930,10 +8907,6 @@ sysctl_loadavg(SYSCTL_HANDLER_ARGS)
if (rc)
return (rc);
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
@@ -8963,14 +8936,11 @@ sysctl_cctrl(SYSCTL_HANDLER_ARGS)
"0.9375"
};
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -9046,10 +9016,6 @@ sysctl_cim_ibq_obq(SYSCTL_HANDLER_ARGS)
}
n = rc * sizeof(uint32_t); /* rc has # of words actually read */
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- goto done;
-
sb = sbuf_new_for_sysctl(NULL, NULL, PAGE_SIZE, req);
if (sb == NULL) {
rc = ENOMEM;
@@ -9168,9 +9134,6 @@ sysctl_cim_la(SYSCTL_HANDLER_ARGS)
struct sbuf *sb;
int rc;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
@@ -9238,10 +9201,6 @@ sysctl_cim_ma_la(SYSCTL_HANDLER_ARGS)
uint32_t *buf, *p;
int rc;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
@@ -9249,6 +9208,7 @@ sysctl_cim_ma_la(SYSCTL_HANDLER_ARGS)
buf = malloc(2 * CIM_MALA_SIZE * 5 * sizeof(uint32_t), M_CXGBE,
M_ZERO | M_WAITOK);
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -9289,10 +9249,6 @@ sysctl_cim_pif_la(SYSCTL_HANDLER_ARGS)
uint32_t *buf, *p;
int rc;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
@@ -9300,6 +9256,7 @@ sysctl_cim_pif_la(SYSCTL_HANDLER_ARGS)
buf = malloc(2 * CIM_PIFLA_SIZE * 6 * sizeof(uint32_t), M_CXGBE,
M_ZERO | M_WAITOK);
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -9369,10 +9326,6 @@ sysctl_cim_qcfg(SYSCTL_HANDLER_ARGS)
if (rc)
return (rc);
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, PAGE_SIZE, req);
if (sb == NULL)
return (ENOMEM);
@@ -9405,14 +9358,11 @@ sysctl_cpl_stats(SYSCTL_HANDLER_ARGS)
int rc;
struct tp_cpl_stats stats;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
if (sb == NULL)
return (ENOMEM);
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -9451,14 +9401,11 @@ sysctl_ddp_stats(SYSCTL_HANDLER_ARGS)
int rc;
struct tp_usm_stats stats;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return(rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
if (sb == NULL)
return (ENOMEM);
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -9484,14 +9431,11 @@ sysctl_tid_stats(SYSCTL_HANDLER_ARGS)
int rc;
struct tp_tid_stats stats;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return(rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
if (sb == NULL)
return (ENOMEM);
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -9628,9 +9572,6 @@ sysctl_devlog(SYSCTL_HANDLER_ARGS)
int rc;
struct sbuf *sb;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
@@ -9673,10 +9614,7 @@ sysctl_fcoe_stats(SYSCTL_HANDLER_ARGS)
struct tp_fcoe_stats stats[MAX_NCHAN];
int i, nchan = sc->chip_params->nchan;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -9729,16 +9667,13 @@ sysctl_hw_sched(SYSCTL_HANDLER_ARGS)
unsigned int map, kbps, ipg, mode;
unsigned int pace_tab[NTX_SCHED];
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 512, req);
if (sb == NULL)
return (ENOMEM);
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc)) {
+ mtx_unlock(&sc->reg_lock);
rc = ENXIO;
goto done;
}
@@ -9746,6 +9681,7 @@ sysctl_hw_sched(SYSCTL_HANDLER_ARGS)
map = t4_read_reg(sc, A_TP_TX_MOD_QUEUE_REQ_MAP);
mode = G_TIMERMODE(t4_read_reg(sc, A_TP_MOD_CONFIG));
t4_read_pace_tbl(sc, pace_tab);
+ mtx_unlock(&sc->reg_lock);
sbuf_printf(sb, "Scheduler Mode Channel Rate (Kbps) "
"Class IPG (0.1 ns) Flow IPG (us)");
@@ -9771,7 +9707,6 @@ sysctl_hw_sched(SYSCTL_HANDLER_ARGS)
}
rc = sbuf_finish(sb);
done:
- mtx_unlock(&sc->reg_lock);
sbuf_delete(sb);
return (rc);
}
@@ -9794,16 +9729,13 @@ sysctl_lb_stats(SYSCTL_HANDLER_ARGS)
"BG2FramesTrunc:", "BG3FramesTrunc:"
};
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
memset(s, 0, sizeof(s));
+ rc = 0;
for (i = 0; i < sc->chip_params->nchan; i += 2) {
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
@@ -9826,7 +9758,8 @@ sysctl_lb_stats(SYSCTL_HANDLER_ARGS)
*p0++, *p1++);
}
- rc = sbuf_finish(sb);
+ if (rc == 0)
+ rc = sbuf_finish(sb);
sbuf_delete(sb);
return (rc);
@@ -9840,9 +9773,6 @@ sysctl_linkdnrc(SYSCTL_HANDLER_ARGS)
struct link_config *lc = &pi->link_cfg;
struct sbuf *sb;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return(rc);
sb = sbuf_new_for_sysctl(NULL, NULL, 64, req);
if (sb == NULL)
return (ENOMEM);
@@ -10180,10 +10110,6 @@ sysctl_mps_tcam(SYSCTL_HANDLER_ARGS)
MPASS(chip_id(sc) <= CHELSIO_T5);
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
@@ -10191,6 +10117,7 @@ sysctl_mps_tcam(SYSCTL_HANDLER_ARGS)
sbuf_printf(sb,
"Idx Ethernet address Mask Vld Ports PF"
" VF Replication P0 P1 P2 P3 ML");
+ rc = 0;
for (i = 0; i < sc->chip_params->mps_tcam_size; i++) {
uint64_t tcamx, tcamy, mask;
uint32_t cls_lo, cls_hi;
@@ -10284,10 +10211,6 @@ sysctl_mps_tcam_t6(SYSCTL_HANDLER_ARGS)
MPASS(chip_id(sc) > CHELSIO_T5);
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
@@ -10297,6 +10220,7 @@ sysctl_mps_tcam_t6(SYSCTL_HANDLER_ARGS)
" Replication"
" P0 P1 P2 P3 ML\n");
+ rc = 0;
for (i = 0; i < sc->chip_params->mps_tcam_size; i++) {
uint8_t dip_hit, vlan_vld, lookup_type, port_num;
uint16_t ivlan;
@@ -10466,10 +10390,7 @@ sysctl_path_mtus(SYSCTL_HANDLER_ARGS)
int rc;
uint16_t mtus[NMTUS];
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -10511,10 +10432,7 @@ sysctl_pm_stats(SYSCTL_HANDLER_ARGS)
"Rx FIFO wait", NULL, "Rx latency"
};
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -10575,10 +10493,7 @@ sysctl_rdma_stats(SYSCTL_HANDLER_ARGS)
int rc;
struct tp_rdma_stats stats;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -10609,10 +10524,7 @@ sysctl_tcp_stats(SYSCTL_HANDLER_ARGS)
int rc;
struct tp_tcp_stats v4, v6;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -10652,10 +10564,7 @@ sysctl_tids(SYSCTL_HANDLER_ARGS)
uint32_t x, y;
struct tid_info *t = &sc->tids;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
sb = sbuf_new_for_sysctl(NULL, NULL, 256, req);
if (sb == NULL)
return (ENOMEM);
@@ -10747,10 +10656,7 @@ sysctl_tp_err_stats(SYSCTL_HANDLER_ARGS)
int rc;
struct tp_err_stats stats;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -10828,10 +10734,7 @@ sysctl_tnl_stats(SYSCTL_HANDLER_ARGS)
int rc;
struct tp_tnl_stats stats;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return(rc);
-
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -11095,10 +10998,7 @@ sysctl_tp_la(SYSCTL_HANDLER_ARGS)
u_int i, inc;
void (*show_func)(struct sbuf *, uint64_t *, int);
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
@@ -11146,10 +11046,7 @@ sysctl_tx_rate(SYSCTL_HANDLER_ARGS)
int rc;
u64 nrate[MAX_NCHAN], orate[MAX_NCHAN];
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -11192,10 +11089,7 @@ sysctl_ulprx_la(SYSCTL_HANDLER_ARGS)
uint32_t *buf, *p;
int rc, i;
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);
@@ -11236,10 +11130,7 @@ sysctl_wcwr_stats(SYSCTL_HANDLER_ARGS)
MPASS(chip_id(sc) >= CHELSIO_T5);
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
+ rc = 0;
mtx_lock(&sc->reg_lock);
if (hw_off_limits(sc))
rc = ENXIO;
@@ -11289,10 +11180,6 @@ sysctl_cpus(SYSCTL_HANDLER_ARGS)
if (rc != 0)
return (rc);
- rc = sysctl_wire_old_buffer(req, 0);
- if (rc != 0)
- return (rc);
-
sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
if (sb == NULL)
return (ENOMEM);