ether1: Use net_device_stats from struct net_device
struct net_device has its own struct net_device_stats member, so use this one instead of a private copy in the ether1_priv struct. As the new ndo_get_stats function would just return dev->stats we can omit it. This patch also removes an incorrect memset of the stats on open. Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
2244d07bfa
commit
25aec76a3b
@@ -68,7 +68,6 @@ static int ether1_open(struct net_device *dev);
|
|||||||
static int ether1_sendpacket(struct sk_buff *skb, struct net_device *dev);
|
static int ether1_sendpacket(struct sk_buff *skb, struct net_device *dev);
|
||||||
static irqreturn_t ether1_interrupt(int irq, void *dev_id);
|
static irqreturn_t ether1_interrupt(int irq, void *dev_id);
|
||||||
static int ether1_close(struct net_device *dev);
|
static int ether1_close(struct net_device *dev);
|
||||||
static struct net_device_stats *ether1_getstats(struct net_device *dev);
|
|
||||||
static void ether1_setmulticastlist(struct net_device *dev);
|
static void ether1_setmulticastlist(struct net_device *dev);
|
||||||
static void ether1_timeout(struct net_device *dev);
|
static void ether1_timeout(struct net_device *dev);
|
||||||
|
|
||||||
@@ -649,8 +648,6 @@ ether1_open (struct net_device *dev)
|
|||||||
if (request_irq(dev->irq, ether1_interrupt, 0, "ether1", dev))
|
if (request_irq(dev->irq, ether1_interrupt, 0, "ether1", dev))
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
|
|
||||||
memset (&priv(dev)->stats, 0, sizeof (struct net_device_stats));
|
|
||||||
|
|
||||||
if (ether1_init_for_open (dev)) {
|
if (ether1_init_for_open (dev)) {
|
||||||
free_irq (dev->irq, dev);
|
free_irq (dev->irq, dev);
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
@@ -673,7 +670,7 @@ ether1_timeout(struct net_device *dev)
|
|||||||
if (ether1_init_for_open (dev))
|
if (ether1_init_for_open (dev))
|
||||||
printk (KERN_ERR "%s: unable to restart interface\n", dev->name);
|
printk (KERN_ERR "%s: unable to restart interface\n", dev->name);
|
||||||
|
|
||||||
priv(dev)->stats.tx_errors++;
|
dev->stats.tx_errors++;
|
||||||
netif_wake_queue(dev);
|
netif_wake_queue(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -802,21 +799,21 @@ again:
|
|||||||
|
|
||||||
while (nop.nop_status & STAT_COMPLETE) {
|
while (nop.nop_status & STAT_COMPLETE) {
|
||||||
if (nop.nop_status & STAT_OK) {
|
if (nop.nop_status & STAT_OK) {
|
||||||
priv(dev)->stats.tx_packets ++;
|
dev->stats.tx_packets++;
|
||||||
priv(dev)->stats.collisions += (nop.nop_status & STAT_COLLISIONS);
|
dev->stats.collisions += (nop.nop_status & STAT_COLLISIONS);
|
||||||
} else {
|
} else {
|
||||||
priv(dev)->stats.tx_errors ++;
|
dev->stats.tx_errors++;
|
||||||
|
|
||||||
if (nop.nop_status & STAT_COLLAFTERTX)
|
if (nop.nop_status & STAT_COLLAFTERTX)
|
||||||
priv(dev)->stats.collisions ++;
|
dev->stats.collisions++;
|
||||||
if (nop.nop_status & STAT_NOCARRIER)
|
if (nop.nop_status & STAT_NOCARRIER)
|
||||||
priv(dev)->stats.tx_carrier_errors ++;
|
dev->stats.tx_carrier_errors++;
|
||||||
if (nop.nop_status & STAT_TXLOSTCTS)
|
if (nop.nop_status & STAT_TXLOSTCTS)
|
||||||
printk (KERN_WARNING "%s: cts lost\n", dev->name);
|
printk (KERN_WARNING "%s: cts lost\n", dev->name);
|
||||||
if (nop.nop_status & STAT_TXSLOWDMA)
|
if (nop.nop_status & STAT_TXSLOWDMA)
|
||||||
priv(dev)->stats.tx_fifo_errors ++;
|
dev->stats.tx_fifo_errors++;
|
||||||
if (nop.nop_status & STAT_COLLEXCESSIVE)
|
if (nop.nop_status & STAT_COLLEXCESSIVE)
|
||||||
priv(dev)->stats.collisions += 16;
|
dev->stats.collisions += 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nop.nop_link == caddr) {
|
if (nop.nop_link == caddr) {
|
||||||
@@ -879,13 +876,13 @@ ether1_recv_done (struct net_device *dev)
|
|||||||
|
|
||||||
skb->protocol = eth_type_trans (skb, dev);
|
skb->protocol = eth_type_trans (skb, dev);
|
||||||
netif_rx (skb);
|
netif_rx (skb);
|
||||||
priv(dev)->stats.rx_packets ++;
|
dev->stats.rx_packets++;
|
||||||
} else
|
} else
|
||||||
priv(dev)->stats.rx_dropped ++;
|
dev->stats.rx_dropped++;
|
||||||
} else {
|
} else {
|
||||||
printk(KERN_WARNING "%s: %s\n", dev->name,
|
printk(KERN_WARNING "%s: %s\n", dev->name,
|
||||||
(rbd.rbd_status & RBD_EOF) ? "oversized packet" : "acnt not valid");
|
(rbd.rbd_status & RBD_EOF) ? "oversized packet" : "acnt not valid");
|
||||||
priv(dev)->stats.rx_dropped ++;
|
dev->stats.rx_dropped++;
|
||||||
}
|
}
|
||||||
|
|
||||||
nexttail = ether1_readw(dev, priv(dev)->rx_tail, rfd_t, rfd_link, NORMALIRQS);
|
nexttail = ether1_readw(dev, priv(dev)->rx_tail, rfd_t, rfd_link, NORMALIRQS);
|
||||||
@@ -939,7 +936,7 @@ ether1_interrupt (int irq, void *dev_id)
|
|||||||
printk (KERN_WARNING "%s: RU went not ready: RU suspended\n", dev->name);
|
printk (KERN_WARNING "%s: RU went not ready: RU suspended\n", dev->name);
|
||||||
ether1_writew(dev, SCB_CMDRXRESUME, SCB_ADDR, scb_t, scb_command, NORMALIRQS);
|
ether1_writew(dev, SCB_CMDRXRESUME, SCB_ADDR, scb_t, scb_command, NORMALIRQS);
|
||||||
writeb(CTRL_CA, REG_CONTROL);
|
writeb(CTRL_CA, REG_CONTROL);
|
||||||
priv(dev)->stats.rx_dropped ++; /* we suspended due to lack of buffer space */
|
dev->stats.rx_dropped++; /* we suspended due to lack of buffer space */
|
||||||
} else
|
} else
|
||||||
printk(KERN_WARNING "%s: RU went not ready: %04X\n", dev->name,
|
printk(KERN_WARNING "%s: RU went not ready: %04X\n", dev->name,
|
||||||
ether1_readw(dev, SCB_ADDR, scb_t, scb_status, NORMALIRQS));
|
ether1_readw(dev, SCB_ADDR, scb_t, scb_status, NORMALIRQS));
|
||||||
@@ -962,12 +959,6 @@ ether1_close (struct net_device *dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct net_device_stats *
|
|
||||||
ether1_getstats (struct net_device *dev)
|
|
||||||
{
|
|
||||||
return &priv(dev)->stats;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set or clear the multicast filter for this adaptor.
|
* Set or clear the multicast filter for this adaptor.
|
||||||
* num_addrs == -1 Promiscuous mode, receive all packets.
|
* num_addrs == -1 Promiscuous mode, receive all packets.
|
||||||
@@ -994,7 +985,6 @@ static const struct net_device_ops ether1_netdev_ops = {
|
|||||||
.ndo_open = ether1_open,
|
.ndo_open = ether1_open,
|
||||||
.ndo_stop = ether1_close,
|
.ndo_stop = ether1_close,
|
||||||
.ndo_start_xmit = ether1_sendpacket,
|
.ndo_start_xmit = ether1_sendpacket,
|
||||||
.ndo_get_stats = ether1_getstats,
|
|
||||||
.ndo_set_multicast_list = ether1_setmulticastlist,
|
.ndo_set_multicast_list = ether1_setmulticastlist,
|
||||||
.ndo_tx_timeout = ether1_timeout,
|
.ndo_tx_timeout = ether1_timeout,
|
||||||
.ndo_validate_addr = eth_validate_addr,
|
.ndo_validate_addr = eth_validate_addr,
|
||||||
|
@@ -38,7 +38,6 @@
|
|||||||
|
|
||||||
struct ether1_priv {
|
struct ether1_priv {
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
struct net_device_stats stats;
|
|
||||||
unsigned int tx_link;
|
unsigned int tx_link;
|
||||||
unsigned int tx_head;
|
unsigned int tx_head;
|
||||||
volatile unsigned int tx_tail;
|
volatile unsigned int tx_tail;
|
||||||
|
Reference in New Issue
Block a user