[ofa-general] [PATCH] OpenSM: Improve QP0 and QP1 counter accounting
Hal Rosenstock
hrosenstock at xsigo.com
Tue Sep 11 11:04:16 PDT 2007
OpenSM: Improve QP0 and QP1 counter accounting
Note: Patch is based on OFED 1.2
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"
/********/
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
/*
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 );
More information about the general
mailing list