diff --git a/sys/alpha/include/kdb.h b/sys/alpha/include/kdb.h index ded9cd6c079..fb08d4b4be4 100644 --- a/sys/alpha/include/kdb.h +++ b/sys/alpha/include/kdb.h @@ -31,6 +31,8 @@ #include +#define KDB_STOPPEDPCB(pc) &stoppcbs[pc->pc_cpuid] + static __inline void kdb_cpu_clear_singlestep(void) { diff --git a/sys/amd64/include/kdb.h b/sys/amd64/include/kdb.h index ba359140beb..131e40e2455 100644 --- a/sys/amd64/include/kdb.h +++ b/sys/amd64/include/kdb.h @@ -32,6 +32,8 @@ #include #include +#define KDB_STOPPEDPCB(pc) &stoppcbs[pc->pc_cpuid] + static __inline void kdb_cpu_clear_singlestep(void) { diff --git a/sys/i386/include/kdb.h b/sys/i386/include/kdb.h index ae8cb4f855d..77e1a6b263d 100644 --- a/sys/i386/include/kdb.h +++ b/sys/i386/include/kdb.h @@ -32,6 +32,8 @@ #include #include +#define KDB_STOPPEDPCB(pc) &stoppcbs[pc->pc_cpuid] + static __inline void kdb_cpu_clear_singlestep(void) { diff --git a/sys/ia64/include/kdb.h b/sys/ia64/include/kdb.h index 700a0d7fb6d..500a909c845 100644 --- a/sys/ia64/include/kdb.h +++ b/sys/ia64/include/kdb.h @@ -33,6 +33,8 @@ #include #include +#define KDB_STOPPEDPCB(pc) (pc)->pc_pcb + static __inline void kdb_cpu_clear_singlestep(void) { diff --git a/sys/kern/subr_kdb.c b/sys/kern/subr_kdb.c index b38660488f9..7fb9b9e2531 100644 --- a/sys/kern/subr_kdb.c +++ b/sys/kern/subr_kdb.c @@ -43,11 +43,8 @@ __FBSDID("$FreeBSD$"); #include #ifdef SMP -#if defined (__i386__) || defined(__amd64__) || defined(__sparc64__) || defined(__alpha__) -#define HAVE_STOPPEDPCBS #include #endif -#endif int kdb_active = 0; void *kdb_jmpbufp = NULL; @@ -358,19 +355,17 @@ kdb_reenter(void) struct pcb * kdb_thr_ctx(struct thread *thr) { -#ifdef HAVE_STOPPEDPCBS +#if defined(SMP) && defined(KDB_STOPPEDPCB) struct pcpu *pc; - u_int cpuid; #endif - + if (thr == curthread) return (&kdb_pcb); -#ifdef HAVE_STOPPEDPCBS +#if defined(SMP) && defined(KDB_STOPPEDPCB) SLIST_FOREACH(pc, &cpuhead, pc_allcpu) { - cpuid = pc->pc_cpuid; - if (pc->pc_curthread == thr && (stopped_cpus & (1 << cpuid))) - return (&stoppcbs[cpuid]); + if (pc->pc_curthread == thr && (stopped_cpus & pc->pc_cpumask)) + return (KDB_STOPPEDPCB(pc)); } #endif return (thr->td_pcb); diff --git a/sys/sparc64/include/kdb.h b/sys/sparc64/include/kdb.h index e5b39c04d2b..3e510e02c49 100644 --- a/sys/sparc64/include/kdb.h +++ b/sys/sparc64/include/kdb.h @@ -31,6 +31,8 @@ #include +#define KDB_STOPPEDPCB(pc) &stoppcbs[pc->pc_cpuid] + static __inline void kdb_cpu_clear_singlestep(void) {