* [PATCH v2 0/5] follow-up "Optimize CONFIG_DEBUG_PAGEALLOC"
@ 2016-02-11 4:04 ` js1304-Re5JQEeQqe8AvxtiuMwx3w
0 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:04 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
v2) Changes
o fix powerpc build failure (basic build test done)
o export symbol for module build
o change comment and clean up code
As CONFIG_DEBUG_PAGEALLOC can be enabled/disabled via kernel
parameters we can optimize some cases by checking the enablement
state.
This is follow-up work for Christian's Optimize CONFIG_DEBUG_PAGEALLOC.
https://lkml.org/lkml/2016/1/27/194
I can't test patches for sound, power and tile,
so please review them, maintainers. :)
Remaining work is to make sparc to be aware of this but it looks
not easy for me so I skip that in this series.
It would be the best that these paches are routed through Andrew's tree,
because there is a dependency to MM.
Andrew, there is mis-spelled word (compliled -> compiled) in commit
description so I re-send all. Except powerpc one, others are basically
same with the patches on your tree.
Thanks.
Joonsoo Kim (5):
mm/vmalloc: query dynamic DEBUG_PAGEALLOC setting
mm/slub: query dynamic DEBUG_PAGEALLOC setting
sound: query dynamic DEBUG_PAGEALLOC setting
powerpc: query dynamic DEBUG_PAGEALLOC setting
tile: query dynamic DEBUG_PAGEALLOC setting
arch/powerpc/kernel/traps.c | 5 ++---
arch/powerpc/mm/hash_utils_64.c | 36 ++++++++++++++++++++----------------
arch/powerpc/mm/init_32.c | 8 ++++----
arch/tile/mm/init.c | 11 +++++++----
mm/page_alloc.c | 1 +
mm/slub.c | 7 +++----
mm/vmalloc.c | 25 ++++++++++++-------------
sound/drivers/pcsp/pcsp.c | 9 +++++----
8 files changed, 54 insertions(+), 48 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 0/5] follow-up "Optimize CONFIG_DEBUG_PAGEALLOC"
@ 2016-02-11 4:04 ` js1304-Re5JQEeQqe8AvxtiuMwx3w
0 siblings, 0 replies; 15+ messages in thread
From: js1304-Re5JQEeQqe8AvxtiuMwx3w @ 2016-02-11 4:04 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-mm-Bw31MaZKKs3YtjvyW6yDsg, Benjamin Herrenschmidt,
Takashi Iwai, Chris Metcalf, Christoph Lameter,
linux-api-u79uwXL29TY76Z2rM5mHXA, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim-Hm3cg6mZ9cc@public.gmane.org>
v2) Changes
o fix powerpc build failure (basic build test done)
o export symbol for module build
o change comment and clean up code
As CONFIG_DEBUG_PAGEALLOC can be enabled/disabled via kernel
parameters we can optimize some cases by checking the enablement
state.
This is follow-up work for Christian's Optimize CONFIG_DEBUG_PAGEALLOC.
https://lkml.org/lkml/2016/1/27/194
I can't test patches for sound, power and tile,
so please review them, maintainers. :)
Remaining work is to make sparc to be aware of this but it looks
not easy for me so I skip that in this series.
It would be the best that these paches are routed through Andrew's tree,
because there is a dependency to MM.
Andrew, there is mis-spelled word (compliled -> compiled) in commit
description so I re-send all. Except powerpc one, others are basically
same with the patches on your tree.
Thanks.
Joonsoo Kim (5):
mm/vmalloc: query dynamic DEBUG_PAGEALLOC setting
mm/slub: query dynamic DEBUG_PAGEALLOC setting
sound: query dynamic DEBUG_PAGEALLOC setting
powerpc: query dynamic DEBUG_PAGEALLOC setting
tile: query dynamic DEBUG_PAGEALLOC setting
arch/powerpc/kernel/traps.c | 5 ++---
arch/powerpc/mm/hash_utils_64.c | 36 ++++++++++++++++++++----------------
arch/powerpc/mm/init_32.c | 8 ++++----
arch/tile/mm/init.c | 11 +++++++----
mm/page_alloc.c | 1 +
mm/slub.c | 7 +++----
mm/vmalloc.c | 25 ++++++++++++-------------
sound/drivers/pcsp/pcsp.c | 9 +++++----
8 files changed, 54 insertions(+), 48 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 0/5] follow-up "Optimize CONFIG_DEBUG_PAGEALLOC"
@ 2016-02-11 4:04 ` js1304-Re5JQEeQqe8AvxtiuMwx3w
0 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:04 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
v2) Changes
o fix powerpc build failure (basic build test done)
o export symbol for module build
o change comment and clean up code
As CONFIG_DEBUG_PAGEALLOC can be enabled/disabled via kernel
parameters we can optimize some cases by checking the enablement
state.
This is follow-up work for Christian's Optimize CONFIG_DEBUG_PAGEALLOC.
https://lkml.org/lkml/2016/1/27/194
I can't test patches for sound, power and tile,
so please review them, maintainers. :)
Remaining work is to make sparc to be aware of this but it looks
not easy for me so I skip that in this series.
It would be the best that these paches are routed through Andrew's tree,
because there is a dependency to MM.
Andrew, there is mis-spelled word (compliled -> compiled) in commit
description so I re-send all. Except powerpc one, others are basically
same with the patches on your tree.
Thanks.
Joonsoo Kim (5):
mm/vmalloc: query dynamic DEBUG_PAGEALLOC setting
mm/slub: query dynamic DEBUG_PAGEALLOC setting
sound: query dynamic DEBUG_PAGEALLOC setting
powerpc: query dynamic DEBUG_PAGEALLOC setting
tile: query dynamic DEBUG_PAGEALLOC setting
arch/powerpc/kernel/traps.c | 5 ++---
arch/powerpc/mm/hash_utils_64.c | 36 ++++++++++++++++++++----------------
arch/powerpc/mm/init_32.c | 8 ++++----
arch/tile/mm/init.c | 11 +++++++----
mm/page_alloc.c | 1 +
mm/slub.c | 7 +++----
mm/vmalloc.c | 25 ++++++++++++-------------
sound/drivers/pcsp/pcsp.c | 9 +++++----
8 files changed, 54 insertions(+), 48 deletions(-)
--
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>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 1/5] mm/vmalloc: query dynamic DEBUG_PAGEALLOC setting
2016-02-11 4:04 ` js1304-Re5JQEeQqe8AvxtiuMwx3w
@ 2016-02-11 4:04 ` js1304
-1 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:04 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
We can disable debug_pagealloc processing even if the code is compiled
with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
whether it is enabled or not in runtime.
v2: update comment, per David.
adjust comment to use 80 cols, per Andrew.
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
---
mm/vmalloc.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index fb42a5b..d4b2e34 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -531,22 +531,21 @@ static void unmap_vmap_area(struct vmap_area *va)
static void vmap_debug_free_range(unsigned long start, unsigned long end)
{
/*
- * Unmap page tables and force a TLB flush immediately if
- * CONFIG_DEBUG_PAGEALLOC is set. This catches use after free
- * bugs similarly to those in linear kernel virtual address
- * space after a page has been freed.
+ * Unmap page tables and force a TLB flush immediately if pagealloc
+ * debugging is enabled. This catches use after free bugs similarly to
+ * those in linear kernel virtual address space after a page has been
+ * freed.
*
- * All the lazy freeing logic is still retained, in order to
- * minimise intrusiveness of this debugging feature.
+ * All the lazy freeing logic is still retained, in order to minimise
+ * intrusiveness of this debugging feature.
*
- * This is going to be *slow* (linear kernel virtual address
- * debugging doesn't do a broadcast TLB flush so it is a lot
- * faster).
+ * This is going to be *slow* (linear kernel virtual address debugging
+ * doesn't do a broadcast TLB flush so it is a lot faster).
*/
-#ifdef CONFIG_DEBUG_PAGEALLOC
- vunmap_page_range(start, end);
- flush_tlb_kernel_range(start, end);
-#endif
+ if (debug_pagealloc_enabled()) {
+ vunmap_page_range(start, end);
+ flush_tlb_kernel_range(start, end);
+ }
}
/*
--
1.9.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 1/5] mm/vmalloc: query dynamic DEBUG_PAGEALLOC setting
@ 2016-02-11 4:04 ` js1304
0 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:04 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
We can disable debug_pagealloc processing even if the code is compiled
with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
whether it is enabled or not in runtime.
v2: update comment, per David.
adjust comment to use 80 cols, per Andrew.
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
---
mm/vmalloc.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index fb42a5b..d4b2e34 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -531,22 +531,21 @@ static void unmap_vmap_area(struct vmap_area *va)
static void vmap_debug_free_range(unsigned long start, unsigned long end)
{
/*
- * Unmap page tables and force a TLB flush immediately if
- * CONFIG_DEBUG_PAGEALLOC is set. This catches use after free
- * bugs similarly to those in linear kernel virtual address
- * space after a page has been freed.
+ * Unmap page tables and force a TLB flush immediately if pagealloc
+ * debugging is enabled. This catches use after free bugs similarly to
+ * those in linear kernel virtual address space after a page has been
+ * freed.
*
- * All the lazy freeing logic is still retained, in order to
- * minimise intrusiveness of this debugging feature.
+ * All the lazy freeing logic is still retained, in order to minimise
+ * intrusiveness of this debugging feature.
*
- * This is going to be *slow* (linear kernel virtual address
- * debugging doesn't do a broadcast TLB flush so it is a lot
- * faster).
+ * This is going to be *slow* (linear kernel virtual address debugging
+ * doesn't do a broadcast TLB flush so it is a lot faster).
*/
-#ifdef CONFIG_DEBUG_PAGEALLOC
- vunmap_page_range(start, end);
- flush_tlb_kernel_range(start, end);
-#endif
+ if (debug_pagealloc_enabled()) {
+ vunmap_page_range(start, end);
+ flush_tlb_kernel_range(start, end);
+ }
}
/*
--
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>
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 2/5] mm/slub: query dynamic DEBUG_PAGEALLOC setting
2016-02-11 4:04 ` js1304-Re5JQEeQqe8AvxtiuMwx3w
@ 2016-02-11 4:04 ` js1304
-1 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:04 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
We can disable debug_pagealloc processing even if the code is compiled
with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
whether it is enabled or not in runtime.
v2: clean up code, per Christian.
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
---
mm/slub.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/mm/slub.c b/mm/slub.c
index 606488b..a1874c2 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -250,11 +250,10 @@ static inline void *get_freepointer_safe(struct kmem_cache *s, void *object)
{
void *p;
-#ifdef CONFIG_DEBUG_PAGEALLOC
+ if (!debug_pagealloc_enabled())
+ return get_freepointer(s, object);
+
probe_kernel_read(&p, (void **)(object + s->offset), sizeof(p));
-#else
- p = get_freepointer(s, object);
-#endif
return p;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 2/5] mm/slub: query dynamic DEBUG_PAGEALLOC setting
@ 2016-02-11 4:04 ` js1304
0 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:04 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
We can disable debug_pagealloc processing even if the code is compiled
with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
whether it is enabled or not in runtime.
v2: clean up code, per Christian.
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
---
mm/slub.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/mm/slub.c b/mm/slub.c
index 606488b..a1874c2 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -250,11 +250,10 @@ static inline void *get_freepointer_safe(struct kmem_cache *s, void *object)
{
void *p;
-#ifdef CONFIG_DEBUG_PAGEALLOC
+ if (!debug_pagealloc_enabled())
+ return get_freepointer(s, object);
+
probe_kernel_read(&p, (void **)(object + s->offset), sizeof(p));
-#else
- p = get_freepointer(s, object);
-#endif
return p;
}
--
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>
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 3/5] sound: query dynamic DEBUG_PAGEALLOC setting
2016-02-11 4:04 ` js1304-Re5JQEeQqe8AvxtiuMwx3w
@ 2016-02-11 4:04 ` js1304
-1 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:04 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
We can disable debug_pagealloc processing even if the code is compiled
with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
whether it is enabled or not in runtime.
v2: export _debug_pagealloc_enabled to modules, per Andrew.
Acked-by: David Rientjes <rientjes@google.com>
Acked-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
---
mm/page_alloc.c | 1 +
sound/drivers/pcsp/pcsp.c | 9 +++++----
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 87b3e2f..00118fe 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -498,6 +498,7 @@ void prep_compound_page(struct page *page, unsigned int order)
unsigned int _debug_guardpage_minorder;
bool _debug_pagealloc_enabled __read_mostly
= IS_ENABLED(CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT);
+EXPORT_SYMBOL(_debug_pagealloc_enabled);
bool _debug_guardpage_enabled __read_mostly;
static int __init early_debug_pagealloc(char *buf)
diff --git a/sound/drivers/pcsp/pcsp.c b/sound/drivers/pcsp/pcsp.c
index 27e25bb..72e2d00 100644
--- a/sound/drivers/pcsp/pcsp.c
+++ b/sound/drivers/pcsp/pcsp.c
@@ -14,6 +14,7 @@
#include <linux/input.h>
#include <linux/delay.h>
#include <linux/bitops.h>
+#include <linux/mm.h>
#include "pcsp_input.h"
#include "pcsp.h"
@@ -148,11 +149,11 @@ static int alsa_card_pcsp_init(struct device *dev)
return err;
}
-#ifdef CONFIG_DEBUG_PAGEALLOC
/* Well, CONFIG_DEBUG_PAGEALLOC makes the sound horrible. Lets alert */
- printk(KERN_WARNING "PCSP: CONFIG_DEBUG_PAGEALLOC is enabled, "
- "which may make the sound noisy.\n");
-#endif
+ if (debug_pagealloc_enabled()) {
+ printk(KERN_WARNING "PCSP: CONFIG_DEBUG_PAGEALLOC is enabled, "
+ "which may make the sound noisy.\n");
+ }
return 0;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 3/5] sound: query dynamic DEBUG_PAGEALLOC setting
@ 2016-02-11 4:04 ` js1304
0 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:04 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
We can disable debug_pagealloc processing even if the code is compiled
with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
whether it is enabled or not in runtime.
v2: export _debug_pagealloc_enabled to modules, per Andrew.
Acked-by: David Rientjes <rientjes@google.com>
Acked-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
---
mm/page_alloc.c | 1 +
sound/drivers/pcsp/pcsp.c | 9 +++++----
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 87b3e2f..00118fe 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -498,6 +498,7 @@ void prep_compound_page(struct page *page, unsigned int order)
unsigned int _debug_guardpage_minorder;
bool _debug_pagealloc_enabled __read_mostly
= IS_ENABLED(CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT);
+EXPORT_SYMBOL(_debug_pagealloc_enabled);
bool _debug_guardpage_enabled __read_mostly;
static int __init early_debug_pagealloc(char *buf)
diff --git a/sound/drivers/pcsp/pcsp.c b/sound/drivers/pcsp/pcsp.c
index 27e25bb..72e2d00 100644
--- a/sound/drivers/pcsp/pcsp.c
+++ b/sound/drivers/pcsp/pcsp.c
@@ -14,6 +14,7 @@
#include <linux/input.h>
#include <linux/delay.h>
#include <linux/bitops.h>
+#include <linux/mm.h>
#include "pcsp_input.h"
#include "pcsp.h"
@@ -148,11 +149,11 @@ static int alsa_card_pcsp_init(struct device *dev)
return err;
}
-#ifdef CONFIG_DEBUG_PAGEALLOC
/* Well, CONFIG_DEBUG_PAGEALLOC makes the sound horrible. Lets alert */
- printk(KERN_WARNING "PCSP: CONFIG_DEBUG_PAGEALLOC is enabled, "
- "which may make the sound noisy.\n");
-#endif
+ if (debug_pagealloc_enabled()) {
+ printk(KERN_WARNING "PCSP: CONFIG_DEBUG_PAGEALLOC is enabled, "
+ "which may make the sound noisy.\n");
+ }
return 0;
}
--
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>
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 4/5] powerpc: query dynamic DEBUG_PAGEALLOC setting
2016-02-11 4:04 ` js1304-Re5JQEeQqe8AvxtiuMwx3w
@ 2016-02-11 4:05 ` js1304
-1 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:05 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
We can disable debug_pagealloc processing even if the code is compiled
with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
whether it is enabled or not in runtime.
v2: fix build failure
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
---
arch/powerpc/kernel/traps.c | 5 ++---
arch/powerpc/mm/hash_utils_64.c | 36 ++++++++++++++++++++----------------
arch/powerpc/mm/init_32.c | 8 ++++----
3 files changed, 26 insertions(+), 23 deletions(-)
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index b6becc7..33c47fc 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -203,9 +203,8 @@ static int __kprobes __die(const char *str, struct pt_regs *regs, long err)
#ifdef CONFIG_SMP
printk("SMP NR_CPUS=%d ", NR_CPUS);
#endif
-#ifdef CONFIG_DEBUG_PAGEALLOC
- printk("DEBUG_PAGEALLOC ");
-#endif
+ if (debug_pagealloc_enabled())
+ printk("DEBUG_PAGEALLOC ");
#ifdef CONFIG_NUMA
printk("NUMA ");
#endif
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index ba59d59..1005281 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -255,8 +255,10 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend,
if (ret < 0)
break;
+
#ifdef CONFIG_DEBUG_PAGEALLOC
- if ((paddr >> PAGE_SHIFT) < linear_map_hash_count)
+ if (debug_pagealloc_enabled() &&
+ (paddr >> PAGE_SHIFT) < linear_map_hash_count)
linear_map_hash_slots[paddr >> PAGE_SHIFT] = ret | 0x80;
#endif /* CONFIG_DEBUG_PAGEALLOC */
}
@@ -512,17 +514,17 @@ static void __init htab_init_page_sizes(void)
if (mmu_has_feature(MMU_FTR_16M_PAGE))
memcpy(mmu_psize_defs, mmu_psize_defaults_gp,
sizeof(mmu_psize_defaults_gp));
- found:
-#ifndef CONFIG_DEBUG_PAGEALLOC
- /*
- * Pick a size for the linear mapping. Currently, we only support
- * 16M, 1M and 4K which is the default
- */
- if (mmu_psize_defs[MMU_PAGE_16M].shift)
- mmu_linear_psize = MMU_PAGE_16M;
- else if (mmu_psize_defs[MMU_PAGE_1M].shift)
- mmu_linear_psize = MMU_PAGE_1M;
-#endif /* CONFIG_DEBUG_PAGEALLOC */
+found:
+ if (!debug_pagealloc_enabled()) {
+ /*
+ * Pick a size for the linear mapping. Currently, we only
+ * support 16M, 1M and 4K which is the default
+ */
+ if (mmu_psize_defs[MMU_PAGE_16M].shift)
+ mmu_linear_psize = MMU_PAGE_16M;
+ else if (mmu_psize_defs[MMU_PAGE_1M].shift)
+ mmu_linear_psize = MMU_PAGE_1M;
+ }
#ifdef CONFIG_PPC_64K_PAGES
/*
@@ -721,10 +723,12 @@ static void __init htab_initialize(void)
prot = pgprot_val(PAGE_KERNEL);
#ifdef CONFIG_DEBUG_PAGEALLOC
- linear_map_hash_count = memblock_end_of_DRAM() >> PAGE_SHIFT;
- linear_map_hash_slots = __va(memblock_alloc_base(linear_map_hash_count,
- 1, ppc64_rma_size));
- memset(linear_map_hash_slots, 0, linear_map_hash_count);
+ if (debug_pagealloc_enabled()) {
+ linear_map_hash_count = memblock_end_of_DRAM() >> PAGE_SHIFT;
+ linear_map_hash_slots = __va(memblock_alloc_base(
+ linear_map_hash_count, 1, ppc64_rma_size));
+ memset(linear_map_hash_slots, 0, linear_map_hash_count);
+ }
#endif /* CONFIG_DEBUG_PAGEALLOC */
/* On U3 based machines, we need to reserve the DART area and
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
index a10be66..c2b7716 100644
--- a/arch/powerpc/mm/init_32.c
+++ b/arch/powerpc/mm/init_32.c
@@ -112,10 +112,10 @@ void __init MMU_setup(void)
if (strstr(boot_command_line, "noltlbs")) {
__map_without_ltlbs = 1;
}
-#ifdef CONFIG_DEBUG_PAGEALLOC
- __map_without_bats = 1;
- __map_without_ltlbs = 1;
-#endif
+ if (debug_pagealloc_enabled()) {
+ __map_without_bats = 1;
+ __map_without_ltlbs = 1;
+ }
}
/*
--
1.9.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 4/5] powerpc: query dynamic DEBUG_PAGEALLOC setting
@ 2016-02-11 4:05 ` js1304
0 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:05 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
We can disable debug_pagealloc processing even if the code is compiled
with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
whether it is enabled or not in runtime.
v2: fix build failure
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
---
arch/powerpc/kernel/traps.c | 5 ++---
arch/powerpc/mm/hash_utils_64.c | 36 ++++++++++++++++++++----------------
arch/powerpc/mm/init_32.c | 8 ++++----
3 files changed, 26 insertions(+), 23 deletions(-)
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index b6becc7..33c47fc 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -203,9 +203,8 @@ static int __kprobes __die(const char *str, struct pt_regs *regs, long err)
#ifdef CONFIG_SMP
printk("SMP NR_CPUS=%d ", NR_CPUS);
#endif
-#ifdef CONFIG_DEBUG_PAGEALLOC
- printk("DEBUG_PAGEALLOC ");
-#endif
+ if (debug_pagealloc_enabled())
+ printk("DEBUG_PAGEALLOC ");
#ifdef CONFIG_NUMA
printk("NUMA ");
#endif
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index ba59d59..1005281 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -255,8 +255,10 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend,
if (ret < 0)
break;
+
#ifdef CONFIG_DEBUG_PAGEALLOC
- if ((paddr >> PAGE_SHIFT) < linear_map_hash_count)
+ if (debug_pagealloc_enabled() &&
+ (paddr >> PAGE_SHIFT) < linear_map_hash_count)
linear_map_hash_slots[paddr >> PAGE_SHIFT] = ret | 0x80;
#endif /* CONFIG_DEBUG_PAGEALLOC */
}
@@ -512,17 +514,17 @@ static void __init htab_init_page_sizes(void)
if (mmu_has_feature(MMU_FTR_16M_PAGE))
memcpy(mmu_psize_defs, mmu_psize_defaults_gp,
sizeof(mmu_psize_defaults_gp));
- found:
-#ifndef CONFIG_DEBUG_PAGEALLOC
- /*
- * Pick a size for the linear mapping. Currently, we only support
- * 16M, 1M and 4K which is the default
- */
- if (mmu_psize_defs[MMU_PAGE_16M].shift)
- mmu_linear_psize = MMU_PAGE_16M;
- else if (mmu_psize_defs[MMU_PAGE_1M].shift)
- mmu_linear_psize = MMU_PAGE_1M;
-#endif /* CONFIG_DEBUG_PAGEALLOC */
+found:
+ if (!debug_pagealloc_enabled()) {
+ /*
+ * Pick a size for the linear mapping. Currently, we only
+ * support 16M, 1M and 4K which is the default
+ */
+ if (mmu_psize_defs[MMU_PAGE_16M].shift)
+ mmu_linear_psize = MMU_PAGE_16M;
+ else if (mmu_psize_defs[MMU_PAGE_1M].shift)
+ mmu_linear_psize = MMU_PAGE_1M;
+ }
#ifdef CONFIG_PPC_64K_PAGES
/*
@@ -721,10 +723,12 @@ static void __init htab_initialize(void)
prot = pgprot_val(PAGE_KERNEL);
#ifdef CONFIG_DEBUG_PAGEALLOC
- linear_map_hash_count = memblock_end_of_DRAM() >> PAGE_SHIFT;
- linear_map_hash_slots = __va(memblock_alloc_base(linear_map_hash_count,
- 1, ppc64_rma_size));
- memset(linear_map_hash_slots, 0, linear_map_hash_count);
+ if (debug_pagealloc_enabled()) {
+ linear_map_hash_count = memblock_end_of_DRAM() >> PAGE_SHIFT;
+ linear_map_hash_slots = __va(memblock_alloc_base(
+ linear_map_hash_count, 1, ppc64_rma_size));
+ memset(linear_map_hash_slots, 0, linear_map_hash_count);
+ }
#endif /* CONFIG_DEBUG_PAGEALLOC */
/* On U3 based machines, we need to reserve the DART area and
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
index a10be66..c2b7716 100644
--- a/arch/powerpc/mm/init_32.c
+++ b/arch/powerpc/mm/init_32.c
@@ -112,10 +112,10 @@ void __init MMU_setup(void)
if (strstr(boot_command_line, "noltlbs")) {
__map_without_ltlbs = 1;
}
-#ifdef CONFIG_DEBUG_PAGEALLOC
- __map_without_bats = 1;
- __map_without_ltlbs = 1;
-#endif
+ if (debug_pagealloc_enabled()) {
+ __map_without_bats = 1;
+ __map_without_ltlbs = 1;
+ }
}
/*
--
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>
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 5/5] tile: query dynamic DEBUG_PAGEALLOC setting
2016-02-11 4:04 ` js1304-Re5JQEeQqe8AvxtiuMwx3w
@ 2016-02-11 4:05 ` js1304
-1 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:05 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
We can disable debug_pagealloc processing even if the code is compiled
with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
whether it is enabled or not in runtime.
Acked-by: Chris Metcalf <cmetcalf@ezchip.com>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
---
arch/tile/mm/init.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/arch/tile/mm/init.c b/arch/tile/mm/init.c
index d4e1fc4..a0582b7 100644
--- a/arch/tile/mm/init.c
+++ b/arch/tile/mm/init.c
@@ -896,17 +896,15 @@ void __init pgtable_cache_init(void)
panic("pgtable_cache_init(): Cannot create pgd cache");
}
-#ifdef CONFIG_DEBUG_PAGEALLOC
-static long __write_once initfree;
-#else
static long __write_once initfree = 1;
-#endif
+static bool __write_once set_initfree_done;
/* Select whether to free (1) or mark unusable (0) the __init pages. */
static int __init set_initfree(char *str)
{
long val;
if (kstrtol(str, 0, &val) == 0) {
+ set_initfree_done = true;
initfree = val;
pr_info("initfree: %s free init pages\n",
initfree ? "will" : "won't");
@@ -919,6 +917,11 @@ static void free_init_pages(char *what, unsigned long begin, unsigned long end)
{
unsigned long addr = (unsigned long) begin;
+ /* Prefer user request first */
+ if (!set_initfree_done) {
+ if (debug_pagealloc_enabled())
+ initfree = 0;
+ }
if (kdata_huge && !initfree) {
pr_warn("Warning: ignoring initfree=0: incompatible with kdata=huge\n");
initfree = 1;
--
1.9.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 5/5] tile: query dynamic DEBUG_PAGEALLOC setting
@ 2016-02-11 4:05 ` js1304
0 siblings, 0 replies; 15+ messages in thread
From: js1304 @ 2016-02-11 4:05 UTC (permalink / raw)
To: Andrew Morton
Cc: David Rientjes, Christian Borntraeger, linux-kernel, linux-mm,
Benjamin Herrenschmidt, Takashi Iwai, Chris Metcalf,
Christoph Lameter, linux-api, Joonsoo Kim
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
We can disable debug_pagealloc processing even if the code is compiled
with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
whether it is enabled or not in runtime.
Acked-by: Chris Metcalf <cmetcalf@ezchip.com>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
---
arch/tile/mm/init.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/arch/tile/mm/init.c b/arch/tile/mm/init.c
index d4e1fc4..a0582b7 100644
--- a/arch/tile/mm/init.c
+++ b/arch/tile/mm/init.c
@@ -896,17 +896,15 @@ void __init pgtable_cache_init(void)
panic("pgtable_cache_init(): Cannot create pgd cache");
}
-#ifdef CONFIG_DEBUG_PAGEALLOC
-static long __write_once initfree;
-#else
static long __write_once initfree = 1;
-#endif
+static bool __write_once set_initfree_done;
/* Select whether to free (1) or mark unusable (0) the __init pages. */
static int __init set_initfree(char *str)
{
long val;
if (kstrtol(str, 0, &val) == 0) {
+ set_initfree_done = true;
initfree = val;
pr_info("initfree: %s free init pages\n",
initfree ? "will" : "won't");
@@ -919,6 +917,11 @@ static void free_init_pages(char *what, unsigned long begin, unsigned long end)
{
unsigned long addr = (unsigned long) begin;
+ /* Prefer user request first */
+ if (!set_initfree_done) {
+ if (debug_pagealloc_enabled())
+ initfree = 0;
+ }
if (kdata_huge && !initfree) {
pr_warn("Warning: ignoring initfree=0: incompatible with kdata=huge\n");
initfree = 1;
--
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>
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/5] mm/slub: query dynamic DEBUG_PAGEALLOC setting
2016-02-11 4:04 ` js1304
@ 2016-02-11 12:17 ` Christian Borntraeger
-1 siblings, 0 replies; 15+ messages in thread
From: Christian Borntraeger @ 2016-02-11 12:17 UTC (permalink / raw)
To: js1304, Andrew Morton
Cc: David Rientjes, linux-kernel, linux-mm, Benjamin Herrenschmidt,
Takashi Iwai, Chris Metcalf, Christoph Lameter, linux-api,
Joonsoo Kim
On 02/11/2016 05:04 AM, js1304@gmail.com wrote:
> From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
>
> We can disable debug_pagealloc processing even if the code is compiled
> with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
> whether it is enabled or not in runtime.
>
> v2: clean up code, per Christian.
>
> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
> mm/slub.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index 606488b..a1874c2 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -250,11 +250,10 @@ static inline void *get_freepointer_safe(struct kmem_cache *s, void *object)
> {
> void *p;
>
> -#ifdef CONFIG_DEBUG_PAGEALLOC
> + if (!debug_pagealloc_enabled())
> + return get_freepointer(s, object);
> +
> probe_kernel_read(&p, (void **)(object + s->offset), sizeof(p));
> -#else
> - p = get_freepointer(s, object);
> -#endif
> return p;
> }
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/5] mm/slub: query dynamic DEBUG_PAGEALLOC setting
@ 2016-02-11 12:17 ` Christian Borntraeger
0 siblings, 0 replies; 15+ messages in thread
From: Christian Borntraeger @ 2016-02-11 12:17 UTC (permalink / raw)
To: js1304, Andrew Morton
Cc: David Rientjes, linux-kernel, linux-mm, Benjamin Herrenschmidt,
Takashi Iwai, Chris Metcalf, Christoph Lameter, linux-api,
Joonsoo Kim
On 02/11/2016 05:04 AM, js1304@gmail.com wrote:
> From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
>
> We can disable debug_pagealloc processing even if the code is compiled
> with CONFIG_DEBUG_PAGEALLOC. This patch changes the code to query
> whether it is enabled or not in runtime.
>
> v2: clean up code, per Christian.
>
> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
> mm/slub.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index 606488b..a1874c2 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -250,11 +250,10 @@ static inline void *get_freepointer_safe(struct kmem_cache *s, void *object)
> {
> void *p;
>
> -#ifdef CONFIG_DEBUG_PAGEALLOC
> + if (!debug_pagealloc_enabled())
> + return get_freepointer(s, object);
> +
> probe_kernel_read(&p, (void **)(object + s->offset), sizeof(p));
> -#else
> - p = get_freepointer(s, object);
> -#endif
> return p;
> }
>
--
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>
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2016-02-11 12:17 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-11 4:04 [PATCH v2 0/5] follow-up "Optimize CONFIG_DEBUG_PAGEALLOC" js1304
2016-02-11 4:04 ` js1304
2016-02-11 4:04 ` js1304-Re5JQEeQqe8AvxtiuMwx3w
2016-02-11 4:04 ` [PATCH v2 1/5] mm/vmalloc: query dynamic DEBUG_PAGEALLOC setting js1304
2016-02-11 4:04 ` js1304
2016-02-11 4:04 ` [PATCH v2 2/5] mm/slub: " js1304
2016-02-11 4:04 ` js1304
2016-02-11 12:17 ` Christian Borntraeger
2016-02-11 12:17 ` Christian Borntraeger
2016-02-11 4:04 ` [PATCH v2 3/5] sound: " js1304
2016-02-11 4:04 ` js1304
2016-02-11 4:05 ` [PATCH v2 4/5] powerpc: " js1304
2016-02-11 4:05 ` js1304
2016-02-11 4:05 ` [PATCH v2 5/5] tile: " js1304
2016-02-11 4:05 ` js1304
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.