aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tg3.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r--drivers/net/tg3.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index bc8c183d622..c4ab8a721b4 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -740,8 +740,13 @@ static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
740 if (sblk->status & SD_STATUS_LINK_CHG) 740 if (sblk->status & SD_STATUS_LINK_CHG)
741 work_exists = 1; 741 work_exists = 1;
742 } 742 }
743 /* check for RX/TX work to do */ 743
744 if (sblk->idx[0].tx_consumer != tnapi->tx_cons || 744 /* check for TX work to do */
745 if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
746 work_exists = 1;
747
748 /* check for RX work to do */
749 if (tnapi->rx_rcb_prod_idx &&
745 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 750 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
746 work_exists = 1; 751 work_exists = 1;
747 752
@@ -5216,6 +5221,9 @@ static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
5216 return work_done; 5221 return work_done;
5217 } 5222 }
5218 5223
5224 if (!tnapi->rx_rcb_prod_idx)
5225 return work_done;
5226
5219 /* run RX thread, within the bounds set by NAPI. 5227 /* run RX thread, within the bounds set by NAPI.
5220 * All RX "locking" is done by ensuring outside 5228 * All RX "locking" is done by ensuring outside
5221 * code synchronizes with tg3->napi.poll() 5229 * code synchronizes with tg3->napi.poll()
@@ -6626,6 +6634,12 @@ static int tg3_alloc_consistent(struct tg3 *tp)
6626 */ 6634 */
6627 switch (i) { 6635 switch (i) {
6628 default: 6636 default:
6637 if (tg3_flag(tp, ENABLE_RSS)) {
6638 tnapi->rx_rcb_prod_idx = NULL;
6639 break;
6640 }
6641 /* Fall through */
6642 case 1:
6629 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer; 6643 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
6630 break; 6644 break;
6631 case 2: 6645 case 2: