i40e: clean whole mac filter list
[ Upstream commit f11999987bc0b5559ab56dedc6f4ca32fab5438a ] Clean the whole mac filter list when resetting after an intermediate add or delete push to the firmware. The code had evolved from using a list from the stack to a heap allocation, but the memset() didn't follow the change correctly. This now cleans the whole list rather that just part of the first element. Change-ID: I4cd03d5a103b7407dd8556a3a231e800f2d6f2d5 Reported-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
0af31973b5
commit
42622b1b7a
1 changed files with 11 additions and 8 deletions
|
@ -1973,11 +1973,13 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi, bool grab_rtnl)
|
|||
|
||||
/* Now process 'del_list' outside the lock */
|
||||
if (!list_empty(&tmp_del_list)) {
|
||||
int del_list_size;
|
||||
|
||||
filter_list_len = pf->hw.aq.asq_buf_size /
|
||||
sizeof(struct i40e_aqc_remove_macvlan_element_data);
|
||||
del_list = kcalloc(filter_list_len,
|
||||
sizeof(struct i40e_aqc_remove_macvlan_element_data),
|
||||
GFP_KERNEL);
|
||||
del_list_size = filter_list_len *
|
||||
sizeof(struct i40e_aqc_remove_macvlan_element_data);
|
||||
del_list = kzalloc(del_list_size, GFP_KERNEL);
|
||||
if (!del_list) {
|
||||
i40e_cleanup_add_list(&tmp_add_list);
|
||||
|
||||
|
@ -2009,7 +2011,7 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi, bool grab_rtnl)
|
|||
NULL);
|
||||
aq_err = pf->hw.aq.asq_last_status;
|
||||
num_del = 0;
|
||||
memset(del_list, 0, sizeof(*del_list));
|
||||
memset(del_list, 0, del_list_size);
|
||||
|
||||
if (ret && aq_err != I40E_AQ_RC_ENOENT)
|
||||
dev_err(&pf->pdev->dev,
|
||||
|
@ -2042,13 +2044,14 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi, bool grab_rtnl)
|
|||
}
|
||||
|
||||
if (!list_empty(&tmp_add_list)) {
|
||||
int add_list_size;
|
||||
|
||||
/* do all the adds now */
|
||||
filter_list_len = pf->hw.aq.asq_buf_size /
|
||||
sizeof(struct i40e_aqc_add_macvlan_element_data),
|
||||
add_list = kcalloc(filter_list_len,
|
||||
sizeof(struct i40e_aqc_add_macvlan_element_data),
|
||||
GFP_KERNEL);
|
||||
add_list_size = filter_list_len *
|
||||
sizeof(struct i40e_aqc_add_macvlan_element_data);
|
||||
add_list = kzalloc(add_list_size, GFP_KERNEL);
|
||||
if (!add_list) {
|
||||
/* Purge element from temporary lists */
|
||||
i40e_cleanup_add_list(&tmp_add_list);
|
||||
|
@ -2086,7 +2089,7 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi, bool grab_rtnl)
|
|||
|
||||
if (ret)
|
||||
break;
|
||||
memset(add_list, 0, sizeof(*add_list));
|
||||
memset(add_list, 0, add_list_size);
|
||||
}
|
||||
/* Entries from tmp_add_list were cloned from MAC
|
||||
* filter list, hence clean those cloned entries
|
||||
|
|
Loading…
Add table
Reference in a new issue