Mark ports in the DB as invalid until data arrives.

Signed-off-by: Ira Weiny <wei...@llnl.gov>
---
 include/opensm/osm_perfmgr_db.h |    1 +
 opensm/osm_perfmgr_db.c         |   18 ++++++++++++++++++
 2 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/include/opensm/osm_perfmgr_db.h b/include/opensm/osm_perfmgr_db.h
index 42a47bd..4c7996d 100644
--- a/include/opensm/osm_perfmgr_db.h
+++ b/include/opensm/osm_perfmgr_db.h
@@ -126,6 +126,7 @@ typedef struct db_port {
        perfmgr_db_data_cnt_reading_t dc_total;
        perfmgr_db_data_cnt_reading_t dc_previous;
        time_t last_reset;
+       boolean_t valid;
 } db_port_t;
 
 /** =========================================================================
diff --git a/opensm/osm_perfmgr_db.c b/opensm/osm_perfmgr_db.c
index a472287..98bf59c 100644
--- a/opensm/osm_perfmgr_db.c
+++ b/opensm/osm_perfmgr_db.c
@@ -108,6 +108,11 @@ static inline perfmgr_db_err_t bad_node_port(db_node_t * 
node, uint8_t port)
        return PERFMGR_EVENT_DB_SUCCESS;
 }
 
+static inline void mark_port_valid(db_node_t * node, uint8_t port)
+{
+       node->ports[port].valid = TRUE;
+}
+
 /** =========================================================================
  */
 static db_node_t *malloc_node(uint64_t guid, boolean_t esp0,
@@ -131,6 +136,7 @@ static db_node_t *malloc_node(uint64_t guid, boolean_t esp0,
                rc->ports[i].last_reset = cur_time;
                rc->ports[i].err_previous.time = cur_time;
                rc->ports[i].dc_previous.time = cur_time;
+               rc->ports[i].valid = FALSE;
        }
        snprintf(rc->node_name, sizeof(rc->node_name), "%s", name);
 
@@ -271,6 +277,8 @@ perfmgr_db_add_err_reading(perfmgr_db_t * db, uint64_t 
guid, uint8_t port,
        if ((rc = bad_node_port(node, port)) != PERFMGR_EVENT_DB_SUCCESS)
                goto Exit;
 
+       mark_port_valid(node, port);
+
        p_port = &(node->ports[port]);
        previous = &(node->ports[port].err_previous);
 
@@ -413,6 +421,8 @@ perfmgr_db_add_dc_reading(perfmgr_db_t * db, uint64_t guid, 
uint8_t port,
        if ((rc = bad_node_port(node, port)) != PERFMGR_EVENT_DB_SUCCESS)
                goto Exit;
 
+       mark_port_valid(node, port);
+
        p_port = &node->ports[port];
        previous = &node->ports[port].dc_previous;
 
@@ -579,6 +589,10 @@ static void dump_node_mr(db_node_t * node, FILE * fp)
                "multicast_rcv_pkts");
        for (i = (node->esp0) ? 0 : 1; i < node->num_ports; i++) {
                char *since = ctime(&node->ports[i].last_reset);
+
+               if (!node->ports[i].valid)
+                       continue;
+
                since[strlen(since) - 1] = '\0';        /* remove \n */
 
                fprintf(fp,
@@ -622,6 +636,10 @@ static void dump_node_hr(db_node_t * node, FILE * fp)
        fprintf(fp, "\n");
        for (i = (node->esp0) ? 0 : 1; i < node->num_ports; i++) {
                char *since = ctime(&node->ports[i].last_reset);
+
+               if (!node->ports[i].valid)
+                       continue;
+
                since[strlen(since) - 1] = '\0';        /* remove \n */
 
                fprintf(fp, "\"%s\" 0x%" PRIx64 " port %d (Since %s)\n"
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to