diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2009-10-29 10:04:13 -0400 |
---|---|---|
committer | Martin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com> | 2009-10-29 10:05:13 -0400 |
commit | f8501ba77d69c88a65e4ebbe03bdc65b1edb0b86 (patch) | |
tree | 27e42cf7bd5171c5b17c2d423b6ae5d3394cb6ef /arch/s390/kernel/smp.c | |
parent | 70f5dc514c0b183ee813dc3b3983b04891fd1e7a (diff) |
[S390] smp: fix sigp stop handling
According to the architecture a cpu must not necessarily enter stopped
state after completion of a sigp instruction with "stop" order code.
So remove the BUG() statement after self sending sigp stop to avoid
that it ever gets reached.
Also add a sigp busy check to make sure that the order gets delivered.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/smp.c')
-rw-r--r-- | arch/s390/kernel/smp.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index c699ac538c49..c99c45b848e3 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -647,8 +647,8 @@ void __cpu_die(unsigned int cpu) | |||
647 | void cpu_die(void) | 647 | void cpu_die(void) |
648 | { | 648 | { |
649 | idle_task_exit(); | 649 | idle_task_exit(); |
650 | signal_processor(smp_processor_id(), sigp_stop); | 650 | while (signal_processor(smp_processor_id(), sigp_stop) == sigp_busy) |
651 | BUG(); | 651 | cpu_relax(); |
652 | for (;;); | 652 | for (;;); |
653 | } | 653 | } |
654 | 654 | ||