> Date: Wed, 21 Apr 2021 10:24:43 +0200
> From: Martin Pieuchot <[email protected]>
> 
> On 16/04/21(Fri) 16:50, Jérôme Frgacic wrote:
> > Thanks for your answer. :)
> > 
> > > Could you set "sysctl kern.splassert=2" in order to get a useful 
> > > stacktrace for this issue?  This is probably where some attention is 
> > > required.
> > 
> > Sure, here is the new output I get.
> > 
> > splassert: assertwaitok: want 0 have 9
> > Starting stack trace...
> > assertwaitok() at assertwaitok+0x3c
> > malloc(5b8,91,d) at malloc+0x55
> > intel_atomic_state_alloc(ffff800000202078) at intel_atomic_state_alloc+0x2f
> > drm_client_modeset_commit_atomic(ffff800000cf9a00,1) at 
> > drm_client_modeset_commit_atomic+0x40
> > drm_client_modeset_commit_locked(ffff800000cf9a00) at 
> > drm_client_modeset_commit_locked+0x53
> > drm_fb_helper_restore_fbdev_mode_unlocked(ffff800000cf9a00) at 
> > drm_fb_helper_restore_fbdev_mode_unlocked+0x44
> > intel_fbdev_restore_mode(ffff800000202078) at intel_fbdev_restore_mode+0x33
> > db_ktrap(1,0,ffff800022e1c730) at db_ktrap+0x2c
> > kerntrap(ffff800022e1c730) at kerntrap+0x8e
> > alltraps_kern_meltdown() at alltraps_kern_meltdown+0x7b
> > db_enter() at db_enter+0x10
> > internal_command(ffff80000064b600,ffff800022e1c88c,f420,1b) at 
> > internal_command+0x281
> > wskbd_translate(ffffffff82163d18,2,1) at wskbd_translate+0xdf
> > wskbd_input(ffff80000064b600,2,1) at wskbd_input+0x80
> > pckbcintr_internal(ffffffff82175308,ffff800000647e80) at 
> > pckbcintr_internal+0x11d
> > intr_handler(ffff800022e1c9c0,ffff800000647f80) at intr_handler+0x38
> 
> It seems that the DRM code that needs to be executed as a result of
> switching console, in wsdisplay_enter_ddb(), isn't playing nicely with
> ddb(4).
> 
> Getting rid of the SPL checks is easy but then there's the way CPUs are
> parked and the relation with the sleeping points.
> 
> Maybe we should simply disable this key combination when entered from a
> tty other than ttyC0 if drm(4) is used. 

Switching from a framebuffer console back to ttyC0 shouldn't really
involve any interaction with drm(4).  So in this case
wsdisplay_enter_ddb() should probably just call
sc_accessops->show_screen() instead of sc_accessops->enter_ddb().

Reply via email to