Signed-off-by: Alex Netes <[email protected]>
---
opensm/osm_inform.c | 9 +++++++--
opensm/osm_perfmgr.c | 7 ++++++-
opensm/osm_req.c | 10 ++++++++++
3 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/opensm/osm_inform.c b/opensm/osm_inform.c
index a90396b..f5abbc6 100644
--- a/opensm/osm_inform.c
+++ b/opensm/osm_inform.c
@@ -297,6 +297,7 @@ static ib_api_status_t send_report(IN osm_infr_t *
p_infr_rec, /* the informinfo
static atomic32_t trap_fwd_trans_id = 0x02DAB000;
ib_api_status_t status = IB_SUCCESS;
osm_log_t *p_log = p_infr_rec->sa->p_log;
+ ib_net64_t tid;
OSM_LOG_ENTER(p_log);
@@ -323,10 +324,14 @@ static ib_api_status_t send_report(IN osm_infr_t *
p_infr_rec, /* the informinfo
p_report_madw->resp_expected = TRUE;
/* advance trap trans id (cant simply ++ on some systems inside ntoh) */
+ tid = cl_hton64((uint64_t) cl_atomic_inc(&trap_fwd_trans_id) &
+ (uint64_t) (0xFFFFFFFF));
+ if (trap_fwd_trans_id == 0)
+ tid = cl_hton64((uint64_t) cl_atomic_inc(&trap_fwd_trans_id) &
+ (uint64_t) (0xFFFFFFFF));
p_mad = osm_madw_get_mad_ptr(p_report_madw);
ib_mad_init_new(p_mad, IB_MCLASS_SUBN_ADM, 2, IB_MAD_METHOD_REPORT,
- cl_hton64((uint64_t) cl_atomic_inc(&trap_fwd_trans_id)),
- IB_MAD_ATTR_NOTICE, 0);
+ tid, IB_MAD_ATTR_NOTICE, 0);
p_sa_mad = osm_madw_get_sa_mad_ptr(p_report_madw);
diff --git a/opensm/osm_perfmgr.c b/opensm/osm_perfmgr.c
index 9083ea9..788ed04 100644
--- a/opensm/osm_perfmgr.c
+++ b/opensm/osm_perfmgr.c
@@ -387,7 +387,12 @@ static ib_api_status_t perfmgr_send_pc_mad(osm_perfmgr_t *
perfmgr,
pm_mad->header.status = 0;
pm_mad->header.class_spec = 0;
pm_mad->header.trans_id =
- cl_hton64((uint64_t) cl_atomic_inc(&perfmgr->trans_id));
+ cl_hton64((uint64_t) cl_atomic_inc(&perfmgr->trans_id) &
+ (uint64_t) (0xFFFFFFFF));
+ if (perfmgr->trans_id == 0)
+ pm_mad->header.trans_id =
+ cl_hton64((uint64_t) cl_atomic_inc(&perfmgr->trans_id) &
+ (uint64_t) (0xFFFFFFFF));
pm_mad->header.attr_id = IB_MAD_ATTR_PORT_CNTRS;
pm_mad->header.resv = 0;
pm_mad->header.attr_mod = 0;
diff --git a/opensm/osm_req.c b/opensm/osm_req.c
index 40bd1e4..31d22b1 100644
--- a/opensm/osm_req.c
+++ b/opensm/osm_req.c
@@ -95,6 +95,9 @@ ib_api_status_t osm_req_get(IN osm_sm_t * sm, IN const
osm_dr_path_t * p_path,
tid = cl_hton64((uint64_t) cl_atomic_inc(&sm->sm_trans_id)
& (uint64_t)(0xFFFFFFFF));
+ if (tid == 0)
+ tid = cl_hton64((uint64_t) cl_atomic_inc(&sm->sm_trans_id)
+ &
(uint64_t)(0xFFFFFFFF));
OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
"Getting %s (0x%X), modifier 0x%X, TID 0x%" PRIx64 "\n",
@@ -164,6 +167,9 @@ osm_madw_t *osm_prepare_req_set(IN osm_sm_t * sm, IN const
osm_dr_path_t * p_pat
tid = cl_hton64((uint64_t) cl_atomic_inc(&sm->sm_trans_id)
& (uint64_t)(0xFFFFFFFF));
+ if (tid == 0)
+ tid = cl_hton64((uint64_t) cl_atomic_inc(&sm->sm_trans_id)
+ &
(uint64_t)(0xFFFFFFFF));
OSM_LOG(sm->p_log, OSM_LOG_DEBUG,
"Setting %s (0x%X), modifier 0x%X, TID 0x%" PRIx64 "\n",
@@ -281,6 +287,10 @@ int osm_send_trap144(osm_sm_t * sm, ib_net16_t local)
smp->method = IB_MAD_METHOD_TRAP;
smp->trans_id = cl_hton64((uint64_t) cl_atomic_inc(&sm->sm_trans_id)
&
(uint64_t)(0xFFFFFFFF));
+ if (smp->trans_id == 0)
+ smp->trans_id = cl_hton64((uint64_t)
cl_atomic_inc(&sm->sm_trans_id)
+ &
(uint64_t)(0xFFFFFFFF));
+
smp->attr_id = IB_MAD_ATTR_NOTICE;
ntc = (ib_mad_notice_attr_t *) smp->data;
--
1.7.11.2
--
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