| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Tue, 16 May 2017 20:42:47 +0200 |
| Subject: [PATCH 16/17] init: Introduce SYSTEM_SCHEDULING state |
| |
| might_sleep() debugging and smp_processor_id() debugging should be active |
| right after the scheduler starts working. The init task can invoke |
| smp_processor_id() from preemptible context as it is pinned on the boot cpu |
| until sched_smp_init() removes the pinning and lets it schedule on all non |
| isolated cpus. |
| |
| Add a new state which allows to enable those checks earlier and add it to |
| the xen do_poweroff() function. |
| |
| No functional change. |
| |
| Tested-by: Mark Rutland <mark.rutland@arm.com> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> |
| Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| Acked-by: Mark Rutland <mark.rutland@arm.com> |
| Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Cc: Juergen Gross <jgross@suse.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Steven Rostedt <rostedt@goodmis.org> |
| Link: http://lkml.kernel.org/r/20170516184736.196214622@linutronix.de |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| --- |
| drivers/xen/manage.c | 1 + |
| include/linux/kernel.h | 6 +++++- |
| 2 files changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/xen/manage.c |
| +++ b/drivers/xen/manage.c |
| @@ -190,6 +190,7 @@ static void do_poweroff(void) |
| { |
| switch (system_state) { |
| case SYSTEM_BOOTING: |
| + case SYSTEM_SCHEDULING: |
| orderly_poweroff(true); |
| break; |
| case SYSTEM_RUNNING: |
| --- a/include/linux/kernel.h |
| +++ b/include/linux/kernel.h |
| @@ -488,9 +488,13 @@ extern int root_mountflags; |
| |
| extern bool early_boot_irqs_disabled; |
| |
| -/* Values used for system_state */ |
| +/* |
| + * Values used for system_state. Ordering of the states must not be changed |
| + * as code checks for <, <=, >, >= STATE. |
| + */ |
| extern enum system_states { |
| SYSTEM_BOOTING, |
| + SYSTEM_SCHEDULING, |
| SYSTEM_RUNNING, |
| SYSTEM_HALT, |
| SYSTEM_POWER_OFF, |