On 2018-06-27 08:36:57 [-0400], Steven Rostedt wrote: > On Wed, Apr 11, 2018 at 09:07:30PM +0200, Sebastian Andrzej Siewior wrote: > > > > This already happens: > > - vmstat_shepherd() does get_online_cpus() and within this block it does > > queue_delayed_work_on(). So this has to wait until cpuhotplug > > completed before it can schedule something and then it won't schedule > > anything on the "off" CPU. > > But can't we have something like this happen: ? > > CPU0 CPU1 CPU2 > ---- ---- ---- > get_online_cpus() > queue_work(vmstat_update, cpu1) > wakeup(kworker/1) > High prio task running > put_online_cpus() > Shutdown CPU 1 > migrate kworker/1 > schedule kworker/1 > (smp_processor_id() != 1) I don't get CPU1 doing in here. kworker/1 should not be migrated to begin with. The work item should be done before CPU2 shutdowns CPU1 (or 0) because vmstat_cpu_down_prep() cancels the work while the CPUs goes down so it should not be migrated. Also, the work is enqueued while holding the CPU HP lock. Sebastian