summaryrefslogtreecommitdiffstats
path: root/fix-icebp-breakpoints.patch
diff options
context:
space:
mode:
authorKyle McMartin <kyle@dreadnought.i.jkkm.org>2010-09-01 16:21:51 -0400
committerKyle McMartin <kyle@dreadnought.i.jkkm.org>2010-09-01 16:21:51 -0400
commit3de7ad47f321d24e60efaebe1674ac57e363faed (patch)
tree3cb6d449de174739861ebdb37047024ea1e104d1 /fix-icebp-breakpoints.patch
parent07d33223125db2a9a5d6941a13b1e766f5e788ec (diff)
downloadkernel-3de7ad47f321d24e60efaebe1674ac57e363faed.tar.gz
kernel-3de7ad47f321d24e60efaebe1674ac57e363faed.tar.xz
kernel-3de7ad47f321d24e60efaebe1674ac57e363faed.zip
fix icebp breakpoints
Diffstat (limited to 'fix-icebp-breakpoints.patch')
-rw-r--r--fix-icebp-breakpoints.patch50
1 files changed, 50 insertions, 0 deletions
diff --git a/fix-icebp-breakpoints.patch b/fix-icebp-breakpoints.patch
new file mode 100644
index 000000000..a84994df3
--- /dev/null
+++ b/fix-icebp-breakpoints.patch
@@ -0,0 +1,50 @@
+From: Frederic Weisbecker <fweisbec@gmail.com>
+
+https://bugzilla.kernel.org/show_bug.cgi?id=16315#c26
+http://bugs.winehq.org/show_bug.cgi?id=23323
+
+diff --git a/arch/x86/include/asm/hw_breakpoint.h b/arch/x86/include/asm/hw_breakpoint.h
+index 528a11e..824ca07 100644
+--- a/arch/x86/include/asm/hw_breakpoint.h
++++ b/arch/x86/include/asm/hw_breakpoint.h
+@@ -20,7 +20,7 @@ struct arch_hw_breakpoint {
+ #include <linux/list.h>
+
+ /* Available HW breakpoint length encodings */
+-#define X86_BREAKPOINT_LEN_X 0x00
++#define X86_BREAKPOINT_LEN_X 0x40
+ #define X86_BREAKPOINT_LEN_1 0x40
+ #define X86_BREAKPOINT_LEN_2 0x44
+ #define X86_BREAKPOINT_LEN_4 0x4c
+diff --git a/arch/x86/kernel/hw_breakpoint.c b/arch/x86/kernel/hw_breakpoint.c
+index a474ec3..71123b1 100644
+--- a/arch/x86/kernel/hw_breakpoint.c
++++ b/arch/x86/kernel/hw_breakpoint.c
+@@ -208,9 +208,6 @@ int arch_bp_generic_fields(int x86_len, int x86_type,
+ {
+ /* Len */
+ switch (x86_len) {
+- case X86_BREAKPOINT_LEN_X:
+- *gen_len = sizeof(long);
+- break;
+ case X86_BREAKPOINT_LEN_1:
+ *gen_len = HW_BREAKPOINT_LEN_1;
+ break;
+@@ -233,6 +230,7 @@ int arch_bp_generic_fields(int x86_len, int x86_type,
+ switch (x86_type) {
+ case X86_BREAKPOINT_EXECUTE:
+ *gen_type = HW_BREAKPOINT_X;
++ *gen_len = sizeof(long);
+ break;
+ case X86_BREAKPOINT_WRITE:
+ *gen_type = HW_BREAKPOINT_W;
+@@ -316,9 +314,6 @@ int arch_validate_hwbkpt_settings(struct perf_event *bp)
+ ret = -EINVAL;
+
+ switch (info->len) {
+- case X86_BREAKPOINT_LEN_X:
+- align = sizeof(long) -1;
+- break;
+ case X86_BREAKPOINT_LEN_1:
+ align = 0;
+ break;