提交 56918b6b 编写于 作者: I Ido Schimmel 提交者: David S. Miller

mlxsw: spectrum: Don't count on FID being present

Not all vPorts will have FIDs assigned to them, so make sure functions
first test for FID presence.
Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
Signed-off-by: NJiri Pirko <jiri@mellanox.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 41b996cc
...@@ -3323,7 +3323,9 @@ mlxsw_sp_port_master_bridge_check(const struct mlxsw_sp_port *mlxsw_sp_port, ...@@ -3323,7 +3323,9 @@ mlxsw_sp_port_master_bridge_check(const struct mlxsw_sp_port *mlxsw_sp_port,
list_for_each_entry(mlxsw_sp_vport, &mlxsw_sp_port->vports_list, list_for_each_entry(mlxsw_sp_vport, &mlxsw_sp_port->vports_list,
vport.list) { vport.list) {
if (mlxsw_sp_vport_br_get(mlxsw_sp_vport) == br_dev) struct net_device *dev = mlxsw_sp_vport_br_get(mlxsw_sp_vport);
if (dev && dev == br_dev)
return false; return false;
} }
......
...@@ -290,7 +290,7 @@ mlxsw_sp_vport_br_get(const struct mlxsw_sp_port *mlxsw_sp_vport) ...@@ -290,7 +290,7 @@ mlxsw_sp_vport_br_get(const struct mlxsw_sp_port *mlxsw_sp_vport)
{ {
struct mlxsw_sp_fid *f = mlxsw_sp_vport_fid_get(mlxsw_sp_vport); struct mlxsw_sp_fid *f = mlxsw_sp_vport_fid_get(mlxsw_sp_vport);
return f->dev; return f ? f->dev : NULL;
} }
static inline struct mlxsw_sp_port * static inline struct mlxsw_sp_port *
...@@ -317,7 +317,7 @@ mlxsw_sp_port_vport_find_by_fid(const struct mlxsw_sp_port *mlxsw_sp_port, ...@@ -317,7 +317,7 @@ mlxsw_sp_port_vport_find_by_fid(const struct mlxsw_sp_port *mlxsw_sp_port,
vport.list) { vport.list) {
struct mlxsw_sp_fid *f = mlxsw_sp_vport_fid_get(mlxsw_sp_vport); struct mlxsw_sp_fid *f = mlxsw_sp_vport_fid_get(mlxsw_sp_vport);
if (f->fid == fid) if (f && f->fid == fid)
return mlxsw_sp_vport; return mlxsw_sp_vport;
} }
......
...@@ -55,10 +55,10 @@ ...@@ -55,10 +55,10 @@
static u16 mlxsw_sp_port_vid_to_fid_get(struct mlxsw_sp_port *mlxsw_sp_port, static u16 mlxsw_sp_port_vid_to_fid_get(struct mlxsw_sp_port *mlxsw_sp_port,
u16 vid) u16 vid)
{ {
struct mlxsw_sp_fid *f = mlxsw_sp_vport_fid_get(mlxsw_sp_port);
u16 fid = vid; u16 fid = vid;
if (mlxsw_sp_port_is_vport(mlxsw_sp_port)) fid = f ? f->fid : fid;
fid = mlxsw_sp_vport_fid_get(mlxsw_sp_port)->fid;
if (!fid) if (!fid)
fid = mlxsw_sp_port->pvid; fid = mlxsw_sp_port->pvid;
...@@ -1196,7 +1196,8 @@ static int mlxsw_sp_port_fdb_dump(struct mlxsw_sp_port *mlxsw_sp_port, ...@@ -1196,7 +1196,8 @@ static int mlxsw_sp_port_fdb_dump(struct mlxsw_sp_port *mlxsw_sp_port,
{ {
struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
struct mlxsw_sp_port *tmp; struct mlxsw_sp_port *tmp;
u16 vport_fid = 0; struct mlxsw_sp_fid *f;
u16 vport_fid;
char *sfd_pl; char *sfd_pl;
char mac[ETH_ALEN]; char mac[ETH_ALEN];
u16 fid; u16 fid;
...@@ -1211,8 +1212,8 @@ static int mlxsw_sp_port_fdb_dump(struct mlxsw_sp_port *mlxsw_sp_port, ...@@ -1211,8 +1212,8 @@ static int mlxsw_sp_port_fdb_dump(struct mlxsw_sp_port *mlxsw_sp_port,
if (!sfd_pl) if (!sfd_pl)
return -ENOMEM; return -ENOMEM;
if (mlxsw_sp_port_is_vport(mlxsw_sp_port)) f = mlxsw_sp_vport_fid_get(mlxsw_sp_port);
vport_fid = mlxsw_sp_vport_fid_get(mlxsw_sp_port)->fid; vport_fid = f ? f->fid : 0;
mlxsw_reg_sfd_pack(sfd_pl, MLXSW_REG_SFD_OP_QUERY_DUMP, 0); mlxsw_reg_sfd_pack(sfd_pl, MLXSW_REG_SFD_OP_QUERY_DUMP, 0);
do { do {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册