From: Heiko Carstens Machine checks on s390 are always enabled (except in the machine check handler itself). Therefore use a raw_spinlock in the machine check handler to avoid deadlocks in the lock validator. Signed-off-by: Heiko Carstens Acked-by: Ingo Molnar Cc: Martin Schwidefsky Cc: Arjan van de Ven Signed-off-by: Andrew Morton --- drivers/s390/s390mach.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff -puN drivers/s390/s390mach.c~lock-validator-s390-use-raw_spinlock-in-mcck-handler drivers/s390/s390mach.c --- 25/drivers/s390/s390mach.c~lock-validator-s390-use-raw_spinlock-in-mcck-handler Mon Jun 19 15:06:15 2006 +++ 25-akpm/drivers/s390/s390mach.c Mon Jun 19 15:06:15 2006 @@ -371,7 +371,7 @@ s390_revalidate_registers(struct mci *mc void s390_do_machine_check(struct pt_regs *regs) { - static DEFINE_SPINLOCK(ipd_lock); + static raw_spinlock_t ipd_lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; static unsigned long long last_ipd; static int ipd_count; unsigned long long tmp; @@ -417,7 +417,7 @@ s390_do_machine_check(struct pt_regs *re * retry this instruction. */ - spin_lock(&ipd_lock); + __raw_spin_lock(&ipd_lock); tmp = get_clock(); @@ -431,7 +431,7 @@ s390_do_machine_check(struct pt_regs *re if (ipd_count == MAX_IPD_COUNT) s390_handle_damage("too many ipd retries."); - spin_unlock(&ipd_lock); + __raw_spin_unlock(&ipd_lock); } else { /* Processing damage -> stopping machine */ _