diff options
author | Greg Rose <gregory.v.rose@intel.com> | 2010-01-22 17:46:40 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-01-23 04:13:55 -0500 |
commit | 767081adbd920ce93e3f1cbe797d0631637f92b3 (patch) | |
tree | ac2abe391813533691229513fb89dbcfe4d4a0ea /drivers/net/ixgbe/ixgbe_sriov.c | |
parent | c9205697c7527173c8f8bfa9f8c9dabdbced3c49 (diff) |
ixgbe: Improve reset coordination between the PF and the VF
Inadequate coordination between the PF driver and the VF driver results
in tx hangs in the VF driver when you perform certain actions that will
lead to a re-init of the PF. Add feature to notify active VFs when the PF
is about to re-initialize so that the VFs can take appropriate action.
Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_sriov.c')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_sriov.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/net/ixgbe/ixgbe_sriov.c b/drivers/net/ixgbe/ixgbe_sriov.c index 74bca74d57c1..d4cd20f30199 100644 --- a/drivers/net/ixgbe/ixgbe_sriov.c +++ b/drivers/net/ixgbe/ixgbe_sriov.c | |||
@@ -334,3 +334,29 @@ void ixgbe_msg_task(struct ixgbe_adapter *adapter) | |||
334 | } | 334 | } |
335 | } | 335 | } |
336 | 336 | ||
337 | void ixgbe_disable_tx_rx(struct ixgbe_adapter *adapter) | ||
338 | { | ||
339 | struct ixgbe_hw *hw = &adapter->hw; | ||
340 | |||
341 | /* disable transmit and receive for all vfs */ | ||
342 | IXGBE_WRITE_REG(hw, IXGBE_VFTE(0), 0); | ||
343 | IXGBE_WRITE_REG(hw, IXGBE_VFTE(1), 0); | ||
344 | |||
345 | IXGBE_WRITE_REG(hw, IXGBE_VFRE(0), 0); | ||
346 | IXGBE_WRITE_REG(hw, IXGBE_VFRE(1), 0); | ||
347 | } | ||
348 | |||
349 | void ixgbe_ping_all_vfs(struct ixgbe_adapter *adapter) | ||
350 | { | ||
351 | struct ixgbe_hw *hw = &adapter->hw; | ||
352 | u32 ping; | ||
353 | int i; | ||
354 | |||
355 | for (i = 0 ; i < adapter->num_vfs; i++) { | ||
356 | ping = IXGBE_PF_CONTROL_MSG; | ||
357 | if (adapter->vfinfo[i].clear_to_send) | ||
358 | ping |= IXGBE_VT_MSGTYPE_CTS; | ||
359 | ixgbe_write_mbx(hw, &ping, 1, i); | ||
360 | } | ||
361 | } | ||
362 | |||