]> Pileus Git - ~andy/linux/blobdiff - arch/powerpc/include/asm/hw_breakpoint.h
Merge tag 'v3.9-rc3' into v4l_for_linus
[~andy/linux] / arch / powerpc / include / asm / hw_breakpoint.h
index 423424599dad9395a00f15df23ce17676be872ac..eb0f4ac75c4cea9a39b2ba4391afbfd5ca980caa 100644 (file)
 #define _PPC_BOOK3S_64_HW_BREAKPOINT_H
 
 #ifdef __KERNEL__
-#ifdef CONFIG_HAVE_HW_BREAKPOINT
-
 struct arch_hw_breakpoint {
        unsigned long   address;
-       unsigned long   dabrx;
-       int             type;
-       u8              len; /* length of the target data symbol */
-       bool            extraneous_interrupt;
+       u16             type;
+       u16             len; /* length of the target data symbol */
 };
 
+/* Note: Don't change the the first 6 bits below as they are in the same order
+ * as the dabr and dabrx.
+ */
+#define HW_BRK_TYPE_READ               0x01
+#define HW_BRK_TYPE_WRITE              0x02
+#define HW_BRK_TYPE_TRANSLATE          0x04
+#define HW_BRK_TYPE_USER               0x08
+#define HW_BRK_TYPE_KERNEL             0x10
+#define HW_BRK_TYPE_HYP                        0x20
+#define HW_BRK_TYPE_EXTRANEOUS_IRQ     0x80
+
+/* bits that overlap with the bottom 3 bits of the dabr */
+#define HW_BRK_TYPE_RDWR       (HW_BRK_TYPE_READ | HW_BRK_TYPE_WRITE)
+#define HW_BRK_TYPE_DABR       (HW_BRK_TYPE_RDWR | HW_BRK_TYPE_TRANSLATE)
+#define HW_BRK_TYPE_PRIV_ALL   (HW_BRK_TYPE_USER | HW_BRK_TYPE_KERNEL | \
+                                HW_BRK_TYPE_HYP)
+
+#ifdef CONFIG_HAVE_HW_BREAKPOINT
 #include <linux/kdebug.h>
 #include <asm/reg.h>
 #include <asm/debug.h>
@@ -43,8 +57,6 @@ struct pmu;
 struct perf_sample_data;
 
 #define HW_BREAKPOINT_ALIGN 0x7
-/* Maximum permissible length of any HW Breakpoint */
-#define HW_BREAKPOINT_LEN 0x8
 
 extern int hw_breakpoint_slots(int type);
 extern int arch_bp_generic_fields(int type, int *gen_bp_type);
@@ -62,7 +74,12 @@ extern void ptrace_triggered(struct perf_event *bp,
                        struct perf_sample_data *data, struct pt_regs *regs);
 static inline void hw_breakpoint_disable(void)
 {
-       set_dabr(0, 0);
+       struct arch_hw_breakpoint brk;
+
+       brk.address = 0;
+       brk.type = 0;
+       brk.len = 0;
+       set_breakpoint(&brk);
 }
 extern void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs);