From e97e395c6a4e4c0c42a815c797c9f72488f7dd79 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Mon, 5 Nov 2007 15:52:09 -0800 Subject: [PATCH] --- yaml --- r: 73431 b: refs/heads/master c: ab5adecb2d02f3688719dfb5936a82833fcc3955 h: refs/heads/master i: 73429: 6fa03d12e4d041db90a3444ff4688b7ef4ca5dd9 73427: 879351bc87df5aad7942ad8f45d07d27c5fd4a3c 73423: d47c73f3b45f9b9f17da57c1103c90cfe187e8a4 v: v3 --- [refs] | 2 +- trunk/drivers/net/sky2.c | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 98ee135a682c..ac4c731d558b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ac93a3946b676025fa55356180e8321639744b31 +refs/heads/master: ab5adecb2d02f3688719dfb5936a82833fcc3955 diff --git a/trunk/drivers/net/sky2.c b/trunk/drivers/net/sky2.c index 4f41a9445961..706884ae8fcd 100644 --- a/trunk/drivers/net/sky2.c +++ b/trunk/drivers/net/sky2.c @@ -2247,20 +2247,26 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do, u16 idx) do { struct sky2_port *sky2; struct sky2_status_le *le = hw->st_le + hw->st_idx; - unsigned port = le->css & CSS_LINK_BIT; + unsigned port; struct net_device *dev; struct sk_buff *skb; u32 status; u16 length; + u8 opcode = le->opcode; + + if (!(opcode & HW_OWNER)) + break; hw->st_idx = RING_NEXT(hw->st_idx, STATUS_RING_SIZE); + port = le->css & CSS_LINK_BIT; dev = hw->dev[port]; sky2 = netdev_priv(dev); length = le16_to_cpu(le->length); status = le32_to_cpu(le->status); - switch (le->opcode & ~HW_OWNER) { + le->opcode = 0; + switch (opcode & ~HW_OWNER) { case OP_RXSTAT: ++rx[port]; skb = sky2_receive(dev, length, status); @@ -2353,7 +2359,7 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do, u16 idx) default: if (net_ratelimit()) printk(KERN_WARNING PFX - "unknown status opcode 0x%x\n", le->opcode); + "unknown status opcode 0x%x\n", opcode); } } while (hw->st_idx != idx);