@@ -707,112 +707,105 @@ static void bnxt_get_ethtool_stats(struct net_device *dev,
707707static void bnxt_get_strings (struct net_device * dev , u32 stringset , u8 * buf )
708708{
709709 struct bnxt * bp = netdev_priv (dev );
710- static const char * const * str ;
711710 u32 i , j , num_str ;
711+ const char * str ;
712712
713713 switch (stringset ) {
714714 case ETH_SS_STATS :
715715 for (i = 0 ; i < bp -> cp_nr_rings ; i ++ ) {
716- if (is_rx_ring (bp , i )) {
717- num_str = NUM_RING_RX_HW_STATS ;
718- for (j = 0 ; j < num_str ; j ++ ) {
719- sprintf (buf , "[%d]: %s" , i ,
720- bnxt_ring_rx_stats_str [j ]);
721- buf += ETH_GSTRING_LEN ;
716+ if (is_rx_ring (bp , i ))
717+ for (j = 0 ; j < NUM_RING_RX_HW_STATS ; j ++ ) {
718+ str = bnxt_ring_rx_stats_str [j ];
719+ ethtool_sprintf (& buf , "[%d]: %s" , i ,
720+ str );
722721 }
723- }
724- if (is_tx_ring (bp , i )) {
725- num_str = NUM_RING_TX_HW_STATS ;
726- for (j = 0 ; j < num_str ; j ++ ) {
727- sprintf (buf , "[%d]: %s" , i ,
728- bnxt_ring_tx_stats_str [j ]);
729- buf += ETH_GSTRING_LEN ;
722+ if (is_tx_ring (bp , i ))
723+ for (j = 0 ; j < NUM_RING_TX_HW_STATS ; j ++ ) {
724+ str = bnxt_ring_tx_stats_str [j ];
725+ ethtool_sprintf (& buf , "[%d]: %s" , i ,
726+ str );
730727 }
731- }
732728 num_str = bnxt_get_num_tpa_ring_stats (bp );
733729 if (!num_str || !is_rx_ring (bp , i ))
734730 goto skip_tpa_stats ;
735731
736732 if (bp -> max_tpa_v2 )
737- str = bnxt_ring_tpa2_stats_str ;
733+ for (j = 0 ; j < num_str ; j ++ ) {
734+ str = bnxt_ring_tpa2_stats_str [j ];
735+ ethtool_sprintf (& buf , "[%d]: %s" , i ,
736+ str );
737+ }
738738 else
739- str = bnxt_ring_tpa_stats_str ;
740-
741- for (j = 0 ; j < num_str ; j ++ ) {
742- sprintf (buf , "[%d]: %s" , i , str [j ]);
743- buf += ETH_GSTRING_LEN ;
744- }
745- skip_tpa_stats :
746- if (is_rx_ring (bp , i )) {
747- num_str = NUM_RING_RX_SW_STATS ;
748739 for (j = 0 ; j < num_str ; j ++ ) {
749- sprintf ( buf , "[%d]: %s" , i ,
750- bnxt_rx_sw_stats_str [ j ]);
751- buf += ETH_GSTRING_LEN ;
740+ str = bnxt_ring_tpa_stats_str [ j ];
741+ ethtool_sprintf ( & buf , "[%d]: %s" , i ,
742+ str ) ;
752743 }
744+ skip_tpa_stats :
745+ if (is_rx_ring (bp , i ))
746+ for (j = 0 ; j < NUM_RING_RX_SW_STATS ; j ++ ) {
747+ str = bnxt_rx_sw_stats_str [j ];
748+ ethtool_sprintf (& buf , "[%d]: %s" , i ,
749+ str );
750+ }
751+ for (j = 0 ; j < NUM_RING_CMN_SW_STATS ; j ++ ) {
752+ str = bnxt_cmn_sw_stats_str [j ];
753+ ethtool_sprintf (& buf , "[%d]: %s" , i , str );
753754 }
754- num_str = NUM_RING_CMN_SW_STATS ;
755- for (j = 0 ; j < num_str ; j ++ ) {
756- sprintf (buf , "[%d]: %s" , i ,
757- bnxt_cmn_sw_stats_str [j ]);
758- buf += ETH_GSTRING_LEN ;
759- }
760- }
761- for (i = 0 ; i < BNXT_NUM_RING_ERR_STATS ; i ++ ) {
762- strscpy (buf , bnxt_ring_err_stats_arr [i ], ETH_GSTRING_LEN );
763- buf += ETH_GSTRING_LEN ;
764755 }
756+ for (i = 0 ; i < BNXT_NUM_RING_ERR_STATS ; i ++ )
757+ ethtool_puts (& buf , bnxt_ring_err_stats_arr [i ]);
765758
766- if (bp -> flags & BNXT_FLAG_PORT_STATS ) {
759+ if (bp -> flags & BNXT_FLAG_PORT_STATS )
767760 for (i = 0 ; i < BNXT_NUM_PORT_STATS ; i ++ ) {
768- strcpy ( buf , bnxt_port_stats_arr [i ].string ) ;
769- buf += ETH_GSTRING_LEN ;
761+ str = bnxt_port_stats_arr [i ].string ;
762+ ethtool_puts ( & buf , str ) ;
770763 }
771- }
764+
772765 if (bp -> flags & BNXT_FLAG_PORT_STATS_EXT ) {
773766 u32 len ;
774767
775768 len = min_t (u32 , bp -> fw_rx_stats_ext_size ,
776769 ARRAY_SIZE (bnxt_port_stats_ext_arr ));
777770 for (i = 0 ; i < len ; i ++ ) {
778- strcpy ( buf , bnxt_port_stats_ext_arr [i ].string ) ;
779- buf += ETH_GSTRING_LEN ;
771+ str = bnxt_port_stats_ext_arr [i ].string ;
772+ ethtool_puts ( & buf , str ) ;
780773 }
774+
781775 len = min_t (u32 , bp -> fw_tx_stats_ext_size ,
782776 ARRAY_SIZE (bnxt_tx_port_stats_ext_arr ));
783777 for (i = 0 ; i < len ; i ++ ) {
784- strcpy (buf ,
785- bnxt_tx_port_stats_ext_arr [i ].string );
786- buf += ETH_GSTRING_LEN ;
778+ str = bnxt_tx_port_stats_ext_arr [i ].string ;
779+ ethtool_puts (& buf , str );
787780 }
781+
788782 if (bp -> pri2cos_valid ) {
789783 for (i = 0 ; i < 8 ; i ++ ) {
790- strcpy (buf ,
791- bnxt_rx_bytes_pri_arr [i ].string );
792- buf += ETH_GSTRING_LEN ;
784+ str = bnxt_rx_bytes_pri_arr [i ].string ;
785+ ethtool_puts (& buf , str );
793786 }
787+
794788 for (i = 0 ; i < 8 ; i ++ ) {
795- strcpy (buf ,
796- bnxt_rx_pkts_pri_arr [i ].string );
797- buf += ETH_GSTRING_LEN ;
789+ str = bnxt_rx_pkts_pri_arr [i ].string ;
790+ ethtool_puts (& buf , str );
798791 }
792+
799793 for (i = 0 ; i < 8 ; i ++ ) {
800- strcpy (buf ,
801- bnxt_tx_bytes_pri_arr [i ].string );
802- buf += ETH_GSTRING_LEN ;
794+ str = bnxt_tx_bytes_pri_arr [i ].string ;
795+ ethtool_puts (& buf , str );
803796 }
797+
804798 for (i = 0 ; i < 8 ; i ++ ) {
805- strcpy (buf ,
806- bnxt_tx_pkts_pri_arr [i ].string );
807- buf += ETH_GSTRING_LEN ;
799+ str = bnxt_tx_pkts_pri_arr [i ].string ;
800+ ethtool_puts (& buf , str );
808801 }
809802 }
810803 }
811804 break ;
812805 case ETH_SS_TEST :
813806 if (bp -> num_tests )
814- memcpy ( buf , bp -> test_info -> string ,
815- bp -> num_tests * ETH_GSTRING_LEN );
807+ for ( i = 0 ; i < bp -> num_tests ; i ++ )
808+ ethtool_puts ( & buf , bp -> test_info -> string [ i ] );
816809 break ;
817810 default :
818811 netdev_err (bp -> dev , "bnxt_get_strings invalid request %x\n" ,
0 commit comments