From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============4258175125362316211==" MIME-Version: 1.0 From: kernel test robot Subject: drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:3598 mlxsw_sp_nexthop_group_refresh() warn: missing error code 'err' Date: Fri, 14 May 2021 18:58:35 +0800 Message-ID: <202105141823.Td2h3Mbi-lkp@intel.com> List-Id: To: kbuild@lists.01.org --===============4258175125362316211== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable CC: kbuild-all(a)lists.01.org CC: linux-kernel(a)vger.kernel.org TO: Ido Schimmel CC: Jakub Kicinski CC: Jiri Pirko tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git = master head: 315d99318179b9cd5077ccc9f7f26a164c9fa998 commit: e3ddfb45bacdc623eedea7f7bf9e7879257471d6 mlxsw: spectrum_router: Al= low returning errors from mlxsw_sp_nexthop_group_refresh() date: 6 months ago :::::: branch date: 16 hours ago :::::: commit date: 6 months ago config: x86_64-randconfig-m031-20210514 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter smatch warnings: drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:3598 mlxsw_sp_nexthop= _group_refresh() warn: missing error code 'err' vim +/err +3598 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 8c5a5b9b9185e5 Ido Schimmel 2020-01-14 3554 = e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3555 static int a7ff87acd995e3 Jiri Pirko 2016-07-05 3556 mlxsw_sp_nexthop_group_= refresh(struct mlxsw_sp *mlxsw_sp, a7ff87acd995e3 Jiri Pirko 2016-07-05 3557 struct mlxsw_= sp_nexthop_group *nh_grp) a7ff87acd995e3 Jiri Pirko 2016-07-05 3558 { 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3559 struct mlxsw_sp_nextho= p_group_info *nhgi =3D nh_grp->nhgi; eb789980d0aa6c Ido Schimmel 2017-10-22 3560 u16 ecmp_size, old_ecm= p_size; a7ff87acd995e3 Jiri Pirko 2016-07-05 3561 struct mlxsw_sp_nextho= p *nh; a7ff87acd995e3 Jiri Pirko 2016-07-05 3562 bool offload_change = =3D false; a7ff87acd995e3 Jiri Pirko 2016-07-05 3563 u32 adj_index; a7ff87acd995e3 Jiri Pirko 2016-07-05 3564 bool old_adj_index_val= id; e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3565 int i, err2, err =3D 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3566 u32 old_adj_index; a7ff87acd995e3 Jiri Pirko 2016-07-05 3567 = 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3568 if (!nhgi->gateway) { b3e8d1ebad2d04 Ido Schimmel 2017-02-08 3569 mlxsw_sp_nexthop_fib_= entries_update(mlxsw_sp, nh_grp); e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3570 return 0; b3e8d1ebad2d04 Ido Schimmel 2017-02-08 3571 } b3e8d1ebad2d04 Ido Schimmel 2017-02-08 3572 = 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3573 for (i =3D 0; i < nhgi= ->count; i++) { 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3574 nh =3D &nhgi->nexthop= s[i]; a7ff87acd995e3 Jiri Pirko 2016-07-05 3575 = 56b8a9ed276bc1 Petr Machata 2017-07-31 3576 if (nh->should_offloa= d !=3D nh->offloaded) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3577 offload_change =3D t= rue; a7ff87acd995e3 Jiri Pirko 2016-07-05 3578 if (nh->should_offlo= ad) a7ff87acd995e3 Jiri Pirko 2016-07-05 3579 nh->update =3D 1; a7ff87acd995e3 Jiri Pirko 2016-07-05 3580 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3581 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3582 if (!offload_change) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3583 /* Nothing was added = or removed, so no need to reallocate. Just a7ff87acd995e3 Jiri Pirko 2016-07-05 3584 * update MAC on exis= ting adjacency indexes. a7ff87acd995e3 Jiri Pirko 2016-07-05 3585 */ 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3586 err =3D mlxsw_sp_next= hop_group_update(mlxsw_sp, nhgi, false); a7ff87acd995e3 Jiri Pirko 2016-07-05 3587 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3588 dev_warn(mlxsw_sp->b= us_info->dev, "Failed to update neigh MAC in adjacency table.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3589 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3590 } e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3591 return 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3592 } 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3593 mlxsw_sp_nexthop_group= _normalize(nhgi); 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3594 if (!nhgi->sum_norm_we= ight) a7ff87acd995e3 Jiri Pirko 2016-07-05 3595 /* No neigh of this g= roup is connected so we just set a7ff87acd995e3 Jiri Pirko 2016-07-05 3596 * the trap and let e= verthing flow through kernel. a7ff87acd995e3 Jiri Pirko 2016-07-05 3597 */ a7ff87acd995e3 Jiri Pirko 2016-07-05 @3598 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3599 = 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3600 ecmp_size =3D nhgi->su= m_norm_weight; 425a08c67317ac Ido Schimmel 2017-10-22 3601 err =3D mlxsw_sp_fix_a= dj_grp_size(mlxsw_sp, &ecmp_size); 425a08c67317ac Ido Schimmel 2017-10-22 3602 if (err) 425a08c67317ac Ido Schimmel 2017-10-22 3603 /* No valid allocatio= n size available. */ 425a08c67317ac Ido Schimmel 2017-10-22 3604 goto set_trap; 425a08c67317ac Ido Schimmel 2017-10-22 3605 = 4b6b18692aec20 Jiri Pirko 2018-07-08 3606 err =3D mlxsw_sp_kvdl_= alloc(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 4b6b18692aec20 Jiri Pirko 2018-07-08 3607 ecmp_size, &adj_i= ndex); 1312444374241f Arkadi Sharshevsky 2017-03-25 3608 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3609 /* We ran out of KVD = linear space, just set the a7ff87acd995e3 Jiri Pirko 2016-07-05 3610 * trap and let every= thing flow through kernel. a7ff87acd995e3 Jiri Pirko 2016-07-05 3611 */ a7ff87acd995e3 Jiri Pirko 2016-07-05 3612 dev_warn(mlxsw_sp->bu= s_info->dev, "Failed to allocate KVD linear area for nexthop group.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3613 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3614 } 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3615 old_adj_index_valid = =3D nhgi->adj_index_valid; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3616 old_adj_index =3D nhgi= ->adj_index; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3617 old_ecmp_size =3D nhgi= ->ecmp_size; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3618 nhgi->adj_index_valid = =3D 1; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3619 nhgi->adj_index =3D ad= j_index; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3620 nhgi->ecmp_size =3D ec= mp_size; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3621 mlxsw_sp_nexthop_group= _rebalance(nhgi); 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3622 err =3D mlxsw_sp_nexth= op_group_update(mlxsw_sp, nhgi, true); a7ff87acd995e3 Jiri Pirko 2016-07-05 3623 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3624 dev_warn(mlxsw_sp->bu= s_info->dev, "Failed to update neigh MAC in adjacency table.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3625 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3626 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3627 = 8c5a5b9b9185e5 Ido Schimmel 2020-01-14 3628 mlxsw_sp_nexthop_group= _offload_refresh(mlxsw_sp, nh_grp); 8c5a5b9b9185e5 Ido Schimmel 2020-01-14 3629 = a7ff87acd995e3 Jiri Pirko 2016-07-05 3630 if (!old_adj_index_val= id) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3631 /* The trap was set f= or fib entries, so we have to call a7ff87acd995e3 Jiri Pirko 2016-07-05 3632 * fib entry update t= o unset it and use adjacency index. a7ff87acd995e3 Jiri Pirko 2016-07-05 3633 */ a7ff87acd995e3 Jiri Pirko 2016-07-05 3634 err =3D mlxsw_sp_next= hop_fib_entries_update(mlxsw_sp, nh_grp); a7ff87acd995e3 Jiri Pirko 2016-07-05 3635 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3636 dev_warn(mlxsw_sp->b= us_info->dev, "Failed to add adjacency index to fib entries.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3637 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3638 } e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3639 return 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3640 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3641 = a7ff87acd995e3 Jiri Pirko 2016-07-05 3642 err =3D mlxsw_sp_adj_i= ndex_mass_update(mlxsw_sp, nh_grp, a7ff87acd995e3 Jiri Pirko 2016-07-05 3643 old_adj_index= , old_ecmp_size); 4b6b18692aec20 Jiri Pirko 2018-07-08 3644 mlxsw_sp_kvdl_free(mlx= sw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 0304c00546fce7 Jiri Pirko 2018-07-08 3645 old_ecmp_size, ol= d_adj_index); a7ff87acd995e3 Jiri Pirko 2016-07-05 3646 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3647 dev_warn(mlxsw_sp->bu= s_info->dev, "Failed to mass-update adjacency index for nexthop group.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3648 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3649 } 77d964e66cfad0 Ido Schimmel 2017-08-02 3650 = e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3651 return 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3652 = a7ff87acd995e3 Jiri Pirko 2016-07-05 3653 set_trap: 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3654 old_adj_index_valid = =3D nhgi->adj_index_valid; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3655 nhgi->adj_index_valid = =3D 0; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3656 for (i =3D 0; i < nhgi= ->count; i++) { 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3657 nh =3D &nhgi->nexthop= s[i]; a7ff87acd995e3 Jiri Pirko 2016-07-05 3658 nh->offloaded =3D 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3659 } e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3660 err2 =3D mlxsw_sp_next= hop_fib_entries_update(mlxsw_sp, nh_grp); e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3661 if (err2) a7ff87acd995e3 Jiri Pirko 2016-07-05 3662 dev_warn(mlxsw_sp->bu= s_info->dev, "Failed to set traps for fib entries.\n"); 8c5a5b9b9185e5 Ido Schimmel 2020-01-14 3663 mlxsw_sp_nexthop_group= _offload_refresh(mlxsw_sp, nh_grp); a7ff87acd995e3 Jiri Pirko 2016-07-05 3664 if (old_adj_index_vali= d) 4b6b18692aec20 Jiri Pirko 2018-07-08 3665 mlxsw_sp_kvdl_free(ml= xsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3666 nhgi->ecmp_size,= nhgi->adj_index); e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3667 return err; a7ff87acd995e3 Jiri Pirko 2016-07-05 3668 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3669 = :::::: The code at line 3598 was first introduced by commit :::::: a7ff87acd995e3c024f3262bf90c8682c99b1f6b mlxsw: spectrum_router: Imp= lement next-hop routing :::::: TO: Jiri Pirko :::::: CC: David S. Miller --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org --===============4258175125362316211== Content-Type: application/gzip MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="config.gz" 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 --===============4258175125362316211==-- From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============0897992684197871531==" MIME-Version: 1.0 From: Dan Carpenter To: kbuild-all@lists.01.org Subject: drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:3598 mlxsw_sp_nexthop_group_refresh() warn: missing error code 'err' Date: Fri, 14 May 2021 17:35:00 +0300 Message-ID: <202105141823.Td2h3Mbi-lkp@intel.com> List-Id: --===============0897992684197871531== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git = master head: 315d99318179b9cd5077ccc9f7f26a164c9fa998 commit: e3ddfb45bacdc623eedea7f7bf9e7879257471d6 mlxsw: spectrum_router: Al= low returning errors from mlxsw_sp_nexthop_group_refresh() config: x86_64-randconfig-m031-20210514 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter smatch warnings: drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:3598 mlxsw_sp_nexthop= _group_refresh() warn: missing error code 'err' vim +/err +3598 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3555 static int a7ff87acd995e3 Jiri Pirko 2016-07-05 3556 mlxsw_sp_nexthop_group_= refresh(struct mlxsw_sp *mlxsw_sp, a7ff87acd995e3 Jiri Pirko 2016-07-05 3557 struct mlxsw_= sp_nexthop_group *nh_grp) a7ff87acd995e3 Jiri Pirko 2016-07-05 3558 { 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3559 struct mlxsw_sp_nextho= p_group_info *nhgi =3D nh_grp->nhgi; eb789980d0aa6c Ido Schimmel 2017-10-22 3560 u16 ecmp_size, old_ecm= p_size; a7ff87acd995e3 Jiri Pirko 2016-07-05 3561 struct mlxsw_sp_nextho= p *nh; a7ff87acd995e3 Jiri Pirko 2016-07-05 3562 bool offload_change = =3D false; a7ff87acd995e3 Jiri Pirko 2016-07-05 3563 u32 adj_index; a7ff87acd995e3 Jiri Pirko 2016-07-05 3564 bool old_adj_index_val= id; e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3565 int i, err2, err =3D 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3566 u32 old_adj_index; a7ff87acd995e3 Jiri Pirko 2016-07-05 3567 = 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3568 if (!nhgi->gateway) { b3e8d1ebad2d04 Ido Schimmel 2017-02-08 3569 mlxsw_sp_nexthop_fib_= entries_update(mlxsw_sp, nh_grp); e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3570 return 0; b3e8d1ebad2d04 Ido Schimmel 2017-02-08 3571 } b3e8d1ebad2d04 Ido Schimmel 2017-02-08 3572 = 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3573 for (i =3D 0; i < nhgi= ->count; i++) { 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3574 nh =3D &nhgi->nexthop= s[i]; a7ff87acd995e3 Jiri Pirko 2016-07-05 3575 = 56b8a9ed276bc1 Petr Machata 2017-07-31 3576 if (nh->should_offloa= d !=3D nh->offloaded) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3577 offload_change =3D t= rue; a7ff87acd995e3 Jiri Pirko 2016-07-05 3578 if (nh->should_offlo= ad) a7ff87acd995e3 Jiri Pirko 2016-07-05 3579 nh->update =3D 1; a7ff87acd995e3 Jiri Pirko 2016-07-05 3580 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3581 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3582 if (!offload_change) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3583 /* Nothing was added = or removed, so no need to reallocate. Just a7ff87acd995e3 Jiri Pirko 2016-07-05 3584 * update MAC on exis= ting adjacency indexes. a7ff87acd995e3 Jiri Pirko 2016-07-05 3585 */ 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3586 err =3D mlxsw_sp_next= hop_group_update(mlxsw_sp, nhgi, false); a7ff87acd995e3 Jiri Pirko 2016-07-05 3587 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3588 dev_warn(mlxsw_sp->b= us_info->dev, "Failed to update neigh MAC in adjacency table.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3589 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3590 } e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3591 return 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3592 } 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3593 mlxsw_sp_nexthop_group= _normalize(nhgi); 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3594 if (!nhgi->sum_norm_we= ight) a7ff87acd995e3 Jiri Pirko 2016-07-05 3595 /* No neigh of this g= roup is connected so we just set a7ff87acd995e3 Jiri Pirko 2016-07-05 3596 * the trap and let e= verthing flow through kernel. a7ff87acd995e3 Jiri Pirko 2016-07-05 3597 */ a7ff87acd995e3 Jiri Pirko 2016-07-05 @3598 goto set_trap; The comments sort of imply that this is a success path so no error code necessary. It's sort of hard to be positive though... a7ff87acd995e3 Jiri Pirko 2016-07-05 3599 = 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3600 ecmp_size =3D nhgi->su= m_norm_weight; 425a08c67317ac Ido Schimmel 2017-10-22 3601 err =3D mlxsw_sp_fix_a= dj_grp_size(mlxsw_sp, &ecmp_size); 425a08c67317ac Ido Schimmel 2017-10-22 3602 if (err) 425a08c67317ac Ido Schimmel 2017-10-22 3603 /* No valid allocatio= n size available. */ 425a08c67317ac Ido Schimmel 2017-10-22 3604 goto set_trap; 425a08c67317ac Ido Schimmel 2017-10-22 3605 = 4b6b18692aec20 Jiri Pirko 2018-07-08 3606 err =3D mlxsw_sp_kvdl_= alloc(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 4b6b18692aec20 Jiri Pirko 2018-07-08 3607 ecmp_size, &adj_i= ndex); 1312444374241f Arkadi Sharshevsky 2017-03-25 3608 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3609 /* We ran out of KVD = linear space, just set the a7ff87acd995e3 Jiri Pirko 2016-07-05 3610 * trap and let every= thing flow through kernel. a7ff87acd995e3 Jiri Pirko 2016-07-05 3611 */ a7ff87acd995e3 Jiri Pirko 2016-07-05 3612 dev_warn(mlxsw_sp->bu= s_info->dev, "Failed to allocate KVD linear area for nexthop group.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3613 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3614 } 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3615 old_adj_index_valid = =3D nhgi->adj_index_valid; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3616 old_adj_index =3D nhgi= ->adj_index; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3617 old_ecmp_size =3D nhgi= ->ecmp_size; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3618 nhgi->adj_index_valid = =3D 1; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3619 nhgi->adj_index =3D ad= j_index; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3620 nhgi->ecmp_size =3D ec= mp_size; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3621 mlxsw_sp_nexthop_group= _rebalance(nhgi); 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3622 err =3D mlxsw_sp_nexth= op_group_update(mlxsw_sp, nhgi, true); a7ff87acd995e3 Jiri Pirko 2016-07-05 3623 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3624 dev_warn(mlxsw_sp->bu= s_info->dev, "Failed to update neigh MAC in adjacency table.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3625 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3626 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3627 = 8c5a5b9b9185e5 Ido Schimmel 2020-01-14 3628 mlxsw_sp_nexthop_group= _offload_refresh(mlxsw_sp, nh_grp); 8c5a5b9b9185e5 Ido Schimmel 2020-01-14 3629 = a7ff87acd995e3 Jiri Pirko 2016-07-05 3630 if (!old_adj_index_val= id) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3631 /* The trap was set f= or fib entries, so we have to call a7ff87acd995e3 Jiri Pirko 2016-07-05 3632 * fib entry update t= o unset it and use adjacency index. a7ff87acd995e3 Jiri Pirko 2016-07-05 3633 */ a7ff87acd995e3 Jiri Pirko 2016-07-05 3634 err =3D mlxsw_sp_next= hop_fib_entries_update(mlxsw_sp, nh_grp); a7ff87acd995e3 Jiri Pirko 2016-07-05 3635 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3636 dev_warn(mlxsw_sp->b= us_info->dev, "Failed to add adjacency index to fib entries.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3637 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3638 } e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3639 return 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3640 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3641 = a7ff87acd995e3 Jiri Pirko 2016-07-05 3642 err =3D mlxsw_sp_adj_i= ndex_mass_update(mlxsw_sp, nh_grp, a7ff87acd995e3 Jiri Pirko 2016-07-05 3643 old_adj_index= , old_ecmp_size); 4b6b18692aec20 Jiri Pirko 2018-07-08 3644 mlxsw_sp_kvdl_free(mlx= sw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 0304c00546fce7 Jiri Pirko 2018-07-08 3645 old_ecmp_size, ol= d_adj_index); a7ff87acd995e3 Jiri Pirko 2016-07-05 3646 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3647 dev_warn(mlxsw_sp->bu= s_info->dev, "Failed to mass-update adjacency index for nexthop group.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3648 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3649 } 77d964e66cfad0 Ido Schimmel 2017-08-02 3650 = e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3651 return 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3652 = a7ff87acd995e3 Jiri Pirko 2016-07-05 3653 set_trap: 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3654 old_adj_index_valid = =3D nhgi->adj_index_valid; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3655 nhgi->adj_index_valid = =3D 0; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3656 for (i =3D 0; i < nhgi= ->count; i++) { 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3657 nh =3D &nhgi->nexthop= s[i]; a7ff87acd995e3 Jiri Pirko 2016-07-05 3658 nh->offloaded =3D 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3659 } e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3660 err2 =3D mlxsw_sp_next= hop_fib_entries_update(mlxsw_sp, nh_grp); e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3661 if (err2) a7ff87acd995e3 Jiri Pirko 2016-07-05 3662 dev_warn(mlxsw_sp->bu= s_info->dev, "Failed to set traps for fib entries.\n"); 8c5a5b9b9185e5 Ido Schimmel 2020-01-14 3663 mlxsw_sp_nexthop_group= _offload_refresh(mlxsw_sp, nh_grp); a7ff87acd995e3 Jiri Pirko 2016-07-05 3664 if (old_adj_index_vali= d) 4b6b18692aec20 Jiri Pirko 2018-07-08 3665 mlxsw_sp_kvdl_free(ml= xsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3666 nhgi->ecmp_size,= nhgi->adj_index); e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3667 return err; a7ff87acd995e3 Jiri Pirko 2016-07-05 3668 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org --===============0897992684197871531==-- From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01FE7C433B4 for ; Fri, 14 May 2021 14:35:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CE6356144A for ; Fri, 14 May 2021 14:35:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232774AbhENOg1 (ORCPT ); Fri, 14 May 2021 10:36:27 -0400 Received: from aserp2130.oracle.com ([141.146.126.79]:37540 "EHLO aserp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230141AbhENOg0 (ORCPT ); Fri, 14 May 2021 10:36:26 -0400 Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 14EEXxb6144163; Fri, 14 May 2021 14:35:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc : subject : message-id : mime-version : content-type; s=corp-2020-01-29; bh=ofXVR2YY3iIbhWrB+fJ2sowMKy/iOgcuiTsB/zObxKQ=; b=QxtQhYRuIrrtRSlUDoOSCQpw18z0Av5r8Mch6XVJO26mGoyTfylnBzoBwaQIGYhvtnAp vROLBrz9X3WgXIQMRCJ/9Z5VDW4g9OEkyFQTgiayeCwNh+dE7vz79AGPJUD+20U3KF/V HrB31oWY71H5qS8yR0WnM42/GpeY1cHeZj7FPJvATqxKnhYHoj6W+8UoznX2MYARgAqL e67C+N6rqe5nxhz82SOVcMNWhRQ/3UgISABIIdSlZB/L38q3MKZTYrSKzChDiQcVjURJ FMNka6UvTyfl3n7hVvDTuD1Sz8/fohZSSntmhZeKWqWV2QjMkWVJuw9xAqUozQTUApVo dg== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by aserp2130.oracle.com with ESMTP id 38gpnemgpw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 May 2021 14:35:09 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 14EEQCTF044521; Fri, 14 May 2021 14:35:08 GMT Received: from pps.reinject (localhost [127.0.0.1]) by userp3020.oracle.com with ESMTP id 38gpph98s7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 May 2021 14:35:08 +0000 Received: from userp3020.oracle.com (userp3020.oracle.com [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 14EEY4P5061689; Fri, 14 May 2021 14:35:08 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3020.oracle.com with ESMTP id 38gpph98r9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 May 2021 14:35:08 +0000 Received: from abhmp0005.oracle.com (abhmp0005.oracle.com [141.146.116.11]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 14EEZ6Q0008920; Fri, 14 May 2021 14:35:07 GMT Received: from kadam (/102.36.221.92) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 14 May 2021 07:35:06 -0700 Date: Fri, 14 May 2021 17:35:00 +0300 From: Dan Carpenter To: kbuild@lists.01.org, Ido Schimmel Cc: lkp@intel.com, kbuild-all@lists.01.org, linux-kernel@vger.kernel.org, Jakub Kicinski , Jiri Pirko Subject: drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:3598 mlxsw_sp_nexthop_group_refresh() warn: missing error code 'err' Message-ID: <202105141823.Td2h3Mbi-lkp@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.9.4 (2018-02-28) X-Proofpoint-GUID: t2jSsmSKEOs8RHwDSRDsKcuFW8ZcTHOS X-Proofpoint-ORIG-GUID: t2jSsmSKEOs8RHwDSRDsKcuFW8ZcTHOS X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=9984 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 impostorscore=0 phishscore=0 suspectscore=0 bulkscore=0 lowpriorityscore=0 adultscore=0 malwarescore=0 priorityscore=1501 clxscore=1011 mlxscore=0 spamscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000 definitions=main-2105140118 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 315d99318179b9cd5077ccc9f7f26a164c9fa998 commit: e3ddfb45bacdc623eedea7f7bf9e7879257471d6 mlxsw: spectrum_router: Allow returning errors from mlxsw_sp_nexthop_group_refresh() config: x86_64-randconfig-m031-20210514 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter smatch warnings: drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:3598 mlxsw_sp_nexthop_group_refresh() warn: missing error code 'err' vim +/err +3598 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3555 static int a7ff87acd995e3 Jiri Pirko 2016-07-05 3556 mlxsw_sp_nexthop_group_refresh(struct mlxsw_sp *mlxsw_sp, a7ff87acd995e3 Jiri Pirko 2016-07-05 3557 struct mlxsw_sp_nexthop_group *nh_grp) a7ff87acd995e3 Jiri Pirko 2016-07-05 3558 { 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3559 struct mlxsw_sp_nexthop_group_info *nhgi = nh_grp->nhgi; eb789980d0aa6c Ido Schimmel 2017-10-22 3560 u16 ecmp_size, old_ecmp_size; a7ff87acd995e3 Jiri Pirko 2016-07-05 3561 struct mlxsw_sp_nexthop *nh; a7ff87acd995e3 Jiri Pirko 2016-07-05 3562 bool offload_change = false; a7ff87acd995e3 Jiri Pirko 2016-07-05 3563 u32 adj_index; a7ff87acd995e3 Jiri Pirko 2016-07-05 3564 bool old_adj_index_valid; e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3565 int i, err2, err = 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3566 u32 old_adj_index; a7ff87acd995e3 Jiri Pirko 2016-07-05 3567 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3568 if (!nhgi->gateway) { b3e8d1ebad2d04 Ido Schimmel 2017-02-08 3569 mlxsw_sp_nexthop_fib_entries_update(mlxsw_sp, nh_grp); e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3570 return 0; b3e8d1ebad2d04 Ido Schimmel 2017-02-08 3571 } b3e8d1ebad2d04 Ido Schimmel 2017-02-08 3572 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3573 for (i = 0; i < nhgi->count; i++) { 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3574 nh = &nhgi->nexthops[i]; a7ff87acd995e3 Jiri Pirko 2016-07-05 3575 56b8a9ed276bc1 Petr Machata 2017-07-31 3576 if (nh->should_offload != nh->offloaded) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3577 offload_change = true; a7ff87acd995e3 Jiri Pirko 2016-07-05 3578 if (nh->should_offload) a7ff87acd995e3 Jiri Pirko 2016-07-05 3579 nh->update = 1; a7ff87acd995e3 Jiri Pirko 2016-07-05 3580 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3581 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3582 if (!offload_change) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3583 /* Nothing was added or removed, so no need to reallocate. Just a7ff87acd995e3 Jiri Pirko 2016-07-05 3584 * update MAC on existing adjacency indexes. a7ff87acd995e3 Jiri Pirko 2016-07-05 3585 */ 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3586 err = mlxsw_sp_nexthop_group_update(mlxsw_sp, nhgi, false); a7ff87acd995e3 Jiri Pirko 2016-07-05 3587 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3588 dev_warn(mlxsw_sp->bus_info->dev, "Failed to update neigh MAC in adjacency table.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3589 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3590 } e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3591 return 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3592 } 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3593 mlxsw_sp_nexthop_group_normalize(nhgi); 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3594 if (!nhgi->sum_norm_weight) a7ff87acd995e3 Jiri Pirko 2016-07-05 3595 /* No neigh of this group is connected so we just set a7ff87acd995e3 Jiri Pirko 2016-07-05 3596 * the trap and let everthing flow through kernel. a7ff87acd995e3 Jiri Pirko 2016-07-05 3597 */ a7ff87acd995e3 Jiri Pirko 2016-07-05 @3598 goto set_trap; The comments sort of imply that this is a success path so no error code necessary. It's sort of hard to be positive though... a7ff87acd995e3 Jiri Pirko 2016-07-05 3599 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3600 ecmp_size = nhgi->sum_norm_weight; 425a08c67317ac Ido Schimmel 2017-10-22 3601 err = mlxsw_sp_fix_adj_grp_size(mlxsw_sp, &ecmp_size); 425a08c67317ac Ido Schimmel 2017-10-22 3602 if (err) 425a08c67317ac Ido Schimmel 2017-10-22 3603 /* No valid allocation size available. */ 425a08c67317ac Ido Schimmel 2017-10-22 3604 goto set_trap; 425a08c67317ac Ido Schimmel 2017-10-22 3605 4b6b18692aec20 Jiri Pirko 2018-07-08 3606 err = mlxsw_sp_kvdl_alloc(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 4b6b18692aec20 Jiri Pirko 2018-07-08 3607 ecmp_size, &adj_index); 1312444374241f Arkadi Sharshevsky 2017-03-25 3608 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3609 /* We ran out of KVD linear space, just set the a7ff87acd995e3 Jiri Pirko 2016-07-05 3610 * trap and let everything flow through kernel. a7ff87acd995e3 Jiri Pirko 2016-07-05 3611 */ a7ff87acd995e3 Jiri Pirko 2016-07-05 3612 dev_warn(mlxsw_sp->bus_info->dev, "Failed to allocate KVD linear area for nexthop group.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3613 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3614 } 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3615 old_adj_index_valid = nhgi->adj_index_valid; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3616 old_adj_index = nhgi->adj_index; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3617 old_ecmp_size = nhgi->ecmp_size; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3618 nhgi->adj_index_valid = 1; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3619 nhgi->adj_index = adj_index; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3620 nhgi->ecmp_size = ecmp_size; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3621 mlxsw_sp_nexthop_group_rebalance(nhgi); 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3622 err = mlxsw_sp_nexthop_group_update(mlxsw_sp, nhgi, true); a7ff87acd995e3 Jiri Pirko 2016-07-05 3623 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3624 dev_warn(mlxsw_sp->bus_info->dev, "Failed to update neigh MAC in adjacency table.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3625 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3626 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3627 8c5a5b9b9185e5 Ido Schimmel 2020-01-14 3628 mlxsw_sp_nexthop_group_offload_refresh(mlxsw_sp, nh_grp); 8c5a5b9b9185e5 Ido Schimmel 2020-01-14 3629 a7ff87acd995e3 Jiri Pirko 2016-07-05 3630 if (!old_adj_index_valid) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3631 /* The trap was set for fib entries, so we have to call a7ff87acd995e3 Jiri Pirko 2016-07-05 3632 * fib entry update to unset it and use adjacency index. a7ff87acd995e3 Jiri Pirko 2016-07-05 3633 */ a7ff87acd995e3 Jiri Pirko 2016-07-05 3634 err = mlxsw_sp_nexthop_fib_entries_update(mlxsw_sp, nh_grp); a7ff87acd995e3 Jiri Pirko 2016-07-05 3635 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3636 dev_warn(mlxsw_sp->bus_info->dev, "Failed to add adjacency index to fib entries.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3637 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3638 } e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3639 return 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3640 } a7ff87acd995e3 Jiri Pirko 2016-07-05 3641 a7ff87acd995e3 Jiri Pirko 2016-07-05 3642 err = mlxsw_sp_adj_index_mass_update(mlxsw_sp, nh_grp, a7ff87acd995e3 Jiri Pirko 2016-07-05 3643 old_adj_index, old_ecmp_size); 4b6b18692aec20 Jiri Pirko 2018-07-08 3644 mlxsw_sp_kvdl_free(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 0304c00546fce7 Jiri Pirko 2018-07-08 3645 old_ecmp_size, old_adj_index); a7ff87acd995e3 Jiri Pirko 2016-07-05 3646 if (err) { a7ff87acd995e3 Jiri Pirko 2016-07-05 3647 dev_warn(mlxsw_sp->bus_info->dev, "Failed to mass-update adjacency index for nexthop group.\n"); a7ff87acd995e3 Jiri Pirko 2016-07-05 3648 goto set_trap; a7ff87acd995e3 Jiri Pirko 2016-07-05 3649 } 77d964e66cfad0 Ido Schimmel 2017-08-02 3650 e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3651 return 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3652 a7ff87acd995e3 Jiri Pirko 2016-07-05 3653 set_trap: 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3654 old_adj_index_valid = nhgi->adj_index_valid; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3655 nhgi->adj_index_valid = 0; 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3656 for (i = 0; i < nhgi->count; i++) { 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3657 nh = &nhgi->nexthops[i]; a7ff87acd995e3 Jiri Pirko 2016-07-05 3658 nh->offloaded = 0; a7ff87acd995e3 Jiri Pirko 2016-07-05 3659 } e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3660 err2 = mlxsw_sp_nexthop_fib_entries_update(mlxsw_sp, nh_grp); e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3661 if (err2) a7ff87acd995e3 Jiri Pirko 2016-07-05 3662 dev_warn(mlxsw_sp->bus_info->dev, "Failed to set traps for fib entries.\n"); 8c5a5b9b9185e5 Ido Schimmel 2020-01-14 3663 mlxsw_sp_nexthop_group_offload_refresh(mlxsw_sp, nh_grp); a7ff87acd995e3 Jiri Pirko 2016-07-05 3664 if (old_adj_index_valid) 4b6b18692aec20 Jiri Pirko 2018-07-08 3665 mlxsw_sp_kvdl_free(mlxsw_sp, MLXSW_SP_KVDL_ENTRY_TYPE_ADJ, 7f7a417e6a11d7 Ido Schimmel 2020-11-13 3666 nhgi->ecmp_size, nhgi->adj_index); e3ddfb45bacdc6 Ido Schimmel 2020-11-17 3667 return err; a7ff87acd995e3 Jiri Pirko 2016-07-05 3668 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org