aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2011-10-24 03:53:03 -0400
committerDavid S. Miller <davem@davemloft.net>2011-10-24 18:40:14 -0400
commit48855432047c9de7ea9987349de4c47d48ade8d1 (patch)
tree6c6d7d05c62f3426e288089bbeb33a1f45520b07 /drivers/net/ethernet
parent752961a11e847e604aeaaa798cac438c1e671ba4 (diff)
|PATCH net-next] tg3: add tx_dropped counter
If a frame cant be transmitted, it is silently discarded. Add a counter to report these errors to user. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c23
-rw-r--r--drivers/net/ethernet/broadcom/tg3.h1
2 files changed, 12 insertions, 12 deletions
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index b865e9fdd08..161cbbb4814 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -6671,10 +6671,8 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
6671 u32 tcp_opt_len, hdr_len; 6671 u32 tcp_opt_len, hdr_len;
6672 6672
6673 if (skb_header_cloned(skb) && 6673 if (skb_header_cloned(skb) &&
6674 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { 6674 pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
6675 dev_kfree_skb(skb); 6675 goto drop;
6676 goto out_unlock;
6677 }
6678 6676
6679 iph = ip_hdr(skb); 6677 iph = ip_hdr(skb);
6680 tcp_opt_len = tcp_optlen(skb); 6678 tcp_opt_len = tcp_optlen(skb);
@@ -6746,10 +6744,9 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
6746 len = skb_headlen(skb); 6744 len = skb_headlen(skb);
6747 6745
6748 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE); 6746 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
6749 if (pci_dma_mapping_error(tp->pdev, mapping)) { 6747 if (pci_dma_mapping_error(tp->pdev, mapping))
6750 dev_kfree_skb(skb); 6748 goto drop;
6751 goto out_unlock; 6749
6752 }
6753 6750
6754 tnapi->tx_buffers[entry].skb = skb; 6751 tnapi->tx_buffers[entry].skb = skb;
6755 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping); 6752 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
@@ -6805,7 +6802,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
6805 budget = tg3_tx_avail(tnapi); 6802 budget = tg3_tx_avail(tnapi);
6806 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget, 6803 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
6807 base_flags, mss, vlan)) 6804 base_flags, mss, vlan))
6808 goto out_unlock; 6805 goto drop_nofree;
6809 } 6806 }
6810 6807
6811 skb_tx_timestamp(skb); 6808 skb_tx_timestamp(skb);
@@ -6827,15 +6824,16 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
6827 netif_tx_wake_queue(txq); 6824 netif_tx_wake_queue(txq);
6828 } 6825 }
6829 6826
6830out_unlock:
6831 mmiowb(); 6827 mmiowb();
6832
6833 return NETDEV_TX_OK; 6828 return NETDEV_TX_OK;
6834 6829
6835dma_error: 6830dma_error:
6836 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 6831 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
6837 dev_kfree_skb(skb);
6838 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; 6832 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
6833drop:
6834 dev_kfree_skb(skb);
6835drop_nofree:
6836 tp->tx_dropped++;
6839 return NETDEV_TX_OK; 6837 return NETDEV_TX_OK;
6840} 6838}
6841 6839
@@ -10009,6 +10007,7 @@ static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
10009 get_stat64(&hw_stats->rx_discards); 10007 get_stat64(&hw_stats->rx_discards);
10010 10008
10011 stats->rx_dropped = tp->rx_dropped; 10009 stats->rx_dropped = tp->rx_dropped;
10010 stats->tx_dropped = tp->tx_dropped;
10012 10011
10013 return stats; 10012 return stats;
10014} 10013}
diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h
index d2976f39b2f..f32f288134c 100644
--- a/drivers/net/ethernet/broadcom/tg3.h
+++ b/drivers/net/ethernet/broadcom/tg3.h
@@ -2990,6 +2990,7 @@ struct tg3 {
2990 2990
2991 /* begin "everything else" cacheline(s) section */ 2991 /* begin "everything else" cacheline(s) section */
2992 unsigned long rx_dropped; 2992 unsigned long rx_dropped;
2993 unsigned long tx_dropped;
2993 struct rtnl_link_stats64 net_stats_prev; 2994 struct rtnl_link_stats64 net_stats_prev;
2994 struct tg3_ethtool_stats estats; 2995 struct tg3_ethtool_stats estats;
2995 struct tg3_ethtool_stats estats_prev; 2996 struct tg3_ethtool_stats estats_prev;