Merge some obviously repeated code in optional counters processing functions.
Signed-off-by: Sasha Khapyorsky <[email protected]> --- infiniband-diags/src/perfquery.c | 91 ++++++++++++-------------------------- 1 files changed, 29 insertions(+), 62 deletions(-) diff --git a/infiniband-diags/src/perfquery.c b/infiniband-diags/src/perfquery.c index 74f9235..42fffe6 100644 --- a/infiniband-diags/src/perfquery.c +++ b/infiniband-diags/src/perfquery.c @@ -346,81 +346,48 @@ static void reset_counters(int extended, int timeout, int mask, static int reset, reset_only, all_ports, loop_ports, port, extended, xmt_sl, rcv_sl, xmt_disc; -void xmt_sl_query(ib_portid_t * portid, int port, int mask) +static void common_func(ib_portid_t *portid, int port_num, int mask, + unsigned query, unsigned reset, + const char *name, uint16_t attr, + void dump_func(char *, int, void *, int)) { char buf[1024]; - if (reset_only) { - if (!performance_reset_via(pc, portid, port, mask, ibd_timeout, - IB_GSI_PORT_XMIT_DATA_SL, srcport)) - IBERROR("perfslreset"); - return; - } + if (query) { + if (!pma_query_via(pc, portid, port_num, ibd_timeout, attr, + srcport)) + IBERROR("cannot query %s", name); - if (!pma_query_via(pc, portid, port, ibd_timeout, - IB_GSI_PORT_XMIT_DATA_SL, srcport)) - IBERROR("perfslquery"); + dump_func(buf, sizeof(buf), pc, sizeof(pc)); - mad_dump_perfcounters_xmt_sl(buf, sizeof buf, pc, sizeof pc); - printf("# PortXmitDataSL counters: %s port %d\n%s", portid2str(portid), - port, buf); + printf("# %s counters: %s port %d\n%s", name, + portid2str(portid), port_num, buf); + } - if (reset) - if (!performance_reset_via(pc, portid, port, mask, ibd_timeout, - IB_GSI_PORT_XMIT_DATA_SL, srcport)) - IBERROR("perfslreset"); + if (reset && !performance_reset_via(pc, portid, port, mask, ibd_timeout, + attr, srcport)) + IBERROR("cannot reset %s", name); } -void rcv_sl_query(ib_portid_t * portid, int port, int mask) +static void xmt_sl_query(ib_portid_t * portid, int port, int mask) { - char buf[1024]; - - if (reset_only) { - if (!performance_reset_via(pc, portid, port, mask, ibd_timeout, - IB_GSI_PORT_RCV_DATA_SL, srcport)) - IBERROR("perfslreset"); - return; - } - - if (!pma_query_via(pc, portid, port, ibd_timeout, - IB_GSI_PORT_RCV_DATA_SL, srcport)) - IBERROR("perfslquery"); - - mad_dump_perfcounters_rcv_sl(buf, sizeof buf, pc, sizeof pc); - printf("# PortRcvDataSL counters: %s port %d\n%s", portid2str(portid), - port, buf); - - if (reset) - if (!performance_reset_via(pc, portid, port, mask, ibd_timeout, - IB_GSI_PORT_RCV_DATA_SL, srcport)) - IBERROR("perfslreset"); + common_func(portid, port, mask, !reset_only, (reset_only || reset), + "PortXmitDataSL", IB_GSI_PORT_XMIT_DATA_SL, + mad_dump_perfcounters_xmt_sl); } -void xmt_disc_query(ib_portid_t * portid, int port, int mask) +static void rcv_sl_query(ib_portid_t * portid, int port, int mask) { - char buf[1024]; - - if (reset_only) { - if (!performance_reset_via(pc, portid, port, mask, ibd_timeout, - IB_GSI_PORT_XMIT_DISCARD_DETAILS, - srcport)) - IBERROR("xmtdiscreset"); - return; - } - - if (!pma_query_via(pc, portid, port, ibd_timeout, - IB_GSI_PORT_XMIT_DISCARD_DETAILS, srcport)) - IBERROR("xmtdiscquery"); - - mad_dump_perfcounters_xmt_disc(buf, sizeof buf, pc, sizeof pc); - printf("# PortXmitDiscardDetails: %s port %d\n%s", portid2str(portid), - port, buf); + common_func(portid, port, mask, !reset_only, (reset_only || reset), + "PortRcvDataSL", IB_GSI_PORT_RCV_DATA_SL, + mad_dump_perfcounters_rcv_sl); +} - if (reset) - if (!performance_reset_via(pc, portid, port, mask, ibd_timeout, - IB_GSI_PORT_XMIT_DISCARD_DETAILS, - srcport)) - IBERROR("xmtdiscreset"); +static void xmt_disc_query(ib_portid_t * portid, int port, int mask) +{ + common_func(portid, port, mask, !reset_only, (reset_only || reset), + "PortXmitDiscardDetails", IB_GSI_PORT_XMIT_DISCARD_DETAILS, + mad_dump_perfcounters_xmt_disc); } static int process_opt(void *context, int ch, char *optarg) -- 1.6.5.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
