> On Wed 19-04-17 14:41:30, Tetsuo Handa wrote: > [...] > > Somebody is waiting forever with cpu_hotplug.lock held? > > Why would that matter for drain_all_pages? It doesn't use > get_online_cpus since a459eeb7b852 ("mm, page_alloc: do not depend on > cpu hotplug locks inside the allocator") while ce612879ddc7 ("mm: move > pcp and lru-pcp draining into single wq") was merged later. > Looking at ce612879ddc7 ("mm: move pcp and lru-pcp draining into single wq"), we merged "lru-add-drain" (!WQ_FREEZABLE && WQ_MEM_RECLAIM) workqueue and "vmstat" (WQ_FREEZABLE && WQ_MEM_RECLAIM) workqueue into "mm_percpu_wq" (WQ_FREEZABLE && WQ_MEM_RECLAIM) workqueue. - lru_add_drain_wq = alloc_workqueue("lru-add-drain", WQ_MEM_RECLAIM, 0); - vmstat_wq = alloc_workqueue("vmstat", WQ_FREEZABLE|WQ_MEM_RECLAIM, 0); + mm_percpu_wq = alloc_workqueue("mm_percpu_wq", + WQ_FREEZABLE|WQ_MEM_RECLAIM, 0); That means "lru-add-drain" became freezable, doesn't it? And this problem occurs around resume operation where all freezable threads are frozen? Then, lru_add_drain_per_cpu() cannot be performed due to mm_percpu_wq frozen?