All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Sebastian Andrzej Siewior <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, sjenning@redhat.com, hpa@zytor.com,
	mingo@kernel.org, tglx@linutronix.de, bigeasy@linutronix.de
Subject: [tip:smp/hotplug] mm/zswap: Convert dst-mem to hotplug state machine
Date: Thu, 1 Dec 2016 16:12:56 -0800	[thread overview]
Message-ID: <tip-ad7ed7708db9ff388450935645816d44bf08a56d@git.kernel.org> (raw)
In-Reply-To: <20161126231350.10321-12-bigeasy@linutronix.de>

Commit-ID:  ad7ed7708db9ff388450935645816d44bf08a56d
Gitweb:     http://git.kernel.org/tip/ad7ed7708db9ff388450935645816d44bf08a56d
Author:     Sebastian Andrzej Siewior <bigeasy@linutronix.de>
AuthorDate: Sun, 27 Nov 2016 00:13:39 +0100
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Fri, 2 Dec 2016 00:52:36 +0100

mm/zswap: Convert dst-mem to hotplug state machine

Install the callbacks via the state machine and let the core invoke
the callbacks on the already online CPUs.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: linux-mm@kvack.org
Cc: Seth Jennings <sjenning@redhat.com>
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20161126231350.10321-12-bigeasy@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

---
 include/linux/cpuhotplug.h |  1 +
 mm/zswap.c                 | 73 +++++++++++-----------------------------------
 2 files changed, 18 insertions(+), 56 deletions(-)

diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
index 9f29dd9..62f51a4 100644
--- a/include/linux/cpuhotplug.h
+++ b/include/linux/cpuhotplug.h
@@ -65,6 +65,7 @@ enum cpuhp_state {
 	CPUHP_ARM_BL_PREPARE,
 	CPUHP_TRACE_RB_PREPARE,
 	CPUHP_MM_ZS_PREPARE,
+	CPUHP_MM_ZSWP_MEM_PREPARE,
 	CPUHP_TIMERS_DEAD,
 	CPUHP_NOTF_ERR_INJ_PREPARE,
 	CPUHP_MIPS_SOC_PREPARE,
diff --git a/mm/zswap.c b/mm/zswap.c
index 275b22c..b13aa57 100644
--- a/mm/zswap.c
+++ b/mm/zswap.c
@@ -352,70 +352,28 @@ static struct zswap_entry *zswap_entry_find_get(struct rb_root *root,
 **********************************/
 static DEFINE_PER_CPU(u8 *, zswap_dstmem);
 
-static int __zswap_cpu_dstmem_notifier(unsigned long action, unsigned long cpu)
+static int zswap_dstmem_prepare(unsigned int cpu)
 {
 	u8 *dst;
 
-	switch (action) {
-	case CPU_UP_PREPARE:
-		dst = kmalloc_node(PAGE_SIZE * 2, GFP_KERNEL, cpu_to_node(cpu));
-		if (!dst) {
-			pr_err("can't allocate compressor buffer\n");
-			return NOTIFY_BAD;
-		}
-		per_cpu(zswap_dstmem, cpu) = dst;
-		break;
-	case CPU_DEAD:
-	case CPU_UP_CANCELED:
-		dst = per_cpu(zswap_dstmem, cpu);
-		kfree(dst);
-		per_cpu(zswap_dstmem, cpu) = NULL;
-		break;
-	default:
-		break;
+	dst = kmalloc_node(PAGE_SIZE * 2, GFP_KERNEL, cpu_to_node(cpu));
+	if (!dst) {
+		pr_err("can't allocate compressor buffer\n");
+		return -ENOMEM;
 	}
-	return NOTIFY_OK;
+	per_cpu(zswap_dstmem, cpu) = dst;
+	return 0;
 }
 
-static int zswap_cpu_dstmem_notifier(struct notifier_block *nb,
-				     unsigned long action, void *pcpu)
+static int zswap_dstmem_dead(unsigned int cpu)
 {
-	return __zswap_cpu_dstmem_notifier(action, (unsigned long)pcpu);
-}
-
-static struct notifier_block zswap_dstmem_notifier = {
-	.notifier_call =	zswap_cpu_dstmem_notifier,
-};
+	u8 *dst;
 
-static int __init zswap_cpu_dstmem_init(void)
-{
-	unsigned long cpu;
+	dst = per_cpu(zswap_dstmem, cpu);
+	kfree(dst);
+	per_cpu(zswap_dstmem, cpu) = NULL;
 
-	cpu_notifier_register_begin();
-	for_each_online_cpu(cpu)
-		if (__zswap_cpu_dstmem_notifier(CPU_UP_PREPARE, cpu) ==
-		    NOTIFY_BAD)
-			goto cleanup;
-	__register_cpu_notifier(&zswap_dstmem_notifier);
-	cpu_notifier_register_done();
 	return 0;
-
-cleanup:
-	for_each_online_cpu(cpu)
-		__zswap_cpu_dstmem_notifier(CPU_UP_CANCELED, cpu);
-	cpu_notifier_register_done();
-	return -ENOMEM;
-}
-
-static void zswap_cpu_dstmem_destroy(void)
-{
-	unsigned long cpu;
-
-	cpu_notifier_register_begin();
-	for_each_online_cpu(cpu)
-		__zswap_cpu_dstmem_notifier(CPU_UP_CANCELED, cpu);
-	__unregister_cpu_notifier(&zswap_dstmem_notifier);
-	cpu_notifier_register_done();
 }
 
 static int __zswap_cpu_comp_notifier(struct zswap_pool *pool,
@@ -1238,6 +1196,7 @@ static void __exit zswap_debugfs_exit(void) { }
 static int __init init_zswap(void)
 {
 	struct zswap_pool *pool;
+	int ret;
 
 	zswap_init_started = true;
 
@@ -1246,7 +1205,9 @@ static int __init init_zswap(void)
 		goto cache_fail;
 	}
 
-	if (zswap_cpu_dstmem_init()) {
+	ret = cpuhp_setup_state(CPUHP_MM_ZSWP_MEM_PREPARE, "mm/zswap:prepare",
+				zswap_dstmem_prepare, zswap_dstmem_dead);
+	if (ret) {
 		pr_err("dstmem alloc failed\n");
 		goto dstmem_fail;
 	}
@@ -1267,7 +1228,7 @@ static int __init init_zswap(void)
 	return 0;
 
 pool_fail:
-	zswap_cpu_dstmem_destroy();
+	cpuhp_remove_state(CPUHP_MM_ZSWP_MEM_PREPARE);
 dstmem_fail:
 	zswap_entry_cache_destroy();
 cache_fail:

  reply	other threads:[~2016-12-02  0:14 UTC|newest]

Thread overview: 131+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-26 23:13 cpu hotplug: convert more drivers (batch #6 and last) Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 01/22] cpufreq/acpi-cpufreq: Convert to hotplug state machine Sebastian Andrzej Siewior
2016-11-28  5:15   ` Viresh Kumar
2016-11-28  9:49     ` Sebastian Andrzej Siewior
2016-11-28  9:51       ` [PATCH 01/22 v2] " Sebastian Andrzej Siewior
2016-11-28  9:54         ` Viresh Kumar
2016-11-28 12:46         ` Rafael J. Wysocki
2016-11-26 23:13 ` [PATCH 02/22] cpufreq/acpi-cpufreq: drop rdmsr_on_cpus() usage Sebastian Andrzej Siewior
2016-11-28  9:52   ` [PATCH 02/22 v2] " Sebastian Andrzej Siewior
2016-11-28  9:54     ` Viresh Kumar
2016-11-26 23:13 ` [PATCH 03/22] idle/intel: Remove superfluous SMP fuction call Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 04/22] idle/intel: Convert to hotplug state machine Sebastian Andrzej Siewior
2016-11-28 17:29   ` Thomas Gleixner
2016-11-29  9:40     ` Sebastian Andrzej Siewior
2016-11-29  9:51       ` [PATCH 04/22 v2] " Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 05/22] oprofile/nmi timer: " Sebastian Andrzej Siewior
2016-12-02  0:09   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 06/22] tracing/rb: " Sebastian Andrzej Siewior
2016-12-02  0:10   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-12-07 11:15     ` [linux-next] tracing/rb: NULL pointer dereference at trace_rb_cpu_prepare() Tetsuo Handa
2016-12-07 13:31       ` [PATCH] tracing/rb: init the CPU mask on allocation Sebastian Andrzej Siewior
2016-12-07 13:43         ` [tip:smp/hotplug] tracing/rb: Init " tip-bot for Sebastian Andrzej Siewior
2016-12-07 14:33         ` [PATCH] tracing/rb: init " Tetsuo Handa
2016-11-26 23:13 ` [PATCH 07/22] mm/vmstat: Drop get_online_cpus() from init_cpu_node_state/vmstat_cpu_dead() Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-11-28  9:24   ` Michal Hocko
2016-11-28  9:24     ` Michal Hocko
2016-12-02  0:10   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 08/22] mm/vmstat: Avoid on each online CPU loops Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-11-28  9:28   ` Michal Hocko
2016-11-28  9:28     ` Michal Hocko
2016-11-29 14:08     ` Thomas Gleixner
2016-11-29 14:08       ` Thomas Gleixner
2016-11-29 14:44       ` Michal Hocko
2016-11-29 14:44         ` Michal Hocko
2016-11-29 14:51       ` [PATCH 08/22 v2] " Sebastian Andrzej Siewior
2016-11-29 14:51         ` Sebastian Andrzej Siewior
2016-11-29 15:20         ` Michal Hocko
2016-11-29 15:20           ` Michal Hocko
2016-12-02  0:11         ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 09/22] mm/vmstat: Convert to hotplug state machine Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-11-29 14:52   ` [PATCH 09/22 v2] " Sebastian Andrzej Siewior
2016-11-29 14:52     ` Sebastian Andrzej Siewior
2016-12-02  0:11     ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 10/22] mm/zsmalloc: " Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-12-02  0:12   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 11/22] mm/zswap: Convert dst-mem " Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-12-02  0:12   ` tip-bot for Sebastian Andrzej Siewior [this message]
2016-11-26 23:13 ` [PATCH 12/22] mm/zswap: Convert pool " Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-12-02  0:13   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 13/22] iommu/vt-d: Convert " Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-12-02  0:13   ` [tip:smp/hotplug] " tip-bot for Anna-Maria Gleixner
2016-11-26 23:13 ` [PATCH 14/22] mm/compaction: " Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-12-02  0:14   ` [tip:smp/hotplug] " tip-bot for Anna-Maria Gleixner
2016-11-26 23:13 ` [PATCH 15/22] arm64/cpuinfo: Make hotplug notifier symmetric Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-11-29 17:22   ` Suzuki K Poulose
2016-11-29 17:22     ` Suzuki K Poulose
2016-12-02  0:14   ` [tip:smp/hotplug] " tip-bot for Anna-Maria Gleixner
2016-11-26 23:13 ` [PATCH 16/22] arm64/cpuinfo: Convert to hotplug state machine Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-11-29 17:26   ` Suzuki K Poulose
2016-11-29 17:26     ` Suzuki K Poulose
2016-12-02  0:15   ` [tip:smp/hotplug] " tip-bot for Anna-Maria Gleixner
2016-11-26 23:13 ` [PATCH 17/22] KVM/PPC/Book3S HV: " Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-11-26 23:13   ` Sebastian Andrzej Siewior
2016-12-02  0:15   ` [tip:smp/hotplug] " tip-bot for Anna-Maria Gleixner
2016-11-26 23:13 ` [PATCH 18/22] zram: " Sebastian Andrzej Siewior
2016-12-02  0:16   ` [tip:smp/hotplug] " tip-bot for Anna-Maria Gleixner
2016-11-26 23:13 ` [PATCH 19/22] soc/fsl/qbman: " Sebastian Andrzej Siewior
2016-12-02  0:16   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 20/22] " Sebastian Andrzej Siewior
2016-12-02  0:17   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 21/22] staging/lustre/libcfs: " Sebastian Andrzej Siewior
2016-11-26 23:14   ` [lustre-devel] " Sebastian Andrzej Siewior
2016-12-02 10:18   ` [PATCH 21/22 v2] " Sebastian Andrzej Siewior
2016-12-02 10:18     ` [lustre-devel] " Sebastian Andrzej Siewior
2016-12-02 10:42     ` Greg Kroah-Hartman
2016-12-02 10:42       ` [lustre-devel] " Greg Kroah-Hartman
2016-12-02 11:00       ` [PATCH 21/22 v3] " Sebastian Andrzej Siewior
2016-12-02 11:00         ` [lustre-devel] " Sebastian Andrzej Siewior
2016-11-26 23:13 ` [PATCH 22/22] Remove obsolete cpu hotplug register / unregister functions Sebastian Andrzej Siewior
2016-12-21 19:19 [patch 00/10] cpu/hotplug: Final cleanup Thomas Gleixner
2016-12-21 19:19 ` [patch 01/10] ARM: imx: mmcd: Fix broken cpu hotplug handling Thomas Gleixner
2016-12-22 20:18   ` [tip:smp/urgent] ARM/imx/mmcd: " tip-bot for Thomas Gleixner
2016-12-25 10:02   ` tip-bot for Thomas Gleixner
2016-12-21 19:19 ` [patch 02/10] cpu/hotplug: Prevent overwriting of callbacks Thomas Gleixner
2016-12-22 11:07   ` Thomas Gleixner
2016-12-26 23:04     ` ojab
2016-12-26 23:12       ` ojab
2016-12-22 20:21   ` [tip:smp/urgent] " tip-bot for Thomas Gleixner
2016-12-25 10:04   ` tip-bot for Thomas Gleixner
2016-12-21 19:19 ` [patch 03/10] scsi/bnx2fc: Convert to hotplug state machine Thomas Gleixner
2016-12-22 20:21   ` [tip:smp/urgent] " tip-bot for Sebastian Andrzej Siewior
2016-12-25 10:05   ` tip-bot for Sebastian Andrzej Siewior
2016-12-21 19:19 ` [patch 04/10] scsi/bnx2i: " Thomas Gleixner
2016-12-22 20:22   ` [tip:smp/urgent] " tip-bot for Sebastian Andrzej Siewior
2016-12-25 10:05   ` tip-bot for Sebastian Andrzej Siewior
2016-12-21 19:19 ` [patch 05/10] staging/lustre/libcfs: " Thomas Gleixner
2016-12-21 19:29   ` [lustre-devel] " Thomas Gleixner
2016-12-22 20:22   ` [tip:smp/urgent] " tip-bot for Anna-Maria Gleixner
2016-12-25 10:06   ` tip-bot for Anna-Maria Gleixner
2016-12-21 19:19 ` [patch 06/10] cpu/hotplug: Remove obsolete cpu hotplug register/unregister functions Thomas Gleixner
2016-12-22 20:23   ` [tip:smp/urgent] " tip-bot for Thomas Gleixner
2016-12-25 10:06   ` tip-bot for Thomas Gleixner
2016-12-21 19:19 ` [patch 07/10] cpu/hotplug: Cleanup state names Thomas Gleixner
2016-12-22 20:23   ` [tip:smp/urgent] " tip-bot for Thomas Gleixner
2016-12-25 10:07   ` tip-bot for Thomas Gleixner
2016-12-21 19:19 ` [patch 08/10] coresight: etm3/4x: Consolidate hotplug state space Thomas Gleixner
2016-12-22 16:30   ` Mathieu Poirier
2016-12-22 20:24   ` [tip:smp/urgent] coresight/etm3/4x: " tip-bot for Thomas Gleixner
2016-12-25 10:07   ` tip-bot for Thomas Gleixner
2016-12-21 19:19 ` [patch 09/10] irqchip/gic: " Thomas Gleixner
2016-12-22 20:24   ` [tip:smp/urgent] " tip-bot for Thomas Gleixner
2016-12-25 10:08   ` tip-bot for Thomas Gleixner
2016-12-21 19:19 ` [patch 10/10] irqchip/armada-xp: " Thomas Gleixner
2016-12-21 20:22   ` Thomas Petazzoni
2016-12-21 20:27     ` Thomas Gleixner
2016-12-22 20:25   ` [tip:smp/urgent] " tip-bot for Thomas Gleixner
2016-12-25 10:08   ` tip-bot for Thomas Gleixner
2016-12-22 17:59 ` [patch 00/10] cpu/hotplug: Final cleanup Sam Ravnborg
2016-12-27 11:17   ` Thomas Gleixner
2016-12-27 19:41     ` Sam Ravnborg

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=tip-ad7ed7708db9ff388450935645816d44bf08a56d@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=bigeasy@linutronix.de \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=sjenning@redhat.com \
    --cc=tglx@linutronix.de \
    /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: link
Be 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.