linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: linux-kernel@vger.kernel.org
Cc: rt@linutronix.de, Jean Delvare <jdelvare@suse.com>,
	Guenter Roeck <linux@roeck-us.net>,
	linux-hwmon@vger.kernel.org
Subject: [PATCH 06/20 v2] hwmon/via-cputemp: Convert to hotplug state machine
Date: Fri, 18 Nov 2016 16:09:50 +0100	[thread overview]
Message-ID: <20161118150940.rkmluouwi5u4zt74@linutronix.de> (raw)
In-Reply-To: <20161117183541.8588-7-bigeasy@linutronix.de>

Install the callbacks via the state machine and let the core invoke the
callbacks on the already online CPUs. When the hotplug state is
unregistered the cleanup function is called for each cpu. So both cpu loops
in init() and exit() are not longer required.

Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: linux-hwmon@vger.kernel.org
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
v1…v2: drop `i' in via_cputemp_init() because it is unused, reported by
       kbuild test robot <fengguang.wu@intel.com> 

 drivers/hwmon/via-cputemp.c | 63 ++++++++++++---------------------------------
 1 file changed, 17 insertions(+), 46 deletions(-)

diff --git a/drivers/hwmon/via-cputemp.c b/drivers/hwmon/via-cputemp.c
index 5b9866b1b437..d1f209a5feac 100644
--- a/drivers/hwmon/via-cputemp.c
+++ b/drivers/hwmon/via-cputemp.c
@@ -220,7 +220,7 @@ struct pdev_entry {
 static LIST_HEAD(pdev_list);
 static DEFINE_MUTEX(pdev_list_mutex);
 
-static int via_cputemp_device_add(unsigned int cpu)
+static int via_cputemp_online(unsigned int cpu)
 {
 	int err;
 	struct platform_device *pdev;
@@ -261,7 +261,7 @@ static int via_cputemp_device_add(unsigned int cpu)
 	return err;
 }
 
-static void via_cputemp_device_remove(unsigned int cpu)
+static int via_cputemp_down_prep(unsigned int cpu)
 {
 	struct pdev_entry *p;
 
@@ -272,33 +272,13 @@ static void via_cputemp_device_remove(unsigned int cpu)
 			list_del(&p->list);
 			mutex_unlock(&pdev_list_mutex);
 			kfree(p);
-			return;
+			return 0;
 		}
 	}
 	mutex_unlock(&pdev_list_mutex);
+	return 0;
 }
 
-static int via_cputemp_cpu_callback(struct notifier_block *nfb,
-				    unsigned long action, void *hcpu)
-{
-	unsigned int cpu = (unsigned long) hcpu;
-
-	switch (action) {
-	case CPU_ONLINE:
-	case CPU_DOWN_FAILED:
-		via_cputemp_device_add(cpu);
-		break;
-	case CPU_DOWN_PREPARE:
-		via_cputemp_device_remove(cpu);
-		break;
-	}
-	return NOTIFY_OK;
-}
-
-static struct notifier_block via_cputemp_cpu_notifier __refdata = {
-	.notifier_call = via_cputemp_cpu_callback,
-};
-
 static const struct x86_cpu_id __initconst cputemp_ids[] = {
 	{ X86_VENDOR_CENTAUR, 6, 0xa, }, /* C7 A */
 	{ X86_VENDOR_CENTAUR, 6, 0xd, }, /* C7 D */
@@ -307,9 +287,11 @@ static const struct x86_cpu_id __initconst cputemp_ids[] = {
 };
 MODULE_DEVICE_TABLE(x86cpu, cputemp_ids);
 
+static enum cpuhp_state via_temp_online;
+
 static int __init via_cputemp_init(void)
 {
-	int i, err;
+	int err;
 
 	if (!x86_match_cpu(cputemp_ids))
 		return -ENODEV;
@@ -318,44 +300,33 @@ static int __init via_cputemp_init(void)
 	if (err)
 		goto exit;
 
-	cpu_notifier_register_begin();
-	for_each_online_cpu(i)
-		via_cputemp_device_add(i);
+	err = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "hwmon/via:online",
+				via_cputemp_online, via_cputemp_down_prep);
+	if (err < 0)
+		goto exit_driver_unreg;
+	via_temp_online = err;
 
 #ifndef CONFIG_HOTPLUG_CPU
 	if (list_empty(&pdev_list)) {
-		cpu_notifier_register_done();
 		err = -ENODEV;
-		goto exit_driver_unreg;
+		goto exit_hp_unreg;
 	}
 #endif
-
-	__register_hotcpu_notifier(&via_cputemp_cpu_notifier);
-	cpu_notifier_register_done();
 	return 0;
 
 #ifndef CONFIG_HOTPLUG_CPU
+exit_hp_unreg:
+	cpuhp_remove_state_nocalls(via_temp_online);
+#endif
 exit_driver_unreg:
 	platform_driver_unregister(&via_cputemp_driver);
-#endif
 exit:
 	return err;
 }
 
 static void __exit via_cputemp_exit(void)
 {
-	struct pdev_entry *p, *n;
-
-	cpu_notifier_register_begin();
-	__unregister_hotcpu_notifier(&via_cputemp_cpu_notifier);
-	mutex_lock(&pdev_list_mutex);
-	list_for_each_entry_safe(p, n, &pdev_list, list) {
-		platform_device_unregister(p->pdev);
-		list_del(&p->list);
-		kfree(p);
-	}
-	mutex_unlock(&pdev_list_mutex);
-	cpu_notifier_register_done();
+	cpuhp_remove_state(via_temp_online);
 	platform_driver_unregister(&via_cputemp_driver);
 }
 
-- 
2.10.2

  reply	other threads:[~2016-11-18 15:10 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-17 18:35 cpu hotplug: convert more drivers (batch #5) Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 01/20] x86/mce/therm_throt: Convert to hotplug state machine Sebastian Andrzej Siewior
2016-11-21 15:46   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:39   ` tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 02/20] x86/cpuid: " Sebastian Andrzej Siewior
2016-11-21 15:47   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:40   ` tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 03/20] x86/msr: " Sebastian Andrzej Siewior
2016-11-21 15:48   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:41   ` tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 04/20] hwmon/coretemp: " Sebastian Andrzej Siewior
2016-11-20 22:30   ` [04/20] " Guenter Roeck
2016-11-21 22:35     ` Sebastian Andrzej Siewior
2016-11-21 15:56   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-21 21:32     ` Guenter Roeck
2016-11-21 21:53       ` Thomas Gleixner
2016-11-17 18:35 ` [PATCH 05/20] hwmon/via-cputemp: Remove pointless CPU check on each CPU Sebastian Andrzej Siewior
2016-11-19 17:23   ` [05/20] " Guenter Roeck
2016-11-19 22:53     ` Sebastian Andrzej Siewior
2016-11-20  3:53       ` Guenter Roeck
2016-11-20 20:34         ` Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 06/20] hwmon/via-cputemp: Convert to hotplug state machine Sebastian Andrzej Siewior
2016-11-18 15:09   ` Sebastian Andrzej Siewior [this message]
2016-11-23 15:29   ` Guenter Roeck
2016-12-09 11:53   ` Thomas Gleixner
2016-12-09 18:17     ` Guenter Roeck
2016-12-09 18:27       ` Thomas Gleixner
2016-11-17 18:35 ` [PATCH 07/20] pci/xgene-msi: " Sebastian Andrzej Siewior
2016-11-21 15:48   ` [tip:smp/hotplug] PCI/xgene-msi: " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:42   ` tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 08/20] powercap/intel_rapl: Add missing domain data update on hotplug Sebastian Andrzej Siewior
2016-11-21 15:49   ` [tip:smp/hotplug] " tip-bot for Thomas Gleixner
2016-11-17 18:35 ` [PATCH 09/20] powercap/intel rapl: Convert to hotplug state machine Sebastian Andrzej Siewior
2016-11-21 15:49   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 10/20] powercap/intel_rapl: Cleanup duplicated init code Sebastian Andrzej Siewior
2016-11-21 15:50   ` [tip:smp/hotplug] " tip-bot for Thomas Gleixner
2016-11-17 18:35 ` [PATCH 11/20] watchdog/octeon: Convert to hotplug state machine Sebastian Andrzej Siewior
2016-11-21 15:50   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:43   ` tip-bot for Sebastian Andrzej Siewior
2016-11-24 16:10   ` [11/20] " Guenter Roeck
2016-11-17 18:35 ` [PATCH 12/20] net/iucv: " Sebastian Andrzej Siewior
2016-11-21 15:51   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:43   ` tip-bot for Sebastian Andrzej Siewior
2016-11-23 18:04   ` [PATCH 12/20] " Ursula Braun
2016-11-24  9:10     ` Sebastian Andrzej Siewior
2016-11-24 14:14       ` [PATCH 12/20 v2] " Sebastian Andrzej Siewior
2016-11-24 16:10         ` [PATCH] net/iucv: use explicit clean up labels in iucv_init() Sebastian Andrzej Siewior
2016-11-24 19:57           ` [tip:smp/hotplug] net/iucv: Use " tip-bot for Sebastian Andrzej Siewior
2016-11-28 16:24           ` [PATCH] net/iucv: use " David Miller
2016-11-28 16:31             ` Thomas Gleixner
2016-11-28 16:37           ` [tip:smp/hotplug] net/iucv: Use " tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 13/20] sched/nohz: Convert to hotplug state machine Sebastian Andrzej Siewior
2016-11-21 15:51   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:44   ` tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 14/20] arm/bL_switcher: " Sebastian Andrzej Siewior
2016-11-21 15:52   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:44   ` tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 15/20] ARM/hw_breakpoint: " Sebastian Andrzej Siewior
2016-11-18 12:04   ` Will Deacon
2016-11-18 13:11     ` Thomas Gleixner
2016-11-18 13:29       ` Will Deacon
2016-11-18 13:42         ` Thomas Gleixner
2016-11-18 13:48           ` Will Deacon
2016-11-18 13:59             ` Thomas Gleixner
2016-11-18 14:11               ` Will Deacon
2016-11-21 15:52   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:45   ` tip-bot for Sebastian Andrzej Siewior
2017-01-02 14:15   ` [PATCH 15/20] " Linus Walleij
2017-01-02 14:34     ` Linus Walleij
2017-01-02 15:00       ` Russell King - ARM Linux
2017-01-02 20:15         ` Linus Walleij
2017-01-03  9:33           ` Mark Rutland
2017-01-04 11:27             ` Sebastian Andrzej Siewior
2017-01-04 13:56             ` Mark Rutland
2017-01-04 14:32               ` Will Deacon
2017-01-05 15:57                 ` Mark Rutland
2017-01-05 15:26               ` Linus Walleij
2017-01-05 17:14                 ` Mark Rutland
2016-11-17 18:35 ` [PATCH 16/20] powerpc/sysfs: " Sebastian Andrzej Siewior
2016-11-21 15:53   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:45   ` tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 17/20] sparc/sysfs: " Sebastian Andrzej Siewior
2016-11-17 18:39   ` David Miller
2016-11-21 15:54   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:46   ` tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 18/20] x86/oprofile/nmi: Remove superfluous smp_function_call_single() Sebastian Andrzej Siewior
2016-11-21 15:54   ` [tip:smp/hotplug] " tip-bot for Anna-Maria Gleixner
2016-11-22 22:46   ` tip-bot for Anna-Maria Gleixner
2016-11-17 18:35 ` [PATCH 19/20] x86/oprofile/nmi: Convert to hotplug state machine Sebastian Andrzej Siewior
2016-11-21 15:55   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:47   ` tip-bot for Sebastian Andrzej Siewior
2016-11-17 18:35 ` [PATCH 20/20] x86/pci/amd-bus: " Sebastian Andrzej Siewior
2016-11-21 15:55   ` [tip:smp/hotplug] " tip-bot for Sebastian Andrzej Siewior
2016-11-22 22:47   ` tip-bot for Sebastian Andrzej Siewior

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=20161118150940.rkmluouwi5u4zt74@linutronix.de \
    --to=bigeasy@linutronix.de \
    --cc=jdelvare@suse.com \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=rt@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).