]> git.baikalelectronics.ru Git - kernel.git/commit
x86: Fix instruction breakpoint encoding
authorFrederic Weisbecker <fweisbec@gmail.com>
Fri, 17 Sep 2010 01:24:13 +0000 (03:24 +0200)
committerFrederic Weisbecker <fweisbec@gmail.com>
Fri, 17 Sep 2010 01:24:13 +0000 (03:24 +0200)
commit55ed851e89357267a8e670c6af8c529845336162
tree77d72204f3a92e9ecbc8b4e36d6e04fb6b17a98b
parentd00680be005a8ffd83cd2a3aad43f8dcc21d2896
x86: Fix instruction breakpoint encoding

Lengths and types of breakpoints are encoded in a half byte
into CPU registers. However when we extract these values
and store them, we add a high half byte part to them: 0x40 to the
length and 0x80 to the type.
When that gets reloaded to the CPU registers, the high part
is masked.

While making the instruction breakpoints available for perf,
I zapped that high part on instruction breakpoint encoding
and that broke the arch -> generic translation used by ptrace
instruction breakpoints. Writing dr7 to set an inst breakpoint
was then failing.

There is no apparent reason for these high parts so we could get
rid of them altogether. That's an invasive change though so let's
do that later and for now fix the problem by restoring that inst
breakpoint high part encoding in this sole patch.

Reported-by: Kelvie Wong <kelvie@ieee.org>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Prasad <prasad@linux.vnet.ibm.com>
Cc: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Cc: Will Deacon <will.deacon@arm.com>
arch/x86/include/asm/hw_breakpoint.h
arch/x86/kernel/hw_breakpoint.c