Thread (28 messages) 28 messages, 7 authors, 2007-11-01

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help