Re: [RFC patch V2 0/7] Per cpu thread hotplug infrastructure

Paul E. McKenney
2012-06-26T23:27:06Z

On Fri, Jun 15, 2012 at 02:13:19PM -0000, Thomas Gleixner wrote:
> The following series implements the infrastructure for parking and
> unparking kernel threads to avoid the full teardown and fork on cpu
> hotplug operations along with management infrastructure for hotplug
> and users.
>
> Changes since V1:
>
> - Addressed the review comments
> - Fixed a missing state update in parkme (reported by Paul)
> - Simplified rcu_yield()
> - Added Pauls RCU conversion
>
> Full diffstat below. Due to the RCU cleanup we now remove more code
> than we add. :)

;-)

With the exception of a build error for CONFIG_SMP=y:

Tested-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>

I finally tracked down a hang, which turned out to be an unrelated bug
of mine that happened to be triggered more reliably with these patches
applied, hence the delay. Sigh!

For CONFIG_SMP=y:

softirq.c:(.text+0xa6d3): undefined reference to `smpboot_thread_check_parking'
softirq.c:(.init.text+0x4aa): undefined reference to `smpboot_register_percpu_thread'
softirq.c:(.text+0xb763): undefined reference to `smpboot_thread_check_parking'
softirq.c:(.init.text+0x48e): undefined reference to `smpboot_register_percpu_thread'

My approach would be to make smpboot.o be unconditionally created by
kernel/Makefile and to use conditional compilation as needed. The real
question is whether we want to allow parking in !SMP kernels. I cannot
see why we wouldn't -- there might be other reasons to park besides
CPU hotplug. Thoughts?

Thanx, Paul

> Thanks,
>
> tglx
> ---
> drivers/infiniband/hw/ehca/ehca_irq.c | 240 ++++++++-------------
> drivers/infiniband/hw/ehca/ehca_irq.h | 5
> include/linux/kthread.h | 11
> include/linux/smpboot.h | 40 +++
> kernel/cpu.c | 10
> kernel/kthread.c | 184 ++++++++++++++--
> kernel/rcutree.c | 12 -
> kernel/rcutree.h | 15 -
> kernel/rcutree_plugin.h | 375 +++++-----------------------------
> kernel/rcutree_trace.c | 3
> kernel/smpboot.c | 206 ++++++++++++++++++
> kernel/smpboot.h | 4
> kernel/softirq.c | 84 +------
> kernel/watchdog.c | 232 ++++++---------------
> 14 files changed, 678 insertions(+), 743 deletions(-)
>