mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 03:06:10 +00:00
igb: fix handling of mailbox collisions between PF/VF
This patch changes the handling of collisions between the use of the PF/VF sides of the mailbox. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ceb0c77e57
commit
fef45f4ce2
1 changed files with 13 additions and 9 deletions
|
@ -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))
|
||||
|
@ -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)) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue