* drivers/net/ethernet/intel/i40e/i40e_main.c:2406:3: warning: There is an unknown macro here somewhere. Configuration is required. If hlist_for_each_entry is a macro then please configure it. [unknownMacro]
@ 2022-04-03 4:38 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-04-03 4:38 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 30328 bytes --]
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-kernel(a)vger.kernel.org
TO: Di Zhu <zhudi2@huawei.com>
CC: Tony Nguyen <anthony.l.nguyen@intel.com>
CC: Rui Zhang <zhangrui182@huawei.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: be2d3ecedd9911fbfd7e55cc9ceac5f8b79ae4cf
commit: 3116f59c12bd24c513194cd3acb3ec1f7d468954 i40e: fix use-after-free in i40e_sync_filters_subtask()
date: 3 months ago
:::::: branch date: 9 hours ago
:::::: commit date: 3 months ago
compiler: microblaze-linux-gcc (GCC) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
cppcheck possible warnings: (new ones prefixed by >>, may not real problems)
>> net/ieee802154/core.c:75:13: warning: Uninitialized variable: rdev->wpan_phy_idx [uninitvar]
if (rdev->wpan_phy_idx == wpan_phy_idx) {
^
>> net/ieee802154/core.c:327:35: warning: Uninitialized variables: rdev.ops, rdev.list, rdev.wpan_phy_idx, rdev.opencount, rdev.dev_wait, rdev.num_running_ifaces, rdev.wpan_dev_list, rdev.devlist_generation, rdev.wpan_dev_id [uninitvar]
WARN_ON(cfg802154_switch_netns(rdev, &init_net));
^
--
>> net/core/devlink.c:3950:2: warning: There is an unknown macro here somewhere. Configuration is required. If list_for_each_entry is a macro then please configure it. [unknownMacro]
list_for_each_entry(param_item, &devlink->param_list, list)
^
--
>> drivers/net/ethernet/intel/i40e/i40e_main.c:2406:3: warning: There is an unknown macro here somewhere. Configuration is required. If hlist_for_each_entry is a macro then please configure it. [unknownMacro]
hlist_for_each_entry(new, &tmp_add_list, hlist)
^
vim +2406 drivers/net/ethernet/intel/i40e/i40e_main.c
bd5608b3223bc7 Alan Brady 2017-11-14 2311
41c445ff0f482b Jesse Brandeburg 2013-09-11 2312 /**
41c445ff0f482b Jesse Brandeburg 2013-09-11 2313 * i40e_sync_vsi_filters - Update the VSI filter list to the HW
41c445ff0f482b Jesse Brandeburg 2013-09-11 2314 * @vsi: ptr to the VSI
41c445ff0f482b Jesse Brandeburg 2013-09-11 2315 *
41c445ff0f482b Jesse Brandeburg 2013-09-11 2316 * Push any outstanding VSI filter changes through the AdminQ.
41c445ff0f482b Jesse Brandeburg 2013-09-11 2317 *
41c445ff0f482b Jesse Brandeburg 2013-09-11 2318 * Returns 0 or error value
41c445ff0f482b Jesse Brandeburg 2013-09-11 2319 **/
17652c6336fdca Jesse Brandeburg 2015-11-05 2320 int i40e_sync_vsi_filters(struct i40e_vsi *vsi)
41c445ff0f482b Jesse Brandeburg 2013-09-11 2321 {
278e7d0b9d6864 Jacob Keller 2016-10-05 2322 struct hlist_head tmp_add_list, tmp_del_list;
671889e6740ac7 Jacob Keller 2016-12-02 2323 struct i40e_mac_filter *f;
671889e6740ac7 Jacob Keller 2016-12-02 2324 struct i40e_new_mac_filter *new, *add_head = NULL;
3e25a8f31af1c7 Mitch Williams 2016-05-16 2325 struct i40e_hw *hw = &vsi->back->hw;
cc6a96a41991de Alan Brady 2018-01-22 2326 bool old_overflow, new_overflow;
38326218acce33 Jacob Keller 2016-11-11 2327 unsigned int failed_filters = 0;
84f5ca6cf4ea1d Alan Brady 2016-10-05 2328 unsigned int vlan_filters = 0;
2d1de8283f3714 Shannon Nelson 2016-05-16 2329 char vsi_name[16] = "PF";
41c445ff0f482b Jesse Brandeburg 2013-09-11 2330 int filter_list_len = 0;
ea02e90b4b4978 Mitch Williams 2015-11-09 2331 i40e_status aq_ret = 0;
84f5ca6cf4ea1d Alan Brady 2016-10-05 2332 u32 changed_flags = 0;
278e7d0b9d6864 Jacob Keller 2016-10-05 2333 struct hlist_node *h;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2334 struct i40e_pf *pf;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2335 int num_add = 0;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2336 int num_del = 0;
84f5ca6cf4ea1d Alan Brady 2016-10-05 2337 int retval = 0;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2338 u16 cmd_flags;
c3c7ea27bec070 Mitch Williams 2016-06-20 2339 int list_size;
278e7d0b9d6864 Jacob Keller 2016-10-05 2340 int bkt;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2341
41c445ff0f482b Jesse Brandeburg 2013-09-11 2342 /* empty array typed pointers, kcalloc later */
41c445ff0f482b Jesse Brandeburg 2013-09-11 2343 struct i40e_aqc_add_macvlan_element_data *add_list;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2344 struct i40e_aqc_remove_macvlan_element_data *del_list;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2345
0da36b9774cc24 Jacob Keller 2017-04-19 2346 while (test_and_set_bit(__I40E_VSI_SYNCING_FILTERS, vsi->state))
41c445ff0f482b Jesse Brandeburg 2013-09-11 2347 usleep_range(1000, 2000);
41c445ff0f482b Jesse Brandeburg 2013-09-11 2348 pf = vsi->back;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2349
cc6a96a41991de Alan Brady 2018-01-22 2350 old_overflow = test_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
cc6a96a41991de Alan Brady 2018-01-22 2351
41c445ff0f482b Jesse Brandeburg 2013-09-11 2352 if (vsi->netdev) {
41c445ff0f482b Jesse Brandeburg 2013-09-11 2353 changed_flags = vsi->current_netdev_flags ^ vsi->netdev->flags;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2354 vsi->current_netdev_flags = vsi->netdev->flags;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2355 }
41c445ff0f482b Jesse Brandeburg 2013-09-11 2356
278e7d0b9d6864 Jacob Keller 2016-10-05 2357 INIT_HLIST_HEAD(&tmp_add_list);
278e7d0b9d6864 Jacob Keller 2016-10-05 2358 INIT_HLIST_HEAD(&tmp_del_list);
216590355cb0e7 Kiran Patil 2015-09-30 2359
2d1de8283f3714 Shannon Nelson 2016-05-16 2360 if (vsi->type == I40E_VSI_SRIOV)
2d1de8283f3714 Shannon Nelson 2016-05-16 2361 snprintf(vsi_name, sizeof(vsi_name) - 1, "VF %d", vsi->vf_id);
2d1de8283f3714 Shannon Nelson 2016-05-16 2362 else if (vsi->type != I40E_VSI_MAIN)
2d1de8283f3714 Shannon Nelson 2016-05-16 2363 snprintf(vsi_name, sizeof(vsi_name) - 1, "vsi %d", vsi->seid);
2d1de8283f3714 Shannon Nelson 2016-05-16 2364
41c445ff0f482b Jesse Brandeburg 2013-09-11 2365 if (vsi->flags & I40E_VSI_FLAG_FILTER_CHANGED) {
41c445ff0f482b Jesse Brandeburg 2013-09-11 2366 vsi->flags &= ~I40E_VSI_FLAG_FILTER_CHANGED;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2367
278e7d0b9d6864 Jacob Keller 2016-10-05 2368 spin_lock_bh(&vsi->mac_filter_hash_lock);
c3c7ea27bec070 Mitch Williams 2016-06-20 2369 /* Create a list of filters to delete. */
278e7d0b9d6864 Jacob Keller 2016-10-05 2370 hash_for_each_safe(vsi->mac_filter_hash, bkt, h, f, hlist) {
c3c7ea27bec070 Mitch Williams 2016-06-20 2371 if (f->state == I40E_FILTER_REMOVE) {
216590355cb0e7 Kiran Patil 2015-09-30 2372 /* Move the element into temporary del_list */
278e7d0b9d6864 Jacob Keller 2016-10-05 2373 hash_del(&f->hlist);
278e7d0b9d6864 Jacob Keller 2016-10-05 2374 hlist_add_head(&f->hlist, &tmp_del_list);
84f5ca6cf4ea1d Alan Brady 2016-10-05 2375
84f5ca6cf4ea1d Alan Brady 2016-10-05 2376 /* Avoid counting removed filters */
84f5ca6cf4ea1d Alan Brady 2016-10-05 2377 continue;
216590355cb0e7 Kiran Patil 2015-09-30 2378 }
c3c7ea27bec070 Mitch Williams 2016-06-20 2379 if (f->state == I40E_FILTER_NEW) {
671889e6740ac7 Jacob Keller 2016-12-02 2380 /* Create a temporary i40e_new_mac_filter */
671889e6740ac7 Jacob Keller 2016-12-02 2381 new = kzalloc(sizeof(*new), GFP_ATOMIC);
671889e6740ac7 Jacob Keller 2016-12-02 2382 if (!new)
671889e6740ac7 Jacob Keller 2016-12-02 2383 goto err_no_memory_locked;
671889e6740ac7 Jacob Keller 2016-12-02 2384
671889e6740ac7 Jacob Keller 2016-12-02 2385 /* Store pointer to the real filter */
671889e6740ac7 Jacob Keller 2016-12-02 2386 new->f = f;
671889e6740ac7 Jacob Keller 2016-12-02 2387 new->state = f->state;
671889e6740ac7 Jacob Keller 2016-12-02 2388
671889e6740ac7 Jacob Keller 2016-12-02 2389 /* Add it to the hash list */
671889e6740ac7 Jacob Keller 2016-12-02 2390 hlist_add_head(&new->hlist, &tmp_add_list);
216590355cb0e7 Kiran Patil 2015-09-30 2391 }
84f5ca6cf4ea1d Alan Brady 2016-10-05 2392
489a32650721b0 Jacob Keller 2016-11-11 2393 /* Count the number of active (current and new) VLAN
489a32650721b0 Jacob Keller 2016-11-11 2394 * filters we have now. Does not count filters which
489a32650721b0 Jacob Keller 2016-11-11 2395 * are marked for deletion.
84f5ca6cf4ea1d Alan Brady 2016-10-05 2396 */
84f5ca6cf4ea1d Alan Brady 2016-10-05 2397 if (f->vlan > 0)
84f5ca6cf4ea1d Alan Brady 2016-10-05 2398 vlan_filters++;
84f5ca6cf4ea1d Alan Brady 2016-10-05 2399 }
84f5ca6cf4ea1d Alan Brady 2016-10-05 2400
489a32650721b0 Jacob Keller 2016-11-11 2401 retval = i40e_correct_mac_vlan_filters(vsi,
489a32650721b0 Jacob Keller 2016-11-11 2402 &tmp_add_list,
489a32650721b0 Jacob Keller 2016-11-11 2403 &tmp_del_list,
489a32650721b0 Jacob Keller 2016-11-11 2404 vlan_filters);
3116f59c12bd24 Di Zhu 2021-11-29 2405
3116f59c12bd24 Di Zhu 2021-11-29 @2406 hlist_for_each_entry(new, &tmp_add_list, hlist)
3116f59c12bd24 Di Zhu 2021-11-29 2407 netdev_hw_addr_refcnt(new->f, vsi->netdev, 1);
3116f59c12bd24 Di Zhu 2021-11-29 2408
489a32650721b0 Jacob Keller 2016-11-11 2409 if (retval)
84f5ca6cf4ea1d Alan Brady 2016-10-05 2410 goto err_no_memory_locked;
84f5ca6cf4ea1d Alan Brady 2016-10-05 2411
278e7d0b9d6864 Jacob Keller 2016-10-05 2412 spin_unlock_bh(&vsi->mac_filter_hash_lock);
216590355cb0e7 Kiran Patil 2015-09-30 2413 }
216590355cb0e7 Kiran Patil 2015-09-30 2414
216590355cb0e7 Kiran Patil 2015-09-30 2415 /* Now process 'del_list' outside the lock */
278e7d0b9d6864 Jacob Keller 2016-10-05 2416 if (!hlist_empty(&tmp_del_list)) {
3e25a8f31af1c7 Mitch Williams 2016-05-16 2417 filter_list_len = hw->aq.asq_buf_size /
216590355cb0e7 Kiran Patil 2015-09-30 2418 sizeof(struct i40e_aqc_remove_macvlan_element_data);
c3c7ea27bec070 Mitch Williams 2016-06-20 2419 list_size = filter_list_len *
f11999987bc0b5 Shannon Nelson 2015-11-19 2420 sizeof(struct i40e_aqc_remove_macvlan_element_data);
c3c7ea27bec070 Mitch Williams 2016-06-20 2421 del_list = kzalloc(list_size, GFP_ATOMIC);
4a2ce27bb5f291 Jacob Keller 2016-10-05 2422 if (!del_list)
4a2ce27bb5f291 Jacob Keller 2016-10-05 2423 goto err_no_memory;
216590355cb0e7 Kiran Patil 2015-09-30 2424
278e7d0b9d6864 Jacob Keller 2016-10-05 2425 hlist_for_each_entry_safe(f, h, &tmp_del_list, hlist) {
41c445ff0f482b Jesse Brandeburg 2013-09-11 2426 cmd_flags = 0;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2427
435c084aad9615 Jacob Keller 2016-11-08 2428 /* handle broadcast filters by updating the broadcast
d88d40b01c5c0d Jacob Keller 2016-12-02 2429 * promiscuous flag and release filter list.
435c084aad9615 Jacob Keller 2016-11-08 2430 */
435c084aad9615 Jacob Keller 2016-11-08 2431 if (is_broadcast_ether_addr(f->macaddr)) {
435c084aad9615 Jacob Keller 2016-11-08 2432 i40e_aqc_broadcast_filter(vsi, vsi_name, f);
435c084aad9615 Jacob Keller 2016-11-08 2433
435c084aad9615 Jacob Keller 2016-11-08 2434 hlist_del(&f->hlist);
435c084aad9615 Jacob Keller 2016-11-08 2435 kfree(f);
435c084aad9615 Jacob Keller 2016-11-08 2436 continue;
435c084aad9615 Jacob Keller 2016-11-08 2437 }
435c084aad9615 Jacob Keller 2016-11-08 2438
41c445ff0f482b Jesse Brandeburg 2013-09-11 2439 /* add to delete list */
9a173901d9969d Greg Rose 2014-05-22 2440 ether_addr_copy(del_list[num_del].mac_addr, f->macaddr);
c3c7ea27bec070 Mitch Williams 2016-06-20 2441 if (f->vlan == I40E_VLAN_ANY) {
c3c7ea27bec070 Mitch Williams 2016-06-20 2442 del_list[num_del].vlan_tag = 0;
a6cb91464b5b09 Alan Brady 2016-09-06 2443 cmd_flags |= I40E_AQC_MACVLAN_DEL_IGNORE_VLAN;
c3c7ea27bec070 Mitch Williams 2016-06-20 2444 } else {
41c445ff0f482b Jesse Brandeburg 2013-09-11 2445 del_list[num_del].vlan_tag =
c3c7ea27bec070 Mitch Williams 2016-06-20 2446 cpu_to_le16((u16)(f->vlan));
c3c7ea27bec070 Mitch Williams 2016-06-20 2447 }
41c445ff0f482b Jesse Brandeburg 2013-09-11 2448
41c445ff0f482b Jesse Brandeburg 2013-09-11 2449 cmd_flags |= I40E_AQC_MACVLAN_DEL_PERFECT_MATCH;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2450 del_list[num_del].flags = cmd_flags;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2451 num_del++;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2452
41c445ff0f482b Jesse Brandeburg 2013-09-11 2453 /* flush a full buffer */
41c445ff0f482b Jesse Brandeburg 2013-09-11 2454 if (num_del == filter_list_len) {
0093631966aad0 Jacob Keller 2016-10-05 2455 i40e_aqc_del_filters(vsi, vsi_name, del_list,
0093631966aad0 Jacob Keller 2016-10-05 2456 num_del, &retval);
c3c7ea27bec070 Mitch Williams 2016-06-20 2457 memset(del_list, 0, list_size);
0093631966aad0 Jacob Keller 2016-10-05 2458 num_del = 0;
ea02e90b4b4978 Mitch Williams 2015-11-09 2459 }
216590355cb0e7 Kiran Patil 2015-09-30 2460 /* Release memory for MAC filter entries which were
216590355cb0e7 Kiran Patil 2015-09-30 2461 * synced up with HW.
216590355cb0e7 Kiran Patil 2015-09-30 2462 */
278e7d0b9d6864 Jacob Keller 2016-10-05 2463 hlist_del(&f->hlist);
216590355cb0e7 Kiran Patil 2015-09-30 2464 kfree(f);
41c445ff0f482b Jesse Brandeburg 2013-09-11 2465 }
216590355cb0e7 Kiran Patil 2015-09-30 2466
41c445ff0f482b Jesse Brandeburg 2013-09-11 2467 if (num_del) {
0093631966aad0 Jacob Keller 2016-10-05 2468 i40e_aqc_del_filters(vsi, vsi_name, del_list,
0093631966aad0 Jacob Keller 2016-10-05 2469 num_del, &retval);
c3c7ea27bec070 Mitch Williams 2016-06-20 2470 }
41c445ff0f482b Jesse Brandeburg 2013-09-11 2471
41c445ff0f482b Jesse Brandeburg 2013-09-11 2472 kfree(del_list);
41c445ff0f482b Jesse Brandeburg 2013-09-11 2473 del_list = NULL;
216590355cb0e7 Kiran Patil 2015-09-30 2474 }
216590355cb0e7 Kiran Patil 2015-09-30 2475
278e7d0b9d6864 Jacob Keller 2016-10-05 2476 if (!hlist_empty(&tmp_add_list)) {
c3c7ea27bec070 Mitch Williams 2016-06-20 2477 /* Do all the adds now. */
3e25a8f31af1c7 Mitch Williams 2016-05-16 2478 filter_list_len = hw->aq.asq_buf_size /
f11999987bc0b5 Shannon Nelson 2015-11-19 2479 sizeof(struct i40e_aqc_add_macvlan_element_data);
c3c7ea27bec070 Mitch Williams 2016-06-20 2480 list_size = filter_list_len *
c3c7ea27bec070 Mitch Williams 2016-06-20 2481 sizeof(struct i40e_aqc_add_macvlan_element_data);
c3c7ea27bec070 Mitch Williams 2016-06-20 2482 add_list = kzalloc(list_size, GFP_ATOMIC);
4a2ce27bb5f291 Jacob Keller 2016-10-05 2483 if (!add_list)
4a2ce27bb5f291 Jacob Keller 2016-10-05 2484 goto err_no_memory;
4a2ce27bb5f291 Jacob Keller 2016-10-05 2485
c3c7ea27bec070 Mitch Williams 2016-06-20 2486 num_add = 0;
671889e6740ac7 Jacob Keller 2016-12-02 2487 hlist_for_each_entry_safe(new, h, &tmp_add_list, hlist) {
435c084aad9615 Jacob Keller 2016-11-08 2488 /* handle broadcast filters by updating the broadcast
435c084aad9615 Jacob Keller 2016-11-08 2489 * promiscuous flag instead of adding a MAC filter.
435c084aad9615 Jacob Keller 2016-11-08 2490 */
671889e6740ac7 Jacob Keller 2016-12-02 2491 if (is_broadcast_ether_addr(new->f->macaddr)) {
671889e6740ac7 Jacob Keller 2016-12-02 2492 if (i40e_aqc_broadcast_filter(vsi, vsi_name,
671889e6740ac7 Jacob Keller 2016-12-02 2493 new->f))
671889e6740ac7 Jacob Keller 2016-12-02 2494 new->state = I40E_FILTER_FAILED;
671889e6740ac7 Jacob Keller 2016-12-02 2495 else
671889e6740ac7 Jacob Keller 2016-12-02 2496 new->state = I40E_FILTER_ACTIVE;
435c084aad9615 Jacob Keller 2016-11-08 2497 continue;
435c084aad9615 Jacob Keller 2016-11-08 2498 }
435c084aad9615 Jacob Keller 2016-11-08 2499
41c445ff0f482b Jesse Brandeburg 2013-09-11 2500 /* add to add array */
c3c7ea27bec070 Mitch Williams 2016-06-20 2501 if (num_add == 0)
671889e6740ac7 Jacob Keller 2016-12-02 2502 add_head = new;
c3c7ea27bec070 Mitch Williams 2016-06-20 2503 cmd_flags = 0;
671889e6740ac7 Jacob Keller 2016-12-02 2504 ether_addr_copy(add_list[num_add].mac_addr,
671889e6740ac7 Jacob Keller 2016-12-02 2505 new->f->macaddr);
671889e6740ac7 Jacob Keller 2016-12-02 2506 if (new->f->vlan == I40E_VLAN_ANY) {
c3c7ea27bec070 Mitch Williams 2016-06-20 2507 add_list[num_add].vlan_tag = 0;
c3c7ea27bec070 Mitch Williams 2016-06-20 2508 cmd_flags |= I40E_AQC_MACVLAN_ADD_IGNORE_VLAN;
c3c7ea27bec070 Mitch Williams 2016-06-20 2509 } else {
41c445ff0f482b Jesse Brandeburg 2013-09-11 2510 add_list[num_add].vlan_tag =
671889e6740ac7 Jacob Keller 2016-12-02 2511 cpu_to_le16((u16)(new->f->vlan));
c3c7ea27bec070 Mitch Williams 2016-06-20 2512 }
41c445ff0f482b Jesse Brandeburg 2013-09-11 2513 add_list[num_add].queue_number = 0;
ac9e239014413e Jacob Keller 2016-11-11 2514 /* set invalid match method for later detection */
0266ac4536cdbf Keller, Jacob E 2016-12-09 2515 add_list[num_add].match_method = I40E_AQC_MM_ERR_NO_RES;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2516 cmd_flags |= I40E_AQC_MACVLAN_ADD_PERFECT_MATCH;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2517 add_list[num_add].flags = cpu_to_le16(cmd_flags);
41c445ff0f482b Jesse Brandeburg 2013-09-11 2518 num_add++;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2519
41c445ff0f482b Jesse Brandeburg 2013-09-11 2520 /* flush a full buffer */
41c445ff0f482b Jesse Brandeburg 2013-09-11 2521 if (num_add == filter_list_len) {
0093631966aad0 Jacob Keller 2016-10-05 2522 i40e_aqc_add_filters(vsi, vsi_name, add_list,
cc6a96a41991de Alan Brady 2018-01-22 2523 add_head, num_add);
c3c7ea27bec070 Mitch Williams 2016-06-20 2524 memset(add_list, 0, list_size);
41c445ff0f482b Jesse Brandeburg 2013-09-11 2525 num_add = 0;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2526 }
41c445ff0f482b Jesse Brandeburg 2013-09-11 2527 }
41c445ff0f482b Jesse Brandeburg 2013-09-11 2528 if (num_add) {
0093631966aad0 Jacob Keller 2016-10-05 2529 i40e_aqc_add_filters(vsi, vsi_name, add_list, add_head,
cc6a96a41991de Alan Brady 2018-01-22 2530 num_add);
c3c7ea27bec070 Mitch Williams 2016-06-20 2531 }
c3c7ea27bec070 Mitch Williams 2016-06-20 2532 /* Now move all of the filters from the temp add list back to
c3c7ea27bec070 Mitch Williams 2016-06-20 2533 * the VSI's list.
c3c7ea27bec070 Mitch Williams 2016-06-20 2534 */
278e7d0b9d6864 Jacob Keller 2016-10-05 2535 spin_lock_bh(&vsi->mac_filter_hash_lock);
671889e6740ac7 Jacob Keller 2016-12-02 2536 hlist_for_each_entry_safe(new, h, &tmp_add_list, hlist) {
671889e6740ac7 Jacob Keller 2016-12-02 2537 /* Only update the state if we're still NEW */
671889e6740ac7 Jacob Keller 2016-12-02 2538 if (new->f->state == I40E_FILTER_NEW)
671889e6740ac7 Jacob Keller 2016-12-02 2539 new->f->state = new->state;
671889e6740ac7 Jacob Keller 2016-12-02 2540 hlist_del(&new->hlist);
3116f59c12bd24 Di Zhu 2021-11-29 2541 netdev_hw_addr_refcnt(new->f, vsi->netdev, -1);
671889e6740ac7 Jacob Keller 2016-12-02 2542 kfree(new);
41c445ff0f482b Jesse Brandeburg 2013-09-11 2543 }
278e7d0b9d6864 Jacob Keller 2016-10-05 2544 spin_unlock_bh(&vsi->mac_filter_hash_lock);
41c445ff0f482b Jesse Brandeburg 2013-09-11 2545 kfree(add_list);
41c445ff0f482b Jesse Brandeburg 2013-09-11 2546 add_list = NULL;
c3c7ea27bec070 Mitch Williams 2016-06-20 2547 }
41c445ff0f482b Jesse Brandeburg 2013-09-11 2548
38326218acce33 Jacob Keller 2016-11-11 2549 /* Determine the number of active and failed filters. */
278e7d0b9d6864 Jacob Keller 2016-10-05 2550 spin_lock_bh(&vsi->mac_filter_hash_lock);
38326218acce33 Jacob Keller 2016-11-11 2551 vsi->active_filters = 0;
278e7d0b9d6864 Jacob Keller 2016-10-05 2552 hash_for_each(vsi->mac_filter_hash, bkt, f, hlist) {
38326218acce33 Jacob Keller 2016-11-11 2553 if (f->state == I40E_FILTER_ACTIVE)
38326218acce33 Jacob Keller 2016-11-11 2554 vsi->active_filters++;
38326218acce33 Jacob Keller 2016-11-11 2555 else if (f->state == I40E_FILTER_FAILED)
38326218acce33 Jacob Keller 2016-11-11 2556 failed_filters++;
c3c7ea27bec070 Mitch Williams 2016-06-20 2557 }
278e7d0b9d6864 Jacob Keller 2016-10-05 2558 spin_unlock_bh(&vsi->mac_filter_hash_lock);
38326218acce33 Jacob Keller 2016-11-11 2559
38326218acce33 Jacob Keller 2016-11-11 2560 /* Check if we are able to exit overflow promiscuous mode. We can
38326218acce33 Jacob Keller 2016-11-11 2561 * safely exit if we didn't just enter, we no longer have any failed
38326218acce33 Jacob Keller 2016-11-11 2562 * filters, and we have reduced filters below the threshold value.
38326218acce33 Jacob Keller 2016-11-11 2563 */
cc6a96a41991de Alan Brady 2018-01-22 2564 if (old_overflow && !failed_filters &&
cc6a96a41991de Alan Brady 2018-01-22 2565 vsi->active_filters < vsi->promisc_threshold) {
41c445ff0f482b Jesse Brandeburg 2013-09-11 2566 dev_info(&pf->pdev->dev,
c3c7ea27bec070 Mitch Williams 2016-06-20 2567 "filter logjam cleared on %s, leaving overflow promiscuous mode\n",
2d1de8283f3714 Shannon Nelson 2016-05-16 2568 vsi_name);
0da36b9774cc24 Jacob Keller 2017-04-19 2569 clear_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
c3c7ea27bec070 Mitch Williams 2016-06-20 2570 vsi->promisc_threshold = 0;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2571 }
41c445ff0f482b Jesse Brandeburg 2013-09-11 2572
a856b5cb83fea4 Anjali Singhai Jain 2016-04-13 2573 /* if the VF is not trusted do not do promisc */
a856b5cb83fea4 Anjali Singhai Jain 2016-04-13 2574 if ((vsi->type == I40E_VSI_SRIOV) && !pf->vf[vsi->vf_id].trusted) {
0da36b9774cc24 Jacob Keller 2017-04-19 2575 clear_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
a856b5cb83fea4 Anjali Singhai Jain 2016-04-13 2576 goto out;
a856b5cb83fea4 Anjali Singhai Jain 2016-04-13 2577 }
a856b5cb83fea4 Anjali Singhai Jain 2016-04-13 2578
cc6a96a41991de Alan Brady 2018-01-22 2579 new_overflow = test_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state);
cc6a96a41991de Alan Brady 2018-01-22 2580
cc6a96a41991de Alan Brady 2018-01-22 2581 /* If we are entering overflow promiscuous, we need to calculate a new
cc6a96a41991de Alan Brady 2018-01-22 2582 * threshold for when we are safe to exit
cc6a96a41991de Alan Brady 2018-01-22 2583 */
cc6a96a41991de Alan Brady 2018-01-22 2584 if (!old_overflow && new_overflow)
cc6a96a41991de Alan Brady 2018-01-22 2585 vsi->promisc_threshold = (vsi->active_filters * 3) / 4;
cc6a96a41991de Alan Brady 2018-01-22 2586
41c445ff0f482b Jesse Brandeburg 2013-09-11 2587 /* check for changes in promiscuous modes */
41c445ff0f482b Jesse Brandeburg 2013-09-11 2588 if (changed_flags & IFF_ALLMULTI) {
41c445ff0f482b Jesse Brandeburg 2013-09-11 2589 bool cur_multipromisc;
6995b36c0fc3dd Jesse Brandeburg 2015-08-28 2590
41c445ff0f482b Jesse Brandeburg 2013-09-11 2591 cur_multipromisc = !!(vsi->current_netdev_flags & IFF_ALLMULTI);
ea02e90b4b4978 Mitch Williams 2015-11-09 2592 aq_ret = i40e_aq_set_vsi_multicast_promiscuous(&vsi->back->hw,
41c445ff0f482b Jesse Brandeburg 2013-09-11 2593 vsi->seid,
41c445ff0f482b Jesse Brandeburg 2013-09-11 2594 cur_multipromisc,
41c445ff0f482b Jesse Brandeburg 2013-09-11 2595 NULL);
ea02e90b4b4978 Mitch Williams 2015-11-09 2596 if (aq_ret) {
ea02e90b4b4978 Mitch Williams 2015-11-09 2597 retval = i40e_aq_rc_to_posix(aq_ret,
3e25a8f31af1c7 Mitch Williams 2016-05-16 2598 hw->aq.asq_last_status);
41c445ff0f482b Jesse Brandeburg 2013-09-11 2599 dev_info(&pf->pdev->dev,
2d1de8283f3714 Shannon Nelson 2016-05-16 2600 "set multi promisc failed on %s, err %s aq_err %s\n",
2d1de8283f3714 Shannon Nelson 2016-05-16 2601 vsi_name,
3e25a8f31af1c7 Mitch Williams 2016-05-16 2602 i40e_stat_str(hw, aq_ret),
3e25a8f31af1c7 Mitch Williams 2016-05-16 2603 i40e_aq_str(hw, hw->aq.asq_last_status));
b603f9dc20afed Czeslaw Zagorski 2019-07-02 2604 } else {
6b5674fe6b9bf0 Arkadiusz Kubalewski 2021-03-26 2605 dev_info(&pf->pdev->dev, "%s allmulti mode.\n",
b603f9dc20afed Czeslaw Zagorski 2019-07-02 2606 cur_multipromisc ? "entering" : "leaving");
41c445ff0f482b Jesse Brandeburg 2013-09-11 2607 }
ea02e90b4b4978 Mitch Williams 2015-11-09 2608 }
e5887239868454 Alan Brady 2017-06-07 2609
cc6a96a41991de Alan Brady 2018-01-22 2610 if ((changed_flags & IFF_PROMISC) || old_overflow != new_overflow) {
41c445ff0f482b Jesse Brandeburg 2013-09-11 2611 bool cur_promisc;
6995b36c0fc3dd Jesse Brandeburg 2015-08-28 2612
41c445ff0f482b Jesse Brandeburg 2013-09-11 2613 cur_promisc = (!!(vsi->current_netdev_flags & IFF_PROMISC) ||
cc6a96a41991de Alan Brady 2018-01-22 2614 new_overflow);
bd5608b3223bc7 Alan Brady 2017-11-14 2615 aq_ret = i40e_set_promiscuous(pf, cur_promisc);
5bc160319f8a1e Mitch Williams 2016-05-16 2616 if (aq_ret) {
5bc160319f8a1e Mitch Williams 2016-05-16 2617 retval = i40e_aq_rc_to_posix(aq_ret,
5bc160319f8a1e Mitch Williams 2016-05-16 2618 hw->aq.asq_last_status);
5bc160319f8a1e Mitch Williams 2016-05-16 2619 dev_info(&pf->pdev->dev,
bd5608b3223bc7 Alan Brady 2017-11-14 2620 "Setting promiscuous %s failed on %s, err %s aq_err %s\n",
bd5608b3223bc7 Alan Brady 2017-11-14 2621 cur_promisc ? "on" : "off",
2d1de8283f3714 Shannon Nelson 2016-05-16 2622 vsi_name,
3e25a8f31af1c7 Mitch Williams 2016-05-16 2623 i40e_stat_str(hw, aq_ret),
bd5608b3223bc7 Alan Brady 2017-11-14 2624 i40e_aq_str(hw, hw->aq.asq_last_status));
41c445ff0f482b Jesse Brandeburg 2013-09-11 2625 }
ea02e90b4b4978 Mitch Williams 2015-11-09 2626 }
ea02e90b4b4978 Mitch Williams 2015-11-09 2627 out:
2818ccd95684d3 Jesse Brandeburg 2016-01-13 2628 /* if something went wrong then set the changed flag so we try again */
2818ccd95684d3 Jesse Brandeburg 2016-01-13 2629 if (retval)
2818ccd95684d3 Jesse Brandeburg 2016-01-13 2630 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
2818ccd95684d3 Jesse Brandeburg 2016-01-13 2631
0da36b9774cc24 Jacob Keller 2017-04-19 2632 clear_bit(__I40E_VSI_SYNCING_FILTERS, vsi->state);
ea02e90b4b4978 Mitch Williams 2015-11-09 2633 return retval;
4a2ce27bb5f291 Jacob Keller 2016-10-05 2634
4a2ce27bb5f291 Jacob Keller 2016-10-05 2635 err_no_memory:
4a2ce27bb5f291 Jacob Keller 2016-10-05 2636 /* Restore elements on the temporary add and delete lists */
4a2ce27bb5f291 Jacob Keller 2016-10-05 2637 spin_lock_bh(&vsi->mac_filter_hash_lock);
84f5ca6cf4ea1d Alan Brady 2016-10-05 2638 err_no_memory_locked:
671889e6740ac7 Jacob Keller 2016-12-02 2639 i40e_undo_del_filter_entries(vsi, &tmp_del_list);
671889e6740ac7 Jacob Keller 2016-12-02 2640 i40e_undo_add_filter_entries(vsi, &tmp_add_list);
4a2ce27bb5f291 Jacob Keller 2016-10-05 2641 spin_unlock_bh(&vsi->mac_filter_hash_lock);
4a2ce27bb5f291 Jacob Keller 2016-10-05 2642
4a2ce27bb5f291 Jacob Keller 2016-10-05 2643 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;
0da36b9774cc24 Jacob Keller 2017-04-19 2644 clear_bit(__I40E_VSI_SYNCING_FILTERS, vsi->state);
4a2ce27bb5f291 Jacob Keller 2016-10-05 2645 return -ENOMEM;
41c445ff0f482b Jesse Brandeburg 2013-09-11 2646 }
41c445ff0f482b Jesse Brandeburg 2013-09-11 2647
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-04-03 4:38 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-03 4:38 drivers/net/ethernet/intel/i40e/i40e_main.c:2406:3: warning: There is an unknown macro here somewhere. Configuration is required. If hlist_for_each_entry is a macro then please configure it. [unknownMacro] kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.