<div dir="ltr">Hi all,<br><br>I'm working on a realtime control system driving a group of motors, my setup:<br><br>- RTAI 5.1 patched linux kernel 4.9.80 smp preempt<br>- Vortex86DX3 SoC (2 cores @1 GHz)<br>- e1000 (82541GI chipset)<br>- etherlab drivers from <a href="http://github.com/ribalda/ethercat/tree/master">github.com/ribalda/ethercat/tree/master</a><br><br>The main motion c control loop runs at 1Khz inside a RTAI hard realtime thread,<br>using the RTDM interface via libethercat_rtdm to exchange data.<br>I came upon two problems:<br><br>* After loading at boot, ethercat module ec_e1000 start eating up more and more kernel <br>memory (object kmalloc-192, as seen from slabtop) until the whole 1G available <br>for the kernel is filled up and oom killer process is triggered.<br>The function that seemed responsible for this behavior, e1000_clean_rx_irq, can <br>be found in devices/e1000/e1000_main-4.9-ethercat.c, around line 4515.<br>In particular the struct sk_buff *skb gets multiple allocations and is never <br>released. I added the lines:<br><br>if (skb)<br>    dev_kfree_sbk(skb);<br>       <br>just before "next_desc:" label and this seems to have solved the issue.<br><br>** When the control loop runs inside a soft realtime thread (using<br>rt_make_soft_real_time() from RTAI api, essentially a linux high priority thread) <br>there are no problems but the latencies are not entirely satisfactory, so it <br>became necessary to call rt_make_hard_real_time() instead to use the full hard realtime <br>RTAI capabilities, but a new problem came up: the machine started freezing randomly, <br>sometimes after few seconds, sometimes after few hours.<br>I found that it always freeze during the netdev_alloc_frag call @line 2136 in <br>devices/e1000/e1000_main-4.9-ethercat.c.<br><br>Unfortunately my knowledge of the driver is too limited to dig deeper into the cause <br>of the problem, so I'm asking if some of you may have any suggestions.<br><br>Best regards, Luca<br></div>