linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / s390 / s390mach.c
index f99e553..3bf4666 100644 (file)
@@ -13,7 +13,6 @@
 #include <linux/sched.h>
 #include <linux/errno.h>
 #include <linux/workqueue.h>
-#include <linux/time.h>
 
 #include <asm/lowcore.h>
 
@@ -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 */