Instead of using an own copy of struct net_device_stats in struct wlandevice, use stats from struct net_device. Also remove the thus unnecessary .ndo_get_stats function, as it would now just return netdev->stats, which is the default in dev_get_stats(). Furthermore, convert prefix increment of stats counters to the more common postfix increment idiom. Signed-off-by: Tobias Klauser <tklauser@xxxxxxxxxx> --- drivers/staging/wlan-ng/hfa384x_usb.c | 18 +++++++-------- drivers/staging/wlan-ng/p80211netdev.c | 40 ++++++---------------------------- drivers/staging/wlan-ng/p80211netdev.h | 1 - drivers/staging/wlan-ng/prism2sta.c | 2 +- 4 files changed, 17 insertions(+), 44 deletions(-) diff --git a/drivers/staging/wlan-ng/hfa384x_usb.c b/drivers/staging/wlan-ng/hfa384x_usb.c index 07cee56..2f63e0c 100644 --- a/drivers/staging/wlan-ng/hfa384x_usb.c +++ b/drivers/staging/wlan-ng/hfa384x_usb.c @@ -3158,8 +3158,8 @@ static void hfa384x_usbin_callback(struct urb *urb) /* Check for short packet */ if (urb->actual_length == 0) { - ++(wlandev->linux_stats.rx_errors); - ++(wlandev->linux_stats.rx_length_errors); + wlandev->netdev->stats.rx_errors++; + wlandev->netdev->stats.rx_length_errors++; action = RESUBMIT; } break; @@ -3169,7 +3169,7 @@ static void hfa384x_usbin_callback(struct urb *urb) wlandev->netdev->name); if (!test_and_set_bit(WORK_RX_HALT, &hw->usb_flags)) schedule_work(&hw->usb_work); - ++(wlandev->linux_stats.rx_errors); + wlandev->netdev->stats.rx_errors++; action = ABORT; break; @@ -3180,12 +3180,12 @@ static void hfa384x_usbin_callback(struct urb *urb) !timer_pending(&hw->throttle)) { mod_timer(&hw->throttle, jiffies + THROTTLE_JIFFIES); } - ++(wlandev->linux_stats.rx_errors); + wlandev->netdev->stats.rx_errors++; action = ABORT; break; case -EOVERFLOW: - ++(wlandev->linux_stats.rx_over_errors); + wlandev->netdev->stats.rx_over_errors++; action = RESUBMIT; break; @@ -3204,7 +3204,7 @@ static void hfa384x_usbin_callback(struct urb *urb) default: pr_debug("urb status=%d, transfer flags=0x%x\n", urb->status, urb->transfer_flags); - ++(wlandev->linux_stats.rx_errors); + wlandev->netdev->stats.rx_errors++; action = RESUBMIT; break; } @@ -3712,7 +3712,7 @@ static void hfa384x_usbout_callback(struct urb *urb) if (!test_and_set_bit (WORK_TX_HALT, &hw->usb_flags)) schedule_work(&hw->usb_work); - ++(wlandev->linux_stats.tx_errors); + wlandev->netdev->stats.tx_errors++; break; } @@ -3728,7 +3728,7 @@ static void hfa384x_usbout_callback(struct urb *urb) mod_timer(&hw->throttle, jiffies + THROTTLE_JIFFIES); } - ++(wlandev->linux_stats.tx_errors); + wlandev->netdev->stats.tx_errors++; netif_stop_queue(wlandev->netdev); break; } @@ -3741,7 +3741,7 @@ static void hfa384x_usbout_callback(struct urb *urb) default: netdev_info(wlandev->netdev, "unknown urb->status=%d\n", urb->status); - ++(wlandev->linux_stats.tx_errors); + wlandev->netdev->stats.tx_errors++; break; } /* switch */ } diff --git a/drivers/staging/wlan-ng/p80211netdev.c b/drivers/staging/wlan-ng/p80211netdev.c index 00b186c..29afa57 100644 --- a/drivers/staging/wlan-ng/p80211netdev.c +++ b/drivers/staging/wlan-ng/p80211netdev.c @@ -92,7 +92,6 @@ /* netdevice method functions */ static int p80211knetdev_init(netdevice_t *netdev); -static struct net_device_stats *p80211knetdev_get_stats(netdevice_t *netdev); static int p80211knetdev_open(netdevice_t *netdev); static int p80211knetdev_stop(netdevice_t *netdev); static int p80211knetdev_hard_start_xmit(struct sk_buff *skb, @@ -134,30 +133,6 @@ static int p80211knetdev_init(netdevice_t *netdev) } /*---------------------------------------------------------------- -* p80211knetdev_get_stats -* -* Statistics retrieval for linux netdevices. Here we're reporting -* the Linux i/f level statistics. Hence, for the primary numbers, -* we don't want to report the numbers from the MIB. Eventually, -* it might be useful to collect some of the error counters though. -* -* Arguments: -* netdev Linux netdevice -* -* Returns: -* the address of the statistics structure -----------------------------------------------------------------*/ -static struct net_device_stats *p80211knetdev_get_stats(netdevice_t *netdev) -{ - wlandevice_t *wlandev = netdev->ml_priv; - - /* TODO: review the MIB stats for items that correspond to - linux stats */ - - return &(wlandev->linux_stats); -} - -/*---------------------------------------------------------------- * p80211knetdev_open * * Linux netdevice open method. Following a successful call here, @@ -273,8 +248,8 @@ static int p80211_convert_to_ether(wlandevice_t *wlandev, struct sk_buff *skb) if (skb_p80211_to_ether(wlandev, wlandev->ethconv, skb) == 0) { skb->dev->last_rx = jiffies; - wlandev->linux_stats.rx_packets++; - wlandev->linux_stats.rx_bytes += skb->len; + wlandev->netdev->stats.rx_packets++; + wlandev->netdev->stats.rx_bytes += skb->len; netif_rx_ni(skb); return 0; } @@ -310,8 +285,8 @@ static void p80211netdev_rx_bh(unsigned long arg) skb->protocol = htons(ETH_P_80211_RAW); dev->last_rx = jiffies; - wlandev->linux_stats.rx_packets++; - wlandev->linux_stats.rx_bytes += skb->len; + dev->stats.rx_packets++; + dev->stats.rx_bytes += skb->len; netif_rx_ni(skb); continue; } else { @@ -386,7 +361,7 @@ static int p80211knetdev_hard_start_xmit(struct sk_buff *skb, if (skb->protocol != ETH_P_80211_RAW) { netif_start_queue(wlandev->netdev); netdev_notice(netdev, "Tx attempt prior to association, frame dropped.\n"); - wlandev->linux_stats.tx_dropped++; + netdev->stats.tx_dropped++; result = 0; goto failed; } @@ -420,9 +395,9 @@ static int p80211knetdev_hard_start_xmit(struct sk_buff *skb, netdev->trans_start = jiffies; - wlandev->linux_stats.tx_packets++; + netdev->stats.tx_packets++; /* count only the packet payload */ - wlandev->linux_stats.tx_bytes += skb->len; + netdev->stats.tx_bytes += skb->len; txresult = wlandev->txframe(wlandev, skb, &p80211_hdr, &p80211_wep); @@ -710,7 +685,6 @@ static const struct net_device_ops p80211_netdev_ops = { .ndo_init = p80211knetdev_init, .ndo_open = p80211knetdev_open, .ndo_stop = p80211knetdev_stop, - .ndo_get_stats = p80211knetdev_get_stats, .ndo_start_xmit = p80211knetdev_hard_start_xmit, .ndo_set_rx_mode = p80211knetdev_set_multicast_list, .ndo_do_ioctl = p80211knetdev_do_ioctl, diff --git a/drivers/staging/wlan-ng/p80211netdev.h b/drivers/staging/wlan-ng/p80211netdev.h index 2e0bd24..69a4f59 100644 --- a/drivers/staging/wlan-ng/p80211netdev.h +++ b/drivers/staging/wlan-ng/p80211netdev.h @@ -209,7 +209,6 @@ typedef struct wlandevice { /* queue for indications waiting for cmd completion */ /* Linux netdevice and support */ netdevice_t *netdev; /* ptr to linux netdevice */ - struct net_device_stats linux_stats; /* Rx bottom half */ struct tasklet_struct rx_bh; diff --git a/drivers/staging/wlan-ng/prism2sta.c b/drivers/staging/wlan-ng/prism2sta.c index 209e4db..799ce8a 100644 --- a/drivers/staging/wlan-ng/prism2sta.c +++ b/drivers/staging/wlan-ng/prism2sta.c @@ -1848,7 +1848,7 @@ void prism2sta_ev_tx(wlandevice_t *wlandev, u16 status) { pr_debug("Tx Complete, status=0x%04x\n", status); /* update linux network stats */ - wlandev->linux_stats.tx_packets++; + wlandev->netdev->stats.tx_packets++; } /*---------------------------------------------------------------- -- 2.0.1 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel