mirror of https://gitee.com/openkylin/linux.git
net/mlx5e: IPSec, Expose IPsec HW stat only for supporting HW
The current HW counters are supported only by Innova, split the ipsec stats group into two groups, one for HW and one for SW. And expose the HW counters to ethtool only if Innova HW is used for IPsec offload. Signed-off-by: Raed Salem <raeds@mellanox.com> Reviewed-by: Huy Nguyen <huyn@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
1dbd51d0a7
commit
0aab3e1b04
|
@ -109,11 +109,6 @@ int mlx5e_ipsec_init(struct mlx5e_priv *priv);
|
|||
void mlx5e_ipsec_cleanup(struct mlx5e_priv *priv);
|
||||
void mlx5e_ipsec_build_netdev(struct mlx5e_priv *priv);
|
||||
|
||||
int mlx5e_ipsec_get_count(struct mlx5e_priv *priv);
|
||||
int mlx5e_ipsec_get_strings(struct mlx5e_priv *priv, uint8_t *data);
|
||||
void mlx5e_ipsec_update_stats(struct mlx5e_priv *priv);
|
||||
int mlx5e_ipsec_get_stats(struct mlx5e_priv *priv, u64 *data);
|
||||
|
||||
struct xfrm_state *mlx5e_ipsec_sadb_rx_lookup(struct mlx5e_ipsec *dev,
|
||||
unsigned int handle);
|
||||
|
||||
|
@ -136,26 +131,6 @@ static inline void mlx5e_ipsec_build_netdev(struct mlx5e_priv *priv)
|
|||
{
|
||||
}
|
||||
|
||||
static inline int mlx5e_ipsec_get_count(struct mlx5e_priv *priv)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int mlx5e_ipsec_get_strings(struct mlx5e_priv *priv,
|
||||
uint8_t *data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void mlx5e_ipsec_update_stats(struct mlx5e_priv *priv)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int mlx5e_ipsec_get_stats(struct mlx5e_priv *priv, u64 *data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __MLX5E_IPSEC_H__ */
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "accel/ipsec.h"
|
||||
#include "fpga/sdk.h"
|
||||
#include "en_accel/ipsec.h"
|
||||
#include "fpga/ipsec.h"
|
||||
|
||||
static const struct counter_desc mlx5e_ipsec_hw_stats_desc[] = {
|
||||
{ MLX5E_DECLARE_STAT(struct mlx5e_ipsec_stats, ipsec_dec_in_packets) },
|
||||
|
@ -73,61 +74,74 @@ static const struct counter_desc mlx5e_ipsec_sw_stats_desc[] = {
|
|||
#define NUM_IPSEC_HW_COUNTERS ARRAY_SIZE(mlx5e_ipsec_hw_stats_desc)
|
||||
#define NUM_IPSEC_SW_COUNTERS ARRAY_SIZE(mlx5e_ipsec_sw_stats_desc)
|
||||
|
||||
#define NUM_IPSEC_COUNTERS (NUM_IPSEC_HW_COUNTERS + NUM_IPSEC_SW_COUNTERS)
|
||||
|
||||
int mlx5e_ipsec_get_count(struct mlx5e_priv *priv)
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(ipsec_sw)
|
||||
{
|
||||
if (!priv->ipsec)
|
||||
return 0;
|
||||
|
||||
return NUM_IPSEC_COUNTERS;
|
||||
return NUM_IPSEC_SW_COUNTERS;
|
||||
}
|
||||
|
||||
int mlx5e_ipsec_get_strings(struct mlx5e_priv *priv, uint8_t *data)
|
||||
static inline MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(ipsec_sw) {}
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(ipsec_sw)
|
||||
{
|
||||
unsigned int i, idx = 0;
|
||||
unsigned int i;
|
||||
|
||||
if (!priv->ipsec)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < NUM_IPSEC_HW_COUNTERS; i++)
|
||||
strcpy(data + (idx++) * ETH_GSTRING_LEN,
|
||||
mlx5e_ipsec_hw_stats_desc[i].format);
|
||||
|
||||
for (i = 0; i < NUM_IPSEC_SW_COUNTERS; i++)
|
||||
strcpy(data + (idx++) * ETH_GSTRING_LEN,
|
||||
mlx5e_ipsec_sw_stats_desc[i].format);
|
||||
|
||||
return NUM_IPSEC_COUNTERS;
|
||||
if (priv->ipsec)
|
||||
for (i = 0; i < NUM_IPSEC_SW_COUNTERS; i++)
|
||||
strcpy(data + (idx++) * ETH_GSTRING_LEN,
|
||||
mlx5e_ipsec_sw_stats_desc[i].format);
|
||||
return idx;
|
||||
}
|
||||
|
||||
void mlx5e_ipsec_update_stats(struct mlx5e_priv *priv)
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(ipsec_sw)
|
||||
{
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
if (!priv->ipsec)
|
||||
return;
|
||||
if (priv->ipsec)
|
||||
for (i = 0; i < NUM_IPSEC_SW_COUNTERS; i++)
|
||||
data[idx++] = MLX5E_READ_CTR_ATOMIC64(&priv->ipsec->sw_stats,
|
||||
mlx5e_ipsec_sw_stats_desc, i);
|
||||
return idx;
|
||||
}
|
||||
|
||||
ret = mlx5_accel_ipsec_counters_read(priv->mdev, (u64 *)&priv->ipsec->stats,
|
||||
NUM_IPSEC_HW_COUNTERS);
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(ipsec_hw)
|
||||
{
|
||||
return (mlx5_fpga_ipsec_device_caps(priv->mdev)) ? NUM_IPSEC_HW_COUNTERS : 0;
|
||||
}
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(ipsec_hw)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (priv->ipsec)
|
||||
ret = mlx5_accel_ipsec_counters_read(priv->mdev, (u64 *)&priv->ipsec->stats,
|
||||
NUM_IPSEC_HW_COUNTERS);
|
||||
if (ret)
|
||||
memset(&priv->ipsec->stats, 0, sizeof(priv->ipsec->stats));
|
||||
}
|
||||
|
||||
int mlx5e_ipsec_get_stats(struct mlx5e_priv *priv, u64 *data)
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(ipsec_hw)
|
||||
{
|
||||
int i, idx = 0;
|
||||
unsigned int i;
|
||||
|
||||
if (!priv->ipsec)
|
||||
return 0;
|
||||
if (priv->ipsec && mlx5_fpga_ipsec_device_caps(priv->mdev))
|
||||
for (i = 0; i < NUM_IPSEC_HW_COUNTERS; i++)
|
||||
strcpy(data + (idx++) * ETH_GSTRING_LEN,
|
||||
mlx5e_ipsec_hw_stats_desc[i].format);
|
||||
|
||||
for (i = 0; i < NUM_IPSEC_HW_COUNTERS; i++)
|
||||
data[idx++] = MLX5E_READ_CTR64_CPU(&priv->ipsec->stats,
|
||||
mlx5e_ipsec_hw_stats_desc, i);
|
||||
|
||||
for (i = 0; i < NUM_IPSEC_SW_COUNTERS; i++)
|
||||
data[idx++] = MLX5E_READ_CTR_ATOMIC64(&priv->ipsec->sw_stats,
|
||||
mlx5e_ipsec_sw_stats_desc, i);
|
||||
|
||||
return NUM_IPSEC_COUNTERS;
|
||||
return idx;
|
||||
}
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(ipsec_hw)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (priv->ipsec && mlx5_fpga_ipsec_device_caps(priv->mdev))
|
||||
for (i = 0; i < NUM_IPSEC_HW_COUNTERS; i++)
|
||||
data[idx++] = MLX5E_READ_CTR64_CPU(&priv->ipsec->stats,
|
||||
mlx5e_ipsec_hw_stats_desc,
|
||||
i);
|
||||
return idx;
|
||||
}
|
||||
|
||||
MLX5E_DEFINE_STATS_GRP(ipsec_sw, 0);
|
||||
MLX5E_DEFINE_STATS_GRP(ipsec_hw, 0);
|
||||
|
|
|
@ -32,8 +32,8 @@
|
|||
|
||||
#include "lib/mlx5.h"
|
||||
#include "en.h"
|
||||
#include "en_accel/ipsec.h"
|
||||
#include "en_accel/tls.h"
|
||||
#include "en_accel/en_accel.h"
|
||||
|
||||
static unsigned int stats_grps_num(struct mlx5e_priv *priv)
|
||||
{
|
||||
|
@ -1424,27 +1424,6 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(pme)
|
|||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(pme) { return; }
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(ipsec)
|
||||
{
|
||||
return mlx5e_ipsec_get_count(priv);
|
||||
}
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(ipsec)
|
||||
{
|
||||
return idx + mlx5e_ipsec_get_strings(priv,
|
||||
data + idx * ETH_GSTRING_LEN);
|
||||
}
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(ipsec)
|
||||
{
|
||||
return idx + mlx5e_ipsec_get_stats(priv, data + idx);
|
||||
}
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(ipsec)
|
||||
{
|
||||
mlx5e_ipsec_update_stats(priv);
|
||||
}
|
||||
|
||||
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(tls)
|
||||
{
|
||||
return mlx5e_tls_get_count(priv);
|
||||
|
@ -1714,7 +1693,6 @@ MLX5E_DEFINE_STATS_GRP(pme, 0);
|
|||
MLX5E_DEFINE_STATS_GRP(channels, 0);
|
||||
MLX5E_DEFINE_STATS_GRP(per_port_buff_congest, 0);
|
||||
MLX5E_DEFINE_STATS_GRP(eth_ext, 0);
|
||||
static MLX5E_DEFINE_STATS_GRP(ipsec, 0);
|
||||
static MLX5E_DEFINE_STATS_GRP(tls, 0);
|
||||
|
||||
/* The stats groups order is opposite to the update_stats() order calls */
|
||||
|
@ -1731,7 +1709,10 @@ mlx5e_stats_grp_t mlx5e_nic_stats_grps[] = {
|
|||
&MLX5E_STATS_GRP(pcie),
|
||||
&MLX5E_STATS_GRP(per_prio),
|
||||
&MLX5E_STATS_GRP(pme),
|
||||
&MLX5E_STATS_GRP(ipsec),
|
||||
#ifdef CONFIG_MLX5_EN_IPSEC
|
||||
&MLX5E_STATS_GRP(ipsec_sw),
|
||||
&MLX5E_STATS_GRP(ipsec_hw),
|
||||
#endif
|
||||
&MLX5E_STATS_GRP(tls),
|
||||
&MLX5E_STATS_GRP(channels),
|
||||
&MLX5E_STATS_GRP(per_port_buff_congest),
|
||||
|
|
|
@ -390,5 +390,7 @@ extern MLX5E_DECLARE_STATS_GRP(per_prio);
|
|||
extern MLX5E_DECLARE_STATS_GRP(pme);
|
||||
extern MLX5E_DECLARE_STATS_GRP(channels);
|
||||
extern MLX5E_DECLARE_STATS_GRP(per_port_buff_congest);
|
||||
extern MLX5E_DECLARE_STATS_GRP(ipsec_hw);
|
||||
extern MLX5E_DECLARE_STATS_GRP(ipsec_sw);
|
||||
|
||||
#endif /* __MLX5_EN_STATS_H__ */
|
||||
|
|
Loading…
Reference in New Issue