IB/qib: Handle transitions from ACTIVE_DEFERRED to ACTIVE better
authorMike Marciniszyn <mike.marciniszyn@qlogic.com>
Tue, 11 Jan 2011 01:42:20 +0000 (17:42 -0800)
committerRoland Dreier <rolandd@cisco.com>
Tue, 11 Jan 2011 01:42:20 +0000 (17:42 -0800)
When the link transitions from ACTIVE_DEFERRED to ACTIVE, the driver
only sees the ACTIVE state. With this change, it will check whether
the state was already ACTIVE and if so, it will not generated IB
events and will not clear symbol error counts.

Signed-off-by: Mike Marciniszyn <mike.marciniszyn@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/qib/qib_intr.c

index 54a40828a1067a417eec97c451ca9a9adbf95d9a..a693c56ec8a6bf97df295c23868e74272c21ef40 100644 (file)
@@ -131,7 +131,8 @@ void qib_handle_e_ibstatuschanged(struct qib_pportdata *ppd, u64 ibcs)
                        /* start a 75msec timer to clear symbol errors */
                        mod_timer(&ppd->symerr_clear_timer,
                                  msecs_to_jiffies(75));
                        /* start a 75msec timer to clear symbol errors */
                        mod_timer(&ppd->symerr_clear_timer,
                                  msecs_to_jiffies(75));
-               } else if (ltstate == IB_PHYSPORTSTATE_LINKUP) {
+               } else if (ltstate == IB_PHYSPORTSTATE_LINKUP &&
+                          !(ppd->lflags & QIBL_LINKACTIVE)) {
                        /* active, but not active defered */
                        qib_hol_up(ppd); /* useful only for 6120 now */
                        *ppd->statusp |=
                        /* active, but not active defered */
                        qib_hol_up(ppd); /* useful only for 6120 now */
                        *ppd->statusp |=