Function wait_for_pending_transaction() is global now and moved from
PerfMgr to StateMgr, all related objects are generalized.

Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>
---
 opensm/include/opensm/osm_stats.h |    4 ----
 opensm/opensm/main.c              |    2 --
 opensm/opensm/osm_opensm.c        |   16 +++++++++++++++-
 opensm/opensm/osm_perfmgr.c       |   35 ++---------------------------------
 opensm/opensm/osm_sm_mad_ctrl.c   |    2 --
 opensm/opensm/osm_state_mgr.c     |   18 ++++++++++++++++++
 6 files changed, 35 insertions(+), 42 deletions(-)

diff --git a/opensm/include/opensm/osm_stats.h 
b/opensm/include/opensm/osm_stats.h
index b5100f2..ecd752b 100644
--- a/opensm/include/opensm/osm_stats.h
+++ b/opensm/include/opensm/osm_stats.h
@@ -48,13 +48,11 @@
 #ifndef _OSM_STATS_H_
 #define _OSM_STATS_H_
 
-#ifdef ENABLE_OSM_PERF_MGR
 #ifdef HAVE_LIBPTHREAD
 #include <pthread.h>
 #else
 #include <complib/cl_event.h>
 #endif
-#endif
 #include <complib/cl_atomic.h>
 #include <opensm/osm_base.h>
 
@@ -100,14 +98,12 @@ typedef struct _osm_stats {
        atomic32_t sa_mads_sent;
        atomic32_t sa_mads_rcvd_unknown;
        atomic32_t sa_mads_ignored;
-#ifdef ENABLE_OSM_PERF_MGR
 #ifdef HAVE_LIBPTHREAD
        pthread_mutex_t mutex;
        pthread_cond_t cond;
 #else
        cl_event_t event;
 #endif
-#endif
 } osm_stats_t;
 /*
 * FIELDS
diff --git a/opensm/opensm/main.c b/opensm/opensm/main.c
index 7c435a0..703a242 100644
--- a/opensm/opensm/main.c
+++ b/opensm/opensm/main.c
@@ -1044,13 +1044,11 @@ int main(int argc, char *argv[])
                fprintf(stdout,
                        "There are still %u MADs out. Forcing the exit of the 
OpenSM application...\n",
                        osm.mad_pool.mads_out);
-#ifdef ENABLE_OSM_PERF_MGR
 #ifdef HAVE_LIBPTHREAD
                pthread_cond_signal(&osm.stats.cond);
 #else
                cl_event_signal(&osm.stats.event);
 #endif
-#endif
        }
 
 Exit:
diff --git a/opensm/opensm/osm_opensm.c b/opensm/opensm/osm_opensm.c
index a78307c..fa517d0 100644
--- a/opensm/opensm/osm_opensm.c
+++ b/opensm/opensm/osm_opensm.c
@@ -236,7 +236,12 @@ void osm_opensm_destroy(IN osm_opensm_t * const p_osm)
        osm_vendor_delete(&p_osm->p_vendor);
        osm_subn_destroy(&p_osm->subn);
        cl_disp_destroy(&p_osm->disp);
-
+#ifdef HAVE_LIBPTHREAD
+       pthread_cond_destroy(&p_osm->stats.cond);
+       pthread_mutex_destroy(&p_osm->stats.mutex);
+#else
+       cl_event_destroy(&p_osm->stats.event);
+#endif
        close_node_name_map(p_osm->node_name_map);
 
        cl_plock_destroy(&p_osm->lock);
@@ -277,6 +282,15 @@ osm_opensm_init(IN osm_opensm_t * const p_osm,
        if (status != IB_SUCCESS)
                goto Exit;
 
+#ifdef HAVE_LIBPTHREAD
+       pthread_mutex_init(&p_osm->stats.mutex, NULL);
+       pthread_cond_init(&p_osm->stats.cond, NULL);
+#else
+       status = cl_event_init(&p_osm->stats.event, FALSE);
+       if (status != IB_SUCCESS)
+               goto Exit;
+#endif
+
        if (p_opt->single_thread) {
                osm_log(&p_osm->log, OSM_LOG_INFO,
                        "osm_opensm_init: Forcing single threaded 
dispatcher\n");
diff --git a/opensm/opensm/osm_perfmgr.c b/opensm/opensm/osm_perfmgr.c
index 6c0c6cd..dd6e662 100644
--- a/opensm/opensm/osm_perfmgr.c
+++ b/opensm/opensm/osm_perfmgr.c
@@ -117,6 +117,8 @@ static inline void diff_time(struct timeval *before,
 
 #endif
 
+extern int wait_for_pending_transactions(osm_stats_t * stats);
+
 /**********************************************************************
  * Internal helper functions.
  **********************************************************************/
@@ -717,24 +719,6 @@ static int sweep_hop_0(osm_sm_t * const sm)
        return (status);
 }
 
-static int wait_for_pending_transactions(osm_stats_t * stats)
-{
-#ifdef HAVE_LIBPTHREAD
-       pthread_mutex_lock(&stats->mutex);
-       while (stats->qp0_mads_outstanding && !osm_exit_flag)
-               pthread_cond_wait(&stats->cond, &stats->mutex);
-       pthread_mutex_unlock(&stats->mutex);
-#else
-       while (1) {
-               unsigned count = stats->qp0_mads_outstanding;
-               if (!count || osm_exit_flag)
-                       break;
-               cl_event_wait_on(&stats->event, EVENT_NO_TIMEOUT, TRUE);
-       }
-#endif
-       return osm_exit_flag;
-}
-
 static void reset_node_count(cl_map_item_t * const p_map_item, void *cxt)
 {
        osm_node_t *p_node = (osm_node_t *) p_map_item;
@@ -898,12 +882,6 @@ void osm_perfmgr_destroy(osm_perfmgr_t * const pm)
        free(pm->event_db_dump_file);
        perfmgr_db_destroy(pm->db);
        cl_timer_destroy(&pm->sweep_timer);
-#ifdef HAVE_LIBPTHREAD
-       pthread_cond_destroy(&pm->subn->p_osm->stats.cond);
-       pthread_mutex_destroy(&pm->subn->p_osm->stats.mutex);
-#else
-       cl_event_destroy(&pm->subn->p_osm->stats.event);
-#endif
        OSM_LOG_EXIT(pm->log);
 }
 
@@ -1300,15 +1278,6 @@ osm_perfmgr_init(osm_perfmgr_t * const pm,
        pm->max_outstanding_queries = p_opt->perfmgr_max_outstanding_queries;
        pm->event_plugin = event_plugin;
 
-#ifdef HAVE_LIBPTHREAD
-       pthread_mutex_init(&subn->p_osm->stats.mutex, NULL);
-       pthread_cond_init(&subn->p_osm->stats.cond, NULL);
-#else
-       status = cl_event_init(&subn->p_osm->stats.event, FALSE);
-       if (status != IB_SUCCESS)
-               goto Exit;
-#endif
-
        status = cl_timer_init(&pm->sweep_timer, perfmgr_sweep, pm);
        if (status != IB_SUCCESS)
                goto Exit;
diff --git a/opensm/opensm/osm_sm_mad_ctrl.c b/opensm/opensm/osm_sm_mad_ctrl.c
index 2638357..c6624a1 100644
--- a/opensm/opensm/osm_sm_mad_ctrl.c
+++ b/opensm/opensm/osm_sm_mad_ctrl.c
@@ -108,13 +108,11 @@ __osm_sm_mad_ctrl_retire_trans_mad(IN osm_sm_mad_ctrl_t * 
const p_ctrl,
 
                osm_sm_signal(&p_ctrl->p_subn->p_osm->sm,
                              OSM_SIGNAL_NO_PENDING_TRANSACTIONS);
-#ifdef ENABLE_OSM_PERF_MGR
 #ifdef HAVE_LIBPTHREAD
                pthread_cond_signal(&p_ctrl->p_stats->cond);
 #else
                cl_event_signal(&p_ctrl->p_stats->event);
 #endif
-#endif
        }
 
        OSM_LOG_EXIT(p_ctrl->p_log);
diff --git a/opensm/opensm/osm_state_mgr.c b/opensm/opensm/osm_state_mgr.c
index 93fd880..3746389 100644
--- a/opensm/opensm/osm_state_mgr.c
+++ b/opensm/opensm/osm_state_mgr.c
@@ -1314,6 +1314,24 @@ static void __osm_state_mgr_check_tbl_consistency(IN 
osm_state_mgr_t *
 
 /**********************************************************************
  **********************************************************************/
+int wait_for_pending_transactions(osm_stats_t * stats)
+{
+#ifdef HAVE_LIBPTHREAD
+       pthread_mutex_lock(&stats->mutex);
+       while (stats->qp0_mads_outstanding && !osm_exit_flag)
+               pthread_cond_wait(&stats->cond, &stats->mutex);
+       pthread_mutex_unlock(&stats->mutex);
+#else
+       while (1) {
+               unsigned count = stats->qp0_mads_outstanding;
+               if (!count || osm_exit_flag)
+                       break;
+               cl_event_wait_on(&stats->event, EVENT_NO_TIMEOUT, TRUE);
+       }
+#endif
+       return osm_exit_flag;
+}
+
 void osm_state_mgr_process(IN osm_state_mgr_t * const p_mgr,
                           IN osm_signal_t signal)
 {
-- 
1.5.4.rc2.60.gb2e62

_______________________________________________
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

Reply via email to