1. 18 Dec, 2015 5 commits
    • Chris Wilson's avatar
      drm/i915: Only spin whilst waiting on the current request · 821485dc
      Chris Wilson authored
      Limit busywaiting only to the request currently being processed by the
      GPU. If the request is not currently being processed by the GPU, there
      is a very low likelihood of it being completed within the 2 microsecond
      spin timeout and so we will just be wasting CPU cycles.
      
      v2: Check for logical inversion when rebasing - we were incorrectly
      checking for this request being active, and instead busywaiting for
      when the GPU was not yet processing the request of interest.
      
      v3: Try another colour for the seqno names.
      v4: Another colour for the function names.
      
      v5: Remove the forced coherency when checking for the active request. On
      reflection and plenty of recent experimentation, the issue is not a
      cache coherency problem - but an irq/seqno ordering problem (timing issue).
      Here, we do not need the w/a to force ordering of the read with an
      interrupt.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Cc: "Rogozhkin, Dmitry V" <dmitry.v.rogozhkin@intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Cc: Eero Tamminen <eero.t.tamminen@intel.com>
      Cc: "Rantala, Valtteri" <valtteri.rantala@intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/1449833608-22125-4-git-send-email-chris@chris-wilson.co.uk
      821485dc
    • Chris Wilson's avatar
      drm/i915: Limit the busy wait on requests to 5us not 10ms! · ca5b721e
      Chris Wilson authored
      When waiting for high frequency requests, the finite amount of time
      required to set up the irq and wait upon it limits the response rate. By
      busywaiting on the request completion for a short while we can service
      the high frequency waits as quick as possible. However, if it is a slow
      request, we want to sleep as quickly as possible. The tradeoff between
      waiting and sleeping is roughly the time it takes to sleep on a request,
      on the order of a microsecond. Based on measurements of synchronous
      workloads from across big core and little atom, I have set the limit for
      busywaiting as 10 microseconds. In most of the synchronous cases, we can
      reduce the limit down to as little as 2 miscroseconds, but that leaves
      quite a few test cases regressing by factors of 3 and more.
      
      The code currently uses the jiffie clock, but that is far too coarse (on
      the order of 10 milliseconds) and results in poor interactivity as the
      CPU ends up being hogged by slow requests. To get microsecond resolution
      we need to use a high resolution timer. The cheapest of which is polling
      local_clock(), but that is only valid on the same CPU. If we switch CPUs
      because the task was preempted, we can also use that as an indicator that
       the system is too busy to waste cycles on spinning and we should sleep
      instead.
      
      __i915_spin_request was introduced in
      commit 2def4ad9 [v4.2]
      Author: Chris Wilson <chris@chris-wilson.co.uk>
      Date:   Tue Apr 7 16:20:41 2015 +0100
      
           drm/i915: Optimistically spin for the request completion
      
      v2: Drop full u64 for unsigned long - the timer is 32bit wraparound safe,
      so we can use native register sizes on smaller architectures. Mention
      the approximate microseconds units for elapsed time and add some extra
      comments describing the reason for busywaiting.
      
      v3: Raise the limit to 10us
      v4: Now 5us.
      Reported-by: default avatarJens Axboe <axboe@kernel.dk>
      Link: https://lkml.org/lkml/2015/11/12/621Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Cc: "Rogozhkin, Dmitry V" <dmitry.v.rogozhkin@intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Cc: Eero Tamminen <eero.t.tamminen@intel.com>
      Cc: "Rantala, Valtteri" <valtteri.rantala@intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/1449833608-22125-3-git-send-email-chris@chris-wilson.co.uk
      ca5b721e
    • Chris Wilson's avatar
      drm/i915: Break busywaiting for requests on pending signals · 91b0c352
      Chris Wilson authored
      The busywait in __i915_spin_request() does not respect pending signals
      and so may consume the entire timeslice for the task instead of
      returning to userspace to handle the signal.
      
      In the worst case this could cause a delay in signal processing of 20ms,
      which would be a noticeable jitter in cursor tracking. If a higher
      resolution signal was being used, for example to provide fairness of a
      server timeslices between clients, we could expect to detect some
      unfairness between clients (i.e. some windows not updating as fast as
      others). This issue was noticed when inspecting a report of poor
      interactivity resulting from excessively high __i915_spin_request usage.
      
      Fixes regression from
      commit 2def4ad9 [v4.2]
      Author: Chris Wilson <chris@chris-wilson.co.uk>
      Date:   Tue Apr 7 16:20:41 2015 +0100
      
           drm/i915: Optimistically spin for the request completion
      
      v2: Try to assess the impact of the bug
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc; "Rogozhkin, Dmitry V" <dmitry.v.rogozhkin@intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Cc: Eero Tamminen <eero.t.tamminen@intel.com>
      Cc: "Rantala, Valtteri" <valtteri.rantala@intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/1449833608-22125-2-git-send-email-chris@chris-wilson.co.uk
      91b0c352
    • Imre Deak's avatar
      drm/i915: don't enable autosuspend on platforms without RPM support · cbc68dc9
      Imre Deak authored
      pm_runtime_{use,dont_use}_autosuspend() controls whether the device's
      sysfs power/autosuspend_delay_ms file is writeable or returns -EIO on
      access to user space. Since
      
      commit 25b181b4
      Author: Imre Deak <imre.deak@intel.com>
      Date:   Thu Dec 17 13:44:56 2015 +0200
      
        drm/i915: get a permanent RPM reference on platforms w/o RPM support
      
      this sysfs file is writeable also on platforms without RPM support, but
      userspace (at least IGT) depends on this file being unchangable to
      determine whether the device supports runtime PM at all. So restore the
      old behavior.
      
      This gets rid of igt/pm_rpm failures on old platforms without RPM
      support, where the test should be skipped.
      
      Testcase: igt/pm_rpm/basic-rte
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Reviewed-by: default avatarDavid Weinehall <david.weinehall@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1450371873-878-1-git-send-email-imre.deak@intel.com
      cbc68dc9
    • Jani Nikula's avatar
      drm/i915/backlight: prefer dev_priv over dev pointer · e6cb3727
      Jani Nikula authored
      Use dev_priv rather than dev pointer where applicable. Remove plenty of
      unnecessary temp variables. No functional changes.
      Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
      Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1450428695-28831-1-git-send-email-jani.nikula@intel.com
      e6cb3727
  2. 17 Dec, 2015 15 commits
  3. 16 Dec, 2015 16 commits
  4. 14 Dec, 2015 2 commits
  5. 12 Dec, 2015 1 commit
  6. 11 Dec, 2015 1 commit
    • Daniel Vetter's avatar
      Merge tag 'drm-i915-get-eld' of tiwai/sound into drm-intel-next-queued · 618100f8
      Daniel Vetter authored
      Add get_eld audio component for i915/HD-audio
      
      Currently, the HDMI/DP audio status and ELD are notified and obtained
      via the hardware-level communication over HD-audio unsolicited event
      and verbs although the graphics driver holds the exactly same
      information.  As we already have a notification via audio component,
      this is another step forward; namely, the audio driver may fetch
      directly the audio status and ELD via the new component op.
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
      618100f8