Skip to content

Commit

Permalink
sky2: dont write status ring
Browse files Browse the repository at this point in the history
It is more efficient not to write the status ring from the
processor and just read the active portion.

Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
  • Loading branch information
Stephen Hemminger committed May 8, 2006
1 parent 01bd756 commit e71ebd7
Showing 1 changed file with 7 additions and 14 deletions.
21 changes: 7 additions & 14 deletions drivers/net/sky2.c
Original file line number Diff line number Diff line change
Expand Up @@ -1865,35 +1865,28 @@ static inline void sky2_tx_done(struct net_device *dev, u16 last)
static int sky2_status_intr(struct sky2_hw *hw, int to_do)
{
int work_done = 0;
u16 hwidx = sky2_read16(hw, STAT_PUT_IDX);

rmb();

for(;;) {
while (hw->st_idx != hwidx) {
struct sky2_status_le *le = hw->st_le + hw->st_idx;
struct net_device *dev;
struct sky2_port *sky2;
struct sk_buff *skb;
u32 status;
u16 length;
u8 link, opcode;

opcode = le->opcode;
if (!opcode)
break;
opcode &= ~HW_OWNER;

hw->st_idx = RING_NEXT(hw->st_idx, STATUS_RING_SIZE);
le->opcode = 0;

link = le->link;
BUG_ON(link >= 2);
dev = hw->dev[link];
BUG_ON(le->link >= 2);
dev = hw->dev[le->link];

sky2 = netdev_priv(dev);
length = le->length;
status = le->status;

switch (opcode) {
switch (le->opcode & ~HW_OWNER) {
case OP_RXSTAT:
skb = sky2_receive(sky2, length, status);
if (!skb)
Expand Down Expand Up @@ -1944,8 +1937,8 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do)
default:
if (net_ratelimit())
printk(KERN_WARNING PFX
"unknown status opcode 0x%x\n", opcode);
break;
"unknown status opcode 0x%x\n", le->opcode);
goto exit_loop;
}
}

Expand Down

0 comments on commit e71ebd7

Please sign in to comment.