All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] mm/shuffle: Fix + default enable
@ 2019-02-06  7:12 Dan Williams
  2019-02-06  7:12 ` [PATCH 1/2] mm/shuffle: Fix shuffle enable Dan Williams
  2019-02-06  7:12 ` [PATCH 2/2] [-mm only] mm/shuffle: Default enable all shuffling Dan Williams
  0 siblings, 2 replies; 3+ messages in thread
From: Dan Williams @ 2019-02-06  7:12 UTC (permalink / raw)
  To: akpm; +Cc: linux-mm, keescook, linux-kernel

Andrew,

Please fold patch1 into:
mm-shuffle-initial-free-memory-to-improve-memory-side-cache-utilization.patch

Patch2, as marked, is the "always-on" shuffle patch for -mm only.

---

Dan Williams (2):
      mm/shuffle: Fix shuffle enable
      [-mm only] mm/shuffle: Default enable all shuffling


 init/Kconfig |    4 ++--
 mm/shuffle.c |   20 +++++++++++++++++---
 mm/shuffle.h |    2 +-
 3 files changed, 20 insertions(+), 6 deletions(-)

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 1/2] mm/shuffle: Fix shuffle enable
  2019-02-06  7:12 [PATCH 0/2] mm/shuffle: Fix + default enable Dan Williams
@ 2019-02-06  7:12 ` Dan Williams
  2019-02-06  7:12 ` [PATCH 2/2] [-mm only] mm/shuffle: Default enable all shuffling Dan Williams
  1 sibling, 0 replies; 3+ messages in thread
From: Dan Williams @ 2019-02-06  7:12 UTC (permalink / raw)
  To: akpm; +Cc: linux-mm, keescook, linux-kernel

The removal of shuffle_store() in v10 of the patch series was prompted
by the review feedback to convert page_alloc_shuffle() to __memint. I
obviously booted a stale kernel build in my tests because
shuffle_store() is indeed required:

 BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
 #PF error: [INSTR]
 PGD 0 P4D 0
 Oops: 0010 [#1] SMP PTI
 CPU: 0 PID: 0 Comm: swapper Not tainted 5.0.0-rc1+ #2867
 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ?-20180531_142017-buildhw-08.phx2.fedoraproject.org-1.fc28 04/01/2014
 RIP: 0010:          (null)
 Code: Bad RIP value.
 RSP: 0000:ffffffff82603e78 EFLAGS: 00010046
 RAX: 0000000000000000 RBX: 0000000000000000 RCX: cccccccccccccccd
 RDX: ffffffff8261d7c0 RSI: ffffffff8244c010 RDI: ffff88843ffe1aaa
 RBP: ffff88843ffe1aac R08: ffffffff83486978 R09: 0000000000000000
 R10: ffffffff82603e80 R11: 0000000000000048 R12: ffff88843ffe1a97
 R13: ffff88843ffe1aaa R14: ffffffff8244c010 R15: 000000000000016d
 FS:  0000000000000000(0000) GS:ffff88811be00000(0000) knlGS:0000000000000000
 CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
 CR2: ffffffffffffffd6 CR3: 0000000002614000 CR4: 00000000000606b0
 Call Trace:
  ? parse_args+0x170/0x360
  ? set_init_arg+0x55/0x55
  ? start_kernel+0x1d8/0x4c4
  ? set_init_arg+0x55/0x55
  ? secondary_startup_64+0xa4/0xb0

Reintroduce it and mark it __meminit. Given the sysfs attribute is not
writable it will never be called after init.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 mm/shuffle.c |   16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/mm/shuffle.c b/mm/shuffle.c
index 19bbf3e37fb6..3ce12481b1dc 100644
--- a/mm/shuffle.c
+++ b/mm/shuffle.c
@@ -38,7 +38,21 @@ extern int shuffle_show(char *buffer, const struct kernel_param *kp)
 	return sprintf(buffer, "%c\n", test_bit(SHUFFLE_ENABLE, &shuffle_state)
 			? 'Y' : 'N');
 }
-module_param_call(shuffle, NULL, shuffle_show, &shuffle_param, 0400);
+
+static __meminit int shuffle_store(const char *val,
+		const struct kernel_param *kp)
+{
+	int rc = param_set_bool(val, kp);
+
+	if (rc < 0)
+		return rc;
+	if (shuffle_param)
+		page_alloc_shuffle(SHUFFLE_ENABLE);
+	else
+		page_alloc_shuffle(SHUFFLE_FORCE_DISABLE);
+	return 0;
+}
+module_param_call(shuffle, shuffle_store, shuffle_show, &shuffle_param, 0400);
 
 /*
  * For two pages to be swapped in the shuffle, they must be free (on a


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] [-mm only] mm/shuffle: Default enable all shuffling
  2019-02-06  7:12 [PATCH 0/2] mm/shuffle: Fix + default enable Dan Williams
  2019-02-06  7:12 ` [PATCH 1/2] mm/shuffle: Fix shuffle enable Dan Williams
@ 2019-02-06  7:12 ` Dan Williams
  1 sibling, 0 replies; 3+ messages in thread
From: Dan Williams @ 2019-02-06  7:12 UTC (permalink / raw)
  To: akpm; +Cc: linux-mm, keescook, linux-kernel

Per Andrew's request arrange for all memory allocation shuffling code to
be enabled by default.

The page_alloc.shuffle command line parameter can still be used to
disable shuffling at boot, but the kernel will default enable the
shuffling if the command line option is not specified.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 init/Kconfig |    4 ++--
 mm/shuffle.c |    4 ++--
 mm/shuffle.h |    2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/init/Kconfig b/init/Kconfig
index cfa199f3e9be..12557e12be4c 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1697,7 +1697,7 @@ config SLAB_MERGE_DEFAULT
 	  command line.
 
 config SLAB_FREELIST_RANDOM
-	default n
+	default y
 	depends on SLAB || SLUB
 	bool "SLAB freelist randomization"
 	help
@@ -1716,7 +1716,7 @@ config SLAB_FREELIST_HARDENED
 
 config SHUFFLE_PAGE_ALLOCATOR
 	bool "Page allocator randomization"
-	default SLAB_FREELIST_RANDOM && ACPI_NUMA
+	default y
 	help
 	  Randomization of the page allocator improves the average
 	  utilization of a direct-mapped memory-side-cache. See section
diff --git a/mm/shuffle.c b/mm/shuffle.c
index 3ce12481b1dc..a979b48be469 100644
--- a/mm/shuffle.c
+++ b/mm/shuffle.c
@@ -9,8 +9,8 @@
 #include "internal.h"
 #include "shuffle.h"
 
-DEFINE_STATIC_KEY_FALSE(page_alloc_shuffle_key);
-static unsigned long shuffle_state __ro_after_init;
+DEFINE_STATIC_KEY_TRUE(page_alloc_shuffle_key);
+static unsigned long shuffle_state __ro_after_init = 1 << SHUFFLE_ENABLE;
 
 /*
  * Depending on the architecture, module parameter parsing may run
diff --git a/mm/shuffle.h b/mm/shuffle.h
index fc1e327ae22d..466a5620e0aa 100644
--- a/mm/shuffle.h
+++ b/mm/shuffle.h
@@ -19,7 +19,7 @@ enum mm_shuffle_ctl {
 #define SHUFFLE_ORDER (MAX_ORDER-1)
 
 #ifdef CONFIG_SHUFFLE_PAGE_ALLOCATOR
-DECLARE_STATIC_KEY_FALSE(page_alloc_shuffle_key);
+DECLARE_STATIC_KEY_TRUE(page_alloc_shuffle_key);
 extern void page_alloc_shuffle(enum mm_shuffle_ctl ctl);
 extern void __shuffle_free_memory(pg_data_t *pgdat);
 static inline void shuffle_free_memory(pg_data_t *pgdat)


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-02-06  7:24 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-06  7:12 [PATCH 0/2] mm/shuffle: Fix + default enable Dan Williams
2019-02-06  7:12 ` [PATCH 1/2] mm/shuffle: Fix shuffle enable Dan Williams
2019-02-06  7:12 ` [PATCH 2/2] [-mm only] mm/shuffle: Default enable all shuffling Dan Williams

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.