Messages in this thread | | | Date | Wed, 25 Mar 2009 15:52:43 +0100 | From | Thierry Reding <> | Subject | Re: [PATCH] net: Add support for the OpenCores 10/100 Mbps Ethernet MAC. |
| |
* David Miller wrote: > From: Andrey Panin <pazke@donpac.ru> > Date: Tue, 24 Mar 2009 14:13:59 +0300 > > > On 083, 03 24, 2009 at 11:18:43AM +0100, Thierry Reding wrote: > > > +static void ethoc_copy_to_io(void __iomem *dest, struct sk_buff *src) > > > +{ > > > + size_t size = (src->len & 0x3) ? (src->len & ~0x3) + 4 : src->len; > > > + u8 buffer[ETHOC_BUFSIZ]; > > > > Using 1536 bytes of stack is not very nice. > > Agreed, this stuff must be fixed. > > You could use skb_copy_and_csum_dev() directly into your buffer, then > pad out the end of the buffer with a memset() call, if necessary. >- > Actually, no you can't... > > You should not be using memcpy() to store things into I/O memory. > That's what memcpy_io() is for. > > I think because of all of these special padding cases and the use > of I/O memory instead of DMA, there is no real gain by using > skb_copy_and_csum_dev() in this driver.
Actually these special padding cases are only necessary for the FPGA interface we use and have nothing to do with the OpenCores Ethernet MAC itself. The ARM memcpy_{to,from}io() functions don't work correctly with my setup because our VLIO bridge implementation apparently doesn't handle byte-wise accesses very well.
I can work around that by implementing the memcpy_{to,from}io() functions differently, though. That may however break anything else using those functions.
> Just let the network stack checksum the packet, and use memcpy_io() here > which is the currect interface for copying data into I/O memory.
See follow-up patch in reply to the first patch.
Cheers, Thierry
| |