On 2019/06/06 14:55, Stuart Henderson wrote:
> I'm testing the "pump my sched" and read/write unlock diffs and ran into
> the panic below. Seems more likely that it would be connected with the
> sched diff rather than anything else. I'll build a WITNESS kernel and
> see if I can get more details if it hapens again.
Easily repeatable: Run xscreensaver. Let it lock. Try to unlock.
login: panic: kernel diagnostic assertion "__mp_lock_held(&sched_lock,
curcpu()) == 0" failed: file "/src/cvs-openbsd/sys/kern/kern_lock.c", line 63
Stopped at db_enter+0x10: popq %rbp
TID PID UID PRFLAGS PFLAGS CPU COMMAND
6043 83667 1000 0x2 0 1 firefox
320664 83667 1000 0x2 0x4000080 2 firefox
523640 70812 1000 0x2 0x4000000 3 firefox
*307581 55620 1000 0x32 0 0K xscreensaver
db_enter() at db_enter+0x10
panic() at panic+0x128
__assert(ffffffff81af6d92,ffffffff81afc585,3f,ffffffff81b1a406) at __assert+0x2
e
__mp_lock_held(ffffffff811362e0,ffff800033cfe5e0) at __mp_lock_held
pageflttrap() at pageflttrap+0x78
kerntrap(ffff800033cfe6b0) at kerntrap+0x91
alltraps_kern(6,300,fffbffff,2,ffff800022009ff0,c0) at alltraps_kern+0x7b
setrunqueue(0,ffff8000342572a8,c0) at setrunqueue+0xbc
setrunnable(ffff8000342572a8,c0) at setrunnable+0xa5
ptsignal(ffff8000342572a8,13,0) at ptsignal+0x3c4
sys_kill(ffff800033c532a8,ffff800033cfe8d0,ffff800033cfe930) at sys_kill+0x1c5
syscall(ffff800033cfe9a0) at syscall+0x399
Xsyscall(6,7a,0,7a,13,7f7ffffe8cc8) at Xsyscall+0x128
end of kernel
end trace frame: 0x7f7ffffe8b60, count: 2
https://www.openbsd.org/ddb.html describes the minimum info required in bug
reports. Insufficient info makes it difficult to find and fix bugs.
ddb{0}> sh witness
Sleep locks:
&prime_fpriv->lock (type: rwlock, depth: 0)&file_priv->fbs_lock (type: rwlock, d
epth: 0)futex (type: rwlock, depth: 0) &kernel_lock (type: kernel_lock, depth: 6
) &map->lock (type: rwlock, depth: 5) &kernel_lock (type: kernel_lock, depth: 6
) -- (already displayed)
&pp->pr_lock (type: rwlock, depth: 1) &kernel_lock (type: kernel_lock, depth:
6) -- (already displayed)
swplk (type: rwlock, depth: 0) &map->lock (type: rwlock, depth: 5) -- (already d
isplayed)
&ip->i_lock (type: rrwlock, depth: 2) &kernel_lock (type: kernel_lock, depth:
6) -- (already displayed)
&map->lock (type: rwlock, depth: 5) -- (already displayed)
&diskp->dk_lock (type: rwlock, depth: 3) &kernel_lock (type: kernel_lock, d
epth: 6) -- (already displayed)
&ufsdirhash_mtx (type: rwlock, depth: 3) &dh->dh_mtx (type: rwlock, depth: 4
) lockflk (type: rwlock, depth: 3) &uidinfolk (type: rwlock, depth: 4) &pp
->pr_lock (type: rwlock, depth: 4) &pp->pr_lock (type: rwlock, depth: 4) &dh
->dh_mtx (type: rwlock, depth: 4) -- (already displayed)
&uv->uv_lock (type: rwlock, depth: 3) &to->uv_lock (type: rwlock, depth: 4)
&to->uv_lock (type: rwlock, depth: 4) -- (already displayed)
sysctllk (type: rwlock, depth: 0) &kernel_lock (type: kernel_lock, depth: 6) --
(already displayed)
&map->lock (type: rwlock, depth: 5) -- (already displayed)
&newfdp->fd_fd.fd_lock (type: rwlock, depth: 1) &kernel_lock (type: kernel_lo
ck, depth: 6) -- (already displayed)
&map->lock (type: rwlock, depth: 5) -- (already displayed)
netlock (type: rwlock, depth: 2) &kernel_lock (type: kernel_lock, depth: 6)
-- (already displayed)
pools (type: rwlock, depth: 3) &kernel_lock (type: kernel_lock, depth: 6)
-- (already displayed)
&map->lock (type: rwlock, depth: 5) -- (already displayed)
&ar->ar_lock (type: rwlock, depth: 3) vlantag (type: rwlock, depth: 3) lo
ckflk (type: rwlock, depth: 3) -- (already displayed)
&ip->i_lock (type: rrwlock, depth: 2) -- (already displayed)
vfs_stall (type: rwlock, depth: 2) &kernel_lock (type: kernel_lock, depth: 6
) -- (already displayed)
ptarrlk (type: rwlock, depth: 2) netlock (type: rwlock, depth: 2) -- (already
displayed)
tc_lock (type: rwlock, depth: 1) &ip->i_lock (type: rrwlock, depth: 2) -- (alr
eady displayed)
vfs_stall (type: rwlock, depth: 2) -- (already displayed)
sysctldlk (type: rwlock, depth: 1)&connector->hdcp_mutex (type: rwlock, depth:
0)&mgr->lock (type: rwlock, depth: 0)&connector->mutex (type: rwlock, depth: 0
) &dev->mode_config.idr_mutex (type: rwlock, depth: 3)&dev_priv->dpll_lock (typ
e: rwlock, depth: 0)taskq (type: rwlock, depth: 0) &dev->struct_mutex (type: rw
lock, depth: 3) &map->lock (type: rwlock, depth: 5) -- (already displayed)
&uidinfolk (type: rwlock, depth: 4) -- (already displayed)
&mgr->vm_lock (type: rwlock, depth: 5) &dev_priv->pcu_lock (type: rwlock, de
pth: 4) &dev_priv->gt_pm.rps.power.mutex (type: rwlock, depth: 5) &power_dom
ains->lock (type: rwlock, depth: 4) &dev_priv->mm.stolen_lock (type: rwlock, d
epth: 4) &fbc->lock (type: rwlock, depth: 4) &node->vm_lock (type: rwlock, de
pth: 4) &obj->mm.lock (type: rwlock, depth: 4) &map->lock (type: rwlock, dep
th: 5) -- (already displayed)
&mgr->vm_lock (type: rwlock, depth: 5) -- (already displayed)
&obj->mm.get_page.lock (type: rwlock, depth: 4) &mgr->vm_lock (type: rwlock, d
epth: 5) -- (already displayed)
&obj->mm.lock (type: rwlock, depth: 4) -- (already displayed)
&dev_priv->av_mutex (type: rwlock, depth: 0)&dev_priv->sb_lock (type: rwlock, d
epth: 0)&mp->mnt_lock (type: rwlock, depth: 0) &kernel_lock (type: kernel_lock,
depth: 6) -- (already displayed)
&map->lock (type: rwlock, depth: 5) -- (already displayed)
&uidinfolk (type: rwlock, depth: 4) -- (already displayed)
netlock (type: rwlock, depth: 2) -- (already displayed)
&diskp->dk_lock (type: rwlock, depth: 3) -- (already displayed)
&ip->i_lock (type: rrwlock, depth: 2) -- (already displayed)
&np->n_lock (type: rrwlock, depth: 1) &kernel_lock (type: kernel_lock, depth:
6) -- (already displayed)
netlock (type: rwlock, depth: 2) -- (already displayed)
&ip->i_lock (type: rrwlock, depth: 2) -- (already displayed)
&sc->sc_lock (type: rwlock, depth: 0) &diskp->dk_lock (type: rwlock, depth: 3) -
- (already displayed)
lockflk (type: rwlock, depth: 3) -- (already displayed)
&pp->pr_lock (type: rwlock, depth: 0)&rtptable.rtp_lk (type: rwlock, depth: 0)&
pkptable.pkp_lk (type: rwlock, depth: 0)taskq (type: rwlock, depth: 0) &kernel_
lock (type: kernel_lock, depth: 6) -- (already displayed)
taskq (type: rwlock, depth: 0) &kernel_lock (type: kernel_lock, depth: 6) -- (a
lready displayed)
netlock (type: rwlock, depth: 2) -- (already displayed)
&sc->vm_lock (type: rwlock, depth: 0)&sc->sc_lock (type: rwlock, depth: 0) &ker
nel_lock (type: kernel_lock, depth: 6) -- (already displayed)
&sc->sc_cmd_lock (type: rwlock, depth: 1) &kernel_lock (type: kernel_lock, de
pth: 6) -- (already displayed)
&sc->sc_doorbell_lock (type: rwlock, depth: 0) &kernel_lock (type: kernel_lock,
depth: 6) -- (already displayed)
&usbpalock (type: rwlock, depth: 0) &kernel_lock (type: kernel_lock, depth: 6) -
- (already displayed)
&dev->object_name_lock (type: rwlock, depth: 0)taskq (type: rwlock, depth: 0)ta
skq (type: rwlock, depth: 0) &dev->struct_mutex (type: rwlock, depth: 3) -- (al
ready displayed)
&dev_priv->pcu_lock (type: rwlock, depth: 4) -- (already displayed)
&dev_priv->gt_pm.rps.power.mutex (type: rwlock, depth: 5) -- (already displaye
d)
&dev->mode_config.idr_mutex (type: rwlock, depth: 3) -- (already displayed)
&dev->mode_config.fb_lock (type: rwlock, depth: 1) &dev->mode_config.blob_lock
(type: rwlock, depth: 3) &fbc->lock (type: rwlock, depth: 4) -- (already displ
ayed)
&ifbdev->hpd_lock (type: rwlock, depth: 1) &helper->lock (type: rwlock, depth:
1) &kernel_lock (type: kernel_lock, depth: 6) -- (already displayed)
&dev->struct_mutex (type: rwlock, depth: 3) -- (already displayed)
&dev_priv->wm.wm_mutex (type: rwlock, depth: 3) &dev_priv->gt_pm.rps.power.m
utex (type: rwlock, depth: 5) -- (already displayed)
taskq (type: rwlock, depth: 2) &dev->mode_config.mutex (type: rwlock, depth:
2) &kernel_lock (type: kernel_lock, depth: 6) -- (already displayed)
&map->lock (type: rwlock, depth: 5) -- (already displayed)
&dev->struct_mutex (type: rwlock, depth: 3) -- (already displayed)
&dev_priv->wm.wm_mutex (type: rwlock, depth: 3) -- (already displayed)
&dev_priv->gt_pm.rps.power.mutex (type: rwlock, depth: 5) -- (already displa
yed)
&power_domains->lock (type: rwlock, depth: 4) -- (already displayed)
&dev_priv->gmbus_mutex (type: rwlock, depth: 3) &dev->mode_config.idr_mute
x (type: rwlock, depth: 3) -- (already displayed)
&dev->mode_config.blob_lock (type: rwlock, depth: 3) -- (already displayed)
&fbc->lock (type: rwlock, depth: 4) -- (already displayed)
&aux->hw_mutex (type: rwlock, depth: 3) &dev_priv->pps_mutex (type: rwloc
k, depth: 4) &kernel_lock (type: kernel_lock, depth: 6) -- (already display
ed)
&power_domains->lock (type: rwlock, depth: 4) -- (already displayed)
&dev->mode_config.idr_mutex (type: rwlock, depth: 3) -- (already displayed)
&dev->mode_config.blob_lock (type: rwlock, depth: 3) -- (already displayed)
&fbc->lock (type: rwlock, depth: 4) -- (already displayed)
taskq (type: rwlock, depth: 0) &st->lock (type: rwlock, depth: 1) &sc->sc_i2c_
lock (type: rwlock, depth: 2) &kernel_lock (type: kernel_lock, depth: 6) -- (
already displayed)
&sc->sc_lck (type: rwlock, depth: 0) &map->lock (type: rwlock, depth: 5) -- (al
ready displayed)
taskq (type: rwlock, depth: 0) &kernel_lock (type: kernel_lock, depth: 6) -- (a
lready displayed)
netlock (type: rwlock, depth: 2) -- (already displayed)
taskq (type: rwlock, depth: 0) pools (type: rwlock, depth: 3) -- (already displ
ayed)
taskq (type: rwlock, depth: 0) &kernel_lock (type: kernel_lock, depth: 6) -- (a
lready displayed)
&diskp->dk_lock (type: rwlock, depth: 3) -- (already displayed)
&dev->mode_config.mutex (type: rwlock, depth: 2) -- (already displayed)
&helper->lock (type: rwlock, depth: 1) -- (already displayed)
timeout (type: rwlock, depth: 0) &kernel_lock (type: kernel_lock, depth: 6) -- (
already displayed)
netlock (type: rwlock, depth: 2) -- (already displayed)
Spin locks:
/src/cvs-openbsd/sys/net/art.c:68 (type: mutex, depth: 0)/src/cvs-openbsd/sys/n
et/art.c:63 (type: mutex, depth: 0)&file_priv->mm.lock (type: mutex, depth: 0) &
si->softintr_lock (type: mutex, depth: 8) &sched_lock (type: sched_lock, depth:
7) &si->softintr_lock (type: mutex, depth: 8) -- (already displayed)
&p->p_mtx (type: mutex, depth: 8) /src/cvs-openbsd/sys/kern/kern_timeout.c:9
3 (type: mutex, depth: 8) &p->p_mtx (type: mutex, depth: 8) /src/cvs-openbsd/s
ys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (already displayed)
timeout (type: mutex, depth: 1) &si->softintr_lock (type: mutex, depth: 8) --
(already displayed)
&p->p_mtx (type: mutex, depth: 8) -- (already displayed)
&sched_lock (type: sched_lock, depth: 7) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_malloc.c:104 (type: mutex, depth: 3) &si->so
ftintr_lock (type: mutex, depth: 8) -- (already displayed)
&map->mtx (type: mutex, depth: 4) &si->softintr_lock (type: mutex, depth:
8) -- (already displayed)
&uvm.fpageqlock (type: mutex, depth: 5) &si->softintr_lock (type: mutex
, depth: 8) -- (already displayed)
&sched_lock (type: sched_lock, depth: 7) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (al
ready displayed)
/src/cvs-openbsd/sys/kern/kern_time.c:481 (type: mutex, depth: 6) &uvm_
kmapent_mtx (type: mutex, depth: 5) /src/cvs-openbsd/sys/kern/kern_timeout.c
:93 (type: mutex, depth: 8) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (alre
ady displayed)
/src/cvs-openbsd/sys/dev/rnd.c:223 (type: mutex, depth: 2) /src/cvs-openbsd/
sys/dev/rnd.c:222 (type: mutex, depth: 2) /src/cvs-openbsd/sys/kern/kern_task.
c:65 (type: mutex, depth: 2) &sched_lock (type: sched_lock, depth: 7) -- (alr
eady displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (alrea
dy displayed)
&tq->tq_mtx (type: mutex, depth: 2) &si->softintr_lock (type: mutex, depth:
8) -- (already displayed)
&sched_lock (type: sched_lock, depth: 7) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (alre
ady displayed)
&pp->pr_lock (type: mutex, depth: 2) &si->softintr_lock (type: mutex, depth
: 8) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (alre
ady displayed)
&tq->tq_mtx (type: mutex, depth: 2) &sched_lock (type: sched_lock, depth: 7
) -- (already displayed)
&setperf_mp_mutex (type: mutex, depth: 2) &ifiq->ifiq_mtx (type: mutex, dept
h: 2) &tq->tq_mtx (type: mutex, depth: 6) &sched_lock (type: sched_lock, dep
th: 7) -- (already displayed)
&tq->tq_mtx (type: mutex, depth: 2) &sched_lock (type: sched_lock, depth: 7
) -- (already displayed)
&dev->event_lock (type: mutex, depth: 2) &si->softintr_lock (type: mutex, d
epth: 8) -- (already displayed)
&sched_lock (type: sched_lock, depth: 7) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_malloc.c:104 (type: mutex, depth: 3) -- (alre
ady displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (alre
ady displayed)
&dev->vbl_lock (type: mutex, depth: 3) &dev->vblank_time_lock (type: mute
x, depth: 4) &dev_priv->irq_lock (type: mutex, depth: 5) &sched_lock (
type: sched_lock, depth: 7) -- (already displayed)
&tq->tq_mtx (type: mutex, depth: 6) -- (already displayed)
&dev_priv->uncore.lock (type: mutex, depth: 6) /src/cvs-openbsd/sys
/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (already displayed)
&dev_priv->uncore.lock (type: mutex, depth: 6) -- (already displayed)
&sl->lock (type: mutex, depth: 5) &wqh->lock (type: mutex, depth: 4)
&
sched_lock (type: sched_lock, depth: 7) -- (already displayed)
&dev->vblank_time_lock (type: mutex, depth: 4) -- (already displayed)
&wqh->lock (type: mutex, depth: 4) -- (already displayed)
&x->wait.lock (type: mutex, depth: 3) &sched_lock (type: sched_lock, dept
h: 7) -- (already displayed)
&wqh->lock (type: mutex, depth: 3) &sched_lock (type: sched_lock, depth: 7
) -- (already displayed)
&iopl->mtx (type: mutex, depth: 2) &si->softintr_lock (type: mutex, depth: 8
) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (alre
ady displayed)
&bq->bufq_mtx (type: mutex, depth: 2) &si->softintr_lock (type: mutex, dept
h: 8) -- (already displayed)
&sched_lock (type: sched_lock, depth: 7) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (alre
ady displayed)
&diskp->dk_mtx (type: mutex, depth: 2) &si->softintr_lock (type: mutex, dep
th: 8) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (alre
ady displayed)
&ap->ap_ccb_mtx (type: mutex, depth: 2) &si->softintr_lock (type: mutex, de
pth: 8) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (alre
ady displayed)
&pp->pr_lock (type: mutex, depth: 2) &p->p_mtx (type: mutex, depth: 8) -- (a
lready displayed)
/src/cvs-openbsd/sys/kern/kern_task.c:83 (type: mutex, depth: 2) &sched_loc
k (type: sched_lock, depth: 7) -- (already displayed)
&dev_priv->irq_lock (type: mutex, depth: 5) -- (already displayed)
&dev_priv->uncore.lock (type: mutex, depth: 6) -- (already displayed)
&tq->tq_mtx (type: mutex, depth: 2) &sched_lock (type: sched_lock, depth: 7
) -- (already displayed)
&wqh->lock (type: mutex, depth: 2) &sched_lock (type: sched_lock, depth: 7)
-- (already displayed)
&file_private->table_lock (type: mutex, depth: 0) &pp->pr_lock (type: mutex, de
pth: 1)/src/cvs-openbsd/sys/kern/kern_sig.c:92 (type: mutex, depth: 0)&pp->pr_l
ock (type: mutex, depth: 0)/src/cvs-openbsd/sys/uvm/uvm_device.c:57 (type: mute
x, depth: 0)/src/cvs-openbsd/sys/net/pfkeyv2.c:172 (type: mutex, depth: 0)/src/
cvs-openbsd/sys/netinet6/ip6_input.c:118 (type: mutex, depth: 0)/src/cvs-openbs
d/sys/netinet/if_ether.c:93 (type: mutex, depth: 0)/src/cvs-openbsd/sys/netinet
/ip_input.c:112 (type: mutex, depth: 0) &si->softintr_lock (type: mutex, depth:
8) -- (already displayed)
/src/cvs-openbsd/sys/kern/kern_timeout.c:93 (type: mutex, depth: 8) -- (alread
y displayed)
&pp->pr_lock (type: mutex, depth: 0)&pp->pr_lock (type: mutex, depth: 0)panic:
kernel diagnostic assertion "__mp_lock_held(&sched_lock, curcpu()) == 0"
failed: file "/src/cvs-openbsd/sys/kern/kern_lock.c", line 63
Stopped
at db_enter+0x10: popq %rbp
db_enter() at db_enter+0x10
panic() at panic+0x128
__assert(ffffffff81af6d92,ffffffff81afc585,3f,ffffffff81b1a406) at __assert+0x2
e
__mp_lock_held(ffffffff811362e0,ffff800033cfdec0) at __mp_lock_held
pageflttrap() at pageflttrap+0x78
kerntrap(ffff800033cfdf90) at kerntrap+0x91
alltraps_kern(6,8,0,0,0,73) at alltraps_kern+0x7b
strlen(ffffffff81afb7ed,14,0,0,ffff800033cfe180,ffffffff81afb7ed) at strlen+0x8
1
db_printf(ffffffff81afb7ed) at db_printf+0x6a
witness_ddb_display_descendants(fffffd810001d540,0,c0ff271ee0de782c) at witness
_ddb_display_descendants+0x64
db_witness_display(ffffffff814d2ed0,0,ffffffffffffffff,ffff800033cfe240) at db_
witness_display+0x132
db_command(ffffffff81d506b8,ffffffff81d314d0) at db_command+0x28e
db_command_loop() at db_command_loop+0x96
db_trap() at db_trap+0x138
end trace frame: 0xffff800033cfe400, count: 0
ddb{0}> sh all locks
CPU 0:
exclusive sched_lock &sched_lock r = 0 (0xffffffff81e75f18)
Process 55620 (xscreensaver) thread 0xffff800033c532a8 (307581)
exclusive kernel_lock &kernel_lock r = 0 (0xffffffff81e44910)
exclusive sched_lock &sched_lock r = 0 (0xffffffff81e75f18)