mlxsw: spectrum_buffers: Keep shared buffer size in mlxsw_sp_sb
authorPetr Machata <petrm@mellanox.com>
Thu, 20 Sep 2018 06:21:27 +0000 (09:21 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 20 Sep 2018 14:46:01 +0000 (07:46 -0700)
Entities of infinite size will be reported as if they had the maximum
size allowed by the chip. To that end, keep track of maximum shared
buffer size in mlxsw_sp->sb.

Signed-off-by: Petr Machata <petrm@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c

index 7f29000c10a10defeece3f85fcda96a2131d0874..81f3af6e80aff741747b1a21ec7b88c9d26a5320 100644 (file)
@@ -68,6 +68,7 @@ struct mlxsw_sp_sb {
        struct mlxsw_sp_sb_pr prs[MLXSW_SP_SB_POOL_DESS_LEN];
        struct mlxsw_sp_sb_port *ports;
        u32 cell_size;
+       u64 sb_size;
 };
 
 u32 mlxsw_sp_cells_bytes(const struct mlxsw_sp *mlxsw_sp, u32 cells)
@@ -585,7 +586,6 @@ int mlxsw_sp_buffers_init(struct mlxsw_sp *mlxsw_sp)
 {
        u16 ing_pool_count;
        u16 eg_pool_count;
-       u64 sb_size;
        int err;
 
        if (!MLXSW_CORE_RES_VALID(mlxsw_sp->core, CELL_SIZE))
@@ -593,12 +593,13 @@ int mlxsw_sp_buffers_init(struct mlxsw_sp *mlxsw_sp)
 
        if (!MLXSW_CORE_RES_VALID(mlxsw_sp->core, MAX_BUFFER_SIZE))
                return -EIO;
-       sb_size = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_BUFFER_SIZE);
 
        mlxsw_sp->sb = kzalloc(sizeof(*mlxsw_sp->sb), GFP_KERNEL);
        if (!mlxsw_sp->sb)
                return -ENOMEM;
        mlxsw_sp->sb->cell_size = MLXSW_CORE_RES_GET(mlxsw_sp->core, CELL_SIZE);
+       mlxsw_sp->sb->sb_size = MLXSW_CORE_RES_GET(mlxsw_sp->core,
+                                                  MAX_BUFFER_SIZE);
 
        err = mlxsw_sp_sb_ports_init(mlxsw_sp);
        if (err)
@@ -614,7 +615,8 @@ int mlxsw_sp_buffers_init(struct mlxsw_sp *mlxsw_sp)
        if (err)
                goto err_sb_mms_init;
        mlxsw_sp_pool_count(&ing_pool_count, &eg_pool_count);
-       err = devlink_sb_register(priv_to_devlink(mlxsw_sp->core), 0, sb_size,
+       err = devlink_sb_register(priv_to_devlink(mlxsw_sp->core), 0,
+                                 mlxsw_sp->sb->sb_size,
                                  ing_pool_count,
                                  eg_pool_count,
                                  MLXSW_SP_SB_ING_TC_COUNT,