Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=192594d5230f447ef2df8de9d7902ac90d11c118
Commit:     192594d5230f447ef2df8de9d7902ac90d11c118
Parent:     aa7c79abd154ed9aba4c19b861d439ef6af35d3a
Author:     Michael Albaugh <[EMAIL PROTECTED]>
AuthorDate: Tue Oct 2 13:26:45 2007 -0700
Committer:  Roland Dreier <[EMAIL PROTECTED]>
CommitDate: Tue Oct 9 21:00:08 2007 -0700

    IB/ipath: Maintain active time on all chips
    
    There is a count of "active hours" maintained in EEPROM, to aid
    troubleshooting. The definition of "active" is based on traffic
    exceeding a threshold in any given 5-second polling interval. As
    originally written, the check was inadvertently bypassed for chips whose
    counters were 64-bits wide, and only applied to chips with 32-bit wide
    counters.
    
    This patch moves the test for amount of traffic "out" to a more common
    location, rather than depending on a side-effect of the software
    emulation of 64-bit counts on chips whose hardware is only 32-bits wide.
    
    Signed-off-by: Michael Albaugh <[EMAIL PROTECTED]>
    Signed-off-by: Roland Dreier <[EMAIL PROTECTED]>
---
 drivers/infiniband/hw/ipath/ipath_stats.c |   17 ++++++-----------
 1 files changed, 6 insertions(+), 11 deletions(-)

diff --git a/drivers/infiniband/hw/ipath/ipath_stats.c 
b/drivers/infiniband/hw/ipath/ipath_stats.c
index bae4f56..f027141 100644
--- a/drivers/infiniband/hw/ipath/ipath_stats.c
+++ b/drivers/infiniband/hw/ipath/ipath_stats.c
@@ -55,7 +55,6 @@ u64 ipath_snap_cntr(struct ipath_devdata *dd, ipath_creg creg)
        u64 val64;
        unsigned long t0, t1;
        u64 ret;
-       unsigned long flags;
 
        t0 = jiffies;
        /* If fast increment counters are only 32 bits, snapshot them,
@@ -92,18 +91,12 @@ u64 ipath_snap_cntr(struct ipath_devdata *dd, ipath_creg 
creg)
        if (creg == dd->ipath_cregs->cr_wordsendcnt) {
                if (val != dd->ipath_lastsword) {
                        dd->ipath_sword += val - dd->ipath_lastsword;
-                       spin_lock_irqsave(&dd->ipath_eep_st_lock, flags);
-                       dd->ipath_traffic_wds += val - dd->ipath_lastsword;
-                       spin_unlock_irqrestore(&dd->ipath_eep_st_lock, flags);
                        dd->ipath_lastsword = val;
                }
                val64 = dd->ipath_sword;
        } else if (creg == dd->ipath_cregs->cr_wordrcvcnt) {
                if (val != dd->ipath_lastrword) {
                        dd->ipath_rword += val - dd->ipath_lastrword;
-                       spin_lock_irqsave(&dd->ipath_eep_st_lock, flags);
-                       dd->ipath_traffic_wds += val - dd->ipath_lastrword;
-                       spin_unlock_irqrestore(&dd->ipath_eep_st_lock, flags);
                        dd->ipath_lastrword = val;
                }
                val64 = dd->ipath_rword;
@@ -247,6 +240,7 @@ void ipath_get_faststats(unsigned long opaque)
        u32 val;
        static unsigned cnt;
        unsigned long flags;
+       u64 traffic_wds;
 
        /*
         * don't access the chip while running diags, or memory diags can
@@ -262,12 +256,13 @@ void ipath_get_faststats(unsigned long opaque)
         * exceeding a threshold, so we need to check the word-counts
         * even if they are 64-bit.
         */
-       ipath_snap_cntr(dd, dd->ipath_cregs->cr_wordsendcnt);
-       ipath_snap_cntr(dd, dd->ipath_cregs->cr_wordrcvcnt);
+       traffic_wds = ipath_snap_cntr(dd, dd->ipath_cregs->cr_wordsendcnt) +
+               ipath_snap_cntr(dd, dd->ipath_cregs->cr_wordrcvcnt);
        spin_lock_irqsave(&dd->ipath_eep_st_lock, flags);
-       if (dd->ipath_traffic_wds  >= IPATH_TRAFFIC_ACTIVE_THRESHOLD)
+       traffic_wds -= dd->ipath_traffic_wds;
+       dd->ipath_traffic_wds += traffic_wds;
+       if (traffic_wds  >= IPATH_TRAFFIC_ACTIVE_THRESHOLD)
                atomic_add(5, &dd->ipath_active_time); /* S/B #define */
-       dd->ipath_traffic_wds = 0;
        spin_unlock_irqrestore(&dd->ipath_eep_st_lock, flags);
 
        if (dd->ipath_flags & IPATH_32BITCOUNTERS) {
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to