aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mlx4
diff options
context:
space:
mode:
authorYishai Hadas <yishaih@mellanox.com>2015-01-25 09:59:42 -0500
committerDavid S. Miller <davem@davemloft.net>2015-01-25 17:43:14 -0500
commit55ad359225b2232b9b8f04a0dfa169bd3a7d86d2 (patch)
tree6fac830a70a14c36103ff7fc15af01a50d8926b3 /include/linux/mlx4
parent2ba5fbd62b2534335f4e3b844ecc7860115525a3 (diff)
net/mlx4_core: Enable device recovery flow with SRIOV
In SRIOV, both the PF and the VF may attempt device recovery whenever they assume that the device is not functioning. When the PF driver resets the device, the VF should detect this and attempt to reinitialize itself. The VF must be able to reset itself under all circumstances, even if the PF is not responsive. The VF shall reset itself in the following cases: 1. Commands are not processed within reasonable time over the communication channel. This is done considering device state and the correct return code based on the command as was done in the native mode, done in the next patch. 2. The VF driver receives an internal error event reported by the PF on the communication channel. This occurs when the PF driver resets the device or when VF is out of sync with the PF. Add 'VF reset' capability, which allows the VF to reinitialize itself even when the PF is not responsive. As PF and VF may run their reset flow simulantanisly, there are several cases that are handled: - Prevent freeing VF resources upon FLR, when PF is in its unloading stage. - Prevent PF getting VF commands before it has finished initializing its resources. - Upon VF startup, check that comm-channel is online before sending commands to the PF and getting timed-out. Signed-off-by: Yishai Hadas <yishaih@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/mlx4')
-rw-r--r--include/linux/mlx4/cmd.h2
-rw-r--r--include/linux/mlx4/device.h5
2 files changed, 7 insertions, 0 deletions
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h
index e7543844cc7a..c989442ffc6a 100644
--- a/include/linux/mlx4/cmd.h
+++ b/include/linux/mlx4/cmd.h
@@ -280,6 +280,7 @@ int mlx4_set_vf_link_state(struct mlx4_dev *dev, int port, int vf, int link_stat
280int mlx4_config_dev_retrieval(struct mlx4_dev *dev, 280int mlx4_config_dev_retrieval(struct mlx4_dev *dev,
281 struct mlx4_config_dev_params *params); 281 struct mlx4_config_dev_params *params);
282void mlx4_cmd_wake_completions(struct mlx4_dev *dev); 282void mlx4_cmd_wake_completions(struct mlx4_dev *dev);
283void mlx4_report_internal_err_comm_event(struct mlx4_dev *dev);
283/* 284/*
284 * mlx4_get_slave_default_vlan - 285 * mlx4_get_slave_default_vlan -
285 * return true if VST ( default vlan) 286 * return true if VST ( default vlan)
@@ -289,5 +290,6 @@ bool mlx4_get_slave_default_vlan(struct mlx4_dev *dev, int port, int slave,
289 u16 *vlan, u8 *qos); 290 u16 *vlan, u8 *qos);
290 291
291#define MLX4_COMM_GET_IF_REV(cmd_chan_ver) (u8)((cmd_chan_ver) >> 8) 292#define MLX4_COMM_GET_IF_REV(cmd_chan_ver) (u8)((cmd_chan_ver) >> 8)
293#define COMM_CHAN_EVENT_INTERNAL_ERR (1 << 17)
292 294
293#endif /* MLX4_CMD_H */ 295#endif /* MLX4_CMD_H */
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index 33f9ca71925c..5ef54e145e4d 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@ -208,6 +208,10 @@ enum {
208 MLX4_QUERY_FUNC_FLAGS_A0_RES_QP = 1LL << 1 208 MLX4_QUERY_FUNC_FLAGS_A0_RES_QP = 1LL << 1
209}; 209};
210 210
211enum {
212 MLX4_VF_CAP_FLAG_RESET = 1 << 0
213};
214
211/* bit enums for an 8-bit flags field indicating special use 215/* bit enums for an 8-bit flags field indicating special use
212 * QPs which require special handling in qp_reserve_range. 216 * QPs which require special handling in qp_reserve_range.
213 * Currently, this only includes QPs used by the ETH interface, 217 * Currently, this only includes QPs used by the ETH interface,
@@ -545,6 +549,7 @@ struct mlx4_caps {
545 u8 alloc_res_qp_mask; 549 u8 alloc_res_qp_mask;
546 u32 dmfs_high_rate_qpn_base; 550 u32 dmfs_high_rate_qpn_base;
547 u32 dmfs_high_rate_qpn_range; 551 u32 dmfs_high_rate_qpn_range;
552 u32 vf_caps;
548}; 553};
549 554
550struct mlx4_buf_list { 555struct mlx4_buf_list {