aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/cxgb
diff options
context:
space:
mode:
authorMatthew D Fleming <mdf@FreeBSD.org>2010-09-16 16:13:12 +0000
committerMatthew D Fleming <mdf@FreeBSD.org>2010-09-16 16:13:12 +0000
commit4e6571599b26002b8f26cc7916056179a222c288 (patch)
treeafd1abc4a36abd5ca015ead87a457fe7f1968ed9 /sys/dev/cxgb
parent770e4c5bc000751a7620039ca240dad7fa9c4946 (diff)
downloadsrc-4e6571599b26002b8f26cc7916056179a222c288.tar.gz
src-4e6571599b26002b8f26cc7916056179a222c288.zip
Re-add r212370 now that the LOR in powerpc64 has been resolved:
Add a drain function for struct sysctl_req, and use it for a variety of handlers, some of which had to do awkward things to get a large enough SBUF_FIXEDLEN buffer. Note that some sysctl handlers were explicitly outputting a trailing NUL byte. This behaviour was preserved, though it should not be necessary. Reviewed by: phk (original patch)
Notes
Notes: svn path=/head/; revision=212750
Diffstat (limited to 'sys/dev/cxgb')
-rw-r--r--sys/dev/cxgb/cxgb_sge.c48
1 files changed, 17 insertions, 31 deletions
diff --git a/sys/dev/cxgb/cxgb_sge.c b/sys/dev/cxgb/cxgb_sge.c
index 015f8414d12e..5fb206b8ba35 100644
--- a/sys/dev/cxgb/cxgb_sge.c
+++ b/sys/dev/cxgb/cxgb_sge.c
@@ -3227,7 +3227,6 @@ t3_dump_rspq(SYSCTL_HANDLER_ARGS)
struct sge_rspq *rspq;
struct sge_qset *qs;
int i, err, dump_end, idx;
- static int multiplier = 1;
struct sbuf *sb;
struct rsp_desc *rspd;
uint32_t data[4];
@@ -3252,8 +3251,8 @@ t3_dump_rspq(SYSCTL_HANDLER_ARGS)
err = t3_sge_read_rspq(qs->port->adapter, rspq->cntxt_id, data);
if (err)
return (err);
-retry_sbufops:
- sb = sbuf_new(NULL, NULL, QDUMP_SBUF_SIZE*multiplier, SBUF_FIXEDLEN);
+
+ sb = sbuf_new_for_sysctl(NULL, NULL, QDUMP_SBUF_SIZE, req);
sbuf_printf(sb, " \n index=%u size=%u MSI-X/RspQ=%u intr enable=%u intr armed=%u\n",
(data[0] & 0xffff), data[0] >> 16, ((data[2] >> 20) & 0x3f),
@@ -3276,13 +3275,11 @@ retry_sbufops:
rspd->rss_hdr.rss_hash_val, be32toh(rspd->flags),
be32toh(rspd->len_cq), rspd->intr_gen);
}
- if (sbuf_error(sb) != 0) {
- sbuf_delete(sb);
- multiplier++;
- goto retry_sbufops;
- }
- sbuf_finish(sb);
- err = SYSCTL_OUT(req, sbuf_data(sb), sbuf_len(sb) + 1);
+
+ err = sbuf_finish(sb);
+ /* Output a trailing NUL. */
+ if (err == 0)
+ err = SYSCTL_OUT(req, "", 1);
sbuf_delete(sb);
return (err);
}
@@ -3293,7 +3290,6 @@ t3_dump_txq_eth(SYSCTL_HANDLER_ARGS)
struct sge_txq *txq;
struct sge_qset *qs;
int i, j, err, dump_end;
- static int multiplier = 1;
struct sbuf *sb;
struct tx_desc *txd;
uint32_t *WR, wr_hi, wr_lo, gen;
@@ -3321,9 +3317,7 @@ t3_dump_txq_eth(SYSCTL_HANDLER_ARGS)
if (err)
return (err);
-
-retry_sbufops:
- sb = sbuf_new(NULL, NULL, QDUMP_SBUF_SIZE*multiplier, SBUF_FIXEDLEN);
+ sb = sbuf_new_for_sysctl(NULL, NULL, QDUMP_SBUF_SIZE, req);
sbuf_printf(sb, " \n credits=%u GTS=%u index=%u size=%u rspq#=%u cmdq#=%u\n",
(data[0] & 0x7fff), ((data[0] >> 15) & 1), (data[0] >> 16),
@@ -3350,13 +3344,10 @@ retry_sbufops:
WR[j], WR[j + 1], WR[j + 2], WR[j + 3]);
}
- if (sbuf_error(sb) != 0) {
- sbuf_delete(sb);
- multiplier++;
- goto retry_sbufops;
- }
- sbuf_finish(sb);
- err = SYSCTL_OUT(req, sbuf_data(sb), sbuf_len(sb) + 1);
+ err = sbuf_finish(sb);
+ /* Output a trailing NUL. */
+ if (err == 0)
+ err = SYSCTL_OUT(req, "", 1);
sbuf_delete(sb);
return (err);
}
@@ -3367,7 +3358,6 @@ t3_dump_txq_ctrl(SYSCTL_HANDLER_ARGS)
struct sge_txq *txq;
struct sge_qset *qs;
int i, j, err, dump_end;
- static int multiplier = 1;
struct sbuf *sb;
struct tx_desc *txd;
uint32_t *WR, wr_hi, wr_lo, gen;
@@ -3391,8 +3381,7 @@ t3_dump_txq_ctrl(SYSCTL_HANDLER_ARGS)
return (EINVAL);
}
-retry_sbufops:
- sb = sbuf_new(NULL, NULL, QDUMP_SBUF_SIZE*multiplier, SBUF_FIXEDLEN);
+ sb = sbuf_new_for_sysctl(NULL, NULL, QDUMP_SBUF_SIZE, req);
sbuf_printf(sb, " qid=%d start=%d -> end=%d\n", qs->idx,
txq->txq_dump_start,
(txq->txq_dump_start + txq->txq_dump_count) & 255);
@@ -3412,13 +3401,10 @@ retry_sbufops:
WR[j], WR[j + 1], WR[j + 2], WR[j + 3]);
}
- if (sbuf_error(sb) != 0) {
- sbuf_delete(sb);
- multiplier++;
- goto retry_sbufops;
- }
- sbuf_finish(sb);
- err = SYSCTL_OUT(req, sbuf_data(sb), sbuf_len(sb) + 1);
+ err = sbuf_finish(sb);
+ /* Output a trailing NUL. */
+ if (err == 0)
+ err = SYSCTL_OUT(req, "", 1);
sbuf_delete(sb);
return (err);
}