* [Xenomai-help] rtcan bufferoverflow but no evidence @ 2007-08-13 14:58 Roland Tollenaar 2007-08-13 15:38 ` Wolfgang Grandegger 0 siblings, 1 reply; 12+ messages in thread From: Roland Tollenaar @ 2007-08-13 14:58 UTC (permalink / raw) To: Xenomai-help Hi, I seem to be getting major buffer overflow. Yet when I check the messages with rtcanrecv with relative time stamp I get confirmation of the fact that there are only two messages on the bus every ms and the EASILY fit withing the 1ms task. I have tried to mask all errors but see nothing. Why would i get about one billion messagebuffer overflow errors to syslog? How can I make these mysterious messages visible? Or is there a setting that i may have wrong such that the rtcan rev function does not empty the ring buffer? I hope there is something obvious I am doing wrong because this rtcan is really giving me a headache. Kind regards, Roland ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence 2007-08-13 14:58 [Xenomai-help] rtcan bufferoverflow but no evidence Roland Tollenaar @ 2007-08-13 15:38 ` Wolfgang Grandegger [not found] ` <46C07D73.7070302@domain.hid> 0 siblings, 1 reply; 12+ messages in thread From: Wolfgang Grandegger @ 2007-08-13 15:38 UTC (permalink / raw) To: rolandtollenaar; +Cc: Xenomai-help Roland Tollenaar wrote: > Hi, > > I seem to be getting major buffer overflow. Yet when I check the > messages with rtcanrecv with relative time stamp I get confirmation of > the fact that there are only two messages on the bus every ms and the > EASILY fit withing the 1ms task. I have tried to mask all errors but see > nothing. Why would i get about one billion messagebuffer overflow errors > to syslog? How can I make these mysterious messages visible? > > Or is there a setting that i may have wrong such that the rtcan rev > function does not empty the ring buffer? > > I hope there is something obvious I am doing wrong because this rtcan is > really giving me a headache. When you have bound a RTCAN socket, it will receive messages and put them into the RX socket queue. If no task reads them via recv* function calls, the buffer will overflow sooner than later. Do you use a bound socket just for sending messages? Then you could avoid buffer overflows by defining an empty receive filter list as show here http://www.rts.uni-hannover.de/xenomai/lxr/source/src/utils/can/rtcansend.c#251. Or use rt_dev_sendto() without binding the socket. You can (or even should) suppress the overflow messages by disabling the kernel option CONFIG_XENO_DRIVERS_CAN_DEBUG. Wolfgang. ^ permalink raw reply [flat|nested] 12+ messages in thread
[parent not found: <46C07D73.7070302@domain.hid>]
[parent not found: <46C080C8.10906@domain.hid>]
[parent not found: <46C0835E.8010105@domain.hid>]
[parent not found: <46C0B036.3030306@domain.hid>]
[parent not found: <46C0B1DF.6090509@domain.hid>]
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence [not found] ` <46C0B1DF.6090509@domain.hid> @ 2007-08-13 19:59 ` Wolfgang Grandegger 2007-08-13 20:20 ` Roland Tollenaar 2007-08-13 20:07 ` Wolfgang Grandegger 1 sibling, 1 reply; 12+ messages in thread From: Wolfgang Grandegger @ 2007-08-13 19:59 UTC (permalink / raw) To: rolandtollenaar, xenomai-help Roland Tollenaar wrote: > Hi Wolfgang, > >>> See below. This does not look good. Does it mean that I am only >>> always reading out the last socket and the rest are having their >>> buffers pumped full? Should I be unbinding somehow? >> >> Don't know, check your code ;-). > Thanks that is exactly what I did because I thought I was unbinding. > rt_dev_close () should do that for me correct? Its not. At least not > reliably. :( > >>> 778518 1 >> >> There is a default filter defined for all sockets. If you just want to >> receive error frames, there is no need to bind the socket, IIRC. >> > I am lost here. I don;t want to receive ANY error frames. My sensor is > working, I am getting the readings in rapicly and all these error frames > which I cannot make visible anyhow are just causing grievance. I'd feel > a lot happier if I knew where the rogue can messages were coming from > that are overflowing the buffer. Mind you, if the Buf overflow count in > /proc/rtcan/sockets is zero while the application is running (the latest > socket will always have that) then syslog still gets messages saying > buffer overflow. I'm doing something wrong and I don;t just want to turn > off the messaging. If I can help it Id like to know what is wrong. Is > there any manner in which I can make visible ANY message error or not > that appears on the bus? > > Is there a possibility that there is some loopback route which gets > messages intot he buffer which are NOT on the physical bus? Yes, of course. You have enabled the TX loopback feature via kernel option: config XENO_DRIVERS_CAN_TX_LOOPBACK depends on XENO_DRIVERS_CAN bool "Enable TX loopback to local sockets" default n help This options adds support for TX loopback to local sockets. Normally, messages sent to the CAN bus are not visible to sockets listening to the same local device. When this option is enabled, TX messages are looped back locally when the transmit has been done by default. This behaviour can be deactivated or reactivated with "setsockopt". Enable this option, if you want to have a "net-alike" behaviour. From your output: root@domain.hid# cat /proc/rtcan/sockets fd Name___________ Filter ErrMask RX_Timeout_ns TX_Timeout_ns RX_BufFull TX_Lo 7 rtcan2 1 0x00008 infinite infinite 0 1 TX_Lo tell you that TX messages are loopback to local sockets. Wolfgang. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence 2007-08-13 19:59 ` Wolfgang Grandegger @ 2007-08-13 20:20 ` Roland Tollenaar 0 siblings, 0 replies; 12+ messages in thread From: Roland Tollenaar @ 2007-08-13 20:20 UTC (permalink / raw) To: Wolfgang Grandegger; +Cc: xenomai-help Hi, >> Is there a possibility that there is some loopback route which gets >> messages intot he buffer which are NOT on the physical bus? > > Yes, of course. You have enabled the TX loopback feature via kernel option: > > config XENO_DRIVERS_CAN_TX_LOOPBACK > depends on XENO_DRIVERS_CAN > bool "Enable TX loopback to local sockets" > default n > help > > This options adds support for TX loopback to local sockets. > Normally, > messages sent to the CAN bus are not visible to sockets > listening to > the same local device. When this option is enabled, TX messages are > looped back locally when the transmit has been done by default. > This > behaviour can be deactivated or reactivated with "setsockopt". I'll have a look. But I understnad you correctly that even if I have activated the loopback behaviour in the kernel I can deactivate at runtime with setsockopt? I still don;t see why this would generate overflows in the case when i only have one socket active? For the case that there are still lingering sockets which have not been closed it is obvious. > TX_Lo tell you that TX messages are loopback to local sockets. I'll turn this off in the morning if i can figure out how to with setsockopt. Thanks a-plenty! Roland > > Wolfgang. > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence [not found] ` <46C0B1DF.6090509@domain.hid> 2007-08-13 19:59 ` Wolfgang Grandegger @ 2007-08-13 20:07 ` Wolfgang Grandegger 2007-08-13 22:09 ` Jan Kiszka 1 sibling, 1 reply; 12+ messages in thread From: Wolfgang Grandegger @ 2007-08-13 20:07 UTC (permalink / raw) To: rolandtollenaar; +Cc: xenomai-help Roland Tollenaar wrote: > Hi Wolfgang, > >>> See below. This does not look good. Does it mean that I am only >>> always reading out the last socket and the rest are having their >>> buffers pumped full? Should I be unbinding somehow? >> >> Don't know, check your code ;-). > Thanks that is exactly what I did because I thought I was unbinding. > rt_dev_close () should do that for me correct? Its not. At least not > reliably. :( That's wired. You mean you called rt_dev_close() and the socket still does show up in /proc/rtcan_sockets? Is it possible that there is another task still using that socket? Could you show the code fragment doing that. Wolfgang. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence 2007-08-13 20:07 ` Wolfgang Grandegger @ 2007-08-13 22:09 ` Jan Kiszka 2007-08-14 5:20 ` Roland Tollenaar 2007-08-14 6:46 ` Wolfgang Grandegger 0 siblings, 2 replies; 12+ messages in thread From: Jan Kiszka @ 2007-08-13 22:09 UTC (permalink / raw) To: Wolfgang Grandegger; +Cc: xenomai-help [-- Attachment #1: Type: text/plain, Size: 1000 bytes --] Wolfgang Grandegger wrote: > Roland Tollenaar wrote: >> Hi Wolfgang, >> >>>> See below. This does not look good. Does it mean that I am only >>>> always reading out the last socket and the rest are having their >>>> buffers pumped full? Should I be unbinding somehow? >>> Don't know, check your code ;-). >> Thanks that is exactly what I did because I thought I was unbinding. >> rt_dev_close () should do that for me correct? Its not. At least not >> reliably. :( > > That's wired. You mean you called rt_dev_close() and the socket still > does show up in /proc/rtcan_sockets? Is it possible that there is > another task still using that socket? Could you show the code fragment > doing that. Recall that up to Xenomai 2.4 RTDM device/socket closing may fail (with -EAGAIN) when some other thread is currently using it and doesn't release it immediately when being "asked". That means for now you should loop over [rt_dev_]close as long as EAGAIN is returned. Jan [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 250 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence 2007-08-13 22:09 ` Jan Kiszka @ 2007-08-14 5:20 ` Roland Tollenaar 2007-08-14 7:24 ` Jan Kiszka 2007-08-14 6:46 ` Wolfgang Grandegger 1 sibling, 1 reply; 12+ messages in thread From: Roland Tollenaar @ 2007-08-14 5:20 UTC (permalink / raw) To: Jan Kiszka; +Cc: xenomai-help Hi, > Recall that up to Xenomai 2.4 RTDM device/socket closing may fail (with > -EAGAIN) when some other thread is currently using it and doesn't > release it immediately when being "asked". That means for now you should > loop over [rt_dev_]close as long as EAGAIN is returned. Excellent thanks. I did not know this. Is xenomai 2.4 stable yet? Would you advise it as the version of choice at the moment? Roland > > Jan > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence 2007-08-14 5:20 ` Roland Tollenaar @ 2007-08-14 7:24 ` Jan Kiszka 0 siblings, 0 replies; 12+ messages in thread From: Jan Kiszka @ 2007-08-14 7:24 UTC (permalink / raw) To: rolandtollenaar; +Cc: xenomai-help [-- Attachment #1: Type: text/plain, Size: 830 bytes --] Roland Tollenaar wrote: > Hi, > >> Recall that up to Xenomai 2.4 RTDM device/socket closing may fail (with >> -EAGAIN) when some other thread is currently using it and doesn't >> release it immediately when being "asked". That means for now you should >> loop over [rt_dev_]close as long as EAGAIN is returned. > > Excellent thanks. I did not know this. Is xenomai 2.4 stable yet? Would > you advise it as the version of choice at the moment? 2.4 is in -rc cycle, means there can still be bugs (ie. more bugs than in stable ;) ). If you have more than just a few weeks to go until your system role-out, having a look and giving it a try is not wrong. We'd love to read your reports! ;) And you can quickly switch back again. However, solely for the sake of this feature, I wouldn't throw 2.3.x away. Jan [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 250 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence 2007-08-13 22:09 ` Jan Kiszka 2007-08-14 5:20 ` Roland Tollenaar @ 2007-08-14 6:46 ` Wolfgang Grandegger 2007-08-14 7:41 ` Roland Tollenaar 2007-08-14 10:34 ` Roland Tollenaar 1 sibling, 2 replies; 12+ messages in thread From: Wolfgang Grandegger @ 2007-08-14 6:46 UTC (permalink / raw) To: Jan Kiszka; +Cc: xenomai-help Jan Kiszka wrote: > Wolfgang Grandegger wrote: >> Roland Tollenaar wrote: >>> Hi Wolfgang, >>> >>>>> See below. This does not look good. Does it mean that I am only >>>>> always reading out the last socket and the rest are having their >>>>> buffers pumped full? Should I be unbinding somehow? >>>> Don't know, check your code ;-). >>> Thanks that is exactly what I did because I thought I was unbinding. >>> rt_dev_close () should do that for me correct? Its not. At least not >>> reliably. :( >> That's wired. You mean you called rt_dev_close() and the socket still >> does show up in /proc/rtcan_sockets? Is it possible that there is >> another task still using that socket? Could you show the code fragment >> doing that. > > Recall that up to Xenomai 2.4 RTDM device/socket closing may fail (with > -EAGAIN) when some other thread is currently using it and doesn't > release it immediately when being "asked". That means for now you should > loop over [rt_dev_]close as long as EAGAIN is returned. Roland, could you please check the return code of [rt_dev_]close. Nevertheless, I'm still puzzled why the socket shows up in /proc/rtcan/sockets because rtcan_raw_close() is called before returning -EAGAIN and the error mask shown there is weired as well. Roland, do you perform the open and close in a serialized way (same task) and in nrt context? Wolfgang. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence 2007-08-14 6:46 ` Wolfgang Grandegger @ 2007-08-14 7:41 ` Roland Tollenaar 2007-08-14 7:52 ` Jan Kiszka 2007-08-14 10:34 ` Roland Tollenaar 1 sibling, 1 reply; 12+ messages in thread From: Roland Tollenaar @ 2007-08-14 7:41 UTC (permalink / raw) To: Wolfgang Grandegger; +Cc: xenomai-help, Jan Kiszka Hi, >> Recall that up to Xenomai 2.4 RTDM device/socket closing may fail (with >> -EAGAIN) when some other thread is currently using it and doesn't >> release it immediately when being "asked". That means for now you should >> loop over [rt_dev_]close as long as EAGAIN is returned. > > Roland, could you please check the return code of [rt_dev_]close. > Nevertheless, I'm still puzzled why the socket shows up in > /proc/rtcan/sockets because rtcan_raw_close() is called before returning I have been battling with this all morning. I close with do{ ret=rt_dev_close(can_fd); //printf("%d",ret) while(ret!=-9) but this only works (without fail) if I uncomment the printf line. I have now tried to put in a sleep(1) command instead but due to the crash caused by commenting out hte crash (does not come out of loop) I am now trying to save my filesystem. :( :(. > -EAGAIN and the error mask shown there is weired as well. > Roland, do you perform the open and close in a serialized way (same > task) and in nrt context? I call the rt_dev_close in non-real time code if that is what you are asking. Same with the init AFAIK. I will post the code if I can retrieve it. Roland > > Wolfgang. > > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence 2007-08-14 7:41 ` Roland Tollenaar @ 2007-08-14 7:52 ` Jan Kiszka 0 siblings, 0 replies; 12+ messages in thread From: Jan Kiszka @ 2007-08-14 7:52 UTC (permalink / raw) To: rolandtollenaar; +Cc: xenomai-help [-- Attachment #1: Type: text/plain, Size: 1242 bytes --] Roland Tollenaar wrote: > Hi, > >>> Recall that up to Xenomai 2.4 RTDM device/socket closing may fail (with >>> -EAGAIN) when some other thread is currently using it and doesn't >>> release it immediately when being "asked". That means for now you should >>> loop over [rt_dev_]close as long as EAGAIN is returned. >> >> Roland, could you please check the return code of [rt_dev_]close. >> Nevertheless, I'm still puzzled why the socket shows up in >> /proc/rtcan/sockets because rtcan_raw_close() is called before returning > I have been battling with this all morning. I close with > > do{ > ret=rt_dev_close(can_fd); > //printf("%d",ret) > while(ret!=-9) > > but this only works (without fail) if I uncomment the printf line. I > have now tried to put in a sleep(1) command instead but due to the crash > caused by commenting out hte crash (does not come out of loop) I am now > trying to save my filesystem. :( :(. > That really sounds like this issue, just applied on CAN: http://sourceforge.net/mailarchive/forum.php?thread_name=9203.194.114.62.34.1186585293.squirrel%40webmail.krokoworld.de&forum_name=rtnet-users If yes, you would have found a second reason to look at 2.4... ;) Jan [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 250 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Xenomai-help] rtcan bufferoverflow but no evidence 2007-08-14 6:46 ` Wolfgang Grandegger 2007-08-14 7:41 ` Roland Tollenaar @ 2007-08-14 10:34 ` Roland Tollenaar 1 sibling, 0 replies; 12+ messages in thread From: Roland Tollenaar @ 2007-08-14 10:34 UTC (permalink / raw) To: Wolfgang Grandegger; +Cc: xenomai-help, Jan Kiszka Hi, > Roland, could you please check the return code of [rt_dev_]close. > Nevertheless, I'm still puzzled why the socket shows up in > /proc/rtcan/sockets because rtcan_raw_close() is called before returning > -EAGAIN and the error mask shown there is weired as well. > Roland, do you perform the open and close in a serialized way (same > task) and in nrt context? I have now got the close loop with the printf in it. You are probably right that I was closing in the rt context because syslog shows an error from rtdm stating that one cannot close from rea time. I understand from a thread elsewhere that printf brings the program to secondary mode hence helps with the closing? Its working now infallibly, no more open sockets remain so I can work like this. Also applied the suggestion to turn off the loopback with setsockopt and that functions well too (no more buffer overflows) I only still have the problem with EML which does not seem happy in combination with rtcan. Even if I increase the rtskbf_cache_size value (now on 2048). It still occurs incidentally and even after the program has been running for a while. Anyhow that seems to have nothing to do with this topic....drifting a bit. Thanks. Roland > > Wolfgang. > > > ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2007-08-14 10:34 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-13 14:58 [Xenomai-help] rtcan bufferoverflow but no evidence Roland Tollenaar
2007-08-13 15:38 ` Wolfgang Grandegger
[not found] ` <46C07D73.7070302@domain.hid>
[not found] ` <46C080C8.10906@domain.hid>
[not found] ` <46C0835E.8010105@domain.hid>
[not found] ` <46C0B036.3030306@domain.hid>
[not found] ` <46C0B1DF.6090509@domain.hid>
2007-08-13 19:59 ` Wolfgang Grandegger
2007-08-13 20:20 ` Roland Tollenaar
2007-08-13 20:07 ` Wolfgang Grandegger
2007-08-13 22:09 ` Jan Kiszka
2007-08-14 5:20 ` Roland Tollenaar
2007-08-14 7:24 ` Jan Kiszka
2007-08-14 6:46 ` Wolfgang Grandegger
2007-08-14 7:41 ` Roland Tollenaar
2007-08-14 7:52 ` Jan Kiszka
2007-08-14 10:34 ` Roland Tollenaar
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.