Skip to content

Commit

Permalink
bna: Update driver to use ethtool_sprintf
Browse files Browse the repository at this point in the history
Update the bnad_get_strings to make use of ethtool_sprintf and avoid
unnecessary line wrapping. To do this we invert the logic for the string
set test and instead exit immediately if we are not working with the stats
strings. In addition the function is broken up into subfunctions for each
area so that we can simply call ethtool_sprintf once for each string in a
given subsection.

Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Alexander Duyck authored and David S. Miller committed Mar 17, 2021
1 parent 3b78b30 commit b82e811
Showing 1 changed file with 105 additions and 161 deletions.
266 changes: 105 additions & 161 deletions drivers/net/ethernet/brocade/bna/bnad_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -524,182 +524,126 @@ bnad_set_pauseparam(struct net_device *netdev,
return 0;
}

static void bnad_get_txf_strings(u8 **string, int f_num)
{
ethtool_sprintf(string, "txf%d_ucast_octets", f_num);
ethtool_sprintf(string, "txf%d_ucast", f_num);
ethtool_sprintf(string, "txf%d_ucast_vlan", f_num);
ethtool_sprintf(string, "txf%d_mcast_octets", f_num);
ethtool_sprintf(string, "txf%d_mcast", f_num);
ethtool_sprintf(string, "txf%d_mcast_vlan", f_num);
ethtool_sprintf(string, "txf%d_bcast_octets", f_num);
ethtool_sprintf(string, "txf%d_bcast", f_num);
ethtool_sprintf(string, "txf%d_bcast_vlan", f_num);
ethtool_sprintf(string, "txf%d_errors", f_num);
ethtool_sprintf(string, "txf%d_filter_vlan", f_num);
ethtool_sprintf(string, "txf%d_filter_mac_sa", f_num);
}

static void bnad_get_rxf_strings(u8 **string, int f_num)
{
ethtool_sprintf(string, "rxf%d_ucast_octets", f_num);
ethtool_sprintf(string, "rxf%d_ucast", f_num);
ethtool_sprintf(string, "rxf%d_ucast_vlan", f_num);
ethtool_sprintf(string, "rxf%d_mcast_octets", f_num);
ethtool_sprintf(string, "rxf%d_mcast", f_num);
ethtool_sprintf(string, "rxf%d_mcast_vlan", f_num);
ethtool_sprintf(string, "rxf%d_bcast_octets", f_num);
ethtool_sprintf(string, "rxf%d_bcast", f_num);
ethtool_sprintf(string, "rxf%d_bcast_vlan", f_num);
ethtool_sprintf(string, "rxf%d_frame_drops", f_num);
}

static void bnad_get_cq_strings(u8 **string, int q_num)
{
ethtool_sprintf(string, "cq%d_producer_index", q_num);
ethtool_sprintf(string, "cq%d_consumer_index", q_num);
ethtool_sprintf(string, "cq%d_hw_producer_index", q_num);
ethtool_sprintf(string, "cq%d_intr", q_num);
ethtool_sprintf(string, "cq%d_poll", q_num);
ethtool_sprintf(string, "cq%d_schedule", q_num);
ethtool_sprintf(string, "cq%d_keep_poll", q_num);
ethtool_sprintf(string, "cq%d_complete", q_num);
}

static void bnad_get_rxq_strings(u8 **string, int q_num)
{
ethtool_sprintf(string, "rxq%d_packets", q_num);
ethtool_sprintf(string, "rxq%d_bytes", q_num);
ethtool_sprintf(string, "rxq%d_packets_with_error", q_num);
ethtool_sprintf(string, "rxq%d_allocbuf_failed", q_num);
ethtool_sprintf(string, "rxq%d_mapbuf_failed", q_num);
ethtool_sprintf(string, "rxq%d_producer_index", q_num);
ethtool_sprintf(string, "rxq%d_consumer_index", q_num);
}

static void bnad_get_txq_strings(u8 **string, int q_num)
{
ethtool_sprintf(string, "txq%d_packets", q_num);
ethtool_sprintf(string, "txq%d_bytes", q_num);
ethtool_sprintf(string, "txq%d_producer_index", q_num);
ethtool_sprintf(string, "txq%d_consumer_index", q_num);
ethtool_sprintf(string, "txq%d_hw_consumer_index", q_num);
}

static void
bnad_get_strings(struct net_device *netdev, u32 stringset, u8 *string)
{
struct bnad *bnad = netdev_priv(netdev);
int i, j, q_num;
u32 bmap;

if (stringset != ETH_SS_STATS)
return;

mutex_lock(&bnad->conf_mutex);

switch (stringset) {
case ETH_SS_STATS:
for (i = 0; i < BNAD_ETHTOOL_STATS_NUM; i++) {
BUG_ON(!(strlen(bnad_net_stats_strings[i]) <
ETH_GSTRING_LEN));
strncpy(string, bnad_net_stats_strings[i],
ETH_GSTRING_LEN);
string += ETH_GSTRING_LEN;
}
bmap = bna_tx_rid_mask(&bnad->bna);
for (i = 0; bmap; i++) {
if (bmap & 1) {
sprintf(string, "txf%d_ucast_octets", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_ucast", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_ucast_vlan", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_mcast_octets", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_mcast", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_mcast_vlan", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_bcast_octets", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_bcast", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_bcast_vlan", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_errors", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_filter_vlan", i);
string += ETH_GSTRING_LEN;
sprintf(string, "txf%d_filter_mac_sa", i);
string += ETH_GSTRING_LEN;
}
bmap >>= 1;
}
for (i = 0; i < BNAD_ETHTOOL_STATS_NUM; i++) {
BUG_ON(!(strlen(bnad_net_stats_strings[i]) < ETH_GSTRING_LEN));
ethtool_sprintf(&string, bnad_net_stats_strings[i]);
}

bmap = bna_rx_rid_mask(&bnad->bna);
for (i = 0; bmap; i++) {
if (bmap & 1) {
sprintf(string, "rxf%d_ucast_octets", i);
string += ETH_GSTRING_LEN;
sprintf(string, "rxf%d_ucast", i);
string += ETH_GSTRING_LEN;
sprintf(string, "rxf%d_ucast_vlan", i);
string += ETH_GSTRING_LEN;
sprintf(string, "rxf%d_mcast_octets", i);
string += ETH_GSTRING_LEN;
sprintf(string, "rxf%d_mcast", i);
string += ETH_GSTRING_LEN;
sprintf(string, "rxf%d_mcast_vlan", i);
string += ETH_GSTRING_LEN;
sprintf(string, "rxf%d_bcast_octets", i);
string += ETH_GSTRING_LEN;
sprintf(string, "rxf%d_bcast", i);
string += ETH_GSTRING_LEN;
sprintf(string, "rxf%d_bcast_vlan", i);
string += ETH_GSTRING_LEN;
sprintf(string, "rxf%d_frame_drops", i);
string += ETH_GSTRING_LEN;
}
bmap >>= 1;
}
bmap = bna_tx_rid_mask(&bnad->bna);
for (i = 0; bmap; i++) {
if (bmap & 1)
bnad_get_txf_strings(&string, i);
bmap >>= 1;
}

q_num = 0;
for (i = 0; i < bnad->num_rx; i++) {
if (!bnad->rx_info[i].rx)
continue;
for (j = 0; j < bnad->num_rxp_per_rx; j++) {
sprintf(string, "cq%d_producer_index", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "cq%d_consumer_index", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "cq%d_hw_producer_index",
q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "cq%d_intr", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "cq%d_poll", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "cq%d_schedule", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "cq%d_keep_poll", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "cq%d_complete", q_num);
string += ETH_GSTRING_LEN;
q_num++;
}
}
bmap = bna_rx_rid_mask(&bnad->bna);
for (i = 0; bmap; i++, bmap >>= 1) {
if (bmap & 1)
bnad_get_rxf_strings(&string, i);
bmap >>= 1;
}

q_num = 0;
for (i = 0; i < bnad->num_rx; i++) {
if (!bnad->rx_info[i].rx)
continue;
for (j = 0; j < bnad->num_rxp_per_rx; j++) {
sprintf(string, "rxq%d_packets", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_bytes", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_packets_with_error",
q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_allocbuf_failed", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_mapbuf_failed", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_producer_index", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_consumer_index", q_num);
string += ETH_GSTRING_LEN;
q_num++;
if (bnad->rx_info[i].rx_ctrl[j].ccb &&
bnad->rx_info[i].rx_ctrl[j].ccb->
rcb[1] &&
bnad->rx_info[i].rx_ctrl[j].ccb->
rcb[1]->rxq) {
sprintf(string, "rxq%d_packets", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_bytes", q_num);
string += ETH_GSTRING_LEN;
sprintf(string,
"rxq%d_packets_with_error", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_allocbuf_failed",
q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_mapbuf_failed",
q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_producer_index",
q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "rxq%d_consumer_index",
q_num);
string += ETH_GSTRING_LEN;
q_num++;
}
}
}
q_num = 0;
for (i = 0; i < bnad->num_rx; i++) {
if (!bnad->rx_info[i].rx)
continue;
for (j = 0; j < bnad->num_rxp_per_rx; j++)
bnad_get_cq_strings(&string, q_num++);
}

q_num = 0;
for (i = 0; i < bnad->num_tx; i++) {
if (!bnad->tx_info[i].tx)
continue;
for (j = 0; j < bnad->num_txq_per_tx; j++) {
sprintf(string, "txq%d_packets", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "txq%d_bytes", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "txq%d_producer_index", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "txq%d_consumer_index", q_num);
string += ETH_GSTRING_LEN;
sprintf(string, "txq%d_hw_consumer_index",
q_num);
string += ETH_GSTRING_LEN;
q_num++;
}
q_num = 0;
for (i = 0; i < bnad->num_rx; i++) {
if (!bnad->rx_info[i].rx)
continue;
for (j = 0; j < bnad->num_rxp_per_rx; j++) {
bnad_get_rxq_strings(&string, q_num++);
if (bnad->rx_info[i].rx_ctrl[j].ccb &&
bnad->rx_info[i].rx_ctrl[j].ccb->rcb[1] &&
bnad->rx_info[i].rx_ctrl[j].ccb->rcb[1]->rxq)
bnad_get_rxq_strings(&string, q_num++);
}
}

break;

default:
break;
q_num = 0;
for (i = 0; i < bnad->num_tx; i++) {
if (!bnad->tx_info[i].tx)
continue;
for (j = 0; j < bnad->num_txq_per_tx; j++)
bnad_get_txq_strings(&string, q_num++);
}

mutex_unlock(&bnad->conf_mutex);
Expand Down

0 comments on commit b82e811

Please sign in to comment.