Messages in this thread |  | | Date | Wed, 27 Jun 2018 14:47:06 +0200 | From | Sebastian Andrzej Siewior <> | Subject | Re: [PATCH] Revert mm/vmstat.c: fix vmstat_update() preemption BUG |
| |
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
|  |