[Spice-devel] [PATCH 04/12] qxl-wddm-dod: Debug warning on long wait on event
Frediano Ziglio
fziglio at redhat.com
Tue Mar 21 12:05:39 UTC 2017
>
> 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 <yuri.benditovich at daynix.com>
> ---
> 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 01de9b3..7e3afb3 100755
> --- a/qxldod/QxlDod.cpp
> +++ b/qxldod/QxlDod.cpp
> @@ -5095,7 +5095,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 324b940..7bb5de5 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(
This patch looks good.
Which timers did you discovered having the wait issue?
Frediano
More information about the Spice-devel
mailing list