We may get here with Giant held during an ACPI resume.
Sleep routines are supposed to drop Giant before relinquishing
the CPU. _sleep() handles this, but the LinuxKPI calls the sleepqueue
functions directly.
Differential D10414
Drop Giant before sleeping in linux_wait_for_timeout_common(). markj on Apr 17 2017, 10:30 PM. Authored by Tags None Referenced Files
Subscribers None
Details We may get here with Giant held during an ACPI resume. Sleep routines are supposed to drop Giant before relinquishing Pete Wright reported a panic during resume that was addressed
Diff Detail
Event TimelineComment Actions Was it investigated if there are missing DROP/PICKUP GIANT macros in the pci resume / suspend device methods? Comment Actions Yes, I looked through a number of existing device suspend/resume methods and did not find any special handling for Giant. Comment Actions Can this issue also be fixed by dropping / picking up giant in the suspend/resume device methods? The other device methods, attach, probe, shutdown already do this. --HPS Comment Actions Presumably yes, but I'm not familiar with the newbus locking protocol. It seemed preferable to change the sleep code since it must drop Giant anyway to be correct, and I suspect that the existing methods drop Giant just to cover up this problem. I hadn't noticed that the other methods in linux_pci.c drop Giant. I'll try removing those DROP/PICKUP_GIANT calls and see if any problems arise with this patch applied. Comment Actions I didn't observe any problems after removing the DROP/PICKUP_GIANT calls in the linuxkpi pci device methods, so I'm not sure what problem they solve. |