Richard Cochran
93131f7a9b
irqchip/gic: Convert to hotplug state machine
...
More or less straightforward, although this driver sports some very
interesting SMP setup code. Regarding the callback ordering, this
deleted comment is interesting:
... the GIC needs to be up before the ARM generic timers.
That comment is half baken as the same requirement is true for perf.
Signed-off-by: Richard Cochran <rcochran@linutronix.de >
Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de >
Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de >
Acked-by: Jason Cooper <jason@lakedaemon.net >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Marc Zyngier <marc.zyngier@arm.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20160713153333.069777215@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2016-07-14 09:34:28 +02:00
Sebastian Andrzej Siewior
07d36c9e84
x86/vdso: Convert 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 >
Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de >
Acked-by: Andy Lutomirski <luto@amacapital.net >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20160713153332.987560239@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2016-07-14 09:34:27 +02:00
Thomas Gleixner
aaddd7d1c7
sched/hotplug: Make activate() the last hotplug step
...
The scheduler can handle per cpu threads before the cpu is set to active and
it does not allow user space threads on the cpu before active is
set. Attaching to the scheduling domains is also not required before user
space threads can be handled.
Move the activation to the end of the hotplug state space. That also means
that deactivation is the first action when a cpu is shut down.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Peter Zijlstra <peterz@infradead.org >
Cc: rt@linutronix.de
Link: http://lkml.kernel.org/r/20160310120025.597477199@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-05-06 14:58:25 +02:00
Thomas Gleixner
40190a78f8
sched/hotplug: Convert cpu_[in]active notifiers to state machine
...
Now that we reduced everything into single notifiers, it's simple to move them
into the hotplug state machine space.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Peter Zijlstra <peterz@infradead.org >
Cc: rt@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-05-06 14:58:24 +02:00
Thomas Gleixner
9cf7243d5d
sched: Make set_cpu_rq_start_time() a built in hotplug state
...
Start distangling the maze of hotplug notifiers in the scheduler.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Acked-by: Peter Zijlstra <peterz@infradead.org >
Cc: rt@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-05-06 14:58:23 +02:00
Thomas Gleixner
e69aab1311
cpu/hotplug: Make wait for dead cpu completion based
...
Kill the busy spinning on the control side and just wait for the hotplugged
cpu to tell that it reached the dead state.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-arch@vger.kernel.org
Cc: Rik van Riel <riel@redhat.com >
Cc: Rafael Wysocki <rafael.j.wysocki@intel.com >
Cc: "Srivatsa S. Bhat" <srivatsa@mit.edu >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Sebastian Siewior <bigeasy@linutronix.de >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Tejun Heo <tj@kernel.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul Turner <pjt@google.com >
Link: http://lkml.kernel.org/r/20160226182341.776157858@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-03-01 20:36:58 +01:00
Thomas Gleixner
8df3e07e7f
cpu/hotplug: Let upcoming cpu bring itself fully up
...
Let the upcoming cpu kick the hotplug thread and let itself complete the
bringup. That way the controll side can just wait for the completion or later
when we made the hotplug machinery async not care at all.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-arch@vger.kernel.org
Cc: Rik van Riel <riel@redhat.com >
Cc: Rafael Wysocki <rafael.j.wysocki@intel.com >
Cc: "Srivatsa S. Bhat" <srivatsa@mit.edu >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Sebastian Siewior <bigeasy@linutronix.de >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Tejun Heo <tj@kernel.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul Turner <pjt@google.com >
Link: http://lkml.kernel.org/r/20160226182341.697655464@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-03-01 20:36:57 +01:00
Thomas Gleixner
fc6d73d674
arch/hotplug: Call into idle with a proper state
...
Let the non boot cpus call into idle with the corresponding hotplug state, so
the hotplug core can handle the further bringup. That's a first step to
convert the boot side of the hotplugged cpus to do all the synchronization
with the other side through the state machine. For now it'll only start the
hotplug thread and kick the full bringup of the cpu.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-arch@vger.kernel.org
Cc: Rik van Riel <riel@redhat.com >
Cc: Rafael Wysocki <rafael.j.wysocki@intel.com >
Cc: "Srivatsa S. Bhat" <srivatsa@mit.edu >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Sebastian Siewior <bigeasy@linutronix.de >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Tejun Heo <tj@kernel.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul Turner <pjt@google.com >
Link: http://lkml.kernel.org/r/20160226182341.614102639@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-03-01 20:36:57 +01:00
Thomas Gleixner
1cf4f629d9
cpu/hotplug: Move online calls to hotplugged cpu
...
Let the hotplugged cpu invoke the setup/teardown callbacks
(CPU_ONLINE/CPU_DOWN_PREPARE) itself.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-arch@vger.kernel.org
Cc: Rik van Riel <riel@redhat.com >
Cc: Rafael Wysocki <rafael.j.wysocki@intel.com >
Cc: "Srivatsa S. Bhat" <srivatsa@mit.edu >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Sebastian Siewior <bigeasy@linutronix.de >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Tejun Heo <tj@kernel.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul Turner <pjt@google.com >
Link: http://lkml.kernel.org/r/20160226182341.536364371@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-03-01 20:36:57 +01:00
Thomas Gleixner
931ef16330
cpu/hotplug: Unpark smpboot threads from the state machine
...
Handle the smpboot threads in the state machine.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-arch@vger.kernel.org
Cc: Rik van Riel <riel@redhat.com >
Cc: Rafael Wysocki <rafael.j.wysocki@intel.com >
Cc: "Srivatsa S. Bhat" <srivatsa@mit.edu >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Sebastian Siewior <bigeasy@linutronix.de >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Tejun Heo <tj@kernel.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul Turner <pjt@google.com >
Link: http://lkml.kernel.org/r/20160226182341.295777684@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-03-01 20:36:56 +01:00
Thomas Gleixner
949338e351
cpu/hotplug: Move scheduler cpu_online notifier to hotplug core
...
Move the scheduler cpu online notifier part to the hotplug core. This is
anyway the highest priority callback and we need that functionality right now
for the next changes.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-arch@vger.kernel.org
Cc: Rik van Riel <riel@redhat.com >
Cc: Rafael Wysocki <rafael.j.wysocki@intel.com >
Cc: "Srivatsa S. Bhat" <srivatsa@mit.edu >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Sebastian Siewior <bigeasy@linutronix.de >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Tejun Heo <tj@kernel.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul Turner <pjt@google.com >
Link: http://lkml.kernel.org/r/20160226182341.200791046@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-03-01 20:36:55 +01:00
Thomas Gleixner
5b7aa87e04
cpu/hotplug: Implement setup/removal interface
...
Implement function which allow to setup/remove hotplug state callbacks.
The default behaviour for setup is to call the startup function for this state
for (or on) all cpus which have a hotplug state >= the installed state.
The default behaviour for removal is to call the teardown function for this
state for (or on) all cpus which have a hotplug state >= the installed state.
This includes rollback to the previous state in case of failure.
A special state is CPUHP_ONLINE_DYN. Its for dynamically registering a hotplug
callback pair. This is for drivers which have no dependencies to avoid that we
need to allocate CPUHP states for each of them
For both setup and remove helper functions are provided, which prevent the
core to issue the callbacks. This simplifies the conversion of existing
hotplug notifiers.
[ Dynamic registering implemented by Sebastian Siewior ]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-arch@vger.kernel.org
Cc: Rik van Riel <riel@redhat.com >
Cc: Rafael Wysocki <rafael.j.wysocki@intel.com >
Cc: "Srivatsa S. Bhat" <srivatsa@mit.edu >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Sebastian Siewior <bigeasy@linutronix.de >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Tejun Heo <tj@kernel.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul Turner <pjt@google.com >
Link: http://lkml.kernel.org/r/20160226182341.103464877@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-03-01 20:36:55 +01:00
Thomas Gleixner
4baa0afc67
cpu/hotplug: Convert the hotplugged cpu work to a state machine
...
Move the functions which need to run on the hotplugged processor into
a state machine array and let the code iterate through these functions.
In a later state, this will grow synchronization points between the
control processor and the hotplugged processor, so we can move the
various architecture implementations of the synchronizations to the
core.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-arch@vger.kernel.org
Cc: Rik van Riel <riel@redhat.com >
Cc: Rafael Wysocki <rafael.j.wysocki@intel.com >
Cc: "Srivatsa S. Bhat" <srivatsa@mit.edu >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Sebastian Siewior <bigeasy@linutronix.de >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Tejun Heo <tj@kernel.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul Turner <pjt@google.com >
Link: http://lkml.kernel.org/r/20160226182340.770651526@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-03-01 20:36:54 +01:00
Thomas Gleixner
cff7d378d3
cpu/hotplug: Convert to a state machine for the control processor
...
Move the split out steps into a callback array and let the cpu_up/down
code iterate through the array functions. For now most of the
callbacks are asymmetric to resemble the current hotplug maze.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
Cc: linux-arch@vger.kernel.org
Cc: Rik van Riel <riel@redhat.com >
Cc: Rafael Wysocki <rafael.j.wysocki@intel.com >
Cc: "Srivatsa S. Bhat" <srivatsa@mit.edu >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Arjan van de Ven <arjan@linux.intel.com >
Cc: Sebastian Siewior <bigeasy@linutronix.de >
Cc: Rusty Russell <rusty@rustcorp.com.au >
Cc: Steven Rostedt <rostedt@goodmis.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Tejun Heo <tj@kernel.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Paul Turner <pjt@google.com >
Link: http://lkml.kernel.org/r/20160226182340.671816690@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de >
2016-03-01 20:36:54 +01:00