https://git.reactos.org/?p=reactos.git;a=commitdiff;h=48b3c61b5d6cddc20f322c...
commit 48b3c61b5d6cddc20f322c40ddcc987f2a75ff1d Author: Victor Perevertkin victor.perevertkin@reactos.org AuthorDate: Tue Nov 3 23:18:14 2020 +0300 Commit: Victor Perevertkin victor.perevertkin@reactos.org CommitDate: Tue Nov 3 23:18:14 2020 +0300
[HDAUDBUS] Add a timeout into HDA_SendVerbs This function may stuck during device installation if there are issues with interrupts (or with a device itself).
This fixes the boot on my testing ThinkPad x60s --- drivers/wdm/audio/hdaudbus/fdo.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/drivers/wdm/audio/hdaudbus/fdo.cpp b/drivers/wdm/audio/hdaudbus/fdo.cpp index a600c64c7d8..2cb977eba29 100644 --- a/drivers/wdm/audio/hdaudbus/fdo.cpp +++ b/drivers/wdm/audio/hdaudbus/fdo.cpp @@ -176,11 +176,20 @@ HDA_SendVerbs(
while (Queued--) { - KeWaitForSingleObject(&Codec->ResponseSemaphore, - Executive, - KernelMode, - FALSE, - NULL); + LARGE_INTEGER Timeout; + Timeout.QuadPart = -1000LL * 10000; // 1 sec + + NTSTATUS waitStatus = KeWaitForSingleObject(&Codec->ResponseSemaphore, + Executive, + KernelMode, + FALSE, + &Timeout); + + if (waitStatus == STATUS_TIMEOUT) + { + DPRINT1("HDA_SendVerbs: timeout! Queued: %u\n", Queued); + break; + } }
if (Responses != NULL) {