On Tue, Nov 08, 2022 at 11:44:06PM +0330, Ali Farzanrad wrote: > >Synopsis: HP ProBook 4530s laptop, kernel panic on suspend > >Category: kernel > >Environment: > System : OpenBSD 7.2 > Details : OpenBSD 7.2 (GENERIC.MP) #0: Wed Oct 26 12:01:47 MDT 2022 > > r...@syspatch-72-amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP > > Architecture: OpenBSD.amd64 > Machine : amd64 > >Description: > I had an upgrade from (I think) OpenBSD 6.7 to 7.2 and then ran > sysmerge (to ignore my configs) and sysclean (with rm -rf) to > cleanup files. > I also did syspatch. > After upgrade whenever I try to suspend I receive kernel panic. > I don't remember if it did suspend correctly before, but I had a > different HP ProBook 4530s without radeon video graphics which > did suspend correctly. > Maybe it is related to radeondrm. > >How-To-Repeat: > start apmd: rcctl -f start apmd > then zzz or ZZZ > >Fix: > I have no idea. > When I did zzz, I received these kernel messages: > WARNING !list_empty(&lock->head) failed at > /usr/src/sys/dev/pcidrm/drm_modeset_lock.c:270 > uvm_fault(0xffffffff823201f8, 0x20, 0, 1) -> e > kernel: page fault trap, code=0 > Stopped at mtx_enter_try+0x3e: movl 0x8(%rdi),%edi > TID PID UID PRFLAGS PFLAGS CPU COMMAND > *373147 24736 0 0x14000 0x40000200 0K acpi0 > mtx_enter_try(18) at mtx_enter_try+0x3e > mtx_enter(18) at mtx_enter+0x35 > __ww_mutex_lock(18,ffff800000e96fc0,0,0) at __ww_mutex_lock+0x33 > modeset_lock(18,ffff800000e96fc0,0,0) at modeset_lock+0x197 > drm_modeset_lock_all_ctx(ffff8000002a0000,ffff800000e96fc0) at > drm_modeset_lock_all_ctx+0x9c > drm_modeset_lock_all(ffff8000002a0000) at drm_modeset_lock_all+0xc0 > radeon_suspend_kms(ffff8000002a0000,1,1,0) at radeon_suspend_kms+0x69 > radeondrm_activate_kms(ffff80000029c000,2) at > radeondrm_activate_kms+0x53 > config_activate_children(ffff800000132500,2) at > config_activate_children+0x85 > config_activate_children(ffff80000029b000,2) at > config_activate_children+0x85 > config_activate_children(ffff800000132300,2) at > config_activate_children+0x85 > config_activate_children(ffff80000002f300,2) at > config_activate_children+0x85 > config_suspend_all(2) at config_suspend_all+0x1aa > sleep_state(ffff80000002c400,1) at sleep_state+0xcf > end trace frame: 0xffff800022abb5f0, count: 0 > 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}> bt > mtx_enter_try(18) at mtx_enter_try+0x3e > mtx_enter(18) at mtx_enter+0x35 > __ww_mutex_lock(18,ffff800000e96fc0,0,0) at __ww_mutex_lock+0x33 > modeset_lock(18,ffff800000e96fc0,0,0) at modeset_lock+0x197 > drm_modeset_lock_all_ctx(ffff8000002a0000,ffff800000e96fc0) at > drm_modeset_lock_all_ctx+0x9c > drm_modeset_lock_all(ffff8000002a0000) at drm_modeset_lock_all+0xc0 > radeon_suspend_kms(ffff8000002a0000,1,1,0) at radeon_suspend_kms+0x69 > radeondrm_activate_kms(ffff80000029c000,2) at > radeondrm_activate_kms+0x53 > config_activate_children(ffff800000132500,2) at > config_activate_children+0x85 > config_activate_children(ffff80000029b000,2) at > config_activate_children+0x85 > config_activate_children(ffff800000132300,2) at > config_activate_children+0x85 > config_activate_children(ffff80000002f300,2) at > config_activate_children+0x85 > config_suspend_all(2) at config_suspend_all+0x1aa > sleep_state(ffff80000002c400,1) at sleep_state+0xcf > acpi_sleep_task(ffff80000002c400,1) at acpi_sleep_task+0x1d > acpi_thread(ffff8000001288f0) at acpi_thread+0x1b8 > end trace frame: 0x0, count: -16 > ddb{0}>
Try the following patch. You may also be able to switch this machine to only use the Radeon in the bios settings. Index: sys/dev/pci/drm/radeon/radeon_kms.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_kms.c,v retrieving revision 1.90 diff -u -p -r1.90 radeon_kms.c --- sys/dev/pci/drm/radeon/radeon_kms.c 15 Jul 2022 17:57:26 -0000 1.90 +++ sys/dev/pci/drm/radeon/radeon_kms.c 9 Nov 2022 02:24:00 -0000 @@ -874,7 +874,7 @@ radeondrm_activate_kms(struct device *se struct radeon_device *rdev = (struct radeon_device *)self; int rv = 0; - if (rdev->ddev == NULL) + if (rdev->ddev == NULL || radeon_fatal_error) return (0); switch (act) {