]> git.baikalelectronics.ru Git - kernel.git/commitdiff
debugobjects: Make them PREEMPT_RT aware
authorThomas Gleixner <tglx@linutronix.de>
Thu, 12 Aug 2021 15:43:26 +0000 (17:43 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 13 Aug 2021 08:07:44 +0000 (10:07 +0200)
On PREEMPT_RT enabled kernels it is not possible to refill the object pool
from atomic context (preemption or interrupts disabled) as the allocator
might acquire 'sleeping' spinlocks.

Guard the invocation of fill_pool() accordingly.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Link: https://lore.kernel.org/r/87sfzehdnl.ffs@tglx
lib/debugobjects.c

index 9e14ae02306bc4901f47483811142e5db750c3f0..6946f8e204e3950614c979f5e9732ac65546debc 100644 (file)
@@ -557,7 +557,12 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack
        struct debug_obj *obj;
        unsigned long flags;
 
-       fill_pool();
+       /*
+        * On RT enabled kernels the pool refill must happen in preemptible
+        * context:
+        */
+       if (!IS_ENABLED(CONFIG_PREEMPT_RT) || preemptible())
+               fill_pool();
 
        db = get_bucket((unsigned long) addr);