Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch Clean up dbregs; remove useless comments, remove ar...



details:   https://anonhg.NetBSD.org/src/rev/f2f4fc77a5d9
branches:  trunk
changeset: 320822:f2f4fc77a5d9
user:      maxv <maxv%NetBSD.org@localhost>
date:      Sun Jul 22 15:02:51 2018 +0000

description:
Clean up dbregs; remove useless comments, remove arguments from prototypes,
style, add KASSERT and move x86_dbregspl into dbregs.c. No real functional
change.

diffstat:

 sys/arch/amd64/amd64/machdep.c |  12 ++----
 sys/arch/i386/i386/machdep.c   |  12 ++----
 sys/arch/x86/include/dbregs.h  |  68 ++++++++++-------------------------------
 sys/arch/x86/x86/dbregs.c      |  52 ++++++++++++++++---------------
 4 files changed, 52 insertions(+), 92 deletions(-)

diffs (truncated from 346 to 300 lines):

diff -r 7be7583c1bfd -r f2f4fc77a5d9 sys/arch/amd64/amd64/machdep.c
--- a/sys/arch/amd64/amd64/machdep.c    Sat Jul 21 21:26:30 2018 +0000
+++ b/sys/arch/amd64/amd64/machdep.c    Sun Jul 22 15:02:51 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: machdep.c,v 1.307 2018/07/21 06:09:13 maxv Exp $       */
+/*     $NetBSD: machdep.c,v 1.308 2018/07/22 15:02:51 maxv Exp $       */
 
 /*
  * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011
@@ -110,7 +110,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.307 2018/07/21 06:09:13 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.308 2018/07/22 15:02:51 maxv Exp $");
 
 #include "opt_modular.h"
 #include "opt_user_ldt.h"
@@ -280,7 +280,7 @@
 void (*initclock_func)(void) = xen_initclocks;
 #endif
 
-struct pool x86_dbregspl;
+extern struct pool x86_dbregspl;
 
 struct nmistore {
        uint64_t cr3;
@@ -1929,11 +1929,7 @@
 #endif
 
        pcb->pcb_dbregs = NULL;
-
-       x86_dbregs_setup_initdbstate();
-
-       pool_init(&x86_dbregspl, sizeof(struct dbreg), 16, 0, 0, "dbregs",
-           NULL, IPL_NONE);
+       x86_dbregs_init();
 }
 
 void
diff -r 7be7583c1bfd -r f2f4fc77a5d9 sys/arch/i386/i386/machdep.c
--- a/sys/arch/i386/i386/machdep.c      Sat Jul 21 21:26:30 2018 +0000
+++ b/sys/arch/i386/i386/machdep.c      Sun Jul 22 15:02:51 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: machdep.c,v 1.806 2018/04/05 08:43:07 maxv Exp $       */
+/*     $NetBSD: machdep.c,v 1.807 2018/07/22 15:02:51 maxv Exp $       */
 
 /*
  * Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008, 2009, 2017
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.806 2018/04/05 08:43:07 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.807 2018/07/22 15:02:51 maxv Exp $");
 
 #include "opt_beep.h"
 #include "opt_compat_freebsd.h"
@@ -213,7 +213,7 @@
 int i386_has_sse;
 int i386_has_sse2;
 
-struct pool x86_dbregspl;
+extern struct pool x86_dbregspl;
 
 vaddr_t idt_vaddr;
 paddr_t idt_paddr;
@@ -1443,11 +1443,7 @@
        }
 
        pcb->pcb_dbregs = NULL;
-
-       x86_dbregs_setup_initdbstate();
-
-       pool_init(&x86_dbregspl, sizeof(struct dbreg), 16, 0, 0, "dbregs",
-           NULL, IPL_NONE);
+       x86_dbregs_init();
 }
 
 #include <dev/ic/mc146818reg.h>                /* for NVRAM POST */
diff -r 7be7583c1bfd -r f2f4fc77a5d9 sys/arch/x86/include/dbregs.h
--- a/sys/arch/x86/include/dbregs.h     Sat Jul 21 21:26:30 2018 +0000
+++ b/sys/arch/x86/include/dbregs.h     Sun Jul 22 15:02:51 2018 +0000
@@ -1,6 +1,6 @@
-/*     $NetBSD: dbregs.h,v 1.4 2017/02/23 03:34:22 kamil Exp $ */
+/*     $NetBSD: dbregs.h,v 1.5 2018/07/22 15:02:51 maxv Exp $  */
 
-/*-
+/*
  * Copyright (c) 2016 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
@@ -26,7 +26,6 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-
 #ifndef        _X86_DBREGS_H_
 #define        _X86_DBREGS_H_
 
@@ -50,11 +49,11 @@
 /*
  * CPU Debug Control Register (DR7)
  *
- * LOCAL_EXACT_BREAKPOINT and GLOBAL_EXACT_BREAKPOINT are no longer used since
- * the P6 processor family - portable code should set these bits
- * unconditionally in oder to get exact breakpoints
+ * LOCAL_EXACT_BREAKPOINT and GLOBAL_EXACT_BREAKPOINT are no longer used
+ * since the P6 processor family - portable code should set these bits
+ * unconditionally in order to get exact breakpoints.
  *
- * Reserved bits: 10, 12, 14-15 and on x86_64 32-64
+ * Reserved bits: 10, 12, 14-15 and on x86_64 32-64.
  */
 #define X86_DR7_LOCAL_DR0_BREAKPOINT           __BIT(0)
 #define X86_DR7_GLOBAL_DR0_BREAKPOINT          __BIT(1)
@@ -79,9 +78,9 @@
 #define X86_DR7_DR3_LENGTH_MASK                        __BITS(30, 31)
 
 /*
- * X86_DR7_CONDITION_IO_READWRITE is currently unused
- * it requires DE (debug extension) flag in control register CR4 set
- * not all CPUs support it
+ * X86_DR7_CONDITION_IO_READWRITE is currently unused. It requires DE
+ * (debug extension) flag in control register CR4 set, and not all CPUs
+ * support it.
  */
 enum x86_dr7_condition {
        X86_DR7_CONDITION_EXECUTION             = 0x0,
@@ -91,7 +90,7 @@
 };
 
 /*
- * 0x2 is currently unimplemented - it reflects 8 bytes on modern CPUs
+ * 0x2 is currently unimplemented - it reflects 8 bytes on modern CPUs.
  */
 enum x86_dr7_length {
        X86_DR7_LENGTH_BYTE             = 0x0,
@@ -107,46 +106,13 @@
  */
 #define X86_DBREGS     4
 
-/*
- * Store the initial Debug Register state of CPU
- * This copy will be used to initialize new debug register state
- */
-void x86_dbregs_setup_initdbstate(void);
-
-/*
- * Reset CPU Debug Registers - to be used after returning to user context
- */
-void x86_dbregs_clear(struct lwp *l);
-
-/*
- * Retrieve Debug Registers from LWP's PCB and save in regs
- * In case of empty register set, initialize it
- */
-void x86_dbregs_read(struct lwp *l, struct dbreg *regs);
-
-/*
- * Set CPU Debug Registers - to be used before entering user-land context
- */
-void x86_dbregs_set(struct lwp *l);
-
-/*
- * Store DR6 in LWP - to be used in trap function
- */
-void x86_dbregs_store_dr6(struct lwp *l);
-
-/*
- * Check if trap is triggered from user-land if so return nonzero value
- */
+void x86_dbregs_init(void);
+void x86_dbregs_clear(struct lwp *);
+void x86_dbregs_read(struct lwp *, struct dbreg *);
+void x86_dbregs_set(struct lwp *);
+void x86_dbregs_store_dr6(struct lwp *);
 int x86_dbregs_user_trap(void);
-
-/*
- * Check if trap is triggered from user-land if so return nonzero value
- */
-int x86_dbregs_validate(const struct dbreg *regs);
-
-/*
- * Write new Debug Registers from regs into LWP's PCB
- */
-void x86_dbregs_write(struct lwp *l, const struct dbreg *regs);
+int x86_dbregs_validate(const struct dbreg *);
+void x86_dbregs_write(struct lwp *, const struct dbreg *);
 
 #endif /* !_X86_DBREGS_H_ */
diff -r 7be7583c1bfd -r f2f4fc77a5d9 sys/arch/x86/x86/dbregs.c
--- a/sys/arch/x86/x86/dbregs.c Sat Jul 21 21:26:30 2018 +0000
+++ b/sys/arch/x86/x86/dbregs.c Sun Jul 22 15:02:51 2018 +0000
@@ -1,6 +1,6 @@
-/*     $NetBSD: dbregs.c,v 1.9 2018/04/08 14:21:23 kamil Exp $ */
+/*     $NetBSD: dbregs.c,v 1.10 2018/07/22 15:02:51 maxv Exp $ */
 
-/*-
+/*
  * Copyright (c) 2016 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
@@ -26,7 +26,6 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-
 #include <sys/param.h>
 #include <sys/types.h>
 #include <sys/lwp.h>
@@ -39,7 +38,7 @@
 
 #include <machine/pmap.h>
 
-extern struct pool x86_dbregspl;
+struct pool x86_dbregspl;
 
 static struct dbreg initdbstate;
 
@@ -56,7 +55,7 @@
        X86_DR7_GLOBAL_DR3_BREAKPOINT )
 
 void
-x86_dbregs_setup_initdbstate(void)
+x86_dbregs_init(void)
 {
        /* DR0-DR3 should always be 0 */
        initdbstate.dr[0] = rdr0();
@@ -70,14 +69,14 @@
        /* DR8-DR15 are reserved - skip */
 
        /*
-        * Paranoid case.
-        *
         * Explicitly reset some bits just in case they could be
         * set by brave software/hardware before the kernel boot.
         */
        initdbstate.dr[6] &= ~X86_BREAKPOINT_CONDITION_DETECTED;
+       initdbstate.dr[7] &= ~X86_DR7_GENERAL_DETECT_ENABLE;
 
-       initdbstate.dr[7] &= ~X86_DR7_GENERAL_DETECT_ENABLE;
+       pool_init(&x86_dbregspl, sizeof(struct dbreg), 16, 0, 0, "dbregs",
+           NULL, IPL_NONE);
 }
 
 void
@@ -88,16 +87,16 @@
        KASSERT(pcb->pcb_dbregs == NULL);
 
        /*
-        * It's sufficient to just disable Debug Control Register (DR7)
-        * it will deactivate hardware watchpoints
+        * It's sufficient to just disable Debug Control Register (DR7).
+        * It will deactivate hardware watchpoints.
         */
        ldr7(0);
 
        /*
-        * However at some point we need to clear Debug Status Registers (DR6)
-        * CPU will never do it automatically
+        * However at some point we need to clear Debug Status Registers
+        * (DR6). The CPU will never do it automatically.
         *
-        * Clear BREAKPOINT_CONDITION_DETECTED bits and ignore the rest
+        * Clear BREAKPOINT_CONDITION_DETECTED bits and ignore the rest.
         */
        ldr6(rdr6() & ~X86_BREAKPOINT_CONDITION_DETECTED);
 }
@@ -135,6 +134,7 @@
 {
        struct pcb *pcb = lwp_getpcb(l);
 
+       KASSERT(l == curlwp);
        KASSERT(pcb->pcb_dbregs != NULL);
 
        pcb->pcb_dbregs->dr[6] = rdr6();
@@ -143,15 +143,14 @@
 int
 x86_dbregs_user_trap(void)
 {
-       register_t dr7, dr6;    /* debug registers dr6 and dr7 */
-       register_t bp;          /* breakpoint bits extracted from dr6 */
+       register_t dr7, dr6;
+       register_t bp;
 
        dr7 = rdr7();
        if ((dr7 & X86_GLOBAL_BREAKPOINT) == 0) {
                /*
-                * all Global Breakpoint bits in the DR7 register are zero,
-                * thus the trap couldn't have been caused by the
-                * hardware debug registers
+                * All Global Breakpoint bits are zero, thus the trap couldn't
+                * have been caused by the hardware debug registers.
                 */
                return 0;
        }
@@ -161,15 +160,15 @@
 



Home | Main Index | Thread Index | Old Index