Hi, bugs@!
I’ve been dealing with a problem for a while now.
My Ninkear A15 Pro laptop freezes when I try to put it into deep sleep
mode or when I close the lid. It was really strange. The screen would
just go dark for no reason, the laptop would stop responding to
keystrokes, and the funny thing is that there was no kernel panic, the
backlight stayed at maximum brightness, and I wasn’t switched to TTY.
I tried to identify the source of this problem, and I tried adding
locks inside the dc_dmub_srv_fb_cmd_list_queue_execute() function
to prevent race conditions ( which apparently do occur internally ).
I don't know if my decision was the right one, but it fixed the
problem. After applying the patch I attached to the email, my laptop
started waking up and going to sleep normally.
Diff attached.
What do you think about that?
OpenBSD 7.9-current (amdgpu_test_dc_quick) #1: Wed Jul 1 13:19:31 CEST
2026
[email protected]:/home/mykyta/Dev/kernel/src/sys/arch/amd64/compile/amdgpu_test_dc_quick
real mem = 20777701376 (19815MB) avail mem = 20120072192 (19187MB)
random: good seed from bootblocks
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 3.3 @ 0xed01f000 (45 entries)
bios0: vendor American Megatrends International, LLC. version
"AB8139_S_2C_V00.01_002" date 04/09/2025 bios0: AB8139 AB8139
efi0 at bios0: UEFI 2.7
efi0: American Megatrends rev 0x50013
acpi0 at bios0: ACPI 6.2
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP MSDM SSDT SSDT FIDT MCFG HPET FPDT VFCT BGRT
TPM2 SSDT CRAT CDIT SSDT SSDT SSDT SSDT WSMT APIC IVRS SSDT SSDT acpi0:
wakeup devices GPP0(S4) GPP2(S4) GPP4(S4) GPP5(S4) GP17(S4) XHC0(S3)
XHC1(S3) GP18(S4) GP19(S4) LID0(S4) acpitimer0 at acpi0: 3579545 Hz, 32
bits acpimcfg0 at acpi0 acpimcfg0: addr 0xf0000000, bus 0-127
acpihpet0 at acpi0: 14318180 Hz
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: AMD Ryzen 5 5500U with Radeon Graphics, 2100.01 MHz, 17-68-01,
patch 08608108 cpu0: cpuid 1
edx=178bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT>
ecx=76d8320b<SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND>
cpu0: cpuid 6 eax=4<ARAT> ecx=1<EFFFREQ> cpu0: cpuid 7.0
ebx=219c91a9<FSGSBASE,BMI1,AVX2,SMEP,BMI2,PQM,RDSEED,ADX,SMAP,CLFLUSHOPT,CLWB,SHA>
ecx=400004<UMIP> cpu0: cpuid d.1 eax=f<XSAVEOPT,XSAVEC,XGETBV1,XSAVES>
cpu0: cpuid 80000001 edx=2fd3fbff<NXE,MMXX,FFXSR,PAGE1GB,RDTSCP,LONG>
ecx=75c237ff<LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,MWAITX>
cpu0: cpuid 80000007 edx=6799<HWPSTATE,ITSC> cpu0: cpuid 80000008
ebx=90cf757<IBPB,IBRS,STIBP,IBRS_PREF,IBRS_SM,SSBD> cpu0: cpuid
8000001F eax=1000f<SME,SEV,PFLUSH_MSR,SEVES,VTE> ecx=e edx=1 cpu0: 32KB
64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 512KB 64b/line
8-way L2 cache, 4MB 64b/line 16-way L3 cache cpu0: smt 0, core 0,
package 0, type P mtrr: Pentium Pro MTRR support, 8 var ranges, 88
fixed ranges cpu0: apic clock running at 100MHz cpu0: mwait min=64,
max=64, C-substates=1.1, IBE cpu at mainbus0: not configured cpu at
mainbus0: not configured cpu at mainbus0: not configured cpu at
mainbus0: not configured cpu at mainbus0: not configured
cpu at mainbus0: not configured
cpu at mainbus0: not configured
cpu at mainbus0: not configured
cpu at mainbus0: not configured
cpu at mainbus0: not configured
cpu at mainbus0: not configured
ioapic0 at mainbus0: apid 33 pa 0xfec00000, version 21, 24 pins, can't
remap ioapic1 at mainbus0: apid 34 pa 0xfec01000, version 21, 32 pins,
can't remap acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus -1 (GPP0)
acpiprt2 at acpi0: bus -1 (GPP1)
acpiprt3 at acpi0: bus 1 (GPP2)
acpiprt4 at acpi0: bus -1 (GPP3)
acpiprt5 at acpi0: bus -1 (GPP4)
acpiprt6 at acpi0: bus 2 (GPP5)
acpiprt7 at acpi0: bus -1 (GPP6)
acpiprt8 at acpi0: bus 3 (GP17)
acpiprt9 at acpi0: bus -1 (GP18)
acpiprt10 at acpi0: bus -1 (GP19)
acpiec0 at acpi0
acpipci0 at acpi0 PCI0: 0x00000010 0x00000011 0x00000000
acpicmos0 at acpi0
acpiac0 at acpi0: AC unit online
acpibat0 at acpi0: BAT0 model "Li-ion Real Battery" serial 123456789
type Lion oem "AMD Battery" acpibtn0 at acpi0: LID0(wakeup)
"INT33D3" at acpi0 not configured
acpibtn1 at acpi0: SLPB
"MSFT0001" at acpi0 not configured
acpibtn2 at acpi0: PWRB
"ACPI0010" at acpi0 not configured
acpicpu0 at acpi0: C3(0@350 io@0x415), C2(0@18 io@0x414), C1(0@1
mwait), PSS amdgpio0 at acpi0 GPIO uid 0 addr 0xfed81500/0x400 irq 7,
184 pins dwiic0 at acpi0 I2CA addr 0xfedc2000/0x1000 irq 10
iic0 at dwiic0
dwiic1 at acpi0 I2CB addr 0xfedc3000/0x1000 irq 11
iic1 at dwiic1
dwiic2 at acpi0 I2CD addr 0xfedc5000/0x1000 irq 6
iic2 at dwiic2
ihidev0 at iic2 addr 0x2c gpio 9, vendor 0x911 product 0x5288, PNP0C50
ihidev0: 13 report ids
imt0 at ihidev0: clickpad, 5 contacts
wsmouse0 at imt0 mux 0
ims0 at ihidev0 reportid 2: 2 buttons, Z and W dir
wsmouse1 at ims0 mux 0
hid at ihidev0 reportid 4 not configured
hid at ihidev0 reportid 6 not configured
hid at ihidev0 reportid 7 not configured
hid at ihidev0 reportid 9 not configured
hid at ihidev0 reportid 10 not configured
hid at ihidev0 reportid 11 not configured
hid at ihidev0 reportid 12 not configured
hid at ihidev0 reportid 13 not configured
tpm0 at acpi0 TPM_: unsupported TPM2 start method 2
"PNP0C14" at acpi0 not configured
acpipwrres0 at acpi0: P0SA, resource for SATA
acpipwrres1 at acpi0: P0SA, resource for SAT1
acpivideo0 at acpi0: VGA_
acpivout0 at acpivideo0: LCD_
cpu0: 2100 MHz: speeds: 2100 1700 1400 MHz
pci0 at mainbus0 bus 0
ksmn0 at pci0 dev 0 function 0 "AMD 17h/6xh Root Complex" rev 0x00
"AMD 17h/6xh IOMMU" rev 0x00 at pci0 dev 0 function 2 not configured
pchb0 at pci0 dev 1 function 0 "AMD 17h/6xh Host" rev 0x00
ppb0 at pci0 dev 1 function 3 "AMD 17h/6xh PCIE" rev 0x00: msi
pci1 at ppb0 bus 1
iwm0 at pci1 dev 0 function 0 "Intel AC 8260" rev 0x3a, msi
pchb1 at pci0 dev 2 function 0 "AMD 17h/6xh Host" rev 0x00
ppb1 at pci0 dev 2 function 3 "AMD 17h/6xh PCIE" rev 0x00: msi
pci2 at ppb1 bus 2
nvme0 at pci2 dev 0 function 0 unknown vendor 0x1e4b product 0x1202 rev
0x01: msix, NVMe 1.4 nvme0: faspeed P8-512G-SE, firmware SN22613,
serial SCRW25081205P0637 scsibus1 at nvme0: 2 targets, initiator 0
sd0 at scsibus1 targ 1 lun 0: <NVMe, faspeed P8-512G-, SN22>
sd0: 488386MB, 512 bytes/sector, 1000215216 sectors
pchb2 at pci0 dev 8 function 0 "AMD 17h/6xh Host" rev 0x00
ppb2 at pci0 dev 8 function 1 "AMD 17h/6xh PCIE" rev 0x00
pci3 at ppb2 bus 3
amdgpu0 at pci3 dev 0 function 0 "ATI Lucienne" rev 0xc2
drm0 at amdgpu0
amdgpu0: msi
azalia0 at pci3 dev 0 function 1 "ATI Renoir HD Audio" rev 0x00: msi
azalia0: no supported codecs
ccp0 at pci3 dev 0 function 2 "AMD 17h/1xh Crypto" rev 0x00
xhci0 at pci3 dev 0 function 3 "AMD 17h/6xh xHCI" rev 0x00: msix, xHCI
1.10 usb0 at xhci0: USB revision 3.0
uhub0 at usb0 configuration 1 interface 0 "AMD xHCI root hub" rev
3.00/1.00 addr 1 xhci1 at pci3 dev 0 function 4 "AMD 17h/6xh xHCI" rev
0x00: msix, xHCI 1.10 usb1 at xhci1: USB revision 3.0
uhub1 at usb1 configuration 1 interface 0 "AMD xHCI root hub" rev
3.00/1.00 addr 1 "AMD 17h/1xh I2S Audio" rev 0x01 at pci3 dev 0
function 5 not configured azalia1 at pci3 dev 0 function 6 "AMD 17h/1xh
HD Audio" rev 0x00: msi azalia1: codecs: Realtek ALC269
audio0 at azalia1
vendor "AMD", unknown product 0x15e4 (class DASP subclass
miscellaneous, rev 0x00) at pci3 dev 0 function 7 not configured
piixpm0 at pci0 dev 20 function 0 "AMD FCH SMBus" rev 0x51: SMI
iic3 at piixpm0
spdmem0 at iic3 addr 0x50: 4GB DDR4 SDRAM PC4-25600 SO-DIMM
spdmem1 at iic3 addr 0x51: 16GB DDR4 SDRAM PC4-21300 SO-DIMM
iic4 at piixpm0
pcib0 at pci0 dev 20 function 3 "AMD FCH LPC" rev 0x51
pchb3 at pci0 dev 24 function 0 "AMD 17h/6xh Data Fabric" rev 0x00
pchb4 at pci0 dev 24 function 1 "AMD 17h/6xh Data Fabric" rev 0x00
pchb5 at pci0 dev 24 function 2 "AMD 17h/6xh Data Fabric" rev 0x00
pchb6 at pci0 dev 24 function 3 "AMD 17h/6xh Data Fabric" rev 0x00
pchb7 at pci0 dev 24 function 4 "AMD 17h/6xh Data Fabric" rev 0x00
pchb8 at pci0 dev 24 function 5 "AMD 17h/6xh Data Fabric" rev 0x00
pchb9 at pci0 dev 24 function 6 "AMD 17h/6xh Data Fabric" rev 0x00
pchb10 at pci0 dev 24 function 7 "AMD 17h/6xh Data Fabric" rev 0x00
isa0 at pcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5 irq 1 irq 12
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0: console keyboard
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
vmm0 at mainbus0: SVM/RVI
efifb at mainbus0 not configured
uvideo0 at uhub0 port 3 configuration 1 interface 0 "XXS-250805-J RGB
Camera" rev 2.00/8.05 addr 2 video0 at uvideo0
uhidev0 at uhub1 port 2 configuration 1 interface 0 "Compx 2.4G
Receiver" rev 1.10/2.41 addr 2 uhidev0: iclass 3/1
ukbd0 at uhidev0: 8 variable keys, 6 key codes
wskbd1 at ukbd0 mux 1
uhidev1 at uhub1 port 2 configuration 1 interface 1 "Compx 2.4G
Receiver" rev 1.10/2.41 addr 2 uhidev1: iclass 3/1, 6 report ids
ums0 at uhidev1 reportid 1: 5 buttons, Z and W dir
wsmouse2 at ums0 mux 0
uhid0 at uhidev1 reportid 2: input=7, output=0, feature=0
uhid1 at uhidev1 reportid 3: input=1, output=0, feature=0
uhid2 at uhidev1 reportid 4: input=1, output=0, feature=0
ucc0 at uhidev1 reportid 5: 573 usages, 20 keys, array
wskbd2 at ucc0 mux 1
uhid3 at uhidev1 reportid 6: input=0, output=0, feature=7
ugen0 at uhub1 port 3 "Intel Bluetooth" rev 2.00/0.01 addr 3
uhub2 at uhub1 port 4 configuration 1 interface 0 "Genesys Logic USB2.0
Hub" rev 2.00/88.11 addr 4 ugen1 at uhub2 port 2 "Blestech Betterlife
Fingerprint" rev 2.00/2.00 addr 5 vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
root on sd0a (ab2f272cb5524e1c.a) swap on sd0b dump on sd0b
iwm0: hw rev 0x200, fw ver 36.ca7b901d.0, address 04:d3:b0:d3:51:80
amdgpu0: RENOIR GC 9.3.0 7 CU rev 0x00
Index: dc_dmub_srv.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/amd/display/dc/dc_dmub_srv.c,v
diff -u -p -u -r1.10 dc_dmub_srv.c
--- dc_dmub_srv.c 7 May 2026 06:31:44 -0000 1.10
+++ dc_dmub_srv.c 4 Jul 2026 21:46:40 -0000
@@ -23,6 +23,7 @@
*
*/
+#include <sys/mutex.h>
#include "dm_services.h"
#include "dc.h"
#include "dc_dmub_srv.h"
@@ -41,6 +42,8 @@
#define DC_LOGGER CTX->logger
#define GPINT_RETRY_NUM 20
+static mutex dmub_fb_cmd_queue_lock = MUTEX_INITIALIZER(IPL_TTY);
+
static void dc_dmub_srv_construct(struct dc_dmub_srv *dc_srv, struct dc *dc,
struct dmub_srv *dmub)
{
@@ -192,6 +195,8 @@ static bool dc_dmub_srv_fb_cmd_list_queu
dc_ctx = dc_dmub_srv->ctx;
dmub = dc_dmub_srv->dmub;
+ mtx_enter(&dmub_fb_cmd_queue_lock);
+
for (i = 0 ; i < count; i++) {
// Queue command
if (!cmd_list[i].cmd_common.header.multi_cmd_pending ||
@@ -204,8 +209,10 @@ static bool dc_dmub_srv_fb_cmd_list_queu
if (status == DMUB_STATUS_QUEUE_FULL) {
/* Execute and wait for queue to become empty again. */
status = dmub_srv_fb_cmd_execute(dmub);
- if (status == DMUB_STATUS_POWER_STATE_D3)
+ if (status == DMUB_STATUS_POWER_STATE_D3) {
+ mtx_leave(&dmub_fb_cmd_queue_lock);
return false;
+ }
do {
status = dmub_srv_wait_for_inbox_free(dmub, 100000, count - i);
@@ -220,11 +227,13 @@ static bool dc_dmub_srv_fb_cmd_list_queu
DC_ERROR("Error queueing DMUB command: status=%d\n", status);
dc_dmub_srv_log_diagnostic_data(dc_dmub_srv);
}
+ mtx_leave(&dmub_fb_cmd_queue_lock);
return false;
}
}
status = dmub_srv_fb_cmd_execute(dmub);
+ mtx_leave(&dmub_fb_cmd_queue_lock);
if (status != DMUB_STATUS_OK) {
if (status != DMUB_STATUS_POWER_STATE_D3) {
DC_ERROR("Error starting DMUB execution: status=%d\n", status);