Change struct ice_ntuple_fltr allocation from devm_ to plain alloc, since its lifetime is not tied to the device. All such objects are being removed on device remove via ice_deinit_features() -> ice_deinit_fdir() -> ice_vsi_manage_fdir() -> ice_fdir_del_all_fltrs() Signed-off-by: Marcin Szycik Reviewed-by: Aleksandr Loktionov --- v2: * Add this patch --- drivers/net/ethernet/intel/ice/ice_ethtool_ntuple.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool_ntuple.c b/drivers/net/ethernet/intel/ice/ice_ethtool_ntuple.c index e3ea5aed4dd5..f0e14bac2539 100644 --- a/drivers/net/ethernet/intel/ice/ice_ethtool_ntuple.c +++ b/drivers/net/ethernet/intel/ice/ice_ethtool_ntuple.c @@ -1722,7 +1722,7 @@ void ice_fdir_del_all_fltrs(struct ice_vsi *vsi) ice_fdir_write_all_fltr(pf, f_rule, false); ice_fdir_update_cntrs(hw, f_rule, false); list_del(&f_rule->fltr_node); - devm_kfree(ice_pf_to_dev(pf), f_rule); + kfree(f_rule); } } @@ -1829,7 +1829,7 @@ ice_ntuple_update_list_entry(struct ice_pf *pf, struct ice_ntuple_fltr *input, */ ice_fdir_do_rem_flow(pf, old_fltr->flow_type); list_del(&old_fltr->fltr_node); - devm_kfree(ice_hw_to_dev(hw), old_fltr); + kfree(old_fltr); } if (!input) return err; @@ -2180,7 +2180,7 @@ int ice_add_ntuple_ethtool(struct ice_vsi *vsi, struct ethtool_rxnfc *cmd) return -ENOSPC; } - input = devm_kzalloc(dev, sizeof(*input), GFP_KERNEL); + input = kzalloc_obj(*input); if (!input) return -ENOMEM; @@ -2224,7 +2224,7 @@ int ice_add_ntuple_ethtool(struct ice_vsi *vsi, struct ethtool_rxnfc *cmd) mutex_unlock(&hw->fdir_fltr_lock); free_input: if (ret) - devm_kfree(dev, input); + kfree(input); return ret; } -- 2.49.0