Re: [PATCH net] net: renesas: rswitch: fix forwarding offload statemachine
From: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
Date: 2026-02-05 07:58:55
Also in:
linux-renesas-soc, lkml
WBR, Nikita Yushchenko, System Software Engineer @ Cogent Embedded 05.02.2026 08:47, Nikita Yushchenko wrote:
Hello Michaelquoted
- } else if (rdev->forwarding_offloaded) { + } else if (rdev->forwarding_offloaded && + !rdev->forwarding_requested) { rswitch_change_l2_hw_offloading(rdev, false, false); }Although indeed the condition in the current code is not correct, I'm not sure comfortable with this fix. Full condition for a port to be a valid candidate for hardware forwarding is rdev_for_l2_offload() && rdev->forwarding_requested It is not obvious if at this point rdev_for_l2_offload() could get changed from the last call to rswitch_change_l2_hw_offloading(), so using only the partial condition at this point does not look good for me. I'd suggest to either change to something like if (rdev_for_l2_offload() && rdev->forwarding_requested && !rdev->forwarding_offloaded) rswitch_change_l2_hw_offloading(rdev, true, false); if (!(rdev_for_l2_offload() && rdev->forwarding_requested) && rdev->forwarding_offloaded) rswitch_change_l2_hw_offloading(rdev, false, false); Or maybe just if (rdev_for_l2_offload() && rdev->forwarding_requested) rswitch_change_l2_hw_offloading(rdev, true, false); else rswitch_change_l2_hw_offloading(rdev, false, false); since rswitch_change_l2_hw_offloading() has internal check for the current state and returns early if the requested change is already applied.
May be even better to add bool new_forwarding_offloaded = rdev_for_l2_offload(rdev) && rdev->forwarding_requested; at the beginning of the loop body, and use this flag over the loop - it will make the code shorter and cleaner.