Index: kern/subr_taskqueue.c =================================================================== RCS file: /home/ncvs/src/sys/kern/subr_taskqueue.c,v retrieving revision 1.25 diff -u -r1.25 subr_taskqueue.c --- kern/subr_taskqueue.c 5 Oct 2004 04:16:00 -0000 1.25 +++ kern/subr_taskqueue.c 23 Oct 2004 19:18:26 -0000 @@ -36,9 +36,16 @@ #include #include #include +#include #include +#include #include +int tq_in; +SYSCTL_INT(_kern, OID_AUTO, tq_in, CTLFLAG_RD, &tq_in, 0, ""); +int tq_out; +SYSCTL_INT(_kern, OID_AUTO, tq_out, CTLFLAG_RD, &tq_out, 0, ""); + static MALLOC_DEFINE(M_TASKQUEUE, "taskqueue", "Task Queues"); static void *taskqueue_giant_ih; static void *taskqueue_ih; @@ -140,6 +147,9 @@ return 0; } + getnanotime(&task->ta_queuetime); + tq_in++; + /* * Optimise the case when all tasks have the same priority. */ @@ -172,6 +182,7 @@ taskqueue_run(struct taskqueue *queue) { struct task *task; + struct timespec tv; int owned, pending; owned = mtx_owned(&queue->tq_mutex); @@ -187,8 +198,16 @@ pending = task->ta_pending; task->ta_pending = 0; task->ta_flags |= TAF_PENDING; + tq_out++; mtx_unlock(&queue->tq_mutex); + getnanotime(&tv); + timespecsub(&tv, &task->ta_queuetime); + if (tv.tv_nsec >= 0500000000) { + printf("taskqueue_run: warning, queue time of %d.%09ld " + "for context %p\n", tv.tv_sec, tv.tv_nsec, + task->ta_func); + } task->ta_func(task->ta_context, pending); mtx_lock(&queue->tq_mutex); Index: sys/_task.h =================================================================== RCS file: /home/ncvs/src/sys/sys/_task.h,v retrieving revision 1.3 diff -u -r1.3 _task.h --- sys/_task.h 5 Oct 2004 04:16:01 -0000 1.3 +++ sys/_task.h 23 Oct 2004 19:38:16 -0000 @@ -46,6 +46,7 @@ task_fn_t *ta_func; /* task handler */ void *ta_context; /* argument for handler */ int ta_flags; /* Flags */ + struct timespec ta_queuetime; /* time enqueued */ }; #define TAF_PENDING 0x1 /* Task is being run now */