• Chen-Yu Tsai's avatar
    notifier: Initialize new struct srcu_usage field · de29a96a
    Chen-Yu Tsai authored
    In commit 95433f72 ("srcu: Begin offloading srcu_struct fields to
    srcu_update"), a new struct srcu_usage field was added, but was not
    properly initialized. This led to a "spinlock bad magic" BUG when the
    SRCU notifier was ever used. This was observed in the MediaTek CCI
    devfreq driver on next-20230525. The trimmed stack trace is as follows:
    
        BUG: spinlock bad magic on CPU#4, swapper/0/1
         lock: 0xffffff80ff529ac0, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
        Call trace:
         spin_bug+0xa4/0xe8
         do_raw_spin_lock+0xec/0x120
         _raw_spin_lock_irqsave+0x78/0xb8
         synchronize_srcu+0x3c/0x168
         srcu_notifier_chain_unregister+0x5c/0xa0
         cpufreq_unregister_notifier+0x94/0xe0
         devfreq_passive_event_handler+0x7c/0x3e0
         devfreq_remove_device+0x48/0xe8
    
    Add __SRCU_USAGE_INIT() to SRCU_NOTIFIER_INIT() so that srcu_usage gets
    initialized properly.
    Reported-by: default avatarJon Hunter <jonathanh@nvidia.com>
    Fixes: 95433f72 ("srcu: Begin offloading srcu_struct fields to srcu_update")
    Signed-off-by: default avatarChen-Yu Tsai <wenst@chromium.org>
    Tested-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Cc: Matthias Brugger <matthias.bgg@gmail.com>
    Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
    Cc: "Michał Mirosław" <mirq-linux@rere.qmqm.pl>
    Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
    Cc: Sachin Sant <sachinp@linux.ibm.com>
    Cc: Joel Fernandes (Google) <joel@joelfernandes.org
    Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
    Acked-by: default avatarZqiang <qiang.zhang1211@gmail.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    de29a96a
notifier.h 8.49 KB