Subject: Re: [PATCH] Fix e100 on systems that have cache incoherent DMA

From: David Acker <[email-masked]>
Date: Tue, 01 Jul 2008 17:35:50 -0400

Anders Grafström wrote:
>>>> David Acker wrote:
>>>>> What is the status of this patch?
>>>>
>>>> Jeff merged it in netdev-2.6#upstream so it is queued for 2.6.25.
> 
> The e100 driver broke in 2.6.25 on the ixp4xx based platform I'm using.
> This patch seems to be the cause.
> 
> It appears to work again with pci_dma_sync_single_for_device() restored.
> So I'm wondering if the patch below would be valid and correct?
> 
> Anders
> 
> diff --git a/drivers/net/e100.c b/drivers/net/e100.c
> index f3cba5e..1037b13 100644
> --- a/drivers/net/e100.c
> +++ b/drivers/net/e100.c
> @@ -1803,6 +1803,8 @@ static int e100_rx_alloc_skb(struct nic *nic, 
> struct rx *rx)
>      if (rx->prev->skb) {
>          struct rfd *prev_rfd = (struct rfd *)rx->prev->skb->data;
>          put_unaligned_le32(rx->dma_addr, &prev_rfd->link);
> +        pci_dma_sync_single_for_device(nic->pdev, rx->prev->dma_addr,
> +            sizeof(struct rfd), PCI_DMA_TODEVICE);
>      }
> 
>      return 0;
> -- 

Acked-by: David Acker <[email-masked]>

I got a chance to test this patch on both a Compulab CM-X255 and a 
Gateworks Avila GW2348-4.  It seems to work fine with little to no 
performance hit.  I will give it some longer tests over this week.  If I 
run into any problems I will report them here.  Thanks to Anders and 
Kevin Hao who posted a similar patch.
-Ack