Re: [PATCH net-next] ppp: Replace per-CPU recursion counter with lock-owner field
From: Paolo Abeni <pabeni@redhat.com>
Date: 2025-07-03 07:55:27
Also in:
linux-rt-devel
On 6/27/25 12:50 PM, Sebastian Andrzej Siewior wrote:
The per-CPU variable ppp::xmit_recursion is protecting against recursion due to wrong configuration of the ppp channels. The per-CPU variable relies on disabled BH for its locking. Without per-CPU locking in local_bh_disable() on PREEMPT_RT this data structure requires explicit locking. The ppp::xmit_recursion is used as a per-CPU boolean. The counter is checked early in the send routing and the transmit path is only entered if the counter is zero. Then the counter is incremented to avoid recursion. It used to detect recursion on channel::downl and ppp::wlock. Replace the per-CPU ppp:xmit_recursion counter with an explicit owner field for both structs. pch_downl_lock() is helper to check for recursion on channel::downl and either assign the owner field if there is no recursion. __ppp_channel_push() is moved into ppp_channel_push() and gets the recursion check unconditionally because it is based on the lock now. The recursion check in ppp_xmit_process() is based on ppp::wlock which is acquired by ppp_xmit_lock(). The locking is moved from __ppp_xmit_process() into ppp_xmit_lock() to check the owner, lock and then assign the owner in one spot. The local_bh_disable() in ppp_xmit_lock() can be removed because ppp_xmit_lock() disables BH as part of the locking. Cc: Gao Feng <redacted> Cc: Guillaume Nault <redacted> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Is there any special reason to not use local_lock here? I find this patch quite hard to read and follow, as opposed to the local_lock usage pattern. Also the fact that the code change does not affect RT enabled build only is IMHO a negative thing. /P