Skip to content

Commit

Permalink
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
Browse files Browse the repository at this point in the history
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
  be2net: fix error in rx completion processing.
  igbvf: avoid reset storms due to mailbox issues
  igb: fix handling of mailbox collisions between PF/VF
  usb: remove rare pm primitive for conversion to new API
  • Loading branch information
Linus Torvalds committed Dec 12, 2009
2 parents 8d0e7fb + e1187b3 commit 5de76b1
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 14 deletions.
4 changes: 2 additions & 2 deletions drivers/net/benet/be_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -759,7 +759,7 @@ static void be_rx_compl_process(struct be_adapter *adapter,

/* vlanf could be wrongly set in some cards.
* ignore if vtm is not set */
if ((adapter->cap == 0x400) && !vtm)
if ((adapter->cap & 0x400) && !vtm)
vlanf = 0;

skb = netdev_alloc_skb_ip_align(adapter->netdev, BE_HDR_LEN);
Expand Down Expand Up @@ -816,7 +816,7 @@ static void be_rx_compl_process_gro(struct be_adapter *adapter,

/* vlanf could be wrongly set in some cards.
* ignore if vtm is not set */
if ((adapter->cap == 0x400) && !vtm)
if ((adapter->cap & 0x400) && !vtm)
vlanf = 0;

skb = napi_get_frags(&eq_obj->napi);
Expand Down
22 changes: 13 additions & 9 deletions drivers/net/igb/igb_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -4608,8 +4608,14 @@ static void igb_rcv_msg_from_vf(struct igb_adapter *adapter, u32 vf)

retval = igb_read_mbx(hw, msgbuf, E1000_VFMAILBOX_SIZE, vf);

if (retval)
if (retval) {
/* if receive failed revoke VF CTS stats and restart init */
dev_err(&pdev->dev, "Error receiving message from VF\n");
vf_data->flags &= ~IGB_VF_FLAG_CTS;
if (!time_after(jiffies, vf_data->last_nack + (2 * HZ)))
return;
goto out;
}

/* this is a message we already processed, do nothing */
if (msgbuf[0] & (E1000_VT_MSGTYPE_ACK | E1000_VT_MSGTYPE_NACK))
Expand All @@ -4626,12 +4632,10 @@ static void igb_rcv_msg_from_vf(struct igb_adapter *adapter, u32 vf)
}

if (!(vf_data->flags & IGB_VF_FLAG_CTS)) {
msgbuf[0] = E1000_VT_MSGTYPE_NACK;
if (time_after(jiffies, vf_data->last_nack + (2 * HZ))) {
igb_write_mbx(hw, msgbuf, 1, vf);
vf_data->last_nack = jiffies;
}
return;
if (!time_after(jiffies, vf_data->last_nack + (2 * HZ)))
return;
retval = -1;
goto out;
}

switch ((msgbuf[0] & 0xFFFF)) {
Expand All @@ -4656,14 +4660,14 @@ static void igb_rcv_msg_from_vf(struct igb_adapter *adapter, u32 vf)
break;
}

msgbuf[0] |= E1000_VT_MSGTYPE_CTS;
out:
/* notify the VF of the results of what it sent us */
if (retval)
msgbuf[0] |= E1000_VT_MSGTYPE_NACK;
else
msgbuf[0] |= E1000_VT_MSGTYPE_ACK;

msgbuf[0] |= E1000_VT_MSGTYPE_CTS;

igb_write_mbx(hw, msgbuf, 1, vf);
}

Expand Down
1 change: 1 addition & 0 deletions drivers/net/igbvf/igbvf.h
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,7 @@ struct igbvf_adapter {
unsigned long led_status;

unsigned int flags;
unsigned long last_reset;
};

struct igbvf_info {
Expand Down
8 changes: 7 additions & 1 deletion drivers/net/igbvf/netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -1469,6 +1469,8 @@ static void igbvf_reset(struct igbvf_adapter *adapter)
memcpy(netdev->perm_addr, adapter->hw.mac.addr,
netdev->addr_len);
}

adapter->last_reset = jiffies;
}

int igbvf_up(struct igbvf_adapter *adapter)
Expand Down Expand Up @@ -1812,11 +1814,15 @@ static bool igbvf_has_link(struct igbvf_adapter *adapter)
s32 ret_val = E1000_SUCCESS;
bool link_active;

/* If interface is down, stay link down */
if (test_bit(__IGBVF_DOWN, &adapter->state))
return false;

ret_val = hw->mac.ops.check_for_link(hw);
link_active = !hw->mac.get_link_status;

/* if check for link returns error we will need to reset */
if (ret_val)
if (ret_val && time_after(jiffies, adapter->last_reset + (10 * HZ)))
schedule_work(&adapter->reset_task);

return link_active;
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/usb/kaweth.c
Original file line number Diff line number Diff line change
Expand Up @@ -716,7 +716,7 @@ static int kaweth_open(struct net_device *net)
return 0;

err_out:
usb_autopm_enable(kaweth->intf);
usb_autopm_put_interface(kaweth->intf);
return -EIO;
}

Expand Down Expand Up @@ -753,7 +753,7 @@ static int kaweth_close(struct net_device *net)

kaweth->status &= ~KAWETH_STATUS_CLOSING;

usb_autopm_enable(kaweth->intf);
usb_autopm_put_interface(kaweth->intf);

return 0;
}
Expand Down

0 comments on commit 5de76b1

Please sign in to comment.