On Mon, Aug 29, 2022 at 04:40:20PM +0200, Greg Steuck wrote: > I tried to boot a kcov-enabled config which we run on syzkaller VMs on > real HW today. It hung, so I minimized the hanging kernel config to just > this: > > include "arch/amd64/conf/GENERIC.MP" > pseudo-device kcov 1 > > My machine is an unexciting Lenovo ThinkPad X1 Carbon 7th Gen (20QE). > I marked the spot where it *would* hang in the dmesg below:
Ran into the same problem while running OpenBSD with KCOV enabled on Hyper-V. Caused by accessing curproc too early. Could you give this diff a try? diff --git sys/kern/kern_task.c sys/kern/kern_task.c index 71de6dc902b..4669d7c7bfd 100644 --- sys/kern/kern_task.c +++ sys/kern/kern_task.c @@ -363,7 +363,8 @@ task_add(struct taskq *tq, struct task *w) SET(w->t_flags, TASK_ONQUEUE); TAILQ_INSERT_TAIL(&tq->tq_worklist, w, t_entry); #if NKCOV > 0 - w->t_process = curproc->p_p; + if (!kcov_cold) + w->t_process = curproc->p_p; #endif } mtx_leave(&tq->tq_mtx); diff --git sys/kern/kern_timeout.c sys/kern/kern_timeout.c index 4ca81ad42df..9553b31ba1f 100644 --- sys/kern/kern_timeout.c +++ sys/kern/kern_timeout.c @@ -307,7 +307,8 @@ timeout_add(struct timeout *new, int to_ticks) CIRCQ_INSERT_TAIL(&timeout_new, &new->to_list); } #if NKCOV > 0 - new->to_process = curproc->p_p; + if (!kcov_cold) + new->to_process = curproc->p_p; #endif tostat.tos_added++; mtx_leave(&timeout_mutex); @@ -406,7 +407,8 @@ timeout_abs_ts(struct timeout *to, const struct timespec *abstime) CIRCQ_INSERT_TAIL(&timeout_new, &to->to_list); } #if NKCOV > 0 - to->to_process = curproc->p_p; + if (!kcov_cold) + to->to_process = curproc->p_p; #endif tostat.tos_added++; diff --git sys/sys/kcov.h sys/sys/kcov.h index 2c357f8855b..8398a6f6edc 100644 --- sys/sys/kcov.h +++ sys/sys/kcov.h @@ -41,6 +41,8 @@ struct kio_remote_attach { struct proc; +extern int kcov_cold; + void kcov_exit(struct proc *); int kcov_vnode(struct vnode *); void kcov_remote_register(int, void *);