#include <asm/ptrace.h>
 
+/*
+ * Aarch64 has flags for masking: Debug, Asynchronous (serror), Interrupts and
+ * FIQ exceptions, in the 'daif' register. We mask and unmask them in 'dai'
+ * order:
+ * Masking debug exceptions causes all other exceptions to be masked too/
+ * Masking SError masks irq, but not debug exceptions. Masking irqs has no
+ * side effects for other flags. Keeping to this order makes it easier for
+ * entry.S to know which exceptions should be unmasked.
+ *
+ * FIQ is never expected, but we mask it when we disable debug exceptions, and
+ * unmask it at all other times.
+ */
+
 /*
  * CPU interrupt mask handling.
  */
 {
        return flags & PSR_I_BIT;
 }
-
-/*
- * save and restore debug state
- */
-#define local_dbg_save(flags)                                          \
-       do {                                                            \
-               typecheck(unsigned long, flags);                        \
-               asm volatile(                                           \
-               "mrs    %0, daif                // local_dbg_save\n"    \
-               "msr    daifset, #8"                                    \
-               : "=r" (flags) : : "memory");                           \
-       } while (0)
-
-#define local_dbg_restore(flags)                                       \
-       do {                                                            \
-               typecheck(unsigned long, flags);                        \
-               asm volatile(                                           \
-               "msr    daif, %0                // local_dbg_restore\n" \
-               : : "r" (flags) : "memory");                            \
-       } while (0)
-
 #endif
 #endif
 
 
 #include <asm/cpufeature.h>
 #include <asm/cputype.h>
+#include <asm/daifflags.h>
 #include <asm/debug-monitors.h>
 #include <asm/system_misc.h>
 
 static void mdscr_write(u32 mdscr)
 {
        unsigned long flags;
-       local_dbg_save(flags);
+       flags = local_daif_save();
        write_sysreg(mdscr, mdscr_el1);
-       local_dbg_restore(flags);
+       local_daif_restore(flags);
 }
 NOKPROBE_SYMBOL(mdscr_write);