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-08 Alexander fixes a use after free issue with aRFS for ice driver. Mateusz reverts a commit that introduced issues related to device resets for iavf driver. * '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue: Revert "iavf: Fix deadlock occurrence during resetting VF interface" ice: arfs: fix use-after-free when freeing @rx_cpu_rmap ==================== Link: https://lore.kernel.org/r/20220408163411.2415552-1-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
65745da171
|
@ -2871,7 +2871,6 @@ continue_reset:
|
|||
running = adapter->state == __IAVF_RUNNING;
|
||||
|
||||
if (running) {
|
||||
netdev->flags &= ~IFF_UP;
|
||||
netif_carrier_off(netdev);
|
||||
netif_tx_stop_all_queues(netdev);
|
||||
adapter->link_up = false;
|
||||
|
@ -2988,7 +2987,7 @@ continue_reset:
|
|||
* to __IAVF_RUNNING
|
||||
*/
|
||||
iavf_up_complete(adapter);
|
||||
netdev->flags |= IFF_UP;
|
||||
|
||||
iavf_irq_enable(adapter, true);
|
||||
} else {
|
||||
iavf_change_state(adapter, __IAVF_DOWN);
|
||||
|
@ -3004,10 +3003,8 @@ continue_reset:
|
|||
reset_err:
|
||||
mutex_unlock(&adapter->client_lock);
|
||||
mutex_unlock(&adapter->crit_lock);
|
||||
if (running) {
|
||||
if (running)
|
||||
iavf_change_state(adapter, __IAVF_RUNNING);
|
||||
netdev->flags |= IFF_UP;
|
||||
}
|
||||
dev_err(&adapter->pdev->dev, "failed to allocate resources during reinit\n");
|
||||
iavf_close(netdev);
|
||||
}
|
||||
|
|
|
@ -577,7 +577,7 @@ void ice_free_cpu_rx_rmap(struct ice_vsi *vsi)
|
|||
{
|
||||
struct net_device *netdev;
|
||||
|
||||
if (!vsi || vsi->type != ICE_VSI_PF || !vsi->arfs_fltr_list)
|
||||
if (!vsi || vsi->type != ICE_VSI_PF)
|
||||
return;
|
||||
|
||||
netdev = vsi->netdev;
|
||||
|
@ -599,7 +599,7 @@ int ice_set_cpu_rx_rmap(struct ice_vsi *vsi)
|
|||
int base_idx, i;
|
||||
|
||||
if (!vsi || vsi->type != ICE_VSI_PF)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
|
||||
pf = vsi->back;
|
||||
netdev = vsi->netdev;
|
||||
|
@ -636,7 +636,6 @@ void ice_remove_arfs(struct ice_pf *pf)
|
|||
if (!pf_vsi)
|
||||
return;
|
||||
|
||||
ice_free_cpu_rx_rmap(pf_vsi);
|
||||
ice_clear_arfs(pf_vsi);
|
||||
}
|
||||
|
||||
|
@ -653,9 +652,5 @@ void ice_rebuild_arfs(struct ice_pf *pf)
|
|||
return;
|
||||
|
||||
ice_remove_arfs(pf);
|
||||
if (ice_set_cpu_rx_rmap(pf_vsi)) {
|
||||
dev_err(ice_pf_to_dev(pf), "Failed to rebuild aRFS\n");
|
||||
return;
|
||||
}
|
||||
ice_init_arfs(pf_vsi);
|
||||
}
|
||||
|
|
|
@ -2689,6 +2689,8 @@ void ice_vsi_free_irq(struct ice_vsi *vsi)
|
|||
return;
|
||||
|
||||
vsi->irqs_ready = false;
|
||||
ice_free_cpu_rx_rmap(vsi);
|
||||
|
||||
ice_for_each_q_vector(vsi, i) {
|
||||
u16 vector = i + base;
|
||||
int irq_num;
|
||||
|
@ -2702,7 +2704,8 @@ void ice_vsi_free_irq(struct ice_vsi *vsi)
|
|||
continue;
|
||||
|
||||
/* clear the affinity notifier in the IRQ descriptor */
|
||||
irq_set_affinity_notifier(irq_num, NULL);
|
||||
if (!IS_ENABLED(CONFIG_RFS_ACCEL))
|
||||
irq_set_affinity_notifier(irq_num, NULL);
|
||||
|
||||
/* clear the affinity_mask in the IRQ descriptor */
|
||||
irq_set_affinity_hint(irq_num, NULL);
|
||||
|
|
|
@ -2510,6 +2510,13 @@ static int ice_vsi_req_irq_msix(struct ice_vsi *vsi, char *basename)
|
|||
irq_set_affinity_hint(irq_num, &q_vector->affinity_mask);
|
||||
}
|
||||
|
||||
err = ice_set_cpu_rx_rmap(vsi);
|
||||
if (err) {
|
||||
netdev_err(vsi->netdev, "Failed to setup CPU RMAP on VSI %u: %pe\n",
|
||||
vsi->vsi_num, ERR_PTR(err));
|
||||
goto free_q_irqs;
|
||||
}
|
||||
|
||||
vsi->irqs_ready = true;
|
||||
return 0;
|
||||
|
||||
|
@ -3692,20 +3699,12 @@ static int ice_setup_pf_sw(struct ice_pf *pf)
|
|||
*/
|
||||
ice_napi_add(vsi);
|
||||
|
||||
status = ice_set_cpu_rx_rmap(vsi);
|
||||
if (status) {
|
||||
dev_err(dev, "Failed to set CPU Rx map VSI %d error %d\n",
|
||||
vsi->vsi_num, status);
|
||||
goto unroll_napi_add;
|
||||
}
|
||||
status = ice_init_mac_fltr(pf);
|
||||
if (status)
|
||||
goto free_cpu_rx_map;
|
||||
goto unroll_napi_add;
|
||||
|
||||
return 0;
|
||||
|
||||
free_cpu_rx_map:
|
||||
ice_free_cpu_rx_rmap(vsi);
|
||||
unroll_napi_add:
|
||||
ice_tc_indir_block_unregister(vsi);
|
||||
unroll_cfg_netdev:
|
||||
|
@ -5167,7 +5166,6 @@ static int __maybe_unused ice_suspend(struct device *dev)
|
|||
continue;
|
||||
ice_vsi_free_q_vectors(pf->vsi[v]);
|
||||
}
|
||||
ice_free_cpu_rx_rmap(ice_get_main_vsi(pf));
|
||||
ice_clear_interrupt_scheme(pf);
|
||||
|
||||
pci_save_state(pdev);
|
||||
|
|
Loading…
Reference in New Issue