mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
[Issue]: CAN freezes/stops to send messages after restart from bus-off state. Throws following log from kernel: "write: No buffer space available" [Reason]: When message txfer starts, tx_object (which keeps track of active tx) gets filled. If CAN goes to bus-off state, txfer remains incomplete for some messages. In such case, tx_object bits will not get cleared. It will stop adding more messages in controller RAM. Along with tx_object, from network layer, there are socket echo buffers. When CAN is initialized and up on network, netif_start_queue is pushed to start transmission. When msg txfer starts, socket buffer gets filled and freed only when txfer completes. During bus-off, since network queue remains ON, all the queued msgs get filled in socket buffers and does not allow upcoming msgs. Therefore we see "write: No buffer space available". [Fix]: Clear tx_object when device goes to bus-off state and stop network queue. Start network queue again during restart from bus-off. Bug 4438223 Change-Id: I3cbc6529a90f357372c8b0095bdce4217b133e9b Signed-off-by: Shubhi Garg <shgarg@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3142091 GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com> Reviewed-by: Bibek Basu <bbasu@nvidia.com>