s390/irq: remove split irq fields from /proc/stat
[firefly-linux-kernel-4.4.55.git] / arch / s390 / mm / fault.c
index 870a644895f0e791f2a47ae5158e2c7159e85858..2fb9e63b8fc44e58ae415dddefa3a067f48071da 100644 (file)
@@ -277,10 +277,16 @@ static inline int do_exception(struct pt_regs *regs, int access)
        unsigned int flags;
        int fault;
 
+       tsk = current;
+       /*
+        * The instruction that caused the program check has
+        * been nullified. Don't signal single step via SIGTRAP.
+        */
+       clear_tsk_thread_flag(tsk, TIF_PER_TRAP);
+
        if (notify_page_fault(regs))
                return 0;
 
-       tsk = current;
        mm = tsk->mm;
        trans_exc_code = regs->int_parm_long;
 
@@ -376,11 +382,6 @@ retry:
                        goto retry;
                }
        }
-       /*
-        * The instruction that caused the program check will
-        * be repeated. Don't signal single step via SIGTRAP.
-        */
-       clear_tsk_thread_flag(tsk, TIF_PER_TRAP);
        fault = 0;
 out_up:
        up_read(&mm->mmap_sem);
@@ -427,6 +428,12 @@ void __kprobes do_asce_exception(struct pt_regs *regs)
        struct vm_area_struct *vma;
        unsigned long trans_exc_code;
 
+       /*
+        * The instruction that caused the program check has
+        * been nullified. Don't signal single step via SIGTRAP.
+        */
+       clear_tsk_thread_flag(current, TIF_PER_TRAP);
+
        trans_exc_code = regs->int_parm_long;
        if (unlikely(!user_space_fault(trans_exc_code) || in_atomic() || !mm))
                goto no_context;
@@ -562,7 +569,7 @@ static void pfault_interrupt(struct ext_code ext_code,
        subcode = ext_code.subcode;
        if ((subcode & 0xff00) != __SUBCODE_MASK)
                return;
-       kstat_cpu(smp_processor_id()).irqs[EXTINT_PFL]++;
+       inc_irq_stat(IRQEXT_PFL);
        /* Get the token (= pid of the affected task). */
        pid = sizeof(void *) == 4 ? param32 : param64;
        rcu_read_lock();