@@ -108,8 +108,18 @@ static const struct counter_desc vport_rep_stats_desc[] = {
108
108
tx_vport_rdma_multicast_bytes ) },
109
109
};
110
110
111
+ static const struct counter_desc vport_rep_loopback_stats_desc [] = {
112
+ { MLX5E_DECLARE_STAT (struct mlx5e_rep_stats ,
113
+ vport_loopback_packets ) },
114
+ { MLX5E_DECLARE_STAT (struct mlx5e_rep_stats ,
115
+ vport_loopback_bytes ) },
116
+ };
117
+
111
118
#define NUM_VPORT_REP_SW_COUNTERS ARRAY_SIZE(sw_rep_stats_desc)
112
119
#define NUM_VPORT_REP_HW_COUNTERS ARRAY_SIZE(vport_rep_stats_desc)
120
+ #define NUM_VPORT_REP_LOOPBACK_COUNTERS (dev ) \
121
+ (MLX5_CAP_GEN(dev, vport_counter_local_loopback) ? \
122
+ ARRAY_SIZE(vport_rep_loopback_stats_desc) : 0)
113
123
114
124
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS (sw_rep )
115
125
{
@@ -153,7 +163,8 @@ static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(sw_rep)
153
163
154
164
static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS (vport_rep )
155
165
{
156
- return NUM_VPORT_REP_HW_COUNTERS ;
166
+ return NUM_VPORT_REP_HW_COUNTERS +
167
+ NUM_VPORT_REP_LOOPBACK_COUNTERS (priv -> mdev );
157
168
}
158
169
159
170
static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS (vport_rep )
@@ -162,6 +173,9 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(vport_rep)
162
173
163
174
for (i = 0 ; i < NUM_VPORT_REP_HW_COUNTERS ; i ++ )
164
175
strcpy (data + (idx ++ ) * ETH_GSTRING_LEN , vport_rep_stats_desc [i ].format );
176
+ for (i = 0 ; i < NUM_VPORT_REP_LOOPBACK_COUNTERS (priv -> mdev ); i ++ )
177
+ strcpy (data + (idx ++ ) * ETH_GSTRING_LEN ,
178
+ vport_rep_loopback_stats_desc [i ].format );
165
179
return idx ;
166
180
}
167
181
@@ -172,6 +186,9 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(vport_rep)
172
186
for (i = 0 ; i < NUM_VPORT_REP_HW_COUNTERS ; i ++ )
173
187
data [idx ++ ] = MLX5E_READ_CTR64_CPU (& priv -> stats .rep_stats ,
174
188
vport_rep_stats_desc , i );
189
+ for (i = 0 ; i < NUM_VPORT_REP_LOOPBACK_COUNTERS (priv -> mdev ); i ++ )
190
+ data [idx ++ ] = MLX5E_READ_CTR64_CPU (& priv -> stats .rep_stats ,
191
+ vport_rep_loopback_stats_desc , i );
175
192
return idx ;
176
193
}
177
194
@@ -243,6 +260,13 @@ static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(vport_rep)
243
260
rep_stats -> tx_vport_rdma_multicast_bytes =
244
261
MLX5_GET_CTR (out , received_ib_multicast .octets );
245
262
263
+ if (MLX5_CAP_GEN (priv -> mdev , vport_counter_local_loopback )) {
264
+ rep_stats -> vport_loopback_packets =
265
+ MLX5_GET_CTR (out , local_loopback .packets );
266
+ rep_stats -> vport_loopback_bytes =
267
+ MLX5_GET_CTR (out , local_loopback .octets );
268
+ }
269
+
246
270
out :
247
271
kvfree (out );
248
272
}
0 commit comments