[ofa-general] [PATCH] OpenSM: Improve QP0 and QP1 counter accounting
Hal Rosenstock
hrosenstock at xsigo.com
Mon Sep 17 21:14:59 PDT 2007
Hi Sasha,
On Tue, 2007-09-18 at 02:58 +0200, Sasha Khapyorsky wrote:
> Hi Hal,
>
> On 11:04 Tue 11 Sep , Hal Rosenstock wrote:
> > OpenSM: Improve QP0 and QP1 counter accounting
> >
> > Note: Patch is based on OFED 1.2
>
> Well, you know :)
>
> The question is below.
>
> >
> > Signed-off-by: Hal Rosenstock <hal at xsigo.com>
> >
> > diff --git a/osm/include/opensm/osm_sa.h b/osm/include/opensm/osm_sa.h
> > index ea60341..eced96b 100644
> > --- a/osm/include/opensm/osm_sa.h
> > +++ b/osm/include/opensm/osm_sa.h
> > @@ -209,6 +209,7 @@ typedef struct _osm_sa
> > * FIELDS
> > * state
> > * State of this SA object
> > +*
> > * p_subn
> > * Pointer to the Subnet object for this subnet.
> > *
> > @@ -448,6 +449,22 @@ osm_sa_bind(
> > * SEE ALSO
> > *********/
> >
> > +/****f* OpenSM: SA/osm_sa_vendor_send
> > +* NAME
> > +* osm_sa_vendor_send
> > +*
> > +* DESCRIPTION
> > +* Sends SA MAD via osm_vendor_call and maintains the QP1 sent statistic
> > +*
> > +* SYNOPSIS
> > +*/
> > +ib_api_status_t
> > +osm_sa_vendor_send(
> > + IN osm_bind_handle_t h_bind,
> > + IN osm_madw_t* const p_madw,
> > + IN boolean_t const resp_expected,
> > + IN osm_subn_t* const p_subn );
> > +
> > struct _osm_opensm_t;
> > /****f* OpenSM: SA/osm_sa_db_file_dump
> > * NAME
> > diff --git a/osm/include/opensm/osm_sa_guidinfo_record.h b/osm/include/opensm/osm_sa_guidinfo_record.h
> > index 5c23cf9..d3cb23d 100644
> > --- a/osm/include/opensm/osm_sa_guidinfo_record.h
> > +++ b/osm/include/opensm/osm_sa_guidinfo_record.h
> > @@ -98,7 +98,7 @@ BEGIN_C_DECLS
> > */
> > typedef struct _osm_gir_rcv
> > {
> > - const osm_subn_t *p_subn;
> > + osm_subn_t *p_subn;
> > osm_sa_resp_t *p_resp;
> > osm_mad_pool_t *p_mad_pool;
> > osm_log_t *p_log;
> > @@ -209,7 +209,7 @@ osm_gir_rcv_init(
> > IN osm_gir_rcv_t* const p_rcv,
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_mad_pool,
> > - IN const osm_subn_t* const p_subn,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log,
> > IN cl_plock_t* const p_lock );
> > /*
> > diff --git a/osm/include/opensm/osm_sa_node_record.h b/osm/include/opensm/osm_sa_node_record.h
> > index c0e8988..0ee8ae1 100644
> > --- a/osm/include/opensm/osm_sa_node_record.h
> > +++ b/osm/include/opensm/osm_sa_node_record.h
> > @@ -99,7 +99,7 @@ BEGIN_C_DECLS
> > */
> > typedef struct _osm_nr_recv
> > {
> > - const osm_subn_t *p_subn;
> > + osm_subn_t *p_subn;
> > osm_sa_resp_t *p_resp;
> > osm_mad_pool_t *p_mad_pool;
> > osm_log_t *p_log;
> > @@ -206,7 +206,7 @@ ib_api_status_t osm_nr_rcv_init(
> > IN osm_nr_rcv_t* const p_rcv,
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_mad_pool,
> > - IN const osm_subn_t* const p_subn,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log,
> > IN cl_plock_t* const p_lock );
> > /*
> > diff --git a/osm/include/opensm/osm_sa_pkey_record.h b/osm/include/opensm/osm_sa_pkey_record.h
> > index aceab9a..08b7fee 100644
> > --- a/osm/include/opensm/osm_sa_pkey_record.h
> > +++ b/osm/include/opensm/osm_sa_pkey_record.h
> > @@ -87,7 +87,7 @@ BEGIN_C_DECLS
> > */
> > typedef struct _osm_pkey_rec_rcv
> > {
> > - const osm_subn_t* p_subn;
> > + osm_subn_t* p_subn;
> > osm_sa_resp_t* p_resp;
> > osm_mad_pool_t* p_mad_pool;
> > osm_log_t* p_log;
> > @@ -198,7 +198,7 @@ osm_pkey_rec_rcv_init(
> > IN osm_pkey_rec_rcv_t* const p_rcv,
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_mad_pool,
> > - IN const osm_subn_t* const p_subn,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log,
> > IN cl_plock_t* const p_lock );
> > /*
> > diff --git a/osm/include/opensm/osm_sa_response.h b/osm/include/opensm/osm_sa_response.h
> > index b9e84d1..d883c3b 100644
> > --- a/osm/include/opensm/osm_sa_response.h
> > +++ b/osm/include/opensm/osm_sa_response.h
> > @@ -52,6 +52,7 @@
> > #include <opensm/osm_log.h>
> > #include <opensm/osm_madw.h>
> > #include <opensm/osm_mad_pool.h>
> > +#include <opensm/osm_subnet.h>
> >
> > #ifdef __cplusplus
> > # define BEGIN_C_DECLS extern "C" {
> > @@ -97,6 +98,7 @@ BEGIN_C_DECLS
> > typedef struct _osm_sa_resp
> > {
> > osm_mad_pool_t *p_pool;
> > + osm_subn_t *p_subn;
> > osm_log_t *p_log;
> > } osm_sa_resp_t;
> > /*
> > @@ -186,6 +188,7 @@ ib_api_status_t
> > osm_sa_resp_init(
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_pool,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log );
> > /*
> > * PARAMETERS
> > @@ -195,8 +198,8 @@ osm_sa_resp_init(
> > * p_mad_pool
> > * [in] Pointer to the MAD pool.
> > *
> > -* p_vl15
> > -* [in] Pointer to the VL15 interface.
> > +* p_subn
> > +* [in] Pointer to Subnet object for this subnet.
> > *
> > * p_log
> > * [in] Pointer to the log object.
> > diff --git a/osm/include/opensm/osm_sa_slvl_record.h b/osm/include/opensm/osm_sa_slvl_record.h
> > index a5ce9b4..fabd133 100644
> > --- a/osm/include/opensm/osm_sa_slvl_record.h
> > +++ b/osm/include/opensm/osm_sa_slvl_record.h
> > @@ -100,7 +100,7 @@ BEGIN_C_DECLS
> > */
> > typedef struct _osm_slvl_rec_rcv
> > {
> > - const osm_subn_t *p_subn;
> > + osm_subn_t *p_subn;
> > osm_sa_resp_t *p_resp;
> > osm_mad_pool_t *p_mad_pool;
> > osm_log_t *p_log;
> > @@ -211,7 +211,7 @@ osm_slvl_rec_rcv_init(
> > IN osm_slvl_rec_rcv_t* const p_rcv,
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_mad_pool,
> > - IN const osm_subn_t* const p_subn,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log,
> > IN cl_plock_t* const p_lock );
> > /*
> > diff --git a/osm/include/opensm/osm_sa_vlarb_record.h b/osm/include/opensm/osm_sa_vlarb_record.h
> > index 4aad76f..9796483 100644
> > --- a/osm/include/opensm/osm_sa_vlarb_record.h
> > +++ b/osm/include/opensm/osm_sa_vlarb_record.h
> > @@ -100,7 +100,7 @@ BEGIN_C_DECLS
> > */
> > typedef struct _osm_vlarb_rec_rcv
> > {
> > - const osm_subn_t *p_subn;
> > + osm_subn_t *p_subn;
> > osm_sa_resp_t *p_resp;
> > osm_mad_pool_t *p_mad_pool;
> > osm_log_t *p_log;
> > @@ -211,7 +211,7 @@ osm_vlarb_rec_rcv_init(
> > IN osm_vlarb_rec_rcv_t* const p_rcv,
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_mad_pool,
> > - IN const osm_subn_t* const p_subn,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log,
> > IN cl_plock_t* const p_lock );
> > /*
> > diff --git a/osm/include/opensm/osm_stats.h b/osm/include/opensm/osm_stats.h
> > index 5cffc00..15bc8e0 100644
> > --- a/osm/include/opensm/osm_stats.h
> > +++ b/osm/include/opensm/osm_stats.h
> > @@ -90,9 +90,12 @@ typedef struct _osm_stats
> > atomic32_t qp0_mads_rcvd;
> > atomic32_t qp0_mads_sent;
> > atomic32_t qp0_unicasts_sent;
> > + atomic32_t qp0_mads_rcvd_unknown;
> > atomic32_t qp1_mads_outstanding;
> > atomic32_t qp1_mads_rcvd;
> > atomic32_t qp1_mads_sent;
> > + atomic32_t qp1_mads_rcvd_unknown;
> > + atomic32_t qp1_mads_ignored;
> >
> > } osm_stats_t;
> > /*
> > @@ -117,6 +120,27 @@ typedef struct _osm_stats
> > * Total number of response-less MADs sent on the wire. This count
> > * includes getresp(), send() and trap() methods.
> > *
> > +* qp0_mads_rcvd_unknown
> > +* Total number of unknown QP0 MADs received. This includes
> > +* unrecognized attribute IDs and methods.
> > +*
> > +* qp1_mads_outstanding
> > +* Contains the number of MADs outstanding on QP1.
> > +*
> > +* qp1_mads_rcvd
> > +* Total number of QP1 MADs received.
> > +*
> > +* qp1_mads_sent
> > +* Total number of QP1 MADs sent.
> > +*
> > +* qp1_mads_rcvd_unknown
> > +* Total number of unknown QP1 MADs received. This includes
> > +* unrecognized attribute IDs and methods.
> > +*
> > +* qp1_mads_ignored
> > +* Total number of QP1 MADs received because SM is not
> > +* master or SM is in first time sweep.
> > +*
> > * SEE ALSO
> > ***************/
> >
> > diff --git a/osm/include/opensm/osm_version.h b/osm/include/opensm/osm_version.h
> > index ef91e16..6d2c8ee 100644
> > --- a/osm/include/opensm/osm_version.h
> > +++ b/osm/include/opensm/osm_version.h
> > @@ -55,7 +55,7 @@ BEGIN_C_DECLS
> > *
> > * SYNOPSIS
> > */
> > -#define OSM_VERSION "OpenSM Rev:openib-3.0.14-xsigo2"
> > +#define OSM_VERSION "OpenSM Rev:openib-3.0.14-xsigo3"
This shouldn't be part of this patch. Missed that before.
> > /********/
> >
> > END_C_DECLS
> > diff --git a/osm/opensm/osm_console.c b/osm/opensm/osm_console.c
> > index 5575425..7acfdf1 100644
> > --- a/osm/opensm/osm_console.c
> > +++ b/osm/opensm/osm_console.c
> > @@ -336,23 +336,29 @@ static void print_status(osm_opensm_t *p_osm, FILE *out)
> > p_osm->routing_engine.name ? p_osm->routing_engine.name : "null (min-hop)");
> > fprintf(out, "\n MAD stats\n"
> > " ---------\n"
> > - " QP0 MADS outstanding : %d\n"
> > - " QP0 MADS outstanding (on wire) : %d\n"
> > - " QP0 MADS rcvd : %d\n"
> > - " QP0 MADS sent : %d\n"
> > + " QP0 MADs outstanding : %d\n"
> > + " QP0 MADs outstanding (on wire) : %d\n"
> > + " QP0 MADs rcvd : %d\n"
> > + " QP0 MADs sent : %d\n"
> > " QP0 unicasts sent : %d\n"
> > - " QP1 MADS outstanding : %d\n"
> > - " QP1 MADS rcvd : %d\n"
> > - " QP1 MADS sent : %d\n"
> > + " QP0 unknown MADs rcvd : %d\n"
> > + " QP1 MADs outstanding : %d\n"
> > + " QP1 MADs rcvd : %d\n"
> > + " QP1 MADs sent : %d\n"
> > + " QP1 unknown MADs rcvd : %d\n"
> > + " QP1 MADs ignored : %d\n"
> > ,
> > p_osm->stats.qp0_mads_outstanding,
> > p_osm->stats.qp0_mads_outstanding_on_wire,
> > p_osm->stats.qp0_mads_rcvd,
> > p_osm->stats.qp0_mads_sent,
> > p_osm->stats.qp0_unicasts_sent,
> > + p_osm->stats.qp0_mads_rcvd_unknown,
> > p_osm->stats.qp1_mads_outstanding,
> > p_osm->stats.qp1_mads_rcvd,
> > - p_osm->stats.qp1_mads_sent
> > + p_osm->stats.qp1_mads_sent,
> > + p_osm->stats.qp1_mads_rcvd_unknown,
> > + p_osm->stats.qp1_mads_ignored
> > );
> > fprintf(out, "\n Subnet flags\n"
> > " ------------\n"
> > diff --git a/osm/opensm/osm_inform.c b/osm/opensm/osm_inform.c
> > index f91fa49..e1e1dec 100644
> > --- a/osm/opensm/osm_inform.c
> > +++ b/osm/opensm/osm_inform.c
> > @@ -57,6 +57,7 @@
> > #include <opensm/osm_trap_rcv.h>
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > typedef struct _osm_infr_match_ctxt
> > {
> > @@ -442,7 +443,8 @@ __osm_send_report(
> > *p_report_ntc = *p_ntc;
> >
> > /* The TRUE is for: response is expected */
> > - status = osm_vendor_send( p_report_madw->h_bind, p_report_madw, TRUE );
> > + status = osm_sa_vendor_send( p_report_madw->h_bind, p_report_madw, TRUE,
> > + p_infr_rec->p_infr_rcv->p_subn );
> > if ( status != IB_SUCCESS )
> > {
> > osm_log( p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_lid_mgr.c b/osm/opensm/osm_lid_mgr.c
> > index d856fb0..f10ed60 100644
> > --- a/osm/opensm/osm_lid_mgr.c
> > +++ b/osm/opensm/osm_lid_mgr.c
> > @@ -1163,15 +1163,19 @@ __osm_lid_mgr_set_physp_pi(
> > if ( (mtu != ib_port_info_get_neighbor_mtu(p_old_pi)) ||
> > (op_vls != ib_port_info_get_op_vls(p_old_pi)))
> > {
> > - if( osm_log_is_active( p_mgr->p_log, OSM_LOG_DEBUG ) )
> > +#if 0
> > + if( osm_log_is_active( p_mgr->p_log, OSM_LOG_ERROR ) )
> > {
> > - osm_log( p_mgr->p_log, OSM_LOG_DEBUG,
> > +#endif
> > + osm_log( p_mgr->p_log, OSM_LOG_ERROR,
> > "__osm_lid_mgr_set_physp_pi: "
> > - "Sending Link Down due to op_vls or mtu change. MTU:%u,%u VL_CAP:%u,%u\n",
> > + "Setting Link Down due to op_vls or mtu change. MTU:%u,%u VL_CAP:%u,%u\n",
> > mtu, ib_port_info_get_neighbor_mtu(p_old_pi),
> > op_vls, ib_port_info_get_op_vls(p_old_pi)
> > );
> > +#if 0
> > }
> > +#endif
>
> Why those #if 0? Should it be here?
No; this osm_lid_mgr.c change is not part of this patch. Sorry.
-- Hal
> Sasha
>
> >
> > /*
> > we need to make sure the internal DB will follow the fact the remote
> > diff --git a/osm/opensm/osm_sa.c b/osm/opensm/osm_sa.c
> > index 6d68ed2..360ad70 100644
> > --- a/osm/opensm/osm_sa.c
> > +++ b/osm/opensm/osm_sa.c
> > @@ -69,6 +69,7 @@
> > #include <opensm/osm_multicast.h>
> > #include <opensm/osm_inform.h>
> > #include <opensm/osm_service.h>
> > +#include <vendor/osm_vendor_api.h>
> >
> > #define OSM_SA_INITIAL_TID_VALUE 0xabc
> >
> > @@ -202,6 +203,7 @@ osm_sa_init(
> >
> > status = osm_sa_resp_init(&p_sa->resp,
> > p_sa->p_mad_pool,
> > + p_subn,
> > p_log);
> > if( status != IB_SUCCESS )
> > goto Exit;
> > @@ -519,6 +521,22 @@ osm_sa_bind(
> > return( status );
> > }
> >
> > +ib_api_status_t
> > +osm_sa_vendor_send(
> > + IN osm_bind_handle_t h_bind,
> > + IN osm_madw_t* const p_madw,
> > + IN boolean_t const resp_expected,
> > + IN osm_subn_t* const p_subn )
> > +{
> > + ib_api_status_t status;
> > +
> > + cl_atomic_inc( &p_subn->p_osm->stats.qp1_mads_sent );
> > + status = osm_vendor_send( h_bind, p_madw, resp_expected );
> > + if ( status != IB_SUCCESS )
> > + cl_atomic_dec( &p_subn->p_osm->stats.qp1_mads_sent );
> > + return status;
> > +}
> > +
> > /**********************************************************************
> > **********************************************************************/
> > /*
> > diff --git a/osm/opensm/osm_sa_class_port_info.c b/osm/opensm/osm_sa_class_port_info.c
> > index da107ee..9ee434a 100644
> > --- a/osm/opensm/osm_sa_class_port_info.c
> > +++ b/osm/opensm/osm_sa_class_port_info.c
> > @@ -60,6 +60,7 @@
> > #include <vendor/osm_vendor.h>
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define MAX_MSECS_TO_RTV 24
> > /* Precalculated table in msec (index is related to encoded value) */
> > @@ -223,7 +224,8 @@ __osm_cpi_rcv_respond(
> > if( osm_log_is_active( p_rcv->p_log, OSM_LOG_FRAMES ) )
> > osm_dump_sa_mad( p_rcv->p_log, p_resp_sa_mad, OSM_LOG_FRAMES );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if( status != IB_SUCCESS )
> > {
> > osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_guidinfo_record.c b/osm/opensm/osm_sa_guidinfo_record.c
> > index 10fac3c..fe85eff 100644
> > --- a/osm/opensm/osm_sa_guidinfo_record.c
> > +++ b/osm/opensm/osm_sa_guidinfo_record.c
> > @@ -33,7 +33,6 @@
> > *
> > */
> >
> > -
> > /*
> > * Abstract:
> > * Implementation of osm_gir_rcv_t.
> > @@ -61,6 +60,7 @@
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_GIR_RCV_POOL_MIN_SIZE 32
> > #define OSM_GIR_RCV_POOL_GROW_SIZE 32
> > @@ -108,7 +108,7 @@ osm_gir_rcv_init(
> > IN osm_gir_rcv_t* const p_rcv,
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_mad_pool,
> > - IN const osm_subn_t* const p_subn,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log,
> > IN cl_plock_t* const p_lock )
> > {
> > @@ -595,7 +595,8 @@ osm_gir_rcv_process(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE);
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if (status != IB_SUCCESS)
> > {
> > osm_log(p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_informinfo.c b/osm/opensm/osm_sa_informinfo.c
> > index 340a7f1..dc999b3 100644
> > --- a/osm/opensm/osm_sa_informinfo.c
> > +++ b/osm/opensm/osm_sa_informinfo.c
> > @@ -339,7 +339,8 @@ __osm_infr_rcv_respond(
> >
> > p_resp_infr = (ib_inform_info_t*)ib_sa_mad_get_payload_ptr( p_resp_sa_mad );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> >
> > if ( status != IB_SUCCESS )
> > {
> > @@ -647,7 +648,8 @@ osm_infr_rcv_process_get_method(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if (status != IB_SUCCESS)
> > {
> > osm_log(p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_lft_record.c b/osm/opensm/osm_sa_lft_record.c
> > index b6333e7..ed989a0 100644
> > --- a/osm/opensm/osm_sa_lft_record.c
> > +++ b/osm/opensm/osm_sa_lft_record.c
> > @@ -58,6 +58,7 @@
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_LFTR_RCV_POOL_MIN_SIZE 32
> > #define OSM_LFTR_RCV_POOL_GROW_SIZE 32
> > @@ -502,7 +503,8 @@ osm_lftr_rcv_process(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if (status != IB_SUCCESS)
> > {
> > osm_log(p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_link_record.c b/osm/opensm/osm_sa_link_record.c
> > index 169e75e..058b6b2 100644
> > --- a/osm/opensm/osm_sa_link_record.c
> > +++ b/osm/opensm/osm_sa_link_record.c
> > @@ -60,6 +60,7 @@
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_LR_RCV_POOL_MIN_SIZE 64
> > #define OSM_LR_RCV_POOL_GROW_SIZE 64
> > @@ -679,7 +680,8 @@ __osm_lr_rcv_respond(
> > }
> > }
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if (status != IB_SUCCESS)
> > {
> > osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_mad_ctrl.c b/osm/opensm/osm_sa_mad_ctrl.c
> > index d6518e4..579e8f1 100644
> > --- a/osm/opensm/osm_sa_mad_ctrl.c
> > +++ b/osm/opensm/osm_sa_mad_ctrl.c
> > @@ -269,6 +269,7 @@ __osm_sa_mad_ctrl_process(
> > There is an unknown MAD attribute type for which there is
> > no recipient. Simply retire the MAD here.
> > */
> > + cl_atomic_inc( &p_ctrl->p_stats->qp1_mads_rcvd_unknown );
> > osm_mad_pool_put( p_ctrl->p_mad_pool, p_madw );
> > }
> >
> > @@ -330,6 +331,7 @@ __osm_sa_mad_ctrl_rcv_callback(
> > */
> > if ( p_ctrl->p_subn->sm_state != IB_SMINFO_STATE_MASTER )
> > {
> > + cl_atomic_inc( &p_ctrl->p_stats->qp1_mads_ignored );
> > osm_log( p_ctrl->p_log, OSM_LOG_VERBOSE,
> > "__osm_sa_mad_ctrl_rcv_callback: "
> > "Received SA MAD while SM not MASTER. MAD ignored\n");
> > @@ -338,6 +340,7 @@ __osm_sa_mad_ctrl_rcv_callback(
> > }
> > if ( p_ctrl->p_subn->first_time_master_sweep == TRUE )
> > {
> > + cl_atomic_inc( &p_ctrl->p_stats->qp1_mads_ignored );
> > osm_log( p_ctrl->p_log, OSM_LOG_VERBOSE,
> > "__osm_sa_mad_ctrl_rcv_callback: "
> > "Received SA MAD while SM in first sweep. MAD ignored\n");
> > @@ -394,6 +397,7 @@ __osm_sa_mad_ctrl_rcv_callback(
> > break;
> >
> > default:
> > + cl_atomic_inc( &p_ctrl->p_stats->qp1_mads_rcvd_unknown );
> > osm_log( p_ctrl->p_log, OSM_LOG_ERROR,
> > "__osm_sa_mad_ctrl_rcv_callback: ERR 1A05: "
> > "Unsupported method = 0x%X\n",
> > diff --git a/osm/opensm/osm_sa_mcmember_record.c b/osm/opensm/osm_sa_mcmember_record.c
> > index 50c4f22..260360f 100644
> > --- a/osm/opensm/osm_sa_mcmember_record.c
> > +++ b/osm/opensm/osm_sa_mcmember_record.c
> > @@ -68,6 +68,7 @@
> > #include <opensm/osm_msgdef.h>
> > #include <opensm/osm_pkey.h>
> > #include <opensm/osm_inform.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_MCMR_RCV_POOL_MIN_SIZE 32
> > #define OSM_MCMR_RCV_POOL_GROW_SIZE 32
> > @@ -571,7 +572,8 @@ __osm_mcmr_rcv_respond(
> > p_resp_mcmember_rec->pkt_life &= 0x3f;
> > p_resp_mcmember_rec->pkt_life |= 2<<6; /* exactly */
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> >
> > if(status != IB_SUCCESS)
> > {
> > @@ -2266,7 +2268,8 @@ __osm_mcmr_query_mgrp(IN osm_mcmr_recv_t* const p_rcv,
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if(status != IB_SUCCESS)
> > {
> > osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_mft_record.c b/osm/opensm/osm_sa_mft_record.c
> > index 005c9bd..d7c7544 100644
> > --- a/osm/opensm/osm_sa_mft_record.c
> > +++ b/osm/opensm/osm_sa_mft_record.c
> > @@ -57,6 +57,7 @@
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_MFTR_RCV_POOL_MIN_SIZE 32
> > #define OSM_MFTR_RCV_POOL_GROW_SIZE 32
> > @@ -534,7 +535,8 @@ osm_mftr_rcv_process(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if (status != IB_SUCCESS)
> > {
> > osm_log(p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_multipath_record.c b/osm/opensm/osm_sa_multipath_record.c
> > index 0c5643e..2df3699 100644
> > --- a/osm/opensm/osm_sa_multipath_record.c
> > +++ b/osm/opensm/osm_sa_multipath_record.c
> > @@ -64,6 +64,7 @@
> > #include <vendor/osm_vendor.h>
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_MPR_RCV_POOL_MIN_SIZE 64
> > #define OSM_MPR_RCV_POOL_GROW_SIZE 64
> > @@ -1536,7 +1537,8 @@ __osm_mpr_rcv_respond(
> >
> > osm_dump_sa_mad( p_rcv->p_log, p_resp_sa_mad, OSM_LOG_FRAMES );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> >
> > if ( status != IB_SUCCESS )
> > {
> > diff --git a/osm/opensm/osm_sa_node_record.c b/osm/opensm/osm_sa_node_record.c
> > index 892582e..0d08a4c 100644
> > --- a/osm/opensm/osm_sa_node_record.c
> > +++ b/osm/opensm/osm_sa_node_record.c
> > @@ -58,6 +58,7 @@
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_NR_RCV_POOL_MIN_SIZE 32
> > #define OSM_NR_RCV_POOL_GROW_SIZE 32
> > @@ -105,7 +106,7 @@ osm_nr_rcv_init(
> > IN osm_nr_rcv_t* const p_rcv,
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_mad_pool,
> > - IN const osm_subn_t* const p_subn,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log,
> > IN cl_plock_t* const p_lock )
> > {
> > @@ -587,7 +588,8 @@ osm_nr_rcv_process(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if (status != IB_SUCCESS)
> > {
> > osm_log(p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_path_record.c b/osm/opensm/osm_sa_path_record.c
> > index 1b0f89f..b993fdd 100644
> > --- a/osm/opensm/osm_sa_path_record.c
> > +++ b/osm/opensm/osm_sa_path_record.c
> > @@ -67,6 +67,7 @@
> > #include <opensm/osm_multicast.h>
> > #include <opensm/osm_partition.h>
> > #include <opensm/osm_opensm.h>
> > +#include <opensm/osm_sa.h>
> > #ifdef ROUTER_EXP
> > #include <opensm/osm_router.h>
> > #include <opensm/osm_sa_mcmember_record.h>
> > @@ -1892,7 +1893,8 @@ __osm_pr_rcv_respond(
> >
> > CL_ASSERT( cl_is_qlist_empty( p_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> >
> > if( status != IB_SUCCESS )
> > {
> > diff --git a/osm/opensm/osm_sa_pkey_record.c b/osm/opensm/osm_sa_pkey_record.c
> > index 5eb15df..2692d0c 100644
> > --- a/osm/opensm/osm_sa_pkey_record.c
> > +++ b/osm/opensm/osm_sa_pkey_record.c
> > @@ -49,6 +49,7 @@
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_PKEY_REC_RCV_POOL_MIN_SIZE 32
> > #define OSM_PKEY_REC_RCV_POOL_GROW_SIZE 32
> > @@ -94,10 +95,10 @@ osm_pkey_rec_rcv_destroy(
> > **********************************************************************/
> > ib_api_status_t
> > osm_pkey_rec_rcv_init(
> > - IN osm_pkey_rec_rcv_t* const p_rcv,
> > + IN osm_pkey_rec_rcv_t* const p_rcv,
> > IN osm_sa_resp_t* const p_resp,
> > - IN osm_mad_pool_t* const p_mad_pool,
> > - IN const osm_subn_t* const p_subn,
> > + IN osm_mad_pool_t* const p_mad_pool,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log,
> > IN cl_plock_t* const p_lock )
> > {
> > @@ -573,7 +574,8 @@ osm_pkey_rec_rcv_process(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE);
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if (status != IB_SUCCESS)
> > {
> > osm_log(p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_portinfo_record.c b/osm/opensm/osm_sa_portinfo_record.c
> > index 5d9b1b2..4aa1723 100644
> > --- a/osm/opensm/osm_sa_portinfo_record.c
> > +++ b/osm/opensm/osm_sa_portinfo_record.c
> > @@ -33,7 +33,6 @@
> > *
> > */
> >
> > -
> > /*
> > * Abstract:
> > * Implementation of osm_pir_rcv_t.
> > @@ -63,6 +62,7 @@
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_PIR_RCV_POOL_MIN_SIZE 32
> > #define OSM_PIR_RCV_POOL_GROW_SIZE 32
> > @@ -865,7 +865,8 @@ osm_pir_rcv_process(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE);
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if (status != IB_SUCCESS)
> > {
> > osm_log(p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_response.c b/osm/opensm/osm_sa_response.c
> > index 4f158e9..fac2159 100644
> > --- a/osm/opensm/osm_sa_response.c
> > +++ b/osm/opensm/osm_sa_response.c
> > @@ -56,6 +56,7 @@
> > #include <opensm/osm_helper.h>
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_opensm.h>
> > +#include <opensm/osm_sa.h>
> >
> > /**********************************************************************
> > **********************************************************************/
> > @@ -81,6 +82,7 @@ ib_api_status_t
> > osm_sa_resp_init(
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_pool,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log )
> > {
> > ib_api_status_t status = IB_SUCCESS;
> > @@ -89,6 +91,7 @@ osm_sa_resp_init(
> >
> > osm_sa_resp_construct( p_resp );
> >
> > + p_resp->p_subn = p_subn;
> > p_resp->p_log = p_log;
> > p_resp->p_pool = p_pool;
> >
> > @@ -158,8 +161,8 @@ osm_sa_send_error(
> > if( osm_log_is_active( p_resp->p_log, OSM_LOG_FRAMES ) )
> > osm_dump_sa_mad( p_resp->p_log, p_resp_sa_mad, OSM_LOG_FRAMES );
> >
> > - status = osm_vendor_send( osm_madw_get_bind_handle( p_resp_madw ),
> > - p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( osm_madw_get_bind_handle( p_resp_madw ),
> > + p_resp_madw, FALSE, p_resp->p_subn );
> >
> > if( status != IB_SUCCESS )
> > {
> > diff --git a/osm/opensm/osm_sa_service_record.c b/osm/opensm/osm_sa_service_record.c
> > index b23a12d..4479f00 100644
> > --- a/osm/opensm/osm_sa_service_record.c
> > +++ b/osm/opensm/osm_sa_service_record.c
> > @@ -465,7 +465,8 @@ __osm_sr_rcv_respond(
> > }
> > }
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> >
> > if( status != IB_SUCCESS )
> > {
> > diff --git a/osm/opensm/osm_sa_slvl_record.c b/osm/opensm/osm_sa_slvl_record.c
> > index d831ffd..885bdc5 100644
> > --- a/osm/opensm/osm_sa_slvl_record.c
> > +++ b/osm/opensm/osm_sa_slvl_record.c
> > @@ -61,6 +61,7 @@
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_SLVL_REC_RCV_POOL_MIN_SIZE 32
> > #define OSM_SLVL_REC_RCV_POOL_GROW_SIZE 32
> > @@ -109,7 +110,7 @@ osm_slvl_rec_rcv_init(
> > IN osm_slvl_rec_rcv_t* const p_rcv,
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_mad_pool,
> > - IN const osm_subn_t* const p_subn,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log,
> > IN cl_plock_t* const p_lock )
> > {
> > @@ -540,7 +541,8 @@ osm_slvl_rec_rcv_process(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE);
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if(status != IB_SUCCESS)
> > {
> > osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_sminfo_record.c b/osm/opensm/osm_sa_sminfo_record.c
> > index 5e15f52..99e31c6 100644
> > --- a/osm/opensm/osm_sa_sminfo_record.c
> > +++ b/osm/opensm/osm_sa_sminfo_record.c
> > @@ -68,6 +68,7 @@
> > #include <opensm/osm_port.h>
> > #include <opensm/osm_pkey.h>
> > #include <opensm/osm_remote_sm.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_SMIR_RCV_POOL_MIN_SIZE 32
> > #define OSM_SMIR_RCV_POOL_GROW_SIZE 32
> > @@ -570,7 +571,8 @@ osm_smir_rcv_process(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if( status != IB_SUCCESS )
> > {
> > osm_log(p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_sw_info_record.c b/osm/opensm/osm_sa_sw_info_record.c
> > index da65864..1c2b6c7 100644
> > --- a/osm/opensm/osm_sa_sw_info_record.c
> > +++ b/osm/opensm/osm_sa_sw_info_record.c
> > @@ -57,6 +57,7 @@
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_SIR_RCV_POOL_MIN_SIZE 32
> > #define OSM_SIR_RCV_POOL_GROW_SIZE 32
> > @@ -522,7 +523,8 @@ osm_sir_rcv_process(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if (status != IB_SUCCESS)
> > {
> > osm_log(p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sa_vlarb_record.c b/osm/opensm/osm_sa_vlarb_record.c
> > index f0ff957..fdb3d99 100644
> > --- a/osm/opensm/osm_sa_vlarb_record.c
> > +++ b/osm/opensm/osm_sa_vlarb_record.c
> > @@ -61,6 +61,7 @@
> > #include <vendor/osm_vendor_api.h>
> > #include <opensm/osm_helper.h>
> > #include <opensm/osm_pkey.h>
> > +#include <opensm/osm_sa.h>
> >
> > #define OSM_VLARB_REC_RCV_POOL_MIN_SIZE 32
> > #define OSM_VLARB_REC_RCV_POOL_GROW_SIZE 32
> > @@ -109,7 +110,7 @@ osm_vlarb_rec_rcv_init(
> > IN osm_vlarb_rec_rcv_t* const p_rcv,
> > IN osm_sa_resp_t* const p_resp,
> > IN osm_mad_pool_t* const p_mad_pool,
> > - IN const osm_subn_t* const p_subn,
> > + IN osm_subn_t* const p_subn,
> > IN osm_log_t* const p_log,
> > IN cl_plock_t* const p_lock )
> > {
> > @@ -560,7 +561,8 @@ osm_vlarb_rec_rcv_process(
> >
> > CL_ASSERT( cl_is_qlist_empty( &rec_list ) );
> >
> > - status = osm_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE );
> > + status = osm_sa_vendor_send( p_resp_madw->h_bind, p_resp_madw, FALSE,
> > + p_rcv->p_subn );
> > if(status != IB_SUCCESS)
> > {
> > osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> > diff --git a/osm/opensm/osm_sm_mad_ctrl.c b/osm/opensm/osm_sm_mad_ctrl.c
> > index acd68d7..85729af 100644
> > --- a/osm/opensm/osm_sm_mad_ctrl.c
> > +++ b/osm/opensm/osm_sm_mad_ctrl.c
> > @@ -318,6 +318,7 @@ __osm_sm_mad_ctrl_process_get_resp(
> > case IB_MAD_ATTR_NOTICE:
> > case IB_MAD_ATTR_INFORM_INFO:
> > default:
> > + cl_atomic_inc( &p_ctrl->p_stats->qp0_mads_rcvd_unknown );
> > osm_log( p_ctrl->p_log, OSM_LOG_ERROR,
> > "__osm_sm_mad_ctrl_process_get_resp: ERR 3103: "
> > "Unsupported attribute = 0x%X\n",
> > @@ -395,6 +396,7 @@ __osm_sm_mad_ctrl_process_get(
> > break;
> >
> > default:
> > + cl_atomic_inc( &p_ctrl->p_stats->qp0_mads_rcvd_unknown );
> > osm_log( p_ctrl->p_log, OSM_LOG_VERBOSE,
> > "__osm_sm_mad_ctrl_process_get: "
> > "Ignoring SubnGet MAD - unsupported attribute = 0x%X\n",
> > @@ -487,6 +489,7 @@ __osm_sm_mad_ctrl_process_set(
> > break;
> >
> > default:
> > + cl_atomic_inc( &p_ctrl->p_stats->qp0_mads_rcvd_unknown );
> > osm_log( p_ctrl->p_log, OSM_LOG_ERROR,
> > "__osm_sm_mad_ctrl_process_set: ERR 3107: "
> > "Unsupported attribute = 0x%X\n",
> > @@ -591,6 +594,7 @@ __osm_sm_mad_ctrl_process_trap(
> > break;
> >
> > default:
> > + cl_atomic_inc( &p_ctrl->p_stats->qp0_mads_rcvd_unknown );
> > osm_log( p_ctrl->p_log, OSM_LOG_ERROR,
> > "__osm_sm_mad_ctrl_process_trap: ERR 3109: "
> > "Unsupported attribute = 0x%X\n",
> > @@ -763,6 +767,7 @@ __osm_sm_mad_ctrl_rcv_callback(
> > case IB_MAD_METHOD_REPORT_RESP:
> > case IB_MAD_METHOD_TRAP_REPRESS:
> > default:
> > + cl_atomic_inc( &p_ctrl->p_stats->qp0_mads_rcvd_unknown );
> > osm_log( p_ctrl->p_log, OSM_LOG_ERROR,
> > "__osm_sm_mad_ctrl_rcv_callback: ERR 3112: "
> > "Unsupported method = 0x%X\n", p_smp->method );
> >
> > _______________________________________________
> > general mailing list
> > general at lists.openfabrics.org
> > http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
> >
> > To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
> _______________________________________________
> general mailing list
> general at lists.openfabrics.org
> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
>
> To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
More information about the general
mailing list