x86/debug: Clear reserved bits of DR6 in do_debug()

Clear the reserved bits from the stored copy of debug status
register (DR6).
This will help easy bitwise operations such as quick testing
of a debug event origin.

Signed-off-by: K.Prasad <prasad@linux.vnet.ibm.com>
Cc: Roland McGrath <roland@redhat.com>
Cc: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Ingo Molnar <mingo@elte.hu>
LKML-Reference: <20100128111401.GB13935@in.ibm.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
This commit is contained in:
K.Prasad
2010-01-28 16:44:01 +05:30
committed by Frederic Weisbecker
parent 1e12a4a7a3
commit 40f9249a73
2 changed files with 6 additions and 0 deletions

View File

@@ -14,6 +14,9 @@
which debugging register was responsible for the trap. The other bits which debugging register was responsible for the trap. The other bits
are either reserved or not of interest to us. */ are either reserved or not of interest to us. */
/* Define reserved bits in DR6 which are always set to 1 */
#define DR6_RESERVED (0xFFFF0FF0)
#define DR_TRAP0 (0x1) /* db0 */ #define DR_TRAP0 (0x1) /* db0 */
#define DR_TRAP1 (0x2) /* db1 */ #define DR_TRAP1 (0x2) /* db1 */
#define DR_TRAP2 (0x4) /* db2 */ #define DR_TRAP2 (0x4) /* db2 */

View File

@@ -534,6 +534,9 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
get_debugreg(dr6, 6); get_debugreg(dr6, 6);
/* Filter out all the reserved bits which are preset to 1 */
dr6 &= ~DR6_RESERVED;
/* Catch kmemcheck conditions first of all! */ /* Catch kmemcheck conditions first of all! */
if ((dr6 & DR_STEP) && kmemcheck_trap(regs)) if ((dr6 & DR_STEP) && kmemcheck_trap(regs))
return; return;