The patch titled s390: instruction processing damage handling has been added to the -mm tree. Its filename is s390-instruction-processing-damage-handling.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this From: Heiko Carstens <heiko.carstens@xxxxxxxxxx> In case of an instruction processing damage (IPD) machine check in kernel mode the resulting action is always to stop the kernel. This is not necessarily the best solution since a retry of the failing instruction might succeed. Add logic to retry the instruction if no more than 30 instruction processing damage checks occured in the last 5 minutes. Signed-off-by: Heiko Carstens <heiko.carstens@xxxxxxxxxx> Signed-off-by: Martin Schwidefsky <schwidefsky@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- drivers/s390/s390mach.c | 33 ++++++++++++++++++++++++++++----- 1 files changed, 28 insertions(+), 5 deletions(-) diff -puN drivers/s390/s390mach.c~s390-instruction-processing-damage-handling drivers/s390/s390mach.c --- 25/drivers/s390/s390mach.c~s390-instruction-processing-damage-handling Mon Apr 24 16:46:09 2006 +++ 25-akpm/drivers/s390/s390mach.c Mon Apr 24 16:46:09 2006 @@ -362,12 +362,19 @@ s390_revalidate_registers(struct mci *mc return kill_task; } +#define MAX_IPD_COUNT 29 +#define MAX_IPD_TIME (5 * 60 * 100 * 1000) /* 5 minutes */ + /* * machine check handler. */ void s390_do_machine_check(struct pt_regs *regs) { + static DEFINE_SPINLOCK(ipd_lock); + static unsigned long long last_ipd; + static int ipd_count; + unsigned long long tmp; struct mci *mci; struct mcck_struct *mcck; int umode; @@ -404,11 +411,27 @@ s390_do_machine_check(struct pt_regs *re s390_handle_damage("processing backup machine " "check with damage."); } - if (!umode) - s390_handle_damage("processing backup machine " - "check in kernel mode."); - mcck->kill_task = 1; - mcck->mcck_code = *(unsigned long long *) mci; + + /* + * Nullifying exigent condition, therefore we might + * retry this instruction. + */ + + spin_lock(&ipd_lock); + + tmp = get_clock(); + + if (((tmp - last_ipd) >> 12) < MAX_IPD_TIME) + ipd_count++; + else + ipd_count = 1; + + last_ipd = tmp; + + if (ipd_count == MAX_IPD_COUNT) + s390_handle_damage("too many ipd retries."); + + spin_unlock(&ipd_lock); } else { /* Processing damage -> stopping machine */ _ Patches currently in -mm which might be from heiko.carstens@xxxxxxxxxx are s390-make-qeth-buildable.patch ipv4-inet_init-fs_initcall.patch s390-bug-in-setup_rt_frame.patch s390-instruction-processing-damage-handling.patch rcu-introduce-rcu_soon_pending-interface.patch s390-exploit-rcu_soon_pending-interface.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html