Re: [PATCH v4] FEC - fast ethernet controller for mpc52xx
From: Dale Farnsworth <hidden>
Date: 2007-10-25 20:29:09
Also in:
linuxppc-dev
On Thu, Oct 25, 2007 at 09:41:14PM +0200, Domen Puncer wrote:
On 25/10/07 11:57 -0700, Dale Farnsworth wrote:quoted
Domen wrote:quoted
quoted
use your platform's dma mapping functions, rather than virt_to_phys() it might be the exact same implementation, inside the platform internals, but drivers should not be using this directly.I've replaced this with dma_map_single(), unmatched with dma_unmap_single(), since bestcomm doesn't have a way to do that and it's blank on ppc32 anyway. Is this OK? PPC guys?Even though dma_unmap_single() may be a no-op, calls to dma_map_single() must be matched with calls to dma_unmap_single(). Perhaps with the additions below:quoted
+static void mpc52xx_fec_free_rx_buffers(struct bcom_task *s) +{ + struct sk_buff *skb; + + while (!bcom_queue_empty(s)) { + skb = bcom_retrieve_buffer(s, NULL, NULL);dma_unmap_single(&skb->dev->dev, skb-data, FEC_RX_BUFFER_SIZE, DMA_FROM_DEVICE);It looks to me like dma_unmap_single takes the mapped address (what dma_map_single returned), and not the address we're mapping (skb->data).
Yeah. Sorry. That won't be so easy. We'll either need to squirrel away the mapped address, or change the interface to bcom_retrieve_buffers() so we can get the address. IMO, it's still a requirement that we call dma_unmap_single() for each call to dma_map_single(). -Dale