diff -ru /usr/src/sys/ddb/db_ps.c sys/ddb/db_ps.c --- /usr/src/sys/ddb/db_ps.c Mon Oct 15 22:19:41 2007 +++ sys/ddb/db_ps.c Mon Dec 24 23:28:29 2007 @@ -280,10 +280,133 @@ db_printf("\n"); } +struct tdflagmap { + int val; + char *name; +}; + +/* + * Mapping between TDF_* flags and their ASCII representation. + * Keep those values synchronized with proc.h. + */ +static struct tdflagmap tdf_map[] = { +#define TDF_FLAGMAPADD(x) \ + { (x), #x } + TDF_FLAGMAPADD(TDF_BORROWING), + TDF_FLAGMAPADD(TDF_INPANIC), + TDF_FLAGMAPADD(TDF_INMEM), + TDF_FLAGMAPADD(TDF_SINTR), + TDF_FLAGMAPADD(TDF_TIMEOUT), + TDF_FLAGMAPADD(TDF_IDLETD), + TDF_FLAGMAPADD(TDF_SELECT), + TDF_FLAGMAPADD(TDF_SLEEPABORT), + TDF_FLAGMAPADD(TDF_KTH_SUSP), + TDF_FLAGMAPADD(TDF_UBORROWING), + TDF_FLAGMAPADD(TDF_BOUNDARY), + TDF_FLAGMAPADD(TDF_ASTPENDING), + TDF_FLAGMAPADD(TDF_TIMOFAIL), + TDF_FLAGMAPADD(TDF_INTERRUPT), + TDF_FLAGMAPADD(TDF_UPIBLOCKED), + TDF_FLAGMAPADD(TDF_UNUSED15), + TDF_FLAGMAPADD(TDF_NEEDRESCHED), + TDF_FLAGMAPADD(TDF_NEEDSIGCHK), + TDF_FLAGMAPADD(TDF_XSIG), + TDF_FLAGMAPADD(TDF_UNUSED19), + TDF_FLAGMAPADD(TDF_THRWAKEUP), + TDF_FLAGMAPADD(TDF_DBSUSPEND), + TDF_FLAGMAPADD(TDF_SWAPINREQ), + TDF_FLAGMAPADD(TDF_UNUSED23), + TDF_FLAGMAPADD(TDF_SCHED0), + TDF_FLAGMAPADD(TDF_SCHED1), + TDF_FLAGMAPADD(TDF_SCHED2), + TDF_FLAGMAPADD(TDF_SCHED3), + TDF_FLAGMAPADD(TDF_ALRMPEND), + TDF_FLAGMAPADD(TDF_PROFPEND), + TDF_FLAGMAPADD(TDF_MACPEND), +#undef TDF_FLAGMAPADD +}; + +/* + * Mapping between TDP_* flags and their ASCII representation. + * Keep those values synchronized with proc.h. + */ +static struct tdflagmap tdp_map[] = { +#define TDP_FLAGMAPADD(x) \ + { (x), #x } + TDP_FLAGMAPADD(TDP_OLDMASK), + TDP_FLAGMAPADD(TDP_INKTR), + TDP_FLAGMAPADD(TDP_INKTRACE), + TDP_FLAGMAPADD(TDP_UPCALLING), + TDP_FLAGMAPADD(TDP_COWINPROGRESS), + TDP_FLAGMAPADD(TDP_ALTSTACK), + TDP_FLAGMAPADD(TDP_DEADLKTREAT), + TDP_FLAGMAPADD(TDP_SA), + TDP_FLAGMAPADD(TDP_NOSLEEPING), + TDP_FLAGMAPADD(TDP_OWEUPC), + TDP_FLAGMAPADD(TDP_ITHREAD), + TDP_FLAGMAPADD(TDP_CAN_UNBIND), + TDP_FLAGMAPADD(TDP_SCHED1), + TDP_FLAGMAPADD(TDP_SCHED2), + TDP_FLAGMAPADD(TDP_SCHED3), + TDP_FLAGMAPADD(TDP_SCHED4), + TDP_FLAGMAPADD(TDP_GEOM), + TDP_FLAGMAPADD(TDP_SOFTDEP), + TDP_FLAGMAPADD(TDP_NORUNNINGBUF), + TDP_FLAGMAPADD(TDP_WAKEUP), + TDP_FLAGMAPADD(TDP_INBDFLUSH), + TDP_FLAGMAPADD(TDP_KTHREAD), + TDP_FLAGMAPADD(TDP_CALLCHAIN), +#undef TDP_FLAGMAPADD +}; + +enum { + TDFLAG_TD_FLAGS, + TDFLAG_TD_PFLAGS, +}; + +static void +flags_externalize(int which, char *buf, int bufsize, int flags) +{ + int fst, i, sz; + struct tdflagmap *map; + char *s; + + KASSERT(buf != NULL, ("buf == NULL")); + + bzero(buf, bufsize); + snprintf(buf, bufsize, "(%#x) ", flags); + if (which == TDFLAG_TD_FLAGS) { + map = tdf_map; + sz = sizeof(tdf_map) / sizeof(tdf_map[0]); + } else if (which == TDFLAG_TD_PFLAGS) { + map = tdp_map; + sz = sizeof(tdp_map) / sizeof(tdp_map[0]); + } else { + snprintf(buf, bufsize, "\n"); + return; + } + fst = 1; + for (i = 0; i < sz; i++) { + if (flags & map[i].val) { + if (fst == 1) + s = "<"; + else + s = ","; + strlcat(buf, s, bufsize); + strlcat(buf, map[i].name, bufsize); + fst = 0; + } + } + if (fst == 0) + /* At least one known flag present */ + strlcat(buf, ">", bufsize); +} + DB_SHOW_COMMAND(thread, db_show_thread) { struct thread *td; boolean_t comma; + char flstr[512]; /* Determine which thread to examine. */ if (have_addr) @@ -297,8 +420,12 @@ db_printf(" name: %s\n", td->td_name); db_printf(" stack: %p-%p\n", (void *)td->td_kstack, (void *)(td->td_kstack + td->td_kstack_pages * PAGE_SIZE - 1)); - db_printf(" flags: %#x ", td->td_flags); - db_printf(" pflags: %#x\n", td->td_pflags); + flags_externalize(TDFLAG_TD_FLAGS, flstr, sizeof(flstr), + td->td_flags); + db_printf(" flags: %s\n", flstr); + flags_externalize(TDFLAG_TD_PFLAGS, flstr, sizeof(flstr), + td->td_pflags); + db_printf(" pflags: %s\n", flstr); db_printf(" state: "); switch (td->td_state) { case TDS_INACTIVE: diff -ru /usr/src/sys/i386/i386/local_apic.c sys/i386/i386/local_apic.c --- /usr/src/sys/i386/i386/local_apic.c Mon Oct 15 22:21:10 2007 +++ sys/i386/i386/local_apic.c Mon Dec 24 23:39:24 2007 @@ -928,6 +928,11 @@ DB_SHOW_COMMAND(lapic, db_show_lapic) { uint32_t v; + + if (lapic_paddr == 0) { + db_printf("Local APIC is not used.\n"); + return; + } db_printf("lapic ID = %d\n", lapic_id()); v = lapic->version; diff -ru /usr/src/sys/kern/subr_lock.c sys/kern/subr_lock.c --- /usr/src/sys/kern/subr_lock.c Sun Nov 18 21:15:57 2007 +++ sys/kern/subr_lock.c Mon Dec 24 23:14:11 2007 @@ -236,8 +236,10 @@ struct lock_object *lock; struct lock_class *class; - if (!have_addr) + if (!have_addr) { + db_printf("Usage: show lock \n"); return; + } lock = (struct lock_object *)addr; if (LO_CLASSINDEX(lock) > LOCK_CLASS_MAX) { db_printf("Unknown lock class: %d\n", LO_CLASSINDEX(lock)); diff -ru /usr/src/sys/kern/subr_rman.c sys/kern/subr_rman.c --- /usr/src/sys/kern/subr_rman.c Mon Apr 23 16:58:18 2007 +++ sys/kern/subr_rman.c Mon Dec 24 23:19:03 2007 @@ -923,7 +923,7 @@ if (db_pager_quit) return; - db_printf("rman: %s\n", rm->rm_descr); + db_printf("rman: %p (%s)\n", rm, rm->rm_descr); db_printf(" 0x%lx-0x%lx (full range)\n", rm->rm_start, rm->rm_end); TAILQ_FOREACH(r, &rm->rm_list, r_link) { if (r->r_dev != NULL) { @@ -947,6 +947,8 @@ if (have_addr) dump_rman((struct rman *)addr); + else + db_printf("Usage: show rman addr\n"); } DB_SHOW_COMMAND(allrman, db_show_all_rman) diff -ru /usr/src/sys/kern/subr_sleepqueue.c sys/kern/subr_sleepqueue.c --- /usr/src/sys/kern/subr_sleepqueue.c Sun Nov 18 21:15:57 2007 +++ sys/kern/subr_sleepqueue.c Mon Dec 24 23:15:32 2007 @@ -911,8 +911,11 @@ void *wchan; int i; - if (!have_addr) + if (!have_addr) { + db_printf("Usage: show sleepqueue \n"); + db_printf(" show sleepq \n"); return; + } /* * First, see if there is an active sleep queue for the wait channel diff -ru /usr/src/sys/kern/subr_turnstile.c sys/kern/subr_turnstile.c --- /usr/src/sys/kern/subr_turnstile.c Sun Nov 18 21:15:57 2007 +++ sys/kern/subr_turnstile.c Mon Dec 24 23:17:33 2007 @@ -1049,8 +1049,10 @@ struct lock_object *lock; int i; - if (!have_addr) + if (!have_addr) { + db_printf("Usage: show turnstile \n"); return; + } /* * First, see if there is an active turnstile for the lock indicated diff -ru /usr/src/sys/kern/vfs_subr.c sys/kern/vfs_subr.c --- /usr/src/sys/kern/vfs_subr.c Wed Dec 5 12:00:30 2007 +++ sys/kern/vfs_subr.c Mon Dec 24 23:16:53 2007 @@ -2699,8 +2699,10 @@ { struct vnode *vp; - if (!have_addr) + if (!have_addr) { + db_printf("Usage: show vnode \n"); return; + } vp = (struct vnode *)addr; vn_printf(vp, "vnode "); } diff -ru /usr/src/sys/vm/vm_map.c sys/vm/vm_map.c --- /usr/src/sys/vm/vm_map.c Sun Nov 18 21:16:07 2007 +++ sys/vm/vm_map.c Mon Dec 24 23:13:06 2007 @@ -3363,9 +3363,15 @@ DB_SHOW_COMMAND(map, vm_map_print) { static int nlines; - /* XXX convert args. */ - vm_map_t map = (vm_map_t)addr; - boolean_t full = have_addr; + vm_map_t map; + boolean_t full; + + if (!have_addr) { + db_printf("Usage: show map \n"); + return; + } + map = (vm_map_t)addr; + full = have_addr; vm_map_entry_t entry; diff -ru /usr/src/sys/vm/vm_object.c sys/vm/vm_object.c --- /usr/src/sys/vm/vm_object.c Sun Nov 18 21:16:07 2007 +++ sys/vm/vm_object.c Mon Dec 24 23:20:15 2007 @@ -2071,10 +2071,18 @@ DB_SHOW_COMMAND(object, vm_object_print_static) { /* XXX convert args. */ - vm_object_t object = (vm_object_t)addr; - boolean_t full = have_addr; + vm_object_t object; + boolean_t full; vm_page_t p; + + if (!have_addr) { + db_printf("Usage: show object \n"); + return; + } + object = (vm_object_t)addr; + full = have_addr; + /* XXX count is an (unused) arg. Avoid shadowing it. */ #define count was_count