X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fs390%2Fs390mach.c;h=3bf466603512a32f2c6a933525492eed58963f33;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=f99e55308b32df8625658de3f63c1fddf5010236;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/drivers/s390/s390mach.c b/drivers/s390/s390mach.c index f99e55308..3bf466603 100644 --- a/drivers/s390/s390mach.c +++ b/drivers/s390/s390mach.c @@ -13,7 +13,6 @@ #include #include #include -#include #include @@ -363,19 +362,12 @@ s390_revalidate_registers(struct mci *mci) return kill_task; } -#define MAX_IPD_COUNT 29 -#define MAX_IPD_TIME (5 * 60 * USEC_PER_SEC) /* 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; @@ -412,27 +404,11 @@ s390_do_machine_check(struct pt_regs *regs) s390_handle_damage("processing backup machine " "check with damage."); } - - /* - * 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); + if (!umode) + s390_handle_damage("processing backup machine " + "check in kernel mode."); + mcck->kill_task = 1; + mcck->mcck_code = *(unsigned long long *) mci; } else { /* Processing damage -> stopping machine */