Skip to content
  1. Jan 30, 2019
    • Chris Wilson's avatar
      drm/i915/execlists: Suppress preempting self · c9a64622
      Chris Wilson authored
      In order to avoid preempting ourselves, we currently refuse to schedule
      the tasklet if we reschedule an inflight context. However, this glosses
      over a few issues such as what happens after a CS completion event and
      we then preempt the newly executing context with itself, or if something
      else causes a tasklet_schedule triggering the same evaluation to
      preempt the active context with itself.
      
      However, when we avoid preempting ELSP[0], we still retain the preemption
      value as it may match a second preemption request within the same time period
      that we need to resolve after the next CS event. However, since we only
      store the maximum preemption priority seen, it may not match the
      subsequent event and so we should double check whether or not we
      actually do need to trigger a preempt-to-idle by comparing the top
      priorities from each queue. Later, this gives us a hook for finer
      control over deciding whether the preempt-to-idle is justified.
      
      The sequence of events where we end up preempting for no avail is:
      
      1. Queue requests/contexts A, B
      2. Priority boost A; no preemption as it is executing, but keep hint
      3. After CS switch, B is less than hint, force preempt-to-idle
      4. Resubmit B after idling
      
      v2: We can simplify a bunch of tests based on the knowledge that PI will
      ensure that earlier requests along the same context will have the highest
      priority.
      v3: Demonstrate the stale preemption hint with a selftest
      
      References: a2bf92e8
      
       ("drm/i915/execlists: Avoid kicking priority on the current context")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190129185452.20989-4-chris@chris-wilson.co.uk
      c9a64622
    • Chris Wilson's avatar
      drm/i915: Rename execlists->queue_priority to queue_priority_hint · 4d97cbe0
      Chris Wilson authored
      
      
      After noticing that we trigger preemption events for currently executing
      requests, as well as requests that complete before the preemption and
      attempting to suppress those preemption events, it is wise to not
      consider the queue_priority to be authoritative. As we only track the
      maximum priority seen between dequeue passes, if the maximum priority
      request is no longer available for dequeuing (it completed or is even
      executing on another engine), we have no knowledge of the previous
      queue_priority as it would require us to keep a full history of enqueued
      requests -- but we already have that history in the priolists!
      
      Rename the queue_priority to queue_priority_hint so that we do not
      confuse it as being exactly the maximum priority in the queue, but merely
      an indication that we have seen a new maximum priority value and as such
      we should check whether it should preempt the currently running request.
      
      v2: s/preempt_priority_hint/queue_priority_hint/ as preempt implies it
      being only used for the singular task of preemption and not the wider
      question of waking up due to a change in the queue.
      
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190129185452.20989-3-chris@chris-wilson.co.uk
      4d97cbe0
    • Chris Wilson's avatar
      drm/i915: Identify active requests · 85474441
      Chris Wilson authored
      
      
      To allow requests to forgo a common execution timeline, one question we
      need to be able to answer is "is this request running?". To track
      whether a request has started on HW, we can emit a breadcrumb at the
      beginning of the request and check its timeline's HWSP to see if the
      breadcrumb has advanced past the start of this request. (This is in
      contrast to the global timeline where we need only ask if we are on the
      global timeline and if the timeline has advanced past the end of the
      previous request.)
      
      There is still confusion from a preempted request, which has already
      started but relinquished the HW to a high priority request. For the
      common case, this discrepancy should be negligible. However, for
      identification of hung requests, knowing which one was running at the
      time of the hang will be much more important.
      
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190129185452.20989-2-chris@chris-wilson.co.uk
      85474441
    • Chris Wilson's avatar
      drm/i915/selftests: Apply a subtest filter · 06039d98
      Chris Wilson authored
      
      
      In bringup on simulated HW even rudimentary tests are slow, and so many
      may fail that we want to be able to filter out the noise to focus on the
      specific problem. Even just the tests groups provided for igt is not
      specific enough, and we would like to isolate one particular subtest
      (and probably subsubtests!). For simplicity, allow the user to provide a
      command line parameter such as
      
      	i915.st_filter=i915_timeline_mock_selftests/igt_sync
      
      to restrict ourselves to only running on subtest. The exact name to use
      is given during a normal run, highlighted as an error if it failed,
      debug otherwise. The test group is optional, and then all subtests are
      compared for an exact match with the filter (most subtests have unique
      names). The filter can be negated, e.g. i915.st_filter=!igt_sync and
      then all tests but those that match will be run. More than one match can
      be supplied separated by a comma, e.g.
      
      	i915.st_filter=igt_vma_create,igt_vma_pin1
      
      to only run those specified, or
      
      	i915.st_filter=!igt_vma_create,!igt_vma_pin1
      
      to run all but those named. Mixing a blacklist and whitelist will only
      execute those subtests matching the whitelist so long as they are
      previously excluded in the blacklist.
      
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190129185452.20989-1-chris@chris-wilson.co.uk
      06039d98
    • Rodrigo Vivi's avatar
      Merge drm/drm-next into drm-intel-next-queued · 8716ae72
      Rodrigo Vivi authored
      
      
      A backmerge to unblock gen8+ semaphores.
      
      Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
      8716ae72
    • Ville Syrjälä's avatar
      drm/i915: Fix skl srckey mask bits · 968bf969
      Ville Syrjälä authored
      We're incorrectly masking off the R/V channel enable bit from
      KEYMSK. Fix it up.
      
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Matt Roper <matthew.d.roper@intel.com>
      Fixes: b2081525
      
       ("drm/i915: Add plane alpha blending support, v2.")
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190125183846.28755-1-ville.syrjala@linux.intel.com
      
      
      Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
      968bf969
  2. Jan 29, 2019
  3. Jan 28, 2019
  4. Jan 27, 2019
  5. Jan 26, 2019
  6. Jan 25, 2019