qed: Always publish VF link from leading hwfn

The link information exists only on the leading hwfn,
but some of its derivatives [e.g., min/max rate] need to
be configured for each hwfn.
When re-basing the VF link view, use the leading hwfn
information as basis for all existing hwfns to allow
said configurations to stick.

Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Mintz, Yuval 2017-03-19 13:08:20 +02:00 committed by David S. Miller
parent e99a21cb81
commit e50728effe
1 changed files with 10 additions and 3 deletions

View File

@ -3945,6 +3945,7 @@ static int qed_get_vf_config(struct qed_dev *cdev,
void qed_inform_vf_link_state(struct qed_hwfn *hwfn) void qed_inform_vf_link_state(struct qed_hwfn *hwfn)
{ {
struct qed_hwfn *lead_hwfn = QED_LEADING_HWFN(hwfn->cdev);
struct qed_mcp_link_capabilities caps; struct qed_mcp_link_capabilities caps;
struct qed_mcp_link_params params; struct qed_mcp_link_params params;
struct qed_mcp_link_state link; struct qed_mcp_link_state link;
@ -3961,9 +3962,15 @@ void qed_inform_vf_link_state(struct qed_hwfn *hwfn)
if (!vf_info) if (!vf_info)
continue; continue;
memcpy(&params, qed_mcp_get_link_params(hwfn), sizeof(params)); /* Only hwfn0 is actually interested in the link speed.
memcpy(&link, qed_mcp_get_link_state(hwfn), sizeof(link)); * But since only it would receive an MFW indication of link,
memcpy(&caps, qed_mcp_get_link_capabilities(hwfn), * need to take configuration from it - otherwise things like
* rate limiting for hwfn1 VF would not work.
*/
memcpy(&params, qed_mcp_get_link_params(lead_hwfn),
sizeof(params));
memcpy(&link, qed_mcp_get_link_state(lead_hwfn), sizeof(link));
memcpy(&caps, qed_mcp_get_link_capabilities(lead_hwfn),
sizeof(caps)); sizeof(caps));
/* Modify link according to the VF's configured link state */ /* Modify link according to the VF's configured link state */