iwlegacy: print how long queue was actually stuck
authorPaul Bolle <pebolle@tiscali.nl>
Wed, 27 Jun 2012 08:36:27 +0000 (10:36 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 28 Jun 2012 18:37:44 +0000 (14:37 -0400)
Every now and then, after resuming from suspend, the iwlegacy driver
prints
    iwl4965 0000:03:00.0: Queue 2 stuck for 2000 ms.
    iwl4965 0000:03:00.0: On demand firmware reload

I have no idea what causes these errors. But the code currently uses
wd_timeout in the first error. wd_timeout will generally be set at
IL_DEF_WD_TIMEOUT (ie, 2000). Perhaps printing for how long the queue
was actually stuck can clarify the cause of these errors.

Signed-off-by: Paul Bolle <pebolle@tiscali.nl>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlegacy/common.c

index cbf2dc18341f58eec6141158e0c6d3aaad02d12b..763c7529921b94533ad926de2bd67503b484dcab 100644 (file)
@@ -4717,10 +4717,11 @@ il_check_stuck_queue(struct il_priv *il, int cnt)
        struct il_tx_queue *txq = &il->txq[cnt];
        struct il_queue *q = &txq->q;
        unsigned long timeout;
+       unsigned long now = jiffies;
        int ret;
 
        if (q->read_ptr == q->write_ptr) {
-               txq->time_stamp = jiffies;
+               txq->time_stamp = now;
                return 0;
        }
 
@@ -4728,9 +4729,9 @@ il_check_stuck_queue(struct il_priv *il, int cnt)
            txq->time_stamp +
            msecs_to_jiffies(il->cfg->wd_timeout);
 
-       if (time_after(jiffies, timeout)) {
+       if (time_after(now, timeout)) {
                IL_ERR("Queue %d stuck for %u ms.\n", q->id,
-                      il->cfg->wd_timeout);
+                      jiffies_to_msecs(now - txq->time_stamp));
                ret = il_force_reset(il, false);
                return (ret == -EAGAIN) ? 0 : 1;
        }