mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 17:24:17 +08:00
Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net
-queue Tony Nguyen says: ==================== Intel Wired LAN Driver Updates 2022-04-26 This series contains updates to ice driver only. Ivan Vecera removes races related to VF message processing by changing mutex_trylock() call to mutex_lock() and moving additional operations to occur under mutex. Petr Oros increases wait time after firmware flash as current time is not sufficient. Jake resolves a use-after-free issue for mailbox snapshot. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
a1bde8c92d
@ -6929,12 +6929,15 @@ static void ice_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type)
|
||||
|
||||
dev_dbg(dev, "rebuilding PF after reset_type=%d\n", reset_type);
|
||||
|
||||
#define ICE_EMP_RESET_SLEEP_MS 5000
|
||||
if (reset_type == ICE_RESET_EMPR) {
|
||||
/* If an EMP reset has occurred, any previously pending flash
|
||||
* update will have completed. We no longer know whether or
|
||||
* not the NVM update EMP reset is restricted.
|
||||
*/
|
||||
pf->fw_emp_reset_disabled = false;
|
||||
|
||||
msleep(ICE_EMP_RESET_SLEEP_MS);
|
||||
}
|
||||
|
||||
err = ice_init_all_ctrlq(hw);
|
||||
|
@ -1046,8 +1046,8 @@ int ice_sriov_configure(struct pci_dev *pdev, int num_vfs)
|
||||
|
||||
if (!num_vfs) {
|
||||
if (!pci_vfs_assigned(pdev)) {
|
||||
ice_mbx_deinit_snapshot(&pf->hw);
|
||||
ice_free_vfs(pf);
|
||||
ice_mbx_deinit_snapshot(&pf->hw);
|
||||
if (pf->lag)
|
||||
ice_enable_lag(pf->lag);
|
||||
return 0;
|
||||
|
@ -3625,6 +3625,8 @@ void ice_vc_process_vf_msg(struct ice_pf *pf, struct ice_rq_event_info *event)
|
||||
return;
|
||||
}
|
||||
|
||||
mutex_lock(&vf->cfg_lock);
|
||||
|
||||
/* Check if VF is disabled. */
|
||||
if (test_bit(ICE_VF_STATE_DIS, vf->vf_states)) {
|
||||
err = -EPERM;
|
||||
@ -3642,32 +3644,20 @@ void ice_vc_process_vf_msg(struct ice_pf *pf, struct ice_rq_event_info *event)
|
||||
err = -EINVAL;
|
||||
}
|
||||
|
||||
if (!ice_vc_is_opcode_allowed(vf, v_opcode)) {
|
||||
ice_vc_send_msg_to_vf(vf, v_opcode,
|
||||
VIRTCHNL_STATUS_ERR_NOT_SUPPORTED, NULL,
|
||||
0);
|
||||
ice_put_vf(vf);
|
||||
return;
|
||||
}
|
||||
|
||||
error_handler:
|
||||
if (err) {
|
||||
ice_vc_send_msg_to_vf(vf, v_opcode, VIRTCHNL_STATUS_ERR_PARAM,
|
||||
NULL, 0);
|
||||
dev_err(dev, "Invalid message from VF %d, opcode %d, len %d, error %d\n",
|
||||
vf_id, v_opcode, msglen, err);
|
||||
ice_put_vf(vf);
|
||||
return;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
/* VF is being configured in another context that triggers a VFR, so no
|
||||
* need to process this message
|
||||
*/
|
||||
if (!mutex_trylock(&vf->cfg_lock)) {
|
||||
dev_info(dev, "VF %u is being configured in another context that will trigger a VFR, so there is no need to handle this message\n",
|
||||
vf->vf_id);
|
||||
ice_put_vf(vf);
|
||||
return;
|
||||
if (!ice_vc_is_opcode_allowed(vf, v_opcode)) {
|
||||
ice_vc_send_msg_to_vf(vf, v_opcode,
|
||||
VIRTCHNL_STATUS_ERR_NOT_SUPPORTED, NULL,
|
||||
0);
|
||||
goto finish;
|
||||
}
|
||||
|
||||
switch (v_opcode) {
|
||||
@ -3780,6 +3770,7 @@ error_handler:
|
||||
vf_id, v_opcode, err);
|
||||
}
|
||||
|
||||
finish:
|
||||
mutex_unlock(&vf->cfg_lock);
|
||||
ice_put_vf(vf);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user