]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
ARM: 8840/1: use a raw_spinlock_t in unwind
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Wed, 13 Feb 2019 16:14:42 +0000 (17:14 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 27 Apr 2019 07:33:50 +0000 (09:33 +0200)
commit1c2bfc4636de925f47d5f4e111e32235da0ef646
tree011e06c409921b3e81336d2d148dcf4192bd48c7
parent2f36d3ea8c55d673d42accac6ad3d16a517fe6d1
ARM: 8840/1: use a raw_spinlock_t in unwind

[ Upstream commit 74ffe79ae538283bbf7c155e62339f1e5c87b55a ]

Mostly unwind is done with irqs enabled however SLUB may call it with
irqs disabled while creating a new SLUB cache.

I had system freeze while loading a module which called
kmem_cache_create() on init. That means SLUB's __slab_alloc() disabled
interrupts and then

->new_slab_objects()
 ->new_slab()
  ->setup_object()
   ->setup_object_debug()
    ->init_tracking()
     ->set_track()
      ->save_stack_trace()
       ->save_stack_trace_tsk()
        ->walk_stackframe()
         ->unwind_frame()
          ->unwind_find_idx()
           =>spin_lock_irqsave(&unwind_lock);

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/arm/kernel/unwind.c