Re: poll broken (for can)
flat view
From: Oliver Hartkopp <hidden>
Date: 2011-03-28 17:53:27
On 28.03.2011 18:13, Marc Kleine-Budde wrote:
On 03/28/2011 05:55 PM, Wolfgang Grandegger wrote:quoted
quoted
BTW: I figured out why poll() wakes you up but the next write will fail with -ENOBUFS again.Ah, I'm curious? I also did realize that poll does burn CPU cycles (instead of waiting).The poll callback checks if the used memory is less than the half of per socket snd buffer (IIRC ~60K). See: datagram_poll (http://lxr.linux.no/linux+v2.6.38/net/core/datagram.c#L737) sock_writeable (http://lxr.linux.no/linux+v2.6.38/include/net/sock.h#L1618) Because the size of a can frame (+the skb overhead) is much less then the ethernet frame (+overhead) the default value for the snd buffer is too big for can. We get the -ENOBUF from write() if the tx_queue_len (default 10) is exceeded. http://lxr.linux.no/linux+v2.6.38/drivers/net/can/dev.c#L435 http://lxr.linux.no/linux+v2.6.38/net/can/af_can.c#L268
What would be your suggestion? Decreasing the socket send buffer for CAN by
default?
Regards,
Oliver