[Spice-devel] [PATCH 04/12] qxl-wddm-dod: Debug warning on long wait on event

Yuri Benditovich yuri.benditovich at daynix.com
Tue Mar 21 13:03:13 UTC 2017


On Tue, Mar 21, 2017 at 2:05 PM, Frediano Ziglio <fziglio at redhat.com> wrote:

> >
> > 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?
>
> Depends where the problematic flow is - first one is DisplayEvent, then -
MemLock



> Frediano
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20170321/7fa9ce51/attachment.html>


More information about the Spice-devel mailing list