The patch titled s390: instruction processing damage handling has been removed from the -mm tree. Its filename is s390-instruction-processing-damage-handling.patch This patch was probably dropped from -mm because it has now been merged into a subsystem tree or into Linus's tree, or because it was folded into its parent patch in the -mm tree. 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 --- devel/drivers/s390/s390mach.c~s390-instruction-processing-damage-handling 2006-04-27 18:39:06.000000000 -0700 +++ devel-akpm/drivers/s390/s390mach.c 2006-04-27 18:39:06.000000000 -0700 @@ -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 origin.patch s390-make-qeth-buildable.patch rcu-introduce-rcu_needs_cpu-interface.patch rcu-introduce-rcu_needs_cpu-interface-fix.patch s390-exploit-rcu_needs_cpu-interface.patch ipv4-inet_init-fs_initcall.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