Thread (13 messages) 13 messages, 4 authors, 2013-12-03

Re: [PATCH] net: fec_main: dma_map() only the length of the skb

From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: 2013-11-28 11:24:31

On 11/28/2013 02:18 AM, Fugang Duan wrote:
- [off-list ref] because MTA complains (now really)
quoted
On 11/27/2013 02:08 PM, Fugang Duan wrote:
quoted
In fact, there have one memory copy for enet as below since enet have 16
bytes data buffer alignment request.
quoted
if (((unsigned long) bufaddr) & FEC_ALIGNMENT) {
                memcpy(fep->tx_bounce[index], skb->data, skb->len);
                bufaddr = fep->tx_bounce[index]; }
This memcpy() is only executed if the buffer isn't properly aligned which
shouldn't be the rule but an exception. This aligment check is also available
in v2.6.31 where the BUG_ON() statement was triggered.
In fact, the skb->data address is not aligned with FEC_ALIGNMENT, so memcpy() always is called at here.
I am aware of NET_IP_ALIGN. The pointers I mentioned in the log were
from a printk() shortly before that bug triggered. So I am not making
this up :) I am not aware of the load that triggered this.

Anyway, adding this

   WARN_ON(!((unsigned long)skb->data & 0xf));

in my e1000 on v3.12 triggers shortly after boot and according to the
backtrace it comes aoe. So that is at least one user :)
Since that aligment is for IP, I am not sure if non-IP based protocol
are using this. I know however that the workload, that triggered the
problem, is not IP-based.
Thanks,
Andy 
Sebastian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help