Merge commit '973c11b9c3cdde88fe6ca0ef2c5af56a8c49e014' into amd64
[dragonfly.git] / sys / platform / pc64 / amd64 / trap.c
index 960fe69..dd036f0 100644 (file)
@@ -75,6 +75,7 @@
 #include <vm/vm_param.h>
 #include <machine/cpu.h>
 #include <machine/pcb.h>
+#include <machine/smp.h>
 #include <machine/thread.h>
 #include <machine/vmparam.h>
 #include <machine/md_var.h>
@@ -102,9 +103,6 @@ static int trap_pfault(struct trapframe *, int);
 static void trap_fatal(struct trapframe *, vm_offset_t);
 void dblfault_handler(struct trapframe *frame);
 
-#define PCPU_GET(member) ((mycpu)->gd_##member)
-#define PCPU_INC(member) ((mycpu)->gd_##member)++
-
 #define MAX_TRAP_MSG           30
 static char *trap_msg[] = {
        "",                                     /*  0 unused */
@@ -357,7 +355,7 @@ trap(struct trapframe *frame)
 
        p = td->td_proc;
 
-#ifndef JG
+#ifdef JG
        kprintf0("TRAP ");
        kprintf0("\"%s\" type=%ld\n",
                trap_msg[frame->tf_trapno], frame->tf_trapno);
@@ -603,7 +601,7 @@ trap(struct trapframe *frame)
                         * selectors and pointers when the user changes
                         * them.
                         */
-                       kprintf0("trap.c line %d\n", __LINE__);
+                       kprintf("trap.c line %d\n", __LINE__);
                        if (mycpu->gd_intr_nesting_level == 0) {
                                if (td->td_pcb->pcb_onfault) {
                                        frame->tf_rip = (register_t)
@@ -877,8 +875,9 @@ nogo:
         * NOTE: on amd64 we have a tf_addr field in the trapframe, no
         * kludge is needed to pass the fault address to signal handlers.
         */
-       kprintf("seg-fault accessing address %p ip=%p\n",
-               (void *)va, (void *)frame->tf_rip);
+       struct proc *p = td->td_proc;
+       kprintf("seg-fault accessing address %p rip=%p pid=%d p_comm=%s\n",
+               (void *)va, (void *)frame->tf_rip, p->p_pid, p->p_comm);
        /* Debugger("seg-fault"); */
 
        return((rv == KERN_PROTECTION_FAILURE) ? SIGBUS : SIGSEGV);
@@ -904,9 +903,10 @@ trap_fatal(struct trapframe *frame, vm_offset_t eva)
        kprintf("\n\nFatal trap %d: %s while in %s mode\n", type, msg,
            ISPL(frame->tf_cs) == SEL_UPL ? "user" : "kernel");
 #ifdef SMP
-       /* two separate prints in case of a trap on an unmapped page */
-       kprintf("cpuid = %d; ", PCPU_GET(cpuid));
-       kprintf("apic id = %02x\n", PCPU_GET(apic_id));
+       /* three separate prints in case of a trap on an unmapped page */
+       kprintf("mp_lock = %08x; ", mp_lock);
+       kprintf("cpuid = %d; ", mycpu->gd_cpuid);
+       kprintf("lapic->id = %08x\n", lapic->id);
 #endif
        if (type == T_PAGEFLT) {
                kprintf("fault virtual address  = 0x%lx\n", eva);
@@ -980,9 +980,10 @@ dblfault_handler(struct trapframe *frame)
        kprintf("rsp = 0x%lx\n", frame->tf_rsp);
        kprintf("rbp = 0x%lx\n", frame->tf_rbp);
 #ifdef SMP
-       /* two separate prints in case of a trap on an unmapped page */
-       kprintf("cpuid = %d; ", PCPU_GET(cpuid));
-       kprintf("apic id = %02x\n", PCPU_GET(apic_id));
+       /* three separate prints in case of a trap on an unmapped page */
+       kprintf("mp_lock = %08x; ", mp_lock);
+       kprintf("cpuid = %d; ", mycpu->gd_cpuid);
+       kprintf("lapic->id = %08x\n", lapic->id);
 #endif
        panic("double fault");
 }
@@ -1024,11 +1025,9 @@ syscall2(struct trapframe *frame)
        int reg, regcnt;
        union sysunion args;
        register_t *argsdst;
-       kprintf0("SYSCALL rip = %016llx\n", frame->tf_rip);
 
-       PCPU_INC(cnt.v_syscall);
+       mycpu->gd_cnt.v_syscall++;
 
-       kprintf0("\033[31mSYSCALL %ld\033[39m\n", frame->tf_rax);
 #ifdef DIAGNOSTIC
        if (ISPL(frame->tf_cs) != SEL_UPL) {
                get_mplock();
@@ -1041,7 +1040,7 @@ syscall2(struct trapframe *frame)
                frame->tf_eax);
 
 #ifdef SMP
-       KASSERT(td->td_mpcount == 0, ("badmpcount syscall2 from %p", (void *)frame->tf_eip));
+       KASSERT(td->td_mpcount == 0, ("badmpcount syscall2 from %p", (void *)frame->tf_rip));
        if (syscall_mpsafe == 0)
                MAKEMPSAFE(have_mplock);
 #endif
@@ -1183,7 +1182,6 @@ out:
                lp = curthread->td_lwp;
                frame->tf_rax = args.sysmsg_fds[0];
                frame->tf_rdx = args.sysmsg_fds[1];
-               kprintf0("RESULT %lld %lld\n", frame->tf_rax, frame->tf_rdx);
                frame->tf_rflags &= ~PSL_C;
                break;
        case ERESTART:
@@ -1195,7 +1193,6 @@ out:
                 */
                frame->tf_rip -= frame->tf_err;
                frame->tf_r10 = frame->tf_rcx;
-               td->td_pcb->pcb_flags |= PCB_FULLCTX;
                break;
        case EJUSTRETURN:
                break;
@@ -1209,7 +1206,6 @@ bad:
                        else
                                error = p->p_sysent->sv_errtbl[error];
                }
-               kprintf0("ERROR %d\n", error);
                frame->tf_rax = error;
                frame->tf_rflags |= PSL_C;
                break;
@@ -1249,7 +1245,7 @@ bad:
         * Release the MP lock if we had to get it
         */
        KASSERT(td->td_mpcount == have_mplock, 
-               ("badmpcount syscall2/end from %p", (void *)frame->tf_eip));
+               ("badmpcount syscall2/end from %p", (void *)frame->tf_rip));
        if (have_mplock)
                rel_mplock();
 #endif
@@ -1264,7 +1260,6 @@ bad:
 void
 fork_return(struct lwp *lp, struct trapframe *frame)
 {
-       kprintf0("fork return\n");
        frame->tf_rax = 0;              /* Child returns zero */
        frame->tf_rflags &= ~PSL_C;     /* success */
        frame->tf_rdx = 1;
@@ -1282,7 +1277,6 @@ fork_return(struct lwp *lp, struct trapframe *frame)
 void
 generic_lwp_return(struct lwp *lp, struct trapframe *frame)
 {
-       kprintf0("generic_lwp_return\n");
        struct proc *p = lp->lwp_proc;
 
        /*