Good work, thanks! This explains it all, lemme see if I can write it correctly: tsc_init() enables the __use_tsc static key on the BSP and *that* grabs jump_label_mutex before it grabs the hotplug lock while on another CPU the CPU notifier runs which holds the hotplug lock already and then enables another static key - the sched_smt_present - which causes the lock inversion by trying to grab the jump_label_mutex first. @jikos: the way I see it, there's no way around backporting the jump label patches so that we don't grab that hotplug again in the notifier call. Or am I missing something?