Messages in this thread | | | Subject | Re: [PATCH] eventfd: Make signal recursion protection a task bit | From | Daniel Bristot de Oliveira <> | Date | Thu, 29 Jul 2021 16:32:40 +0200 |
| |
On 7/29/21 1:01 PM, Thomas Gleixner wrote: > The recursion protection for eventfd_signal() is based on a per CPU > variable and relies on the !RT semantics of spin_lock_irqsave() for > protecting this per CPU variable. On RT kernels spin_lock_irqsave() neither > disables preemption nor interrupts which allows the spin lock held section > to be preempted. If the preempting task invokes eventfd_signal() as well, > then the recursion warning triggers. > > Paolo suggested to protect the per CPU variable with a local lock, but > that's heavyweight and actually not necessary. The goal of this protection > is to prevent the task stack from overflowing, which can be achieved with a > per task recursion protection as well. > > Replace the per CPU variable with a per task bit similar to other recursion > protection bits like task_struct::in_page_owner. This works on both !RT and > RT kernels and removes as a side effect the extra per CPU storage. > > No functional change for !RT kernels. > > Reported-by: Daniel Bristot de Oliveira <bristot@redhat.com> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Testing....
Thanks! -- Daniel
| |