On 03/28/2011 05:55 PM, Wolfgang Grandegger wrote: >> 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 cheers, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Socketcan-users mailing list [email protected] https://lists.berlios.de/mailman/listinfo/socketcan-users
