usbnet: pegasus: Use net_device_stats from struct net_device
authorTobias Klauser <tklauser@distanz.ch>
Fri, 7 Apr 2017 08:17:39 +0000 (10:17 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 7 Apr 2017 14:03:33 +0000 (07:03 -0700)
Instead of using a private copy of struct net_device_stats in struct
pegasus, use stats from struct net_device. Also remove the now
unnecessary .ndo_get_stats function.

Cc: Petko Manolov <petkan@nucleusys.com>
Cc: linux-usb@vger.kernel.org
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/pegasus.c
drivers/net/usb/pegasus.h

index 321e059e13ae698d6173d0b34fd1bd538f04966b..6514c86f043eeb8777354094c4d2fd9f2ffd9c9d 100644 (file)
@@ -501,13 +501,13 @@ static void read_bulk_callback(struct urb *urb)
        if (rx_status & 0x1e) {
                netif_dbg(pegasus, rx_err, net,
                          "RX packet error %x\n", rx_status);
-               pegasus->stats.rx_errors++;
+               net->stats.rx_errors++;
                if (rx_status & 0x06)   /* long or runt */
-                       pegasus->stats.rx_length_errors++;
+                       net->stats.rx_length_errors++;
                if (rx_status & 0x08)
-                       pegasus->stats.rx_crc_errors++;
+                       net->stats.rx_crc_errors++;
                if (rx_status & 0x10)   /* extra bits   */
-                       pegasus->stats.rx_frame_errors++;
+                       net->stats.rx_frame_errors++;
                goto goon;
        }
        if (pegasus->chip == 0x8513) {
@@ -535,8 +535,8 @@ static void read_bulk_callback(struct urb *urb)
        skb_put(pegasus->rx_skb, pkt_len);
        pegasus->rx_skb->protocol = eth_type_trans(pegasus->rx_skb, net);
        netif_rx(pegasus->rx_skb);
-       pegasus->stats.rx_packets++;
-       pegasus->stats.rx_bytes += pkt_len;
+       net->stats.rx_packets++;
+       net->stats.rx_bytes += pkt_len;
 
        if (pegasus->flags & PEGASUS_UNPLUG)
                return;
@@ -670,13 +670,13 @@ static void intr_callback(struct urb *urb)
                /* byte 0 == tx_status1, reg 2B */
                if (d[0] & (TX_UNDERRUN|EXCESSIVE_COL
                                        |LATE_COL|JABBER_TIMEOUT)) {
-                       pegasus->stats.tx_errors++;
+                       net->stats.tx_errors++;
                        if (d[0] & TX_UNDERRUN)
-                               pegasus->stats.tx_fifo_errors++;
+                               net->stats.tx_fifo_errors++;
                        if (d[0] & (EXCESSIVE_COL | JABBER_TIMEOUT))
-                               pegasus->stats.tx_aborted_errors++;
+                               net->stats.tx_aborted_errors++;
                        if (d[0] & LATE_COL)
-                               pegasus->stats.tx_window_errors++;
+                               net->stats.tx_window_errors++;
                }
 
                /* d[5].LINK_STATUS lies on some adapters.
@@ -685,7 +685,7 @@ static void intr_callback(struct urb *urb)
                 */
 
                /* bytes 3-4 == rx_lostpkt, reg 2E/2F */
-               pegasus->stats.rx_missed_errors += ((d[3] & 0x7f) << 8) | d[4];
+               net->stats.rx_missed_errors += ((d[3] & 0x7f) << 8) | d[4];
        }
 
        res = usb_submit_urb(urb, GFP_ATOMIC);
@@ -701,7 +701,7 @@ static void pegasus_tx_timeout(struct net_device *net)
        pegasus_t *pegasus = netdev_priv(net);
        netif_warn(pegasus, timer, net, "tx timeout\n");
        usb_unlink_urb(pegasus->tx_urb);
-       pegasus->stats.tx_errors++;
+       net->stats.tx_errors++;
 }
 
 static netdev_tx_t pegasus_start_xmit(struct sk_buff *skb,
@@ -731,23 +731,18 @@ static netdev_tx_t pegasus_start_xmit(struct sk_buff *skb,
                        netif_device_detach(pegasus->net);
                        break;
                default:
-                       pegasus->stats.tx_errors++;
+                       net->stats.tx_errors++;
                        netif_start_queue(net);
                }
        } else {
-               pegasus->stats.tx_packets++;
-               pegasus->stats.tx_bytes += skb->len;
+               net->stats.tx_packets++;
+               net->stats.tx_bytes += skb->len;
        }
        dev_kfree_skb(skb);
 
        return NETDEV_TX_OK;
 }
 
-static struct net_device_stats *pegasus_netdev_stats(struct net_device *dev)
-{
-       return &((pegasus_t *) netdev_priv(dev))->stats;
-}
-
 static inline void disable_net_traffic(pegasus_t *pegasus)
 {
        __le16 tmp = cpu_to_le16(0);
@@ -1294,7 +1289,6 @@ static const struct net_device_ops pegasus_netdev_ops = {
        .ndo_do_ioctl =                 pegasus_ioctl,
        .ndo_start_xmit =               pegasus_start_xmit,
        .ndo_set_rx_mode =              pegasus_set_multicast,
-       .ndo_get_stats =                pegasus_netdev_stats,
        .ndo_tx_timeout =               pegasus_tx_timeout,
        .ndo_set_mac_address =          eth_mac_addr,
        .ndo_validate_addr =            eth_validate_addr,
index d15646244fdf06b7b474bff96922696e79caf230..9b7ea9c9167d6074abf5b883cfce955075d4c90b 100644 (file)
@@ -83,7 +83,6 @@ typedef struct pegasus {
        struct usb_device       *usb;
        struct usb_interface    *intf;
        struct net_device       *net;
-       struct net_device_stats stats;
        struct mii_if_info      mii;
        unsigned                flags;
        unsigned                features;