>From e809dfacb08e6c2237ad2d0f197d1227654dde87 Mon Sep 17 00:00:00 2001 From: Ira Weiny <[email protected]> Date: Thu, 19 Feb 2009 18:53:10 -0800 Subject: [PATCH] infiniband-diags: Convert perfquery, saquery, sminfo, smpquery, and vendstat to "new" ibmad interface
Signed-off-by: Ira Weiny <[email protected]> --- infiniband-diags/src/perfquery.c | 35 +++++++++++++++++-------- infiniband-diags/src/saquery.c | 9 ++++-- infiniband-diags/src/sminfo.c | 18 +++++++++--- infiniband-diags/src/smpquery.c | 53 +++++++++++++++++++++++-------------- infiniband-diags/src/vendstat.c | 19 ++++++++----- 5 files changed, 88 insertions(+), 46 deletions(-) diff --git a/infiniband-diags/src/perfquery.c b/infiniband-diags/src/perfquery.c index 6292743..2f104b8 100644 --- a/infiniband-diags/src/perfquery.c +++ b/infiniband-diags/src/perfquery.c @@ -47,6 +47,8 @@ #include "ibdiag_common.h" +struct ibmad_port *srcport; + struct perf_count { uint32_t portselect; uint32_t counterselect; @@ -269,7 +271,7 @@ static void dump_perfcounters(int extended, int timeout, uint16_t cap_mask, char buf[1024]; if (extended != 1) { - if (!port_performance_query(pc, portid, port, timeout)) + if (!port_performance_query_via(pc, portid, port, timeout, srcport)) IBERROR("perfquery"); if (!(cap_mask & 0x1000)) { /* if PortCounters:PortXmitWait not suppported clear this counter */ @@ -284,7 +286,7 @@ static void dump_perfcounters(int extended, int timeout, uint16_t cap_mask, if (!(cap_mask & 0x200)) /* 1.2 errata: bit 9 is extended counter support */ IBWARN("PerfMgt ClassPortInfo 0x%x extended counters not indicated\n", cap_mask); - if (!port_performance_ext_query(pc, portid, port, timeout)) + if (!port_performance_ext_query_via(pc, portid, port, timeout, srcport)) IBERROR("perfextquery"); if (aggregate) aggregate_perfcounters_ext(); @@ -299,10 +301,12 @@ static void dump_perfcounters(int extended, int timeout, uint16_t cap_mask, static void reset_counters(int extended, int timeout, int mask, ib_portid_t *portid, int port) { if (extended != 1) { - if (!port_performance_reset(pc, portid, port, mask, timeout)) + if (!port_performance_reset_via(pc, portid, port, mask, + timeout, srcport)) IBERROR("perf reset"); } else { - if (!port_performance_ext_reset(pc, portid, port, mask, timeout)) + if (!port_performance_ext_reset_via(pc, portid, port, mask, + timeout, srcport)) IBERROR("perf ext reset"); } } @@ -382,18 +386,22 @@ int main(int argc, char **argv) if (argc > 2) mask = strtoul(argv[2], 0, 0); - madrpc_init(ibd_ca, ibd_ca_port, mgmt_classes, 4); + srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 4); + if (!srcport) + IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); if (argc) { - if (ib_resolve_portid_str(&portid, argv[0], ibd_dest_type, ibd_sm_id) < 0) + if (ib_resolve_portid_str_via(&portid, argv[0], ibd_dest_type, + ibd_sm_id, srcport) < 0) IBERROR("can't resolve destination port %s", argv[0]); } else { - if (ib_resolve_self(&portid, &port, 0) < 0) + if (ib_resolve_self_via(&portid, &port, 0, srcport) < 0) IBERROR("can't resolve self port %s", argv[0]); } /* PerfMgt ClassPortInfo is a required attribute */ - if (!perf_classportinfo_query(pc, &portid, port, ibd_timeout)) + if (!perf_classportinfo_query_via(pc, &portid, port, + ibd_timeout, srcport)) IBERROR("classportinfo query"); /* ClassPortInfo should be supported as part of libibmad */ memcpy(&cap_mask, pc + 2, sizeof(cap_mask)); /* CapabilityMask */ @@ -406,7 +414,8 @@ int main(int argc, char **argv) } if (all_ports_loop || (loop_ports && (all_ports || port == ALL_PORTS))) { - if (smp_query(data, &portid, IB_ATTR_NODE_INFO, 0, 0) < 0) + if (smp_query_via(data, &portid, IB_ATTR_NODE_INFO, 0, 0, + srcport) < 0) IBERROR("smp query nodeinfo failed"); node_type = mad_get_field(data, 0, IB_NODE_TYPE_F); mad_decode_field(data, IB_NODE_NPORTS_F, &num_ports); @@ -414,7 +423,8 @@ int main(int argc, char **argv) IBERROR("smp query nodeinfo: num ports invalid"); if (node_type == IB_NODE_SWITCH) { - if (smp_query(data, &portid, IB_ATTR_SWITCH_INFO, 0, 0) < 0) + if (smp_query_via(data, &portid, IB_ATTR_SWITCH_INFO, + 0, 0, srcport) < 0) IBERROR("smp query nodeinfo failed"); enhancedport0 = mad_get_field(data, 0, IB_SW_ENHANCED_PORT0_F); if (enhancedport0) @@ -441,8 +451,10 @@ int main(int argc, char **argv) else dump_perfcounters(extended, ibd_timeout, cap_mask, &portid, port, 0); - if (!reset) + if (!reset) { + mad_rpc_close_port(srcport); exit(0); + } do_reset: @@ -456,5 +468,6 @@ do_reset: else reset_counters(extended, ibd_timeout, mask, &portid, port); + mad_rpc_close_port(srcport); exit(0); } diff --git a/infiniband-diags/src/saquery.c b/infiniband-diags/src/saquery.c index 9726d22..e6cbe50 100644 --- a/infiniband-diags/src/saquery.c +++ b/infiniband-diags/src/saquery.c @@ -1316,12 +1316,15 @@ static int query_mft_records(const struct query_cmd *q, bind_handle_t h, static bind_handle_t get_bind_handle(void) { + static struct ibmad_port *srcport; static struct bind_handle handle; int mgmt_classes[2] = { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS }; - madrpc_init(ibd_ca, ibd_ca_port, mgmt_classes, 2); + srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 2); + if (!srcport) + IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); - ib_resolve_smlid(&handle.dport, ibd_timeout); + ib_resolve_smlid_via(&handle.dport, ibd_timeout, srcport); if (!handle.dport.lid) IBPANIC("No SM found."); @@ -1329,7 +1332,7 @@ static bind_handle_t get_bind_handle(void) if (!handle.dport.qkey) handle.dport.qkey = IB_DEFAULT_QP1_QKEY; - handle.fd = madrpc_portid(); + handle.fd = mad_rpc_portid(srcport); handle.agent = umad_register(handle.fd, IB_SA_CLASS, 2, 1, NULL); return &handle; diff --git a/infiniband-diags/src/sminfo.c b/infiniband-diags/src/sminfo.c index 549cb81..ebf6a47 100644 --- a/infiniband-diags/src/sminfo.c +++ b/infiniband-diags/src/sminfo.c @@ -48,6 +48,8 @@ static uint8_t sminfo[1024]; +struct ibmad_port *srcport; + int strdata, xdata=1, bindata; enum { SMINFO_NOTACT, @@ -113,13 +115,16 @@ int main(int argc, char **argv) if (argc > 1) mod = atoi(argv[1]); - madrpc_init(ibd_ca, ibd_ca_port, mgmt_classes, 3); + srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3); + if (!srcport) + IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); if (argc) { - if (ib_resolve_portid_str(&portid, argv[0], ibd_dest_type, 0) < 0) + if (ib_resolve_portid_str_via(&portid, argv[0], ibd_dest_type, + 0, srcport) < 0) IBERROR("can't resolve destination port %s", argv[0]); } else { - if (ib_resolve_smlid(&portid, ibd_timeout) < 0) + if (ib_resolve_smlid_via(&portid, ibd_timeout, srcport) < 0) IBERROR("can't resolve sm port %s", argv[0]); } @@ -130,10 +135,12 @@ int main(int argc, char **argv) mad_encode_field(sminfo, IB_SMINFO_STATE_F, &state); if (mod) { - if (!(p = smp_set(sminfo, &portid, IB_ATTR_SMINFO, mod, ibd_timeout))) + if (!(p = smp_set_via(sminfo, &portid, IB_ATTR_SMINFO, mod, + ibd_timeout, srcport))) IBERROR("query"); } else - if (!(p = smp_query(sminfo, &portid, IB_ATTR_SMINFO, 0, ibd_timeout))) + if (!(p = smp_query_via(sminfo, &portid, IB_ATTR_SMINFO, 0, + ibd_timeout, srcport))) IBERROR("query"); mad_decode_field(sminfo, IB_SMINFO_GUID_F, &guid); @@ -145,5 +152,6 @@ int main(int argc, char **argv) printf("sminfo: sm lid %d sm guid 0x%" PRIx64 ", activity count %u priority %d state %d %s\n", portid.lid, guid, act, prio, state, STATESTR(state)); + mad_rpc_close_port(srcport); exit(0); } diff --git a/infiniband-diags/src/smpquery.c b/infiniband-diags/src/smpquery.c index bf1626d..2ed1e65 100644 --- a/infiniband-diags/src/smpquery.c +++ b/infiniband-diags/src/smpquery.c @@ -51,6 +51,8 @@ #include "ibdiag_common.h" +struct ibmad_port *srcport; + typedef char *(op_fn_t)(ib_portid_t *dest, char **argv, int argc); typedef struct match_rec { @@ -88,13 +90,13 @@ node_desc(ib_portid_t *dest, char **argv, int argc) char dots[128]; char *nodename = NULL; - if (!smp_query(data, dest, IB_ATTR_NODE_INFO, 0, 0)) + if (!smp_query_via(data, dest, IB_ATTR_NODE_INFO, 0, 0, srcport)) return "node info query failed"; mad_decode_field(data, IB_NODE_TYPE_F, &node_type); mad_decode_field(data, IB_NODE_GUID_F, &node_guid); - if (!smp_query(nd, dest, IB_ATTR_NODE_DESC, 0, 0)) + if (!smp_query_via(nd, dest, IB_ATTR_NODE_DESC, 0, 0, srcport)) return "node desc query failed"; nodename = remap_node_name(node_name_map, node_guid, nd); @@ -119,7 +121,7 @@ node_info(ib_portid_t *dest, char **argv, int argc) char buf[2048]; char data[IB_SMP_DATA_SIZE]; - if (!smp_query(data, dest, IB_ATTR_NODE_INFO, 0, 0)) + if (!smp_query_via(data, dest, IB_ATTR_NODE_INFO, 0, 0, srcport)) return "node info query failed"; mad_dump_nodeinfo(buf, sizeof buf, data, sizeof data); @@ -138,7 +140,7 @@ port_info(ib_portid_t *dest, char **argv, int argc) if (argc > 0) portnum = strtol(argv[0], 0, 0); - if (!smp_query(data, dest, IB_ATTR_PORT_INFO, portnum, 0)) + if (!smp_query_via(data, dest, IB_ATTR_PORT_INFO, portnum, 0, srcport)) return "port info query failed"; mad_dump_portinfo(buf, sizeof buf, data, sizeof data); @@ -153,7 +155,7 @@ switch_info(ib_portid_t *dest, char **argv, int argc) char buf[2048]; char data[IB_SMP_DATA_SIZE]; - if (!smp_query(data, dest, IB_ATTR_SWITCH_INFO, 0, 0)) + if (!smp_query_via(data, dest, IB_ATTR_SWITCH_INFO, 0, 0, srcport)) return "switch info query failed"; mad_dump_switchinfo(buf, sizeof buf, data, sizeof data); @@ -176,7 +178,7 @@ pkey_table(ib_portid_t *dest, char **argv, int argc) portnum = strtol(argv[0], 0, 0); /* Get the partition capacity */ - if (!smp_query(data, dest, IB_ATTR_NODE_INFO, 0, 0)) + if (!smp_query_via(data, dest, IB_ATTR_NODE_INFO, 0, 0, srcport)) return "node info query failed"; mad_decode_field(data, IB_NODE_TYPE_F, &t); @@ -185,7 +187,8 @@ pkey_table(ib_portid_t *dest, char **argv, int argc) return "invalid port number"; if ((t == IB_NODE_SWITCH) && (portnum != 0)) { - if (!smp_query(data, dest, IB_ATTR_SWITCH_INFO, 0, 0)) + if (!smp_query_via(data, dest, IB_ATTR_SWITCH_INFO, 0, 0, + srcport)) return "switch info failed"; mad_decode_field(data, IB_SW_PARTITION_ENFORCE_CAP_F, &n); } else @@ -193,7 +196,8 @@ pkey_table(ib_portid_t *dest, char **argv, int argc) for (i = 0; i < (n + 31) / 32; i++) { mod = i | (portnum << 16); - if (!smp_query(data, dest, IB_ATTR_PKEY_TBL, mod, 0)) + if (!smp_query_via(data, dest, IB_ATTR_PKEY_TBL, mod, 0, + srcport)) return "pkey table query failed"; if (i + 1 == (n + 31) / 32) k = ((n + 7 - i * 32) / 8) * 8; @@ -220,7 +224,7 @@ static char *sl2vl_dump_table_entry(ib_portid_t *dest, int in, int out) char data[IB_SMP_DATA_SIZE]; int portnum = (in << 8) | out; - if (!smp_query(data, dest, IB_ATTR_SLVL_TABLE, portnum, 0)) + if (!smp_query_via(data, dest, IB_ATTR_SLVL_TABLE, portnum, 0, srcport)) return "slvl query failed"; mad_dump_sltovl(buf, sizeof buf, data, sizeof data); @@ -240,7 +244,7 @@ sl2vl_table(ib_portid_t *dest, char **argv, int argc) if (argc > 0) portnum = strtol(argv[0], 0, 0); - if (!smp_query(data, dest, IB_ATTR_NODE_INFO, 0, 0)) + if (!smp_query_via(data, dest, IB_ATTR_NODE_INFO, 0, 0, srcport)) return "node info query failed"; mad_decode_field(data, IB_NODE_TYPE_F, &type); @@ -270,8 +274,8 @@ static char *vlarb_dump_table_entry(ib_portid_t *dest, int portnum, int offset, char buf[2048]; char data[IB_SMP_DATA_SIZE]; - if (!smp_query(data, dest, IB_ATTR_VL_ARBITRATION, - (offset << 16) | portnum, 0)) + if (!smp_query_via(data, dest, IB_ATTR_VL_ARBITRATION, + (offset << 16) | portnum, 0, srcport)) return "vl arb query failed"; mad_dump_vlarbitration(buf, sizeof(buf), data, cap * 2); printf("%s", buf); @@ -305,12 +309,14 @@ vlarb_table(ib_portid_t *dest, char **argv, int argc) /* port number of 0 could mean SP0 or port MAD arrives on */ if (portnum == 0) { - if (!smp_query(data, dest, IB_ATTR_NODE_INFO, 0, 0)) + if (!smp_query_via(data, dest, IB_ATTR_NODE_INFO, 0, 0, + srcport)) return "node info query failed"; mad_decode_field(data, IB_NODE_TYPE_F, &type); if (type == IB_NODE_SWITCH) { - if (!smp_query(data, dest, IB_ATTR_SWITCH_INFO, 0, 0)) + if (!smp_query_via(data, dest, IB_ATTR_SWITCH_INFO, 0, + 0, srcport)) return "switch info query failed"; mad_decode_field(data, IB_SW_ENHANCED_PORT0_F, &enhsp0); if (!enhsp0) { @@ -321,7 +327,7 @@ vlarb_table(ib_portid_t *dest, char **argv, int argc) } } - if (!smp_query(data, dest, IB_ATTR_PORT_INFO, portnum, 0)) + if (!smp_query_via(data, dest, IB_ATTR_PORT_INFO, portnum, 0, srcport)) return "port info query failed"; mad_decode_field(data, IB_PORT_VL_ARBITRATION_LOW_CAP_F, &lowcap); @@ -349,13 +355,14 @@ guid_info(ib_portid_t *dest, char **argv, int argc) int n; /* Get the guid capacity */ - if (!smp_query(data, dest, IB_ATTR_PORT_INFO, 0, 0)) + if (!smp_query_via(data, dest, IB_ATTR_PORT_INFO, 0, 0, srcport)) return "port info failed"; mad_decode_field(data, IB_PORT_GUID_CAP_F, &n); for (i = 0; i < (n + 7) / 8; i++) { mod = i; - if (!smp_query(data, dest, IB_ATTR_GUID_INFO, mod, 0)) + if (!smp_query_via(data, dest, IB_ATTR_GUID_INFO, mod, 0, + srcport)) return "guid info query failed"; if (i + 1 == (n + 7) / 8) k = ((n + 1 - i * 8) / 2) * 2; @@ -445,11 +452,15 @@ int main(int argc, char **argv) if (!(fn = match_op(argv[0]))) IBERROR("operation '%s' not supported", argv[0]); - madrpc_init(ibd_ca, ibd_ca_port, mgmt_classes, 3); + srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 3); + if (!srcport) + IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); + node_name_map = open_node_name_map(node_name_map_file); if (ibd_dest_type != IB_DEST_DRSLID) { - if (ib_resolve_portid_str(&portid, argv[1], ibd_dest_type, ibd_sm_id) < 0) + if (ib_resolve_portid_str_via(&portid, argv[1], ibd_dest_type, + ibd_sm_id, srcport) < 0) IBERROR("can't resolve destination port %s", argv[1]); if ((err = fn(&portid, argv+2, argc-2))) IBERROR("operation %s: %s", argv[0], err); @@ -458,11 +469,13 @@ int main(int argc, char **argv) memset(concat, 0, 64); snprintf(concat, sizeof(concat), "%s %s", argv[1], argv[2]); - if (ib_resolve_portid_str(&portid, concat, ibd_dest_type, ibd_sm_id) < 0) + if (ib_resolve_portid_str_via(&portid, concat, ibd_dest_type, + ibd_sm_id, srcport) < 0) IBERROR("can't resolve destination port %s", concat); if ((err = fn(&portid, argv+3, argc-3))) IBERROR("operation %s: %s", argv[0], err); } close_node_name_map(node_name_map); + mad_rpc_close_port(srcport); exit(0); } diff --git a/infiniband-diags/src/vendstat.c b/infiniband-diags/src/vendstat.c index db87e38..d001a01 100644 --- a/infiniband-diags/src/vendstat.c +++ b/infiniband-diags/src/vendstat.c @@ -55,6 +55,8 @@ /* Config space addresses */ #define IB_MLX_IS3_PORT_XMIT_WAIT 0x10013C +struct ibmad_port *srcport; + typedef struct { uint16_t hw_revision; uint16_t device_id; @@ -152,13 +154,16 @@ int main(int argc, char **argv) if (argc > 1) port = strtoul(argv[1], 0, 0); - madrpc_init(ibd_ca, ibd_ca_port, mgmt_classes, 4); + srcport = mad_rpc_open_port(ibd_ca, ibd_ca_port, mgmt_classes, 4); + if (!srcport) + IBERROR("Failed to open '%s' port '%d'", ibd_ca, ibd_ca_port); if (argc) { - if (ib_resolve_portid_str(&portid, argv[0], ibd_dest_type, ibd_sm_id) < 0) + if (ib_resolve_portid_str_via(&portid, argv[0], ibd_dest_type, + ibd_sm_id, srcport) < 0) IBERROR("can't resolve destination port %s", argv[0]); } else { - if (ib_resolve_self(&portid, &port, 0) < 0) + if (ib_resolve_self_via(&portid, &port, 0, srcport) < 0) IBERROR("can't resolve self port %s", argv[0]); } @@ -180,12 +185,12 @@ int main(int argc, char **argv) memset(&buf, 0, sizeof(buf)); /* vendor ClassPortInfo is required attribute if class supported */ call.attrid = CLASS_PORT_INFO; - if (!ib_vendor_call(&buf, &portid, &call)) + if (!ib_vendor_call_via(&buf, &portid, &call, srcport)) IBERROR("classportinfo query"); memset(&buf, 0, sizeof(buf)); call.attrid = IB_MLX_IS3_GENERAL_INFO; - if (!ib_vendor_call(&buf, &portid, &call)) + if (!ib_vendor_call_via(&buf, &portid, &call, srcport)) IBERROR("vendstat"); gi = (is3_general_info_t *)&buf; @@ -217,7 +222,7 @@ int main(int argc, char **argv) cs = (is3_config_space_t *)&buf; for (i = 0; i < 16; i++) cs->record[i].address = htonl(IB_MLX_IS3_PORT_XMIT_WAIT + ((i + 1) << 12)); - if (!ib_vendor_call(&buf, &portid, &call)) + if (!ib_vendor_call_via(&buf, &portid, &call, srcport)) IBERROR("vendstat"); for (i = 0; i < 16; i++) @@ -232,7 +237,7 @@ int main(int argc, char **argv) cs = (is3_config_space_t *)&buf; for (i = 0; i < 8; i++) cs->record[i].address = htonl(IB_MLX_IS3_PORT_XMIT_WAIT + ((i + 17) << 12)); - if (!ib_vendor_call(&buf, &portid, &call)) + if (!ib_vendor_call_via(&buf, &portid, &call, srcport)) IBERROR("vendstat"); for (i = 0; i < 8; i++) -- 1.5.4.5 _______________________________________________ general mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
