diff options
author | Shannon Nelson <shannon.nelson@intel.com> | 2014-06-03 21:23:23 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2014-06-24 21:19:14 -0400 |
commit | 6252c7e4ee48f016dd075168df9fabc7197f38e5 (patch) | |
tree | fb3731a7f96cd719ef999d319375e0e300161098 | |
parent | 6c8ad1ba1650e6c22dcaa5fe288c6236c3b25ae5 (diff) |
i40e: reapply LAA after reset
The LAA is lost on a reset, so be sure to replay it when rebuilding
the switch after any reset.
Change-ID: I6e643f9a59dfd899b6cbdf84d93b4bc9c37bb949
Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_main.c | 11 |
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h index 07811dd6eb89..2ec6e8a11ee1 100644 --- a/drivers/net/ethernet/intel/i40e/i40e.h +++ b/drivers/net/ethernet/intel/i40e/i40e.h | |||
@@ -362,6 +362,7 @@ struct i40e_mac_filter { | |||
362 | bool is_vf; /* filter belongs to a VF */ | 362 | bool is_vf; /* filter belongs to a VF */ |
363 | bool is_netdev; /* filter belongs to a netdev */ | 363 | bool is_netdev; /* filter belongs to a netdev */ |
364 | bool changed; /* filter needs to be sync'd to the HW */ | 364 | bool changed; /* filter needs to be sync'd to the HW */ |
365 | bool is_laa; /* filter is a Locally Administered Address */ | ||
365 | }; | 366 | }; |
366 | 367 | ||
367 | struct i40e_veb { | 368 | struct i40e_veb { |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index 81cbea72722e..9276ca3f43f2 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c | |||
@@ -1344,8 +1344,8 @@ static int i40e_set_mac(struct net_device *netdev, void *p) | |||
1344 | } | 1344 | } |
1345 | } | 1345 | } |
1346 | 1346 | ||
1347 | if (!i40e_find_mac(vsi, addr->sa_data, false, true)) { | 1347 | f = i40e_find_mac(vsi, addr->sa_data, false, true); |
1348 | 1348 | if (!f) { | |
1349 | /* In order to be sure to not drop any packets, add the | 1349 | /* In order to be sure to not drop any packets, add the |
1350 | * new address first then delete the old one. | 1350 | * new address first then delete the old one. |
1351 | */ | 1351 | */ |
@@ -1360,6 +1360,7 @@ static int i40e_set_mac(struct net_device *netdev, void *p) | |||
1360 | i40e_sync_vsi_filters(vsi); | 1360 | i40e_sync_vsi_filters(vsi); |
1361 | } | 1361 | } |
1362 | 1362 | ||
1363 | f->is_laa = true; | ||
1363 | if (!ether_addr_equal(netdev->dev_addr, addr->sa_data)) | 1364 | if (!ether_addr_equal(netdev->dev_addr, addr->sa_data)) |
1364 | ether_addr_copy(netdev->dev_addr, addr->sa_data); | 1365 | ether_addr_copy(netdev->dev_addr, addr->sa_data); |
1365 | 1366 | ||
@@ -7378,6 +7379,12 @@ static int i40e_add_vsi(struct i40e_vsi *vsi) | |||
7378 | list_for_each_entry_safe(f, ftmp, &vsi->mac_filter_list, list) { | 7379 | list_for_each_entry_safe(f, ftmp, &vsi->mac_filter_list, list) { |
7379 | f->changed = true; | 7380 | f->changed = true; |
7380 | f_count++; | 7381 | f_count++; |
7382 | |||
7383 | if (f->is_laa && vsi->type == I40E_VSI_MAIN) { | ||
7384 | i40e_aq_mac_address_write(&vsi->back->hw, | ||
7385 | I40E_AQC_WRITE_TYPE_LAA_WOL, | ||
7386 | f->macaddr, NULL); | ||
7387 | } | ||
7381 | } | 7388 | } |
7382 | if (f_count) { | 7389 | if (f_count) { |
7383 | vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED; | 7390 | vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED; |