diff options
Diffstat (limited to 'drivers/net/ethernet/qlogic')
| -rw-r--r-- | drivers/net/ethernet/qlogic/qed/qed_sriov.c | 18 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qed/qed_vf.c | 7 | 
2 files changed, 18 insertions, 7 deletions
| diff --git a/drivers/net/ethernet/qlogic/qed/qed_sriov.c b/drivers/net/ethernet/qlogic/qed/qed_sriov.c index 8ac38828ba45..48cf4355bc47 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_sriov.c +++ b/drivers/net/ethernet/qlogic/qed/qed_sriov.c @@ -3806,11 +3806,11 @@ bool qed_iov_mark_vf_flr(struct qed_hwfn *p_hwfn, u32 *p_disabled_vfs)  	return found;  } -static void qed_iov_get_link(struct qed_hwfn *p_hwfn, -			     u16 vfid, -			     struct qed_mcp_link_params *p_params, -			     struct qed_mcp_link_state *p_link, -			     struct qed_mcp_link_capabilities *p_caps) +static int qed_iov_get_link(struct qed_hwfn *p_hwfn, +			    u16 vfid, +			    struct qed_mcp_link_params *p_params, +			    struct qed_mcp_link_state *p_link, +			    struct qed_mcp_link_capabilities *p_caps)  {  	struct qed_vf_info *p_vf = qed_iov_get_vf_info(p_hwfn,  						       vfid, @@ -3818,7 +3818,7 @@ static void qed_iov_get_link(struct qed_hwfn *p_hwfn,  	struct qed_bulletin_content *p_bulletin;  	if (!p_vf) -		return; +		return -EINVAL;  	p_bulletin = p_vf->bulletin.p_virt; @@ -3828,6 +3828,7 @@ static void qed_iov_get_link(struct qed_hwfn *p_hwfn,  		__qed_vf_get_link_state(p_hwfn, p_link, p_bulletin);  	if (p_caps)  		__qed_vf_get_link_caps(p_hwfn, p_caps, p_bulletin); +	return 0;  }  static int @@ -4686,6 +4687,7 @@ static int qed_get_vf_config(struct qed_dev *cdev,  	struct qed_public_vf_info *vf_info;  	struct qed_mcp_link_state link;  	u32 tx_rate; +	int ret;  	/* Sanitize request */  	if (IS_VF(cdev)) @@ -4699,7 +4701,9 @@ static int qed_get_vf_config(struct qed_dev *cdev,  	vf_info = qed_iov_get_public_vf_info(hwfn, vf_id, true); -	qed_iov_get_link(hwfn, vf_id, NULL, &link, NULL); +	ret = qed_iov_get_link(hwfn, vf_id, NULL, &link, NULL); +	if (ret) +		return ret;  	/* Fill information about VF */  	ivi->vf = vf_id; diff --git a/drivers/net/ethernet/qlogic/qed/qed_vf.c b/drivers/net/ethernet/qlogic/qed/qed_vf.c index 597cd9cd57b5..7b0e390c0b07 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_vf.c +++ b/drivers/net/ethernet/qlogic/qed/qed_vf.c @@ -513,6 +513,9 @@ int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn)  						    p_iov->bulletin.size,  						    &p_iov->bulletin.phys,  						    GFP_KERNEL); +	if (!p_iov->bulletin.p_virt) +		goto free_pf2vf_reply; +  	DP_VERBOSE(p_hwfn, QED_MSG_IOV,  		   "VF's bulletin Board [%p virt 0x%llx phys 0x%08x bytes]\n",  		   p_iov->bulletin.p_virt, @@ -552,6 +555,10 @@ int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn)  	return rc; +free_pf2vf_reply: +	dma_free_coherent(&p_hwfn->cdev->pdev->dev, +			  sizeof(union pfvf_tlvs), +			  p_iov->pf2vf_reply, p_iov->pf2vf_reply_phys);  free_vf2pf_request:  	dma_free_coherent(&p_hwfn->cdev->pdev->dev,  			  sizeof(union vfpf_tlvs), |