lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20170526063740.8909-11-jiri@resnulli.us> Date: Fri, 26 May 2017 08:37:32 +0200 From: Jiri Pirko <jiri@...nulli.us> To: netdev@...r.kernel.org Cc: davem@...emloft.net, idosch@...lanox.com, mlxsw@...lanox.com, stephen@...workplumber.org, nikolay@...ulusnetworks.com Subject: [patch net-next 10/18] mlxsw: spectrum_router: Allocate FID prior to RIF configuration From: Ido Schimmel <idosch@...lanox.com> The following patches are going to re-arrange the FID and RIF code, so that when the RIF is configured to the device based on the information present in the RIF struct (which points to a FID). For this reason, move the FID allocation to just before the RIF configuration. Signed-off-by: Ido Schimmel <idosch@...lanox.com> Signed-off-by: Jiri Pirko <jiri@...lanox.com> --- .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 25 +++++++++++----------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index 7f1054f..c8d136c 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c @@ -3018,26 +3018,26 @@ mlxsw_sp_port_vlan_rif_sp_create(struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan, if (rif_index == MLXSW_SP_INVALID_INDEX_RIF) return ERR_PTR(-ERANGE); + fid = mlxsw_sp_rif_sp_to_fid(rif_index); + f = mlxsw_sp_rfid_alloc(fid, l3_dev); + if (!f) + return ERR_PTR(-ENOMEM); + vr = mlxsw_sp_vr_get(mlxsw_sp, tb_id ? : RT_TABLE_MAIN); - if (IS_ERR(vr)) - return ERR_CAST(vr); + if (IS_ERR(vr)) { + err = PTR_ERR(vr); + goto err_vr_get; + } err = mlxsw_sp_port_vlan_rif_sp_op(mlxsw_sp_port_vlan, vr->id, l3_dev, rif_index, true); if (err) goto err_port_vlan_rif_sp_op; - fid = mlxsw_sp_rif_sp_to_fid(rif_index); err = mlxsw_sp_rif_fdb_op(mlxsw_sp, l3_dev->dev_addr, fid, true); if (err) goto err_rif_fdb_op; - f = mlxsw_sp_rfid_alloc(fid, l3_dev); - if (!f) { - err = -ENOMEM; - goto err_rfid_alloc; - } - rif = mlxsw_sp_rif_alloc(rif_index, vr->id, l3_dev, f); if (!rif) { err = -ENOMEM; @@ -3060,14 +3060,14 @@ mlxsw_sp_port_vlan_rif_sp_create(struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan, return rif; err_rif_alloc: - kfree(f); -err_rfid_alloc: mlxsw_sp_rif_fdb_op(mlxsw_sp, l3_dev->dev_addr, fid, false); err_rif_fdb_op: mlxsw_sp_port_vlan_rif_sp_op(mlxsw_sp_port_vlan, vr->id, l3_dev, rif_index, false); err_port_vlan_rif_sp_op: mlxsw_sp_vr_put(vr); +err_vr_get: + kfree(f); return ERR_PTR(err); } @@ -3094,14 +3094,13 @@ mlxsw_sp_port_vlan_rif_sp_destroy(struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan, kfree(rif); - kfree(f); - mlxsw_sp_rif_fdb_op(mlxsw_sp, l3_dev->dev_addr, fid, false); mlxsw_sp_port_vlan_rif_sp_op(mlxsw_sp_port_vlan, vr->id, l3_dev, rif_index, false); mlxsw_sp_vr_put(vr); + kfree(f); } static int -- 2.9.3
Powered by blists - more mailing lists