Merge branch 'mlxsw-fixes'
Jiri Pirko says: ==================== mlxsw: Couple of fixes Please, queue-up both for stable. Thanks! ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Коммит
9e37aaa39d
|
@ -231,7 +231,7 @@ mlxsw_sp_span_entry_create(struct mlxsw_sp_port *port)
|
|||
|
||||
span_entry->used = true;
|
||||
span_entry->id = index;
|
||||
span_entry->ref_count = 0;
|
||||
span_entry->ref_count = 1;
|
||||
span_entry->local_port = local_port;
|
||||
return span_entry;
|
||||
}
|
||||
|
@ -270,6 +270,7 @@ static struct mlxsw_sp_span_entry
|
|||
|
||||
span_entry = mlxsw_sp_span_entry_find(port);
|
||||
if (span_entry) {
|
||||
/* Already exists, just take a reference */
|
||||
span_entry->ref_count++;
|
||||
return span_entry;
|
||||
}
|
||||
|
@ -280,6 +281,7 @@ static struct mlxsw_sp_span_entry
|
|||
static int mlxsw_sp_span_entry_put(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_span_entry *span_entry)
|
||||
{
|
||||
WARN_ON(!span_entry->ref_count);
|
||||
if (--span_entry->ref_count == 0)
|
||||
mlxsw_sp_span_entry_destroy(mlxsw_sp, span_entry);
|
||||
return 0;
|
||||
|
|
|
@ -800,6 +800,26 @@ static void mlxsw_sp_router_neigh_rec_process(struct mlxsw_sp *mlxsw_sp,
|
|||
}
|
||||
}
|
||||
|
||||
static bool mlxsw_sp_router_rauhtd_is_full(char *rauhtd_pl)
|
||||
{
|
||||
u8 num_rec, last_rec_index, num_entries;
|
||||
|
||||
num_rec = mlxsw_reg_rauhtd_num_rec_get(rauhtd_pl);
|
||||
last_rec_index = num_rec - 1;
|
||||
|
||||
if (num_rec < MLXSW_REG_RAUHTD_REC_MAX_NUM)
|
||||
return false;
|
||||
if (mlxsw_reg_rauhtd_rec_type_get(rauhtd_pl, last_rec_index) ==
|
||||
MLXSW_REG_RAUHTD_TYPE_IPV6)
|
||||
return true;
|
||||
|
||||
num_entries = mlxsw_reg_rauhtd_ipv4_rec_num_entries_get(rauhtd_pl,
|
||||
last_rec_index);
|
||||
if (++num_entries == MLXSW_REG_RAUHTD_IPV4_ENT_PER_REC)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static int mlxsw_sp_router_neighs_update_rauhtd(struct mlxsw_sp *mlxsw_sp)
|
||||
{
|
||||
char *rauhtd_pl;
|
||||
|
@ -826,7 +846,7 @@ static int mlxsw_sp_router_neighs_update_rauhtd(struct mlxsw_sp *mlxsw_sp)
|
|||
for (i = 0; i < num_rec; i++)
|
||||
mlxsw_sp_router_neigh_rec_process(mlxsw_sp, rauhtd_pl,
|
||||
i);
|
||||
} while (num_rec);
|
||||
} while (mlxsw_sp_router_rauhtd_is_full(rauhtd_pl));
|
||||
rtnl_unlock();
|
||||
|
||||
kfree(rauhtd_pl);
|
||||
|
|
Загрузка…
Ссылка в новой задаче