From: Michal Hocko <mhocko@kernel.org> To: linux-mm@kvack.org Cc: Peter Zijlstra <peterz@infradead.org>, Thomas Gleixner <tglx@linutronix.de>, Johannes Weiner <hannes@cmpxchg.org>, Mel Gorman <mgorman@suse.de>, Tejun Heo <tj@kernel.org>, LKML <linux-kernel@vger.kernel.org> Subject: [PATCH -v2] mm: drop hotplug lock from lru_add_drain_all Date: Sun, 5 Nov 2017 08:45:09 +0100 [thread overview] Message-ID: <20171105074509.fmkki36il5h45vru@dhcp22.suse.cz> (raw) In-Reply-To: <20171102093613.3616-3-mhocko@kernel.org> Here is v2 which drops the IRQ disabling in the hotplug callback and fixes the compile breakage. The patch 1 is wrong as pointed out by Hugh, but this one alone should help already. --- >From 53d3003635bfa619745048aa4b70ca62f714960d Mon Sep 17 00:00:00 2001 From: Michal Hocko <mhocko@suse.com> Date: Thu, 2 Nov 2017 10:19:17 +0100 Subject: [PATCH] mm: drop hotplug lock from lru_add_drain_all Pulling cpu hotplug locks inside the mm core function like lru_add_drain_all just asks for problems and the recent lockdep splat [1] just proves this. While the usage in that particular case might be wrong we should prevent from locking as lru_add_drain_all is used at many places. It seems that this is not all that hard to achieve actually. We have done the same thing for drain_all_pages which is analogous by a459eeb7b852 ("mm, page_alloc: do not depend on cpu hotplug locks inside the allocator"). All we have to care about is to handle - the work item might be executed on a different cpu in worker from unbound pool so it doesn't run on pinned on the cpu - we have to make sure that we do not race with page_alloc_cpu_dead calling lru_add_drain_cpu the first part is already handled because the worker calls lru_add_drain which disables preemption when calling lru_add_drain_cpu on the local cpu it is draining. The later is true because page_alloc_cpu_dead is called on the controlling CPU after the hotplugged CPU vanished completely. [1] http://lkml.kernel.org/r/089e0825eec8955c1f055c83d476@google.com Signed-off-by: Michal Hocko <mhocko@suse.com> --- include/linux/swap.h | 1 - mm/memory_hotplug.c | 2 +- mm/swap.c | 9 +-------- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/include/linux/swap.h b/include/linux/swap.h index 84255b3da7c1..cfc200673e13 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -331,7 +331,6 @@ extern void mark_page_accessed(struct page *); extern void lru_add_drain(void); extern void lru_add_drain_cpu(int cpu); extern void lru_add_drain_all(void); -extern void lru_add_drain_all_cpuslocked(void); extern void rotate_reclaimable_page(struct page *page); extern void deactivate_file_page(struct page *page); extern void mark_page_lazyfree(struct page *page); diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 832a042134f8..c9f6b418be79 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1641,7 +1641,7 @@ static int __ref __offline_pages(unsigned long start_pfn, goto failed_removal; cond_resched(); - lru_add_drain_all_cpuslocked(); + lru_add_drain_all(); drain_all_pages(zone); pfn = scan_movable_pages(start_pfn, end_pfn); diff --git a/mm/swap.c b/mm/swap.c index 381e0fe9efbf..8bfdcab9f83e 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -688,7 +688,7 @@ static void lru_add_drain_per_cpu(struct work_struct *dummy) static DEFINE_PER_CPU(struct work_struct, lru_add_drain_work); -void lru_add_drain_all_cpuslocked(void) +void lru_add_drain_all(void) { static DEFINE_MUTEX(lock); static struct cpumask has_work; @@ -724,13 +724,6 @@ void lru_add_drain_all_cpuslocked(void) mutex_unlock(&lock); } -void lru_add_drain_all(void) -{ - get_online_cpus(); - lru_add_drain_all_cpuslocked(); - put_online_cpus(); -} - /** * release_pages - batched put_page() * @pages: array of pages to release -- 2.14.2 -- Michal Hocko SUSE Labs
WARNING: multiple messages have this Message-ID (diff)
From: Michal Hocko <mhocko@kernel.org> To: linux-mm@kvack.org Cc: Peter Zijlstra <peterz@infradead.org>, Thomas Gleixner <tglx@linutronix.de>, Johannes Weiner <hannes@cmpxchg.org>, Mel Gorman <mgorman@suse.de>, Tejun Heo <tj@kernel.org>, LKML <linux-kernel@vger.kernel.org> Subject: [PATCH -v2] mm: drop hotplug lock from lru_add_drain_all Date: Sun, 5 Nov 2017 08:45:09 +0100 [thread overview] Message-ID: <20171105074509.fmkki36il5h45vru@dhcp22.suse.cz> (raw) In-Reply-To: <20171102093613.3616-3-mhocko@kernel.org> Here is v2 which drops the IRQ disabling in the hotplug callback and fixes the compile breakage. The patch 1 is wrong as pointed out by Hugh, but this one alone should help already. ---
next prev parent reply other threads:[~2017-11-05 7:45 UTC|newest] Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-11-02 9:36 [RFC 0/2] do not depend on cpuhotplug logs in lru_add_drain_all Michal Hocko 2017-11-02 9:36 ` Michal Hocko 2017-11-02 9:36 ` [PATCH 1/2] shmem: drop lru_add_drain_all from shmem_wait_for_pins Michal Hocko 2017-11-02 9:36 ` Michal Hocko 2017-11-03 7:46 ` Hugh Dickins 2017-11-03 7:46 ` Hugh Dickins 2017-11-03 8:24 ` Michal Hocko 2017-11-03 8:24 ` Michal Hocko 2017-11-03 9:52 ` David Herrmann 2017-11-03 9:52 ` David Herrmann 2017-11-05 0:28 ` Hugh Dickins 2017-11-05 0:28 ` Hugh Dickins 2017-11-05 7:37 ` Michal Hocko 2017-11-05 7:37 ` Michal Hocko 2017-11-02 9:36 ` [PATCH 2/2] mm: drop hotplug lock from lru_add_drain_all Michal Hocko 2017-11-02 9:36 ` Michal Hocko 2017-11-02 12:37 ` Michal Hocko 2017-11-02 12:37 ` Michal Hocko 2017-11-02 13:02 ` Thomas Gleixner 2017-11-02 13:02 ` Thomas Gleixner 2017-11-02 13:16 ` Michal Hocko 2017-11-02 13:16 ` Michal Hocko 2017-11-02 13:42 ` Thomas Gleixner 2017-11-02 13:42 ` Thomas Gleixner 2017-11-03 20:02 ` kbuild test robot 2017-11-05 7:45 ` Michal Hocko [this message] 2017-11-05 7:45 ` [PATCH -v2] " Michal Hocko
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20171105074509.fmkki36il5h45vru@dhcp22.suse.cz \ --to=mhocko@kernel.org \ --cc=hannes@cmpxchg.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mgorman@suse.de \ --cc=peterz@infradead.org \ --cc=tglx@linutronix.de \ --cc=tj@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.