From: Byungchul Park <byungchul.park@lge.com> To: peterz@infradead.org, mingo@kernel.org, akpm@linux-foundation.org Cc: tglx@linutronix.de, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, kernel-team@lge.com, jack@suse.cz, jlayton@redhat.com, viro@zeniv.linux.org.uk, hannes@cmpxchg.org, npiggin@gmail.com, rgoldwyn@suse.com, vbabka@suse.cz, mhocko@suse.com, pombredanne@nexb.com, vinmenon@codeaurora.org, gregkh@linuxfoundation.org Subject: [PATCH v2 4/4] lockdep: Add a boot parameter enabling to track page locks using lockdep and disable it by default Date: Mon, 4 Dec 2017 14:16:23 +0900 [thread overview] Message-ID: <1512364583-26070-5-git-send-email-byungchul.park@lge.com> (raw) In-Reply-To: <1512364583-26070-1-git-send-email-byungchul.park@lge.com> To track page locks using lockdep, we need a huge memory space for lockdep_map per page. So, it would be better to make it disabled by default and provide a boot parameter to turn it on. Do it. Suggested-by: Michal Hocko <mhocko@kernel.org> Signed-off-by: Byungchul Park <byungchul.park@lge.com> --- Documentation/admin-guide/kernel-parameters.txt | 7 +++++++ lib/Kconfig.debug | 5 ++++- mm/filemap.c | 23 +++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index f20ed5e..5e8d15d 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -712,6 +712,13 @@ crossrelease_fullstack [KNL] Allow to record full stack trace in cross-release + lockdep_pagelock= + [KNL] Boot-time lockdep_pagelock enabling option. + Storage of lockdep_map per page to track lock_page()/ + unlock_page() is disabled by default. With this switch, + we can turn it on. + on: enable the feature + cryptomgr.notests [KNL] Disable crypto self-tests diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 45fdb3a..c609e97 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1185,7 +1185,10 @@ config LOCKDEP_PAGELOCK select PAGE_EXTENSION help PG_locked lock is a kind of crosslock. Using crossrelease feature, - PG_locked lock can work with lockdep. + PG_locked lock can work with lockdep. Even if you include this + feature on your build, it is disabled in default. You should pass + "lockdep_pagelock=on" to boot parameter in order to enable it. It + consumes a fair amount of memory if enabled. config BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK bool "Enable the boot parameter, crossrelease_fullstack" diff --git a/mm/filemap.c b/mm/filemap.c index 34251fb..cb7b20b 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1231,8 +1231,24 @@ int __lock_page_or_retry(struct page *page, struct mm_struct *mm, #ifdef CONFIG_LOCKDEP_PAGELOCK +static int lockdep_pagelock; +static int __init allow_lockdep_pagelock(char *str) +{ + if (!str) + return -EINVAL; + + if (!strcmp(str, "on")) + lockdep_pagelock = 1; + + return 0; +} +early_param("lockdep_pagelock", allow_lockdep_pagelock); + static bool need_lockdep_pagelock(void) { + if (!lockdep_pagelock) + return false; + return true; } @@ -1286,6 +1302,10 @@ static void init_zones_in_node(pg_data_t *pgdat) static void init_lockdep_pagelock(void) { pg_data_t *pgdat; + + if (!lockdep_pagelock) + return; + for_each_online_pgdat(pgdat) init_zones_in_node(pgdat); } @@ -1305,6 +1325,9 @@ struct lockdep_map *get_page_map(struct page *p) { struct page_ext *e; + if (!lockdep_pagelock) + return NULL; + e = lookup_page_ext(p); if (!e) return NULL; -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: Byungchul Park <byungchul.park@lge.com> To: peterz@infradead.org, mingo@kernel.org, akpm@linux-foundation.org Cc: tglx@linutronix.de, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, kernel-team@lge.com, jack@suse.cz, jlayton@redhat.com, viro@zeniv.linux.org.uk, hannes@cmpxchg.org, npiggin@gmail.com, rgoldwyn@suse.com, vbabka@suse.cz, mhocko@suse.com, pombredanne@nexb.com, vinmenon@codeaurora.org, gregkh@linuxfoundation.org Subject: [PATCH v2 4/4] lockdep: Add a boot parameter enabling to track page locks using lockdep and disable it by default Date: Mon, 4 Dec 2017 14:16:23 +0900 [thread overview] Message-ID: <1512364583-26070-5-git-send-email-byungchul.park@lge.com> (raw) In-Reply-To: <1512364583-26070-1-git-send-email-byungchul.park@lge.com> To track page locks using lockdep, we need a huge memory space for lockdep_map per page. So, it would be better to make it disabled by default and provide a boot parameter to turn it on. Do it. Suggested-by: Michal Hocko <mhocko@kernel.org> Signed-off-by: Byungchul Park <byungchul.park@lge.com> --- Documentation/admin-guide/kernel-parameters.txt | 7 +++++++ lib/Kconfig.debug | 5 ++++- mm/filemap.c | 23 +++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index f20ed5e..5e8d15d 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -712,6 +712,13 @@ crossrelease_fullstack [KNL] Allow to record full stack trace in cross-release + lockdep_pagelock= + [KNL] Boot-time lockdep_pagelock enabling option. + Storage of lockdep_map per page to track lock_page()/ + unlock_page() is disabled by default. With this switch, + we can turn it on. + on: enable the feature + cryptomgr.notests [KNL] Disable crypto self-tests diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 45fdb3a..c609e97 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1185,7 +1185,10 @@ config LOCKDEP_PAGELOCK select PAGE_EXTENSION help PG_locked lock is a kind of crosslock. Using crossrelease feature, - PG_locked lock can work with lockdep. + PG_locked lock can work with lockdep. Even if you include this + feature on your build, it is disabled in default. You should pass + "lockdep_pagelock=on" to boot parameter in order to enable it. It + consumes a fair amount of memory if enabled. config BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK bool "Enable the boot parameter, crossrelease_fullstack" diff --git a/mm/filemap.c b/mm/filemap.c index 34251fb..cb7b20b 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1231,8 +1231,24 @@ int __lock_page_or_retry(struct page *page, struct mm_struct *mm, #ifdef CONFIG_LOCKDEP_PAGELOCK +static int lockdep_pagelock; +static int __init allow_lockdep_pagelock(char *str) +{ + if (!str) + return -EINVAL; + + if (!strcmp(str, "on")) + lockdep_pagelock = 1; + + return 0; +} +early_param("lockdep_pagelock", allow_lockdep_pagelock); + static bool need_lockdep_pagelock(void) { + if (!lockdep_pagelock) + return false; + return true; } @@ -1286,6 +1302,10 @@ static void init_zones_in_node(pg_data_t *pgdat) static void init_lockdep_pagelock(void) { pg_data_t *pgdat; + + if (!lockdep_pagelock) + return; + for_each_online_pgdat(pgdat) init_zones_in_node(pgdat); } @@ -1305,6 +1325,9 @@ struct lockdep_map *get_page_map(struct page *p) { struct page_ext *e; + if (!lockdep_pagelock) + return NULL; + e = lookup_page_ext(p); if (!e) return NULL; -- 1.9.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2017-12-04 5:16 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-12-04 5:16 [PATCH v2 0/4] lockdep/crossrelease: Apply crossrelease to page locks Byungchul Park 2017-12-04 5:16 ` Byungchul Park 2017-12-04 5:16 ` [PATCH v2 1/4] lockdep: Apply crossrelease to PG_locked locks Byungchul Park 2017-12-04 5:16 ` Byungchul Park 2017-12-04 5:16 ` [PATCH v2 2/4] lockdep: Apply lock_acquire(release) on __Set(__Clear)PageLocked Byungchul Park 2017-12-04 5:16 ` Byungchul Park 2017-12-04 5:16 ` [PATCH v2 3/4] lockdep: Move data of CONFIG_LOCKDEP_PAGELOCK from page to page_ext Byungchul Park 2017-12-04 5:16 ` Byungchul Park 2017-12-04 5:16 ` Byungchul Park [this message] 2017-12-04 5:16 ` [PATCH v2 4/4] lockdep: Add a boot parameter enabling to track page locks using lockdep and disable it by default Byungchul Park 2017-12-05 5:30 ` [PATCH v2 0/4] lockdep/crossrelease: Apply crossrelease to page locks Matthew Wilcox 2017-12-05 5:30 ` Matthew Wilcox 2017-12-05 5:46 ` Byungchul Park 2017-12-05 5:46 ` Byungchul Park 2017-12-05 6:19 ` Byungchul Park 2017-12-05 6:19 ` Byungchul Park 2017-12-05 7:45 ` Matthew Wilcox 2017-12-05 7:45 ` Matthew Wilcox 2017-12-05 7:45 ` Matthew Wilcox 2017-12-05 8:58 ` Michal Hocko 2017-12-05 8:58 ` Michal Hocko 2017-12-05 8:58 ` 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=1512364583-26070-5-git-send-email-byungchul.park@lge.com \ --to=byungchul.park@lge.com \ --cc=akpm@linux-foundation.org \ --cc=gregkh@linuxfoundation.org \ --cc=hannes@cmpxchg.org \ --cc=jack@suse.cz \ --cc=jlayton@redhat.com \ --cc=kernel-team@lge.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mhocko@suse.com \ --cc=mingo@kernel.org \ --cc=npiggin@gmail.com \ --cc=peterz@infradead.org \ --cc=pombredanne@nexb.com \ --cc=rgoldwyn@suse.com \ --cc=tglx@linutronix.de \ --cc=vbabka@suse.cz \ --cc=vinmenon@codeaurora.org \ --cc=viro@zeniv.linux.org.uk \ /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.