[S390] hibernate: Do real CPU swap at resume time
authorMichael Holzheu <michael.holzheu@linux.vnet.ibm.com>
Tue, 22 Sep 2009 20:58:53 +0000 (22:58 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 22 Sep 2009 20:58:46 +0000 (22:58 +0200)
commit1aaf179d043856d80bbb354f9feaf706b9cfbcd3
treeb477b19f229869f45fc9f331f308dcdb5e3b01a0
parent68d1e5f08b13132504752cad54169376739753db
[S390] hibernate: Do real CPU swap at resume time

Currently, when the physical resume CPU is not equal to the physical suspend
CPU, we swap the CPUs logically, by modifying the logical/physical CPU mapping.
This has two major drawbacks: First the change is visible from user space (e.g.
CPU sysfs files) and second it is hard to ensure that nowhere in the kernel
the physical CPU ID is stored before suspend.
To fix this, we now really swap the physical CPUs, if the resume CPU is not
the pysical suspend CPU. We restart the suspend CPU and stop the resume CPU
using SIGP restart and SIGP stop. If the suspend CPU is no longer available,
we write a message and load a disabled wait PSW.

Signed-off-by: Michael Holzheu <michael.holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/lowcore.h
arch/s390/kernel/asm-offsets.c
arch/s390/kernel/sclp.S
arch/s390/kernel/smp.c
arch/s390/kernel/swsusp_asm64.S