@@ -120,8 +120,7 @@ static const struct ena_stats ena_stats_ena_com_strings[] = {
120120#define ENA_STATS_ARRAY_TX ARRAY_SIZE(ena_stats_tx_strings)
121121#define ENA_STATS_ARRAY_RX ARRAY_SIZE(ena_stats_rx_strings)
122122#define ENA_STATS_ARRAY_ENA_COM ARRAY_SIZE(ena_stats_ena_com_strings)
123- #define ENA_STATS_ARRAY_ENI (adapter ) \
124- (ARRAY_SIZE(ena_stats_eni_strings) * (adapter)->eni_stats_supported)
123+ #define ENA_STATS_ARRAY_ENI (adapter ) ARRAY_SIZE(ena_stats_eni_strings)
125124
126125static const char ena_priv_flags_strings [][ETH_GSTRING_LEN ] = {
127126#define ENA_PRIV_FLAGS_LPC BIT (0 )
@@ -230,8 +229,9 @@ static void ena_get_ethtool_stats(struct net_device *netdev,
230229 u64 * data )
231230{
232231 struct ena_adapter * adapter = netdev_priv (netdev );
232+ struct ena_com_dev * dev = adapter -> ena_dev ;
233233
234- ena_get_stats (adapter , data , adapter -> eni_stats_supported );
234+ ena_get_stats (adapter , data , ena_com_get_cap ( dev , ENA_ADMIN_ENI_STATS ) );
235235}
236236
237237static int ena_get_sw_stats_count (struct ena_adapter * adapter )
@@ -243,7 +243,9 @@ static int ena_get_sw_stats_count(struct ena_adapter *adapter)
243243
244244static int ena_get_hw_stats_count (struct ena_adapter * adapter )
245245{
246- return ENA_STATS_ARRAY_ENI (adapter );
246+ bool supported = ena_com_get_cap (adapter -> ena_dev , ENA_ADMIN_ENI_STATS );
247+
248+ return ENA_STATS_ARRAY_ENI (adapter ) * supported ;
247249}
248250
249251int ena_get_sset_count (struct net_device * netdev , int sset )
@@ -273,10 +275,10 @@ static void ena_queue_strings(struct ena_adapter *adapter, u8 **data)
273275 for (j = 0 ; j < ENA_STATS_ARRAY_TX ; j ++ ) {
274276 ena_stats = & ena_stats_tx_strings [j ];
275277
276- snprintf ( * data , ETH_GSTRING_LEN ,
277- "queue_%u_%s_%s" , i ,
278- is_xdp ? "xdp_tx" : "tx" , ena_stats -> name );
279- ( * data ) += ETH_GSTRING_LEN ;
278+ ethtool_sprintf ( data ,
279+ "queue_%u_%s_%s" , i ,
280+ is_xdp ? "xdp_tx" : "tx" ,
281+ ena_stats -> name ) ;
280282 }
281283
282284 if (!is_xdp ) {
@@ -286,9 +288,9 @@ static void ena_queue_strings(struct ena_adapter *adapter, u8 **data)
286288 for (j = 0 ; j < ENA_STATS_ARRAY_RX ; j ++ ) {
287289 ena_stats = & ena_stats_rx_strings [j ];
288290
289- snprintf ( * data , ETH_GSTRING_LEN ,
290- "queue_%u_rx_%s" , i , ena_stats -> name );
291- ( * data ) += ETH_GSTRING_LEN ;
291+ ethtool_sprintf ( data ,
292+ "queue_%u_rx_%s" , i ,
293+ ena_stats -> name ) ;
292294 }
293295 }
294296 }
@@ -302,9 +304,8 @@ static void ena_com_dev_strings(u8 **data)
302304 for (i = 0 ; i < ENA_STATS_ARRAY_ENA_COM ; i ++ ) {
303305 ena_stats = & ena_stats_ena_com_strings [i ];
304306
305- snprintf (* data , ETH_GSTRING_LEN ,
306- "ena_admin_q_%s" , ena_stats -> name );
307- (* data ) += ETH_GSTRING_LEN ;
307+ ethtool_sprintf (data ,
308+ "ena_admin_q_%s" , ena_stats -> name );
308309 }
309310}
310311
@@ -317,15 +318,13 @@ static void ena_get_strings(struct ena_adapter *adapter,
317318
318319 for (i = 0 ; i < ENA_STATS_ARRAY_GLOBAL ; i ++ ) {
319320 ena_stats = & ena_stats_global_strings [i ];
320- memcpy (data , ena_stats -> name , ETH_GSTRING_LEN );
321- data += ETH_GSTRING_LEN ;
321+ ethtool_sprintf (& data , ena_stats -> name );
322322 }
323323
324324 if (eni_stats_needed ) {
325325 for (i = 0 ; i < ENA_STATS_ARRAY_ENI (adapter ); i ++ ) {
326326 ena_stats = & ena_stats_eni_strings [i ];
327- memcpy (data , ena_stats -> name , ETH_GSTRING_LEN );
328- data += ETH_GSTRING_LEN ;
327+ ethtool_sprintf (& data , ena_stats -> name );
329328 }
330329 }
331330
@@ -338,10 +337,11 @@ static void ena_get_ethtool_strings(struct net_device *netdev,
338337 u8 * data )
339338{
340339 struct ena_adapter * adapter = netdev_priv (netdev );
340+ struct ena_com_dev * dev = adapter -> ena_dev ;
341341
342342 switch (sset ) {
343343 case ETH_SS_STATS :
344- ena_get_strings (adapter , data , adapter -> eni_stats_supported );
344+ ena_get_strings (adapter , data , ena_com_get_cap ( dev , ENA_ADMIN_ENI_STATS ) );
345345 break ;
346346 case ETH_SS_PRIV_FLAGS :
347347 memcpy (data , ena_priv_flags_strings , sizeof (ena_priv_flags_strings ));
0 commit comments