|
@@ -116,6 +116,18 @@ static int notrace s390_validate_registers(union mci mci, int umode)
|
|
s390_handle_damage();
|
|
s390_handle_damage();
|
|
kill_task = 1;
|
|
kill_task = 1;
|
|
}
|
|
}
|
|
|
|
+ /* Validate control registers */
|
|
|
|
+ if (!mci.cr) {
|
|
|
|
+ /*
|
|
|
|
+ * Control registers have unknown contents.
|
|
|
|
+ * Can't recover and therefore stopping machine.
|
|
|
|
+ */
|
|
|
|
+ s390_handle_damage();
|
|
|
|
+ } else {
|
|
|
|
+ asm volatile(
|
|
|
|
+ " lctlg 0,15,0(%0)"
|
|
|
|
+ : : "a" (&S390_lowcore.cregs_save_area) : "memory");
|
|
|
|
+ }
|
|
if (!mci.fp) {
|
|
if (!mci.fp) {
|
|
/*
|
|
/*
|
|
* Floating point registers can't be restored. If the
|
|
* Floating point registers can't be restored. If the
|
|
@@ -208,18 +220,6 @@ static int notrace s390_validate_registers(union mci mci, int umode)
|
|
*/
|
|
*/
|
|
kill_task = 1;
|
|
kill_task = 1;
|
|
}
|
|
}
|
|
- /* Validate control registers */
|
|
|
|
- if (!mci.cr) {
|
|
|
|
- /*
|
|
|
|
- * Control registers have unknown contents.
|
|
|
|
- * Can't recover and therefore stopping machine.
|
|
|
|
- */
|
|
|
|
- s390_handle_damage();
|
|
|
|
- } else {
|
|
|
|
- asm volatile(
|
|
|
|
- " lctlg 0,15,0(%0)"
|
|
|
|
- : : "a" (&S390_lowcore.cregs_save_area) : "memory");
|
|
|
|
- }
|
|
|
|
/*
|
|
/*
|
|
* We don't even try to validate the TOD register, since we simply
|
|
* We don't even try to validate the TOD register, since we simply
|
|
* can't write something sensible into that register.
|
|
* can't write something sensible into that register.
|