Roland Tollenaar wrote:
> Hi
> 
>>> RTnet:rtskb allocation from real-time cache failed.
>>> Assertion failed! drivers/xenomai/can/rtcan_raw.c: rtcan_tx_push:168 
>>> dev->tx_socket=0 (3) TX skb still in use.
>>
>> Hm, this is not supposed to happen.
> Which of the two?

The RTCAN assertion. Well, in fact, it can happen when the device goes 
bus-off or is stopped while a TX message is pending. The next message 
after (re-)start will the trigger this message. This is a bug but it 
should _not_ harm (either I remove the assertion or I reset properly the 
value of dev->tx_socket).

The first one should be pretty clear. The rtskb pool seems to be exhausted.

> 
>> Can you show the output of /proc/rtcan/devices and /proc/rtcan/sockets 
>> before and after the problem showed up.
> 
> Below is an accumulation of what I think you are asking for. I am not 
> convinced that the rtskb allocation failed message is serious, as you 
> will see from the syslog and my comment above it only takes place when i 
> close my application. Although I try to close all connections neatly 
> certain threads still seem to be busy. See the errors I get on closing 
> the application.
> 
> App running with no problem:
> 
> [EMAIL PROTECTED]:~# cat /proc/rtcan/sockets
> fd Name___________ Filter ErrMask RX_Timeout_ns TX_Timeout_ns RX_BufFull 
> TX_Lo
>  2 rtcan2               1 0x00000      infinite      infinite 0     1
>  0 rtcan2              -1 0x00000      infinite      infinite 0     1
> 
> [EMAIL PROTECTED]:~# cat /proc/rtcan/devices
> Name___________ _Baudrate State___ TX_Counter RX_Counter ____Errors
> rtcan0          undefined stopped           0          0          0
> rtcan1          undefined stopped           0          0          0
> rtcan2            1000000 active     16321347   27633347    2367116
> 
> 
> App running with messages failing
> 
> [EMAIL PROTECTED]:/var/log# cat /proc/rtcan/sockets
> fd Name___________ Filter ErrMask RX_Timeout_ns TX_Timeout_ns RX_BufFull 
> TX_Lo
>  2 rtcan2               1 0x00000      infinite      infinite 0     1
>  0 rtcan2              -1 0x00000      infinite      infinite 0     1
> 
> 
> [EMAIL PROTECTED]:/var/log# cat /proc/rtcan/devices
> Name___________ _Baudrate State___ TX_Counter RX_Counter ____Errors
> rtcan0          undefined stopped           0          0          0
> rtcan1          undefined stopped           0          0          0
> rtcan2            1000000 active     16850473   28691571    2367116

Oops, that much errors?

> cat /var/syslog shows that the error only seems to come up when the 
> application closes.
> 
> Only occurs on closing the application
> Aug 13 13:01:28 (none) kernel: RTnet: rtskb allocation from real-time 
> cache failed
> Aug 13 13:02:14 (none) kernel: RTnet: rtskb allocation from real-time 
> cache failed
> Aug 13 14:02:34 (none) kernel: RTnet: rtskb allocation from real-time 
> cache failed
> Aug 13 14:03:36 (none) kernel: RTnet: rtskb allocation from real-time 
> cache failed
> Aug 13 14:18:39 (none) kernel: RTnet: rtskb allocation from real-time 
> cache failed
> Aug 13 14:19:33 (none) kernel: RTnet: rtskb allocation from real-time 
> cache failed
> Aug 13 14:19:58 (none) kernel: RTnet: rtskb allocation from real-time 
> cache failed
> Aug 13 14:21:27 (none) kernel: RTnet: rtskb allocation from real-time 
> cache failed
> Aug 13 14:22:10 (none) kernel: RTnet: rtskb allocation from real-time 
> cache failed
> 
> 
> When I close the application I get these errors
> 
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed
> rt_dev_recv: aborted because socket was closed

You should handle this error properly.

> rt_dev_ioctl: Bad file descriptor
> Waiting for tasks to stop....low_level_output(): Cannot Send
> low_level_output(): Cannot Send
> low_level_output(): Cannot Send
> low_level_output(): Cannot Send
> low_level_output(): Cannot Send
> low_level_output(): Cannot Send
> low_level_output(): Cannot Send
> low_level_output(): Cannot Send
> low_level_output(): Cannot Send
> low_level_output(): Cannot Send
> low_level_txandrx: failed: MAX_TRIES_TX: Giving up
> DLL::txandrx() Error
> PD_Buffer: Error sending PD
> txandrx failed:
> 
> 
> Does this shed any light on the matter?

Hm, seems that your shutdown is not implemented properly.

Wolfgang.

_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to