From f86a615e525f1cf1437c8fcb4539c28c929e5115 Mon Sep 17 00:00:00 2001 From: "yuri.benditovich@daynix.com" Date: Sat, 1 Apr 2017 19:40:31 +0300 Subject: [PATCH] qxl-wddm-dod: Debug warning on long wait on event In release build this does not affect the code. In debug build we will have a warning printout when waiting on event is close to 2 seconds - this can be a cause of following stop by OS. The printout contains name of related event variable. There is one event (in offload thread) that long wait on it does not affect any functionality, for it this warning is disabled. Signed-off-by: Yuri Benditovich Acked-by: Frediano Ziglio --- qxldod/QxlDod.cpp | 3 ++- qxldod/QxlDod.h | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp index e843935..716bd8d 100755 --- a/qxldod/QxlDod.cpp +++ b/qxldod/QxlDod.cpp @@ -5056,7 +5056,8 @@ void QxlDevice::PresentThreadRoutine() // No need for a mutex, only one consumer thread SPICE_RING_CONS_WAIT(m_PresentRing, wait); while (wait) { - WaitForObject(&m_PresentEvent, NULL); + // we do not want indication of long wait on this event + DoWaitForObject(&m_PresentEvent, NULL, NULL); SPICE_RING_CONS_WAIT(m_PresentRing, wait); } drawables = *SPICE_RING_CONS_ITEM(m_PresentRing); diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h index 51c554d..a1e9634 100755 --- a/qxldod/QxlDod.h +++ b/qxldod/QxlDod.h @@ -416,11 +416,13 @@ struct Resource { BOOLEAN FORCEINLINE -WaitForObject( +DoWaitForObject( PVOID Object, - PLARGE_INTEGER Timeout) + PLARGE_INTEGER Timeout, + LPCSTR name) { NTSTATUS status; + TimeMeasurement tm; status = KeWaitForSingleObject ( Object, Executive, @@ -428,9 +430,18 @@ WaitForObject( FALSE, Timeout); ASSERT(NT_SUCCESS(status)); + tm.Stop(); + if (name && tm.Diff() > 1900) + { + // 2 seconds in PresentDisplayOnly triggers watchdog on Win10RS1 + // when VSync control enabled. Print the exact event name. + DbgPrint(TRACE_LEVEL_ERROR, ("Waiting %d ms for %s\n", tm.Diff(), name)); + } return (status == STATUS_SUCCESS); } +#define WaitForObject(o, timeout) DoWaitForObject((o), (timeout), #o) + VOID FORCEINLINE ReleaseMutex(