On Thu, 2015-04-09 at 18:25 +0100, Ian Jackson wrote:
> root@bedbug:~# ethtool -S eth0 | grep -v ': 0$'
> NIC statistics:
> rx_octets: 8196868
> rx_ucast_packets: 633
> rx_mcast_packets: 1
> rx_bcast_packets: 123789
> tx_octets: 42854
> tx_ucast_packets: 9
> tx_mcast_packets: 8
> tx_bcast_packets: 603
> root@bedbug:~# ifconfig eth0
> eth0 Link encap:Ethernet HWaddr 00:13:72:14:c0:51
> inet addr:10.80.249.102 Bcast:10.80.251.255
> Mask:255.255.252.0
> inet6 addr: fe80::213:72ff:fe14:c051/64 Scope:Link
> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
> RX packets:124774 errors:0 dropped:88921 overruns:0 frame:0
> TX packets:620 errors:0 dropped:0 overruns:0 carrier:0
> collisions:0 txqueuelen:1000
> RX bytes:8222158 (7.8 MiB) TX bytes:42854 (41.8 KiB)
> Interrupt:17
>
> root@bedbug:~#
>
> It appears therefore that packets are being corrupted on the receive
> path, and the kernel then drops them (as misaddressed).
>
thanks for the repo, the RX drop counter is updated at few places in the
driver. Please use the attached debug patch and provide the logs
>From 777363eb77bddd52b9983c0025fed8b4ec151417 Mon Sep 17 00:00:00 2001
From: Prashant Sreedharan <[email protected]>
Date: Thu, 9 Apr 2015 10:52:17 -0700
Subject: [stable: 3.14.37]tg3: debug_patch
---
drivers/net/ethernet/broadcom/tg3.c | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 8206113..5e2c9d6 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -6871,8 +6871,11 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
*post_ptr, &frag_size);
- if (skb_size < 0)
+ if (skb_size < 0) {
+ netdev_err(tp->dev, "alloc_rx failure %x %x %x\n",
+ skb_size, opaque_key, frag_size);
goto drop_it;
+ }
pci_unmap_single(tp->pdev, dma_addr, skb_size,
PCI_DMA_FROMDEVICE);
@@ -6886,6 +6889,8 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
skb = build_skb(data, frag_size);
if (!skb) {
+ netdev_err(tp->dev, "build_skb failure %d\n",
+ frag_size);
tg3_frag_free(frag_size != 0, data);
goto drop_it_no_recycle;
}
@@ -6896,8 +6901,10 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
skb = netdev_alloc_skb(tp->dev,
len + TG3_RAW_IP_ALIGN);
- if (skb == NULL)
+ if (skb == NULL) {
+ netdev_err(tp->dev, "alloc_skb fail %d\n", len);
goto drop_it_no_recycle;
+ }
skb_reserve(skb, TG3_RAW_IP_ALIGN);
pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
@@ -6925,6 +6932,8 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
if (len > (tp->dev->mtu + ETH_HLEN) &&
skb->protocol != htons(ETH_P_8021Q) &&
skb->protocol != htons(ETH_P_8021AD)) {
+ netdev_err(tp->dev, "Proto %x %x\n",
+ skb->protocol, len);
dev_kfree_skb(skb);
goto drop_it_no_recycle;
}
--
1.7.1
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel