Re: [PATCH] sky2: Fix WARNING: at lib/dma-debug.c:902 check_sync

From: Michael Breuer
Date: Thu Jan 21 2010 - 15:46:55 EST

On 1/21/2010 3:41 PM, Jarek Poplawski wrote:
On Thu, Jan 21, 2010 at 02:59:19PM -0500, Michael Breuer wrote:
On 1/20/2010 4:41 AM, Jarek Poplawski wrote:
[ previously: Re: [PATCH] af_packet: Don't use skb after dev_queue_xmit() ]
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 7650f73..cdebdd3 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -2252,12 +2252,14 @@ static struct sk_buff *receive_copy(struct sky2_port *sky2,
skb = netdev_alloc_skb_ip_align(sky2->netdev, length);
if (likely(skb)) {
pci_dma_sync_single_for_cpu(sky2->hw->pdev, re->data_addr,
+ pci_unmap_len(re, data_size),
skb_copy_from_linear_data(re->skb, skb->data, length);
skb->ip_summed = re->skb->ip_summed;
skb->csum = re->skb->csum;
pci_dma_sync_single_for_device(sky2->hw->pdev, re->data_addr,
+ pci_unmap_len(re, data_size),
re->skb->ip_summed = CHECKSUM_NONE;
skb_put(skb, length);
Just a testing update: I went back to CONFIG_DMAR=Y yesterday and
have not (yet) encountered the sky2 crash I'd been having prior to
this fix. I've been pumping traffic through, and based on pre-patch
experience, it would likely have crashed by now.

Will keep the system up for the next couple of days w/o reboot to
confirm that the sky2 lockup I'd been seeing has stopped happening
with this patch.

Test notes:

1) Warning previously apparent on start (dma_debug check_sync) with
CONFIG_DMAR=n is gone.
2) W/o the above patch, I was getting sky2 DMAR errors and
subsequent TX hangs requiring reboot to clear. The hangs happened
after at least 12 hours of uptime, and under RX load at the time of
the hang.
3) With the above patch (and no other changes) I have not been able
to recreate the crash - the system is stable.
Btw, could you remind us if during last dmar bugs jumbo frames might
have been used or maybe mtu was changed, and the current test setting?

I've hit this with and without Jumbo frames enabled. Last couple of recreations were with mtu = 1500, which is how I'm running now.
I have been following the discussion about the DMA api would suggest
that the length issue when DMAR is enabled is less innocuous than
previously believed.
Actually, the last conclusions are - it's more innocuous than ever
believed, and I completely agree with this (at least until the next
week ;-).
I stand grammatically corrected.
Jarek P.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at