igbvf: after mailbox write, wait for reply
authorGreg Edwards <gedwards@ddn.com>
Thu, 20 Jul 2017 16:00:58 +0000 (10:00 -0600)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Wed, 9 Aug 2017 01:01:42 +0000 (18:01 -0700)
Two of the VF mailbox commands were not waiting for a reply from the PF,
which can result in a VF mailbox timeout in the VM for the next command.

Signed-off-by: Greg Edwards <gedwards@ddn.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/igbvf/vf.c

index 528be116184ee35f9f86e264c40310d704acf344..1d3aa9adcaa8a3ef500eec09bf43549610ffe2b1 100644 (file)
@@ -230,6 +230,7 @@ static void e1000_update_mc_addr_list_vf(struct e1000_hw *hw,
        u16 *hash_list = (u16 *)&msgbuf[1];
        u32 hash_value;
        u32 cnt, i;
+       s32 ret_val;
 
        /* Each entry in the list uses 1 16 bit word.  We have 30
         * 16 bit words available in our HW msg buffer (minus 1 for the
@@ -250,7 +251,9 @@ static void e1000_update_mc_addr_list_vf(struct e1000_hw *hw,
                mc_addr_list += ETH_ALEN;
        }
 
-       mbx->ops.write_posted(hw, msgbuf, E1000_VFMAILBOX_SIZE);
+       ret_val = mbx->ops.write_posted(hw, msgbuf, E1000_VFMAILBOX_SIZE);
+       if (!ret_val)
+               mbx->ops.read_posted(hw, msgbuf, 1);
 }
 
 /**
@@ -293,11 +296,14 @@ void e1000_rlpml_set_vf(struct e1000_hw *hw, u16 max_size)
 {
        struct e1000_mbx_info *mbx = &hw->mbx;
        u32 msgbuf[2];
+       s32 ret_val;
 
        msgbuf[0] = E1000_VF_SET_LPE;
        msgbuf[1] = max_size;
 
-       mbx->ops.write_posted(hw, msgbuf, 2);
+       ret_val = mbx->ops.write_posted(hw, msgbuf, 2);
+       if (!ret_val)
+               mbx->ops.read_posted(hw, msgbuf, 1);
 }
 
 /**