The patch titled Subject: smpboot: allow passing the cpumask on per-cpu thread registration has been added to the -mm tree. Its filename is smpboot-allow-to-pass-the-cpumask-on-per-cpu-thread-registration.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/smpboot-allow-to-pass-the-cpumask-on-per-cpu-thread-registration.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/smpboot-allow-to-pass-the-cpumask-on-per-cpu-thread-registration.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Frederic Weisbecker <fweisbec@xxxxxxxxx> Subject: smpboot: allow passing the cpumask on per-cpu thread registration It makes the registration cheaper and simpler for the smpboot per-cpu kthread users that don't need to always update the cpumask after threads creation. Signed-off-by: Frederic Weisbecker <fweisbec@xxxxxxxxx> Reviewed-by: Chris Metcalf <cmetcalf@xxxxxxxxxx> Reviewed-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: Chris Metcalf <cmetcalf@xxxxxxxxxx> Cc: Don Zickus <dzickus@xxxxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Cc: Ulrich Obergfell <uobergfe@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/smpboot.h | 11 ++++++++++- kernel/smpboot.c | 12 ++++++++---- kernel/watchdog.c | 9 +++------ 3 files changed, 21 insertions(+), 11 deletions(-) diff -puN include/linux/smpboot.h~smpboot-allow-to-pass-the-cpumask-on-per-cpu-thread-registration include/linux/smpboot.h --- a/include/linux/smpboot.h~smpboot-allow-to-pass-the-cpumask-on-per-cpu-thread-registration +++ a/include/linux/smpboot.h @@ -48,7 +48,16 @@ struct smp_hotplug_thread { const char *thread_comm; }; -int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread); +int smpboot_register_percpu_thread_cpumask(struct smp_hotplug_thread *plug_thread, + const struct cpumask *cpumask); + +static inline int +smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread) +{ + return smpboot_register_percpu_thread_cpumask(plug_thread, + cpu_possible_mask); +} + void smpboot_unregister_percpu_thread(struct smp_hotplug_thread *plug_thread); int smpboot_update_cpumask_percpu_thread(struct smp_hotplug_thread *plug_thread, const struct cpumask *); diff -puN kernel/smpboot.c~smpboot-allow-to-pass-the-cpumask-on-per-cpu-thread-registration kernel/smpboot.c --- a/kernel/smpboot.c~smpboot-allow-to-pass-the-cpumask-on-per-cpu-thread-registration +++ a/kernel/smpboot.c @@ -273,19 +273,22 @@ static void smpboot_destroy_threads(stru } /** - * smpboot_register_percpu_thread - Register a per_cpu thread related to hotplug + * smpboot_register_percpu_thread_cpumask - Register a per_cpu thread related + * to hotplug * @plug_thread: Hotplug thread descriptor + * @cpumask: The cpumask where threads run * * Creates and starts the threads on all online cpus. */ -int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread) +int smpboot_register_percpu_thread_cpumask(struct smp_hotplug_thread *plug_thread, + const struct cpumask *cpumask) { unsigned int cpu; int ret = 0; if (!alloc_cpumask_var(&plug_thread->cpumask, GFP_KERNEL)) return -ENOMEM; - cpumask_copy(plug_thread->cpumask, cpu_possible_mask); + cpumask_copy(plug_thread->cpumask, cpumask); get_online_cpus(); mutex_lock(&smpboot_threads_lock); @@ -296,7 +299,8 @@ int smpboot_register_percpu_thread(struc free_cpumask_var(plug_thread->cpumask); goto out; } - smpboot_unpark_thread(plug_thread, cpu); + if (cpumask_test_cpu(cpu, cpumask)) + smpboot_unpark_thread(plug_thread, cpu); } list_add(&plug_thread->list, &hotplug_threads); out: diff -puN kernel/watchdog.c~smpboot-allow-to-pass-the-cpumask-on-per-cpu-thread-registration kernel/watchdog.c --- a/kernel/watchdog.c~smpboot-allow-to-pass-the-cpumask-on-per-cpu-thread-registration +++ a/kernel/watchdog.c @@ -713,15 +713,12 @@ static int watchdog_enable_all_cpus(void int err = 0; if (!watchdog_running) { - err = smpboot_register_percpu_thread(&watchdog_threads); + err = smpboot_register_percpu_thread_cpumask(&watchdog_threads, + &watchdog_cpumask); if (err) pr_err("Failed to create watchdog threads, disabled\n"); - else { - if (smpboot_update_cpumask_percpu_thread( - &watchdog_threads, &watchdog_cpumask)) - pr_err("Failed to set cpumask for watchdog threads\n"); + else watchdog_running = 1; - } } else { /* * Enable/disable the lockup detectors or _ Patches currently in -mm which might be from fweisbec@xxxxxxxxx are smpboot-fix-memory-leak-on-error-handling.patch smpboot-make-cleanup-to-mirror-setup.patch smpboot-allow-to-pass-the-cpumask-on-per-cpu-thread-registration.patch watchdog-simplify-housekeeping-affinity-with-the-appropriate-mask.patch linux-next.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html