* [PATCH 0/6] sky2 patches for net-2.6
@ 2007-10-12 1:19 Stephen Hemminger
2007-10-12 1:19 ` [PATCH 1/6] sky2: status polling loop Stephen Hemminger
` (5 more replies)
0 siblings, 6 replies; 12+ messages in thread
From: Stephen Hemminger @ 2007-10-12 1:19 UTC (permalink / raw)
To: David Miller; +Cc: netdev
Includes:
* fix for new NAPI status loop
* use internal net_stats
* fixes for fiber PHY power
--
Stephen Hemminger <shemminger@linux-foundation.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/6] sky2: status polling loop
2007-10-12 1:19 [PATCH 0/6] sky2 patches for net-2.6 Stephen Hemminger
@ 2007-10-12 1:19 ` Stephen Hemminger
2007-10-12 1:23 ` David Miller
2007-10-12 1:19 ` [PATCH 2/6] sky2: ethtool register reserved area blackout Stephen Hemminger
` (4 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Stephen Hemminger @ 2007-10-12 1:19 UTC (permalink / raw)
To: David Miller; +Cc: netdev
[-- Attachment #1: sky2-status-loop.patch --]
[-- Type: text/plain, Size: 2477 bytes --]
Handle the corner case where budget is exhausted correctly.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
--- a/drivers/net/sky2.c 2007-10-11 18:11:44.000000000 -0700
+++ b/drivers/net/sky2.c 2007-10-11 18:12:50.000000000 -0700
@@ -2245,15 +2245,13 @@ static inline void sky2_tx_done(struct n
}
/* Process status response ring */
-static int sky2_status_intr(struct sky2_hw *hw, int to_do)
+static int sky2_status_intr(struct sky2_hw *hw, int to_do, u16 idx)
{
int work_done = 0;
unsigned rx[2] = { 0, 0 };
- u16 hwidx = sky2_read16(hw, STAT_PUT_IDX);
rmb();
-
- while (hw->st_idx != hwidx) {
+ do {
struct sky2_port *sky2;
struct sky2_status_le *le = hw->st_le + hw->st_idx;
unsigned port = le->css & CSS_LINK_BIT;
@@ -2364,7 +2362,7 @@ static int sky2_status_intr(struct sky2_
printk(KERN_WARNING PFX
"unknown status opcode 0x%x\n", le->opcode);
}
- }
+ } while (hw->st_idx != idx);
/* Fully processed status ring so clear irq */
sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ);
@@ -2606,7 +2604,8 @@ static int sky2_poll(struct napi_struct
{
struct sky2_hw *hw = container_of(napi, struct sky2_hw, napi);
u32 status = sky2_read32(hw, B0_Y2_SP_EISR);
- int work_done;
+ int work_done = 0;
+ u16 idx;
if (unlikely(status & Y2_IS_ERROR))
sky2_err_intr(hw, status);
@@ -2617,21 +2616,24 @@ static int sky2_poll(struct napi_struct
if (status & Y2_IS_IRQ_PHY2)
sky2_phy_intr(hw, 1);
- work_done = sky2_status_intr(hw, work_limit);
+ while ((idx = sky2_read16(hw, STAT_PUT_IDX)) != hw->st_idx) {
+ work_done += sky2_status_intr(hw, work_limit - work_done, idx);
- /* More work? */
- if (hw->st_idx == sky2_read16(hw, STAT_PUT_IDX)) {
- /* Bug/Errata workaround?
- * Need to kick the TX irq moderation timer.
- */
- if (sky2_read8(hw, STAT_TX_TIMER_CTRL) == TIM_START) {
- sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP);
- sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
- }
+ if (work_done >= work_limit)
+ goto done;
+ }
- napi_complete(napi);
- sky2_read32(hw, B0_Y2_SP_LISR);
+ /* Bug/Errata workaround?
+ * Need to kick the TX irq moderation timer.
+ */
+ if (sky2_read8(hw, STAT_TX_TIMER_CTRL) == TIM_START) {
+ sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP);
+ sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
}
+ napi_complete(napi);
+ sky2_read32(hw, B0_Y2_SP_LISR);
+done:
+
return work_done;
}
--
Stephen Hemminger <shemminger@linux-foundation.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/6] sky2: ethtool register reserved area blackout
2007-10-12 1:19 [PATCH 0/6] sky2 patches for net-2.6 Stephen Hemminger
2007-10-12 1:19 ` [PATCH 1/6] sky2: status polling loop Stephen Hemminger
@ 2007-10-12 1:19 ` Stephen Hemminger
2007-10-12 1:19 ` [PATCH 3/6] sky2: fix power settings on Yukon XL Stephen Hemminger
` (3 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2007-10-12 1:19 UTC (permalink / raw)
To: David Miller; +Cc: netdev
[-- Attachment #1: sky2-ethdump.patch --]
[-- Type: text/plain, Size: 2760 bytes --]
Make sure and not dump reserved areas of device space.
Touching some of these causes machine check exceptions on boards
like D-Link DGE-550SX.
Coding note, used a complex switch statement rather than bitmap
because it is easier to relate the block values to the documentation
rather than looking at a encoded bitmask.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
--- a/drivers/net/sky2.c 2007-10-11 18:12:50.000000000 -0700
+++ b/drivers/net/sky2.c 2007-10-11 18:12:56.000000000 -0700
@@ -3569,20 +3569,64 @@ static void sky2_get_regs(struct net_dev
{
const struct sky2_port *sky2 = netdev_priv(dev);
const void __iomem *io = sky2->hw->regs;
+ unsigned int b;
regs->version = 1;
- memset(p, 0, regs->len);
- memcpy_fromio(p, io, B3_RAM_ADDR);
-
- /* skip diagnostic ram region */
- memcpy_fromio(p + B3_RI_WTO_R1, io + B3_RI_WTO_R1, 0x2000 - B3_RI_WTO_R1);
+ for (b = 0; b < 128; b++) {
+ /* This complicated switch statement is to make sure and
+ * only access regions that are unreserved.
+ * Some blocks are only valid on dual port cards.
+ * and block 3 has some special diagnostic registers that
+ * are poison.
+ */
+ switch (b) {
+ case 3:
+ /* skip diagnostic ram region */
+ memcpy_fromio(p + 0x10, io + 0x10, 128 - 0x10);
+ break;
- /* copy GMAC registers */
- memcpy_fromio(p + BASE_GMAC_1, io + BASE_GMAC_1, 0x1000);
- if (sky2->hw->ports > 1)
- memcpy_fromio(p + BASE_GMAC_2, io + BASE_GMAC_2, 0x1000);
+ /* dual port cards only */
+ case 5: /* Tx Arbiter 2 */
+ case 9: /* RX2 */
+ case 14 ... 15: /* TX2 */
+ case 17: case 19: /* Ram Buffer 2 */
+ case 22 ... 23: /* Tx Ram Buffer 2 */
+ case 25: /* Rx MAC Fifo 1 */
+ case 27: /* Tx MAC Fifo 2 */
+ case 31: /* GPHY 2 */
+ case 40 ... 47: /* Pattern Ram 2 */
+ case 52: case 54: /* TCP Segmentation 2 */
+ case 112 ... 116: /* GMAC 2 */
+ if (sky2->hw->ports == 1)
+ goto reserved;
+ /* fall through */
+ case 0: /* Control */
+ case 2: /* Mac address */
+ case 4: /* Tx Arbiter 1 */
+ case 7: /* PCI express reg */
+ case 8: /* RX1 */
+ case 12 ... 13: /* TX1 */
+ case 16: case 18:/* Rx Ram Buffer 1 */
+ case 20 ... 21: /* Tx Ram Buffer 1 */
+ case 24: /* Rx MAC Fifo 1 */
+ case 26: /* Tx MAC Fifo 1 */
+ case 28 ... 29: /* Descriptor and status unit */
+ case 30: /* GPHY 1*/
+ case 32 ... 39: /* Pattern Ram 1 */
+ case 48: case 50: /* TCP Segmentation 1 */
+ case 56 ... 60: /* PCI space */
+ case 80 ... 84: /* GMAC 1 */
+ memcpy_fromio(p, io, 128);
+ break;
+ default:
+reserved:
+ memset(p, 0, 128);
+ }
+ p += 128;
+ io += 128;
+ }
}
/* In order to do Jumbo packets on these chips, need to turn off the
--
Stephen Hemminger <shemminger@linux-foundation.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 3/6] sky2: fix power settings on Yukon XL
2007-10-12 1:19 [PATCH 0/6] sky2 patches for net-2.6 Stephen Hemminger
2007-10-12 1:19 ` [PATCH 1/6] sky2: status polling loop Stephen Hemminger
2007-10-12 1:19 ` [PATCH 2/6] sky2: ethtool register reserved area blackout Stephen Hemminger
@ 2007-10-12 1:19 ` Stephen Hemminger
2007-10-12 1:19 ` [PATCH 4/6] sky2: fiber advertise bits initialization (trivial) Stephen Hemminger
` (2 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2007-10-12 1:19 UTC (permalink / raw)
To: David Miller; +Cc: netdev
[-- Attachment #1: sky2-phy-power.patch --]
[-- Type: text/plain, Size: 1178 bytes --]
Make sure PCI register for PHY power gets set correctly.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
--- a/drivers/net/sky2.c 2007-10-11 18:12:56.000000000 -0700
+++ b/drivers/net/sky2.c 2007-10-11 18:13:00.000000000 -0700
@@ -606,20 +606,19 @@ static void sky2_phy_power(struct sky2_h
{
struct pci_dev *pdev = hw->pdev;
u32 reg1;
- static const u32 phy_power[]
- = { PCI_Y2_PHY1_POWD, PCI_Y2_PHY2_POWD };
-
- /* looks like this XL is back asswards .. */
- if (hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev > 1)
- onoff = !onoff;
+ static const u32 phy_power[] = { PCI_Y2_PHY1_POWD, PCI_Y2_PHY2_POWD };
+ static const u32 coma_mode[] = { PCI_Y2_PHY1_COMA, PCI_Y2_PHY2_COMA };
pci_read_config_dword(pdev, PCI_DEV_REG1, ®1);
+ /* Turn on/off phy power saving */
if (onoff)
- /* Turn off phy power saving */
reg1 &= ~phy_power[port];
else
reg1 |= phy_power[port];
+ if (onoff && hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev > 1)
+ reg1 |= coma_mode[port];
+
pci_write_config_dword(pdev, PCI_DEV_REG1, reg1);
pci_read_config_dword(pdev, PCI_DEV_REG1, ®1);
--
Stephen Hemminger <shemminger@linux-foundation.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 4/6] sky2: fiber advertise bits initialization (trivial)
2007-10-12 1:19 [PATCH 0/6] sky2 patches for net-2.6 Stephen Hemminger
` (2 preceding siblings ...)
2007-10-12 1:19 ` [PATCH 3/6] sky2: fix power settings on Yukon XL Stephen Hemminger
@ 2007-10-12 1:19 ` Stephen Hemminger
2007-10-12 1:19 ` [PATCH 5/6] sky2: use netdevice stats struct Stephen Hemminger
2007-10-12 1:19 ` [PATCH 6/6] sky2: version 1.19 Stephen Hemminger
5 siblings, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2007-10-12 1:19 UTC (permalink / raw)
To: David Miller; +Cc: netdev
[-- Attachment #1: fiber-mode-reorder.patch --]
[-- Type: text/plain, Size: 717 bytes --]
Put initialization in sequential order (same as other constants).
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
--- a/drivers/net/sky2.c 2007-10-11 18:13:00.000000000 -0700
+++ b/drivers/net/sky2.c 2007-10-11 18:13:01.000000000 -0700
@@ -296,10 +296,10 @@ static const u16 copper_fc_adv[] = {
/* flow control to advertise bits when using 1000BaseX */
static const u16 fiber_fc_adv[] = {
- [FC_BOTH] = PHY_M_P_BOTH_MD_X,
+ [FC_NONE] = PHY_M_P_NO_PAUSE_X,
[FC_TX] = PHY_M_P_ASYM_MD_X,
[FC_RX] = PHY_M_P_SYM_MD_X,
- [FC_NONE] = PHY_M_P_NO_PAUSE_X,
+ [FC_BOTH] = PHY_M_P_BOTH_MD_X,
};
/* flow control to GMA disable bits */
--
Stephen Hemminger <shemminger@linux-foundation.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 5/6] sky2: use netdevice stats struct
2007-10-12 1:19 [PATCH 0/6] sky2 patches for net-2.6 Stephen Hemminger
` (3 preceding siblings ...)
2007-10-12 1:19 ` [PATCH 4/6] sky2: fiber advertise bits initialization (trivial) Stephen Hemminger
@ 2007-10-12 1:19 ` Stephen Hemminger
2007-10-12 1:19 ` [PATCH 6/6] sky2: version 1.19 Stephen Hemminger
5 siblings, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2007-10-12 1:19 UTC (permalink / raw)
To: David Miller; +Cc: netdev
[-- Attachment #1: sky2-net-stats.patch --]
[-- Type: text/plain, Size: 3607 bytes --]
Use builtin statistics structure from net device.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
--- a/drivers/net/sky2.c 2007-10-11 18:13:01.000000000 -0700
+++ b/drivers/net/sky2.c 2007-10-11 18:13:02.000000000 -0700
@@ -1635,8 +1635,8 @@ static void sky2_tx_complete(struct sky2
printk(KERN_DEBUG "%s: tx done %u\n",
dev->name, idx);
- sky2->net_stats.tx_packets++;
- sky2->net_stats.tx_bytes += re->skb->len;
+ dev->stats.tx_packets++;
+ dev->stats.tx_bytes += re->skb->len;
dev_kfree_skb_any(re->skb);
sky2->tx_next = RING_NEXT(idx, TX_RING_SIZE);
@@ -2204,16 +2204,16 @@ resubmit:
len_error:
/* Truncation of overlength packets
causes PHY length to not match MAC length */
- ++sky2->net_stats.rx_length_errors;
+ ++dev->stats.rx_length_errors;
if (netif_msg_rx_err(sky2) && net_ratelimit())
pr_info(PFX "%s: rx length error: status %#x length %d\n",
dev->name, status, length);
goto resubmit;
error:
- ++sky2->net_stats.rx_errors;
+ ++dev->stats.rx_errors;
if (status & GMR_FS_RX_FF_OV) {
- sky2->net_stats.rx_over_errors++;
+ dev->stats.rx_over_errors++;
goto resubmit;
}
@@ -2222,11 +2222,11 @@ error:
dev->name, status, length);
if (status & (GMR_FS_LONG_ERR | GMR_FS_UN_SIZE))
- sky2->net_stats.rx_length_errors++;
+ dev->stats.rx_length_errors++;
if (status & GMR_FS_FRAGMENT)
- sky2->net_stats.rx_frame_errors++;
+ dev->stats.rx_frame_errors++;
if (status & GMR_FS_CRC_ERR)
- sky2->net_stats.rx_crc_errors++;
+ dev->stats.rx_crc_errors++;
goto resubmit;
}
@@ -2271,7 +2271,7 @@ static int sky2_status_intr(struct sky2_
++rx[port];
skb = sky2_receive(dev, length, status);
if (unlikely(!skb)) {
- sky2->net_stats.rx_dropped++;
+ dev->stats.rx_dropped++;
break;
}
@@ -2286,8 +2286,8 @@ static int sky2_status_intr(struct sky2_
}
skb->protocol = eth_type_trans(skb, dev);
- sky2->net_stats.rx_packets++;
- sky2->net_stats.rx_bytes += skb->len;
+ dev->stats.rx_packets++;
+ dev->stats.rx_bytes += skb->len;
dev->last_rx = jiffies;
#ifdef SKY2_VLAN_TAG_USED
@@ -2478,12 +2478,12 @@ static void sky2_mac_intr(struct sky2_hw
gma_read16(hw, port, GM_TX_IRQ_SRC);
if (status & GM_IS_RX_FF_OR) {
- ++sky2->net_stats.rx_fifo_errors;
+ ++dev->stats.rx_fifo_errors;
sky2_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_CLI_RX_FO);
}
if (status & GM_IS_TX_FF_UR) {
- ++sky2->net_stats.tx_fifo_errors;
+ ++dev->stats.tx_fifo_errors;
sky2_write8(hw, SK_REG(port, TX_GMF_CTRL_T), GMF_CLI_TX_FU);
}
}
@@ -3222,12 +3222,6 @@ static void sky2_get_strings(struct net_
}
}
-static struct net_device_stats *sky2_get_stats(struct net_device *dev)
-{
- struct sky2_port *sky2 = netdev_priv(dev);
- return &sky2->net_stats;
-}
-
static int sky2_set_mac_address(struct net_device *dev, void *p)
{
struct sky2_port *sky2 = netdev_priv(dev);
@@ -3977,7 +3971,6 @@ static __devinit struct net_device *sky2
dev->stop = sky2_down;
dev->do_ioctl = sky2_ioctl;
dev->hard_start_xmit = sky2_xmit_frame;
- dev->get_stats = sky2_get_stats;
dev->set_multicast_list = sky2_set_multicast;
dev->set_mac_address = sky2_set_mac_address;
dev->change_mtu = sky2_change_mtu;
--- a/drivers/net/sky2.h 2007-10-11 18:11:44.000000000 -0700
+++ b/drivers/net/sky2.h 2007-10-11 18:13:02.000000000 -0700
@@ -2031,8 +2031,6 @@ struct sky2_port {
#ifdef CONFIG_SKY2_DEBUG
struct dentry *debugfs;
#endif
- struct net_device_stats net_stats;
-
};
struct sky2_hw {
--
Stephen Hemminger <shemminger@linux-foundation.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 6/6] sky2: version 1.19
2007-10-12 1:19 [PATCH 0/6] sky2 patches for net-2.6 Stephen Hemminger
` (4 preceding siblings ...)
2007-10-12 1:19 ` [PATCH 5/6] sky2: use netdevice stats struct Stephen Hemminger
@ 2007-10-12 1:19 ` Stephen Hemminger
5 siblings, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2007-10-12 1:19 UTC (permalink / raw)
To: David Miller; +Cc: netdev
[-- Attachment #1: sky2-1.19 --]
[-- Type: text/plain, Size: 451 bytes --]
Update version to keep track of new changes.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
--- a/drivers/net/sky2.c 2007-10-11 18:13:02.000000000 -0700
+++ b/drivers/net/sky2.c 2007-10-11 18:14:25.000000000 -0700
@@ -52,7 +52,7 @@
#include "sky2.h"
#define DRV_NAME "sky2"
-#define DRV_VERSION "1.18"
+#define DRV_VERSION "1.19"
#define PFX DRV_NAME " "
/*
--
Stephen Hemminger <shemminger@linux-foundation.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/6] sky2: status polling loop
2007-10-12 1:19 ` [PATCH 1/6] sky2: status polling loop Stephen Hemminger
@ 2007-10-12 1:23 ` David Miller
2007-10-12 1:25 ` Stephen Hemminger
2007-10-12 1:29 ` [PATCH 1/6] sky2: status polling loop (post merge) Stephen Hemminger
0 siblings, 2 replies; 12+ messages in thread
From: David Miller @ 2007-10-12 1:23 UTC (permalink / raw)
To: shemminger; +Cc: netdev
From: Stephen Hemminger <shemminger@linux-foundation.org>
Date: Thu, 11 Oct 2007 18:19:52 -0700
> Handle the corner case where budget is exhausted correctly.
>
> Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Doesn't apply, I checked in my fixed version of your original patch
already.
You had to have some idea I would apply that fix, so this patch series
seems a bit premature since it's almost guarenteed to not apply any
more.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/6] sky2: status polling loop
2007-10-12 1:23 ` David Miller
@ 2007-10-12 1:25 ` Stephen Hemminger
2007-10-12 1:29 ` [PATCH 1/6] sky2: status polling loop (post merge) Stephen Hemminger
1 sibling, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2007-10-12 1:25 UTC (permalink / raw)
To: David Miller; +Cc: netdev
On Thu, 11 Oct 2007 18:23:58 -0700 (PDT)
David Miller <davem@davemloft.net> wrote:
> From: Stephen Hemminger <shemminger@linux-foundation.org>
> Date: Thu, 11 Oct 2007 18:19:52 -0700
>
> > Handle the corner case where budget is exhausted correctly.
> >
> > Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
>
> Doesn't apply, I checked in my fixed version of your original patch
> already.
>
> You had to have some idea I would apply that fix, so this patch series
> seems a bit premature since it's almost guarenteed to not apply any
> more.
I like to test my signed patches before applying... And if possible
send them out from the kernel running the actual code.
--
Stephen Hemminger <shemminger@linux-foundation.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/6] sky2: status polling loop (post merge)
2007-10-12 1:23 ` David Miller
2007-10-12 1:25 ` Stephen Hemminger
@ 2007-10-12 1:29 ` Stephen Hemminger
2007-10-12 1:31 ` David Miller
1 sibling, 1 reply; 12+ messages in thread
From: Stephen Hemminger @ 2007-10-12 1:29 UTC (permalink / raw)
To: David Miller; +Cc: netdev
Handle the corner case where budget is exhausted correctly.
And save unnecessary read of index register.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
--- a/drivers/net/sky2.c 2007-10-11 18:26:56.000000000 -0700
+++ b/drivers/net/sky2.c 2007-10-11 18:27:12.000000000 -0700
@@ -2245,15 +2245,13 @@ static inline void sky2_tx_done(struct n
}
/* Process status response ring */
-static int sky2_status_intr(struct sky2_hw *hw, int to_do)
+static int sky2_status_intr(struct sky2_hw *hw, int to_do, u16 idx)
{
int work_done = 0;
unsigned rx[2] = { 0, 0 };
- u16 hwidx = sky2_read16(hw, STAT_PUT_IDX);
rmb();
-
- while (hw->st_idx != hwidx) {
+ do {
struct sky2_port *sky2;
struct sky2_status_le *le = hw->st_le + hw->st_idx;
unsigned port = le->css & CSS_LINK_BIT;
@@ -2364,7 +2362,7 @@ static int sky2_status_intr(struct sky2_
printk(KERN_WARNING PFX
"unknown status opcode 0x%x\n", le->opcode);
}
- }
+ } while (hw->st_idx != idx);
/* Fully processed status ring so clear irq */
sky2_write32(hw, STAT_CTRL, SC_STAT_CLR_IRQ);
@@ -2607,6 +2605,7 @@ static int sky2_poll(struct napi_struct
struct sky2_hw *hw = container_of(napi, struct sky2_hw, napi);
u32 status = sky2_read32(hw, B0_Y2_SP_EISR);
int work_done = 0;
+ u16 idx;
if (unlikely(status & Y2_IS_ERROR))
sky2_err_intr(hw, status);
@@ -2617,29 +2616,23 @@ static int sky2_poll(struct napi_struct
if (status & Y2_IS_IRQ_PHY2)
sky2_phy_intr(hw, 1);
- for(;;) {
- work_done += sky2_status_intr(hw, work_limit);
+ while ((idx = sky2_read16(hw, STAT_PUT_IDX)) != hw->st_idx) {
+ work_done += sky2_status_intr(hw, work_limit - work_done, idx);
if (work_done >= work_limit)
- break;
-
- /* More work? */
- if (hw->st_idx != sky2_read16(hw, STAT_PUT_IDX))
- continue;
-
- /* Bug/Errata workaround?
- * Need to kick the TX irq moderation timer.
- */
- if (sky2_read8(hw, STAT_TX_TIMER_CTRL) == TIM_START) {
- sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP);
- sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
- }
-
- napi_complete(napi);
- sky2_read32(hw, B0_Y2_SP_LISR);
- break;
+ goto done;
+ }
+ /* Bug/Errata workaround?
+ * Need to kick the TX irq moderation timer.
+ */
+ if (sky2_read8(hw, STAT_TX_TIMER_CTRL) == TIM_START) {
+ sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP);
+ sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
}
+ napi_complete(napi);
+ sky2_read32(hw, B0_Y2_SP_LISR);
+done:
return work_done;
}
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/6] sky2: status polling loop (post merge)
2007-10-12 1:29 ` [PATCH 1/6] sky2: status polling loop (post merge) Stephen Hemminger
@ 2007-10-12 1:31 ` David Miller
2007-10-12 1:36 ` Stephen Hemminger
0 siblings, 1 reply; 12+ messages in thread
From: David Miller @ 2007-10-12 1:31 UTC (permalink / raw)
To: shemminger; +Cc: netdev
From: Stephen Hemminger <shemminger@linux-foundation.org>
Date: Thu, 11 Oct 2007 18:29:21 -0700
> Handle the corner case where budget is exhausted correctly.
> And save unnecessary read of index register.
>
> Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Applied.
You can submit the rest later, I deleted them since they
likely depend upon line offsets and other things in this
patch.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/6] sky2: status polling loop (post merge)
2007-10-12 1:31 ` David Miller
@ 2007-10-12 1:36 ` Stephen Hemminger
0 siblings, 0 replies; 12+ messages in thread
From: Stephen Hemminger @ 2007-10-12 1:36 UTC (permalink / raw)
To: David Miller; +Cc: netdev
On Thu, 11 Oct 2007 18:31:46 -0700 (PDT)
David Miller <davem@davemloft.net> wrote:
> From: Stephen Hemminger <shemminger@linux-foundation.org>
> Date: Thu, 11 Oct 2007 18:29:21 -0700
>
> > Handle the corner case where budget is exhausted correctly.
> > And save unnecessary read of index register.
> >
> > Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
>
> Applied.
>
> You can submit the rest later, I deleted them since they
> likely depend upon line offsets and other things in this
> patch.
Actually, they are exactly the same...
--
Stephen Hemminger <shemminger@linux-foundation.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2007-10-12 1:36 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-12 1:19 [PATCH 0/6] sky2 patches for net-2.6 Stephen Hemminger
2007-10-12 1:19 ` [PATCH 1/6] sky2: status polling loop Stephen Hemminger
2007-10-12 1:23 ` David Miller
2007-10-12 1:25 ` Stephen Hemminger
2007-10-12 1:29 ` [PATCH 1/6] sky2: status polling loop (post merge) Stephen Hemminger
2007-10-12 1:31 ` David Miller
2007-10-12 1:36 ` Stephen Hemminger
2007-10-12 1:19 ` [PATCH 2/6] sky2: ethtool register reserved area blackout Stephen Hemminger
2007-10-12 1:19 ` [PATCH 3/6] sky2: fix power settings on Yukon XL Stephen Hemminger
2007-10-12 1:19 ` [PATCH 4/6] sky2: fiber advertise bits initialization (trivial) Stephen Hemminger
2007-10-12 1:19 ` [PATCH 5/6] sky2: use netdevice stats struct Stephen Hemminger
2007-10-12 1:19 ` [PATCH 6/6] sky2: version 1.19 Stephen Hemminger
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.