diff options
author | David S. Miller <davem@davemloft.net> | 2005-05-19 01:50:53 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-05-19 01:50:53 -0400 |
commit | f7383c22246cfccbe912541dd83103009ed2b537 (patch) | |
tree | 264daa71bdac2165fe26ab7d3b8010a3609ee1e7 /drivers/net | |
parent | 59e6b4343299373bc10dd131ab5142f53ddd838a (diff) |
[TG3]: In tg3_poll(), resample status_tag after doing work.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/tg3.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 4ab9680ffbd2..4d2bdbdd34e8 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -2869,9 +2869,6 @@ static int tg3_poll(struct net_device *netdev, int *budget) | |||
2869 | 2869 | ||
2870 | spin_lock_irqsave(&tp->lock, flags); | 2870 | spin_lock_irqsave(&tp->lock, flags); |
2871 | 2871 | ||
2872 | if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) | ||
2873 | tp->last_tag = sblk->status_tag; | ||
2874 | |||
2875 | /* handle link change and other phy events */ | 2872 | /* handle link change and other phy events */ |
2876 | if (!(tp->tg3_flags & | 2873 | if (!(tp->tg3_flags & |
2877 | (TG3_FLAG_USE_LINKCHG_REG | | 2874 | (TG3_FLAG_USE_LINKCHG_REG | |
@@ -2896,7 +2893,6 @@ static int tg3_poll(struct net_device *netdev, int *budget) | |||
2896 | * All RX "locking" is done by ensuring outside | 2893 | * All RX "locking" is done by ensuring outside |
2897 | * code synchronizes with dev->poll() | 2894 | * code synchronizes with dev->poll() |
2898 | */ | 2895 | */ |
2899 | done = 1; | ||
2900 | if (sblk->idx[0].rx_producer != tp->rx_rcb_ptr) { | 2896 | if (sblk->idx[0].rx_producer != tp->rx_rcb_ptr) { |
2901 | int orig_budget = *budget; | 2897 | int orig_budget = *budget; |
2902 | int work_done; | 2898 | int work_done; |
@@ -2908,12 +2904,14 @@ static int tg3_poll(struct net_device *netdev, int *budget) | |||
2908 | 2904 | ||
2909 | *budget -= work_done; | 2905 | *budget -= work_done; |
2910 | netdev->quota -= work_done; | 2906 | netdev->quota -= work_done; |
2911 | |||
2912 | if (work_done >= orig_budget) | ||
2913 | done = 0; | ||
2914 | } | 2907 | } |
2915 | 2908 | ||
2909 | if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) | ||
2910 | tp->last_tag = sblk->status_tag; | ||
2911 | rmb(); | ||
2912 | |||
2916 | /* if no more work, tell net stack and NIC we're done */ | 2913 | /* if no more work, tell net stack and NIC we're done */ |
2914 | done = !tg3_has_work(tp); | ||
2917 | if (done) { | 2915 | if (done) { |
2918 | spin_lock_irqsave(&tp->lock, flags); | 2916 | spin_lock_irqsave(&tp->lock, flags); |
2919 | __netif_rx_complete(netdev); | 2917 | __netif_rx_complete(netdev); |