KVM: s390: detect some program check loops
authorChristian Borntraeger <borntraeger@de.ibm.com>
Thu, 26 Jan 2017 19:45:33 +0000 (20:45 +0100)
committerChristian Borntraeger <borntraeger@de.ibm.com>
Mon, 6 Feb 2017 11:35:53 +0000 (12:35 +0100)
commitfb7dc1d4ddce744c8d8e1aca19d4982102cf72e1
tree721287cf291ab8aac9c30d97e08fe35d7654dc8f
parente1e8a9624f7ba8ead4f056ff558ed070e86fa747
KVM: s390: detect some program check loops

Sometimes (e.g. early boot) a guest is broken in such ways that it loops
100% delivering operation exceptions (illegal operation) but the pgm new
PSW is not set properly. This will result in code being read from
address zero, which usually contains another illegal op. Let's detect
this case and return to userspace. Instead of only detecting
this for address zero apply a heuristic that will work for any program
check new psw.
We do not want guest problem state to be able to trigger a guest panic,
e.g. by faulting on an address that is the same as the program check
new PSW, so we check for the problem state bit being off.

With proper handling in userspace we
a: get rid of CPU consumption of such broken guests
b: keep the program old PSW. This allows to find out the original illegal
   operation - making debugging such early boot issues much easier than
   with single stepping

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
arch/s390/kvm/intercept.c