On Sun 25-01-26 23:45:11, Frederic Weisbecker wrote:
> The HK_TYPE_DOMAIN housekeeping cpumask will soon be made modifiable at
> runtime. In order to synchronize against vmstat workqueue to make sure
> that no asynchronous vmstat work is pending or executing on a newly made
> isolated CPU, target and queue a vmstat work under the same RCU read
> side critical section.
>
> Whenever housekeeping will update the HK_TYPE_DOMAIN cpumask, a vmstat
> workqueue flush will also be issued in a further change to make sure
> that no work remains pending after a CPU has been made isolated.
>
> Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Acked-by: Michal Hocko <mhocko@suse.com>
Thanks!
> ---
> mm/vmstat.c | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/mm/vmstat.c b/mm/vmstat.c
> index 65de88cdf40e..ed19c0d42de6 100644
> --- a/mm/vmstat.c
> +++ b/mm/vmstat.c
> @@ -2144,11 +2144,13 @@ static void vmstat_shepherd(struct work_struct *w)
> * infrastructure ever noticing. Skip regular flushing from vmstat_shepherd
> * for all isolated CPUs to avoid interference with the isolated workload.
> */
> - if (cpu_is_isolated(cpu))
> - continue;
> + scoped_guard(rcu) {
> + if (cpu_is_isolated(cpu))
> + continue;
>
> - if (!delayed_work_pending(dw) && need_update(cpu))
> - queue_delayed_work_on(cpu, mm_percpu_wq, dw, 0);
> + if (!delayed_work_pending(dw) && need_update(cpu))
> + queue_delayed_work_on(cpu, mm_percpu_wq, dw, 0);
> + }
>
> cond_resched();
> }
> --
> 2.51.1
>
--
Michal Hocko
SUSE Labs