From 8cab43bf8ff6b6002045315885820325fed72360 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Wed, 17 May 2006 14:37:06 -0700 Subject: [PATCH] --- yaml --- r: 26823 b: refs/heads/master c: 86fba6342dee30a1533b14da284d79e4eb66de26 h: refs/heads/master i: 26821: 4aafe16c47f5ba6e9db24d5f2f7f5f0c6ce28f8c 26819: 68d47b7e6bd927df2e71d4f8b59304b45417a342 26815: e361731a775c4d9ee1ed8a75b977aa72ff234b0d v: v3 --- [refs] | 2 +- trunk/drivers/net/sky2.c | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 8eaaa49feae8..da05f3c0482b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 86a31a759f2117816b8c78a049c41ead3ef9ef1c +refs/heads/master: 86fba6342dee30a1533b14da284d79e4eb66de26 diff --git a/trunk/drivers/net/sky2.c b/trunk/drivers/net/sky2.c index bb185e5efa35..9729062d1fbb 100644 --- a/trunk/drivers/net/sky2.c +++ b/trunk/drivers/net/sky2.c @@ -1919,6 +1919,12 @@ static inline void sky2_tx_done(struct net_device *dev, u16 last) } } +/* Is status ring empty or is there more to do? */ +static inline int sky2_more_work(const struct sky2_hw *hw) +{ + return (hw->st_idx != sky2_read16(hw, STAT_PUT_IDX)); +} + /* Process status response ring */ static int sky2_status_intr(struct sky2_hw *hw, int to_do) { @@ -2191,19 +2197,19 @@ static int sky2_poll(struct net_device *dev0, int *budget) if (status & Y2_IS_CHK_TXA2) sky2_descriptor_error(hw, 1, "transmit", Y2_IS_CHK_TXA2); - if (status & Y2_IS_STAT_BMU) - sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ); - work_done = sky2_status_intr(hw, work_limit); *budget -= work_done; dev0->quota -= work_done; - if (work_done >= work_limit) + if (status & Y2_IS_STAT_BMU) + sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ); + + if (sky2_more_work(hw)) return 1; netif_rx_complete(dev0); - status = sky2_read32(hw, B0_Y2_SP_LISR); + sky2_read32(hw, B0_Y2_SP_LISR); return 0; }