stmmac: update the driver's module version
[deliverable/linux.git] / drivers / net / igb / igb_main.c
index 16349ba687367755abe33c5d439e48704e3fcdbb..78963a0e128dcf4171c9d8a8d1ac579c0b529d15 100644 (file)
@@ -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);
 }
 
This page took 0.030066 seconds and 5 git commands to generate.