]> git.karo-electronics.de Git - linux-beck.git/commitdiff
RDMA/nes: Use atomic counters for CM listener create and destroy
authorFaisal Latif <faisal.latif@intel.com>
Fri, 12 Feb 2010 19:55:03 +0000 (19:55 +0000)
committerRoland Dreier <rolandd@cisco.com>
Fri, 19 Feb 2010 19:38:14 +0000 (11:38 -0800)
After running long iterative MPI tests, sometimes ethtool reports a
"CM Destroy Listener" count more than the "CM Create Listener" count.
This inconsistency is fixed by making counter variables atomic.

Signed-off-by: Faisal Latif <faisal.latif@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/nes/nes.h
drivers/infiniband/hw/nes/nes_cm.c
drivers/infiniband/hw/nes/nes_nic.c

index 98840564bb2f04870831e22b908a276219b128b9..cffdac4a899feb334cfdf7dc05246e6da82883d1 100644 (file)
@@ -193,8 +193,8 @@ extern u32 cm_packets_created;
 extern u32 cm_packets_received;
 extern u32 cm_packets_dropped;
 extern u32 cm_packets_retrans;
-extern u32 cm_listens_created;
-extern u32 cm_listens_destroyed;
+extern atomic_t cm_listens_created;
+extern atomic_t cm_listens_destroyed;
 extern u32 cm_backlog_drops;
 extern atomic_t cm_loopbacks;
 extern atomic_t cm_nodes_created;
index 39468c277036d5fde84b01c07d3080867ff79dc6..debd92c53d893d59c64051977ccff58d2f005e35 100644 (file)
@@ -67,8 +67,8 @@ u32 cm_packets_dropped;
 u32 cm_packets_retrans;
 u32 cm_packets_created;
 u32 cm_packets_received;
-u32 cm_listens_created;
-u32 cm_listens_destroyed;
+atomic_t cm_listens_created;
+atomic_t cm_listens_destroyed;
 u32 cm_backlog_drops;
 atomic_t cm_loopbacks;
 atomic_t cm_nodes_created;
@@ -1042,7 +1042,7 @@ static int mini_cm_dec_refcnt_listen(struct nes_cm_core *cm_core,
                kfree(listener);
                listener = NULL;
                ret = 0;
-               cm_listens_destroyed++;
+               atomic_inc(&cm_listens_destroyed);
        } else {
                spin_unlock_irqrestore(&cm_core->listen_list_lock, flags);
        }
@@ -3172,7 +3172,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
                        g_cm_core->api->stop_listener(g_cm_core, (void *)cm_node);
                        return err;
                }
-               cm_listens_created++;
+               atomic_inc(&cm_listens_created);
        }
 
        cm_id->add_ref(cm_id);
index ab11027801862c59359f4d6129cfb54ac98bb768..3d550dc77d0dc1b7feb8ae8dfb3c232b67f57dab 100644 (file)
@@ -1230,8 +1230,8 @@ static void nes_netdev_get_ethtool_stats(struct net_device *netdev,
        target_stat_values[++index] = cm_packets_received;
        target_stat_values[++index] = cm_packets_dropped;
        target_stat_values[++index] = cm_packets_retrans;
-       target_stat_values[++index] = cm_listens_created;
-       target_stat_values[++index] = cm_listens_destroyed;
+       target_stat_values[++index] = atomic_read(&cm_listens_created);
+       target_stat_values[++index] = atomic_read(&cm_listens_destroyed);
        target_stat_values[++index] = cm_backlog_drops;
        target_stat_values[++index] = atomic_read(&cm_loopbacks);
        target_stat_values[++index] = atomic_read(&cm_nodes_created);