Loading drivers/net/cxgb3/adapter.h +2 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,8 @@ struct sge_rspq { /* state for an SGE response queue */ unsigned long empty; /* # of times queue ran out of credits */ unsigned long nomem; /* # of responses deferred due to no mem */ unsigned long unhandled_irqs; /* # of spurious intrs */ unsigned long starved; unsigned long restarted; }; struct tx_desc; Loading drivers/net/cxgb3/sge.c +14 −1 Original line number Diff line number Diff line Loading @@ -2379,10 +2379,23 @@ static void sge_timer_cb(unsigned long data) &adap->sge.qs[0].rspq.lock; if (spin_trylock_irq(lock)) { if (!napi_is_scheduled(qs->netdev)) { u32 status = t3_read_reg(adap, A_SG_RSPQ_FL_STATUS); if (qs->fl[0].credits < qs->fl[0].size) __refill_fl(adap, &qs->fl[0]); if (qs->fl[1].credits < qs->fl[1].size) __refill_fl(adap, &qs->fl[1]); if (status & (1 << qs->rspq.cntxt_id)) { qs->rspq.starved++; if (qs->rspq.credits) { refill_rspq(adap, &qs->rspq, 1); qs->rspq.credits--; qs->rspq.restarted++; t3_write_reg(adap, A_SG_RSPQ_FL_STATUS, 1 << qs->rspq.cntxt_id); } } } spin_unlock_irq(lock); } Loading Loading
drivers/net/cxgb3/adapter.h +2 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,8 @@ struct sge_rspq { /* state for an SGE response queue */ unsigned long empty; /* # of times queue ran out of credits */ unsigned long nomem; /* # of responses deferred due to no mem */ unsigned long unhandled_irqs; /* # of spurious intrs */ unsigned long starved; unsigned long restarted; }; struct tx_desc; Loading
drivers/net/cxgb3/sge.c +14 −1 Original line number Diff line number Diff line Loading @@ -2379,10 +2379,23 @@ static void sge_timer_cb(unsigned long data) &adap->sge.qs[0].rspq.lock; if (spin_trylock_irq(lock)) { if (!napi_is_scheduled(qs->netdev)) { u32 status = t3_read_reg(adap, A_SG_RSPQ_FL_STATUS); if (qs->fl[0].credits < qs->fl[0].size) __refill_fl(adap, &qs->fl[0]); if (qs->fl[1].credits < qs->fl[1].size) __refill_fl(adap, &qs->fl[1]); if (status & (1 << qs->rspq.cntxt_id)) { qs->rspq.starved++; if (qs->rspq.credits) { refill_rspq(adap, &qs->rspq, 1); qs->rspq.credits--; qs->rspq.restarted++; t3_write_reg(adap, A_SG_RSPQ_FL_STATUS, 1 << qs->rspq.cntxt_id); } } } spin_unlock_irq(lock); } Loading