|
@@ -89,10 +89,10 @@ static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
|
|
|
|
|
|
#define DRV_MODULE_NAME "tg3"
|
|
|
#define TG3_MAJ_NUM 3
|
|
|
-#define TG3_MIN_NUM 122
|
|
|
+#define TG3_MIN_NUM 123
|
|
|
#define DRV_MODULE_VERSION \
|
|
|
__stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
|
|
|
-#define DRV_MODULE_RELDATE "December 7, 2011"
|
|
|
+#define DRV_MODULE_RELDATE "March 21, 2012"
|
|
|
|
|
|
#define RESET_KIND_SHUTDOWN 0
|
|
|
#define RESET_KIND_INIT 1
|
|
@@ -5953,8 +5953,10 @@ next_pkt_nopost:
|
|
|
tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
|
|
|
tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
|
|
|
|
|
|
- if (tnapi != &tp->napi[1])
|
|
|
+ if (tnapi != &tp->napi[1]) {
|
|
|
+ tp->rx_refill = true;
|
|
|
napi_schedule(&tp->napi[1].napi);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return received;
|
|
@@ -6134,6 +6136,7 @@ static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
|
|
|
u32 std_prod_idx = dpr->rx_std_prod_idx;
|
|
|
u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
|
|
|
|
|
|
+ tp->rx_refill = false;
|
|
|
for (i = 1; i < tp->irq_cnt; i++)
|
|
|
err |= tg3_rx_prodring_xfer(tp, dpr,
|
|
|
&tp->napi[i].prodring);
|
|
@@ -6197,9 +6200,25 @@ static int tg3_poll_msix(struct napi_struct *napi, int budget)
|
|
|
/* check for RX/TX work to do */
|
|
|
if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
|
|
|
*(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
|
|
|
+
|
|
|
+ /* This test here is not race free, but will reduce
|
|
|
+ * the number of interrupts by looping again.
|
|
|
+ */
|
|
|
+ if (tnapi == &tp->napi[1] && tp->rx_refill)
|
|
|
+ continue;
|
|
|
+
|
|
|
napi_complete(napi);
|
|
|
/* Reenable interrupts. */
|
|
|
tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
|
|
|
+
|
|
|
+ /* This test here is synchronized by napi_schedule()
|
|
|
+ * and napi_complete() to close the race condition.
|
|
|
+ */
|
|
|
+ if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
|
|
|
+ tw32(HOSTCC_MODE, tp->coalesce_mode |
|
|
|
+ HOSTCC_MODE_ENABLE |
|
|
|
+ tnapi->coal_now);
|
|
|
+ }
|
|
|
mmiowb();
|
|
|
break;
|
|
|
}
|