1. 10 Nov, 2017 7 commits
    • Tvrtko Ursulin's avatar
      drm/i915: Define an engine class enum for the uABI · 1803fcbc
      Tvrtko Ursulin authored
      We want to be able to report back to userspace details about an engine's
      class, and in return for userspace to be able to request actions
      regarding certain classes of engines. To isolate the uABI from any
      variations between hw generations, we define an abstract class for the
      engines and internally map onto the hw.
      
      v2: Remove MAX from the uABI; keep it internal if we need it, but don't
      let userspace make the mistake of using it themselves.
      v3: s/OTHER/INVALID/
        The use of OTHER is ill-defined, so remove it from the uABI as any
        future new type of engine can define a class to suit it. But keep a
        reserved value for an invalid class, so that we can always
        unambiguously express when something doesn't belong to the
        classification.
      Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
      Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> #v2
      Reviewed-by: default avatarLionel Landwerlin <lionel.g.landwerlin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171110142634.10551-1-chris@chris-wilson.co.uk
      1803fcbc
    • Chris Wilson's avatar
      drm/i915/selftests: Initialise mock_i915->mm.obj_lock · 9511ce1c
      Chris Wilson authored
      lockdep spotted that the mock tests were using the i915->mm.obj_lock
      without first initialiasing it:
      
      >[ 1303.217043] [IGT] drv_selftest: starting subtest mock_objects
      <4>[ 1303.240898] Setting dangerous option mock_selftests - tainting kernel
      <6>[ 1303.253665] i915: Performing mock selftests with st_random_seed=0xd87ea6c6 st_timeout=1000
      <4>[ 1303.254812] INFO: trying to register non-static key.
      <4>[ 1303.254816] the code is fine but needs lockdep annotation.
      <4>[ 1303.254818] turning off the locking correctness validator.
      <4>[ 1303.254820] CPU: 4 PID: 13112 Comm: drv_selftest Tainted: G     U  W       4.14.0-rc8-CI-Patchwork_7058+ #1
      <4>[ 1303.254823] Hardware name: MSI MS-7924/Z97M-G43(MS-7924), BIOS V1.12 02/15/2016
      <4>[ 1303.254825] Call Trace:
      <4>[ 1303.254829]  dump_stack+0x68/0x9f
      <4>[ 1303.254832]  register_lock_class+0x3fd/0x580
      <4>[ 1303.254835]  ? ___slab_alloc.constprop.29+0x157/0x3d0
      <4>[ 1303.254837]  ? ___slab_alloc.constprop.29+0x157/0x3d0
      <4>[ 1303.254840]  ? sg_kmalloc+0x1e/0x50
      <4>[ 1303.254842]  ? debug_smp_processor_id+0x17/0x20
      <4>[ 1303.254845]  __lock_acquire+0xa4/0x1b00
      <4>[ 1303.254884]  ? __i915_gem_object_set_pages+0x116/0x1f0 [i915]
      <4>[ 1303.254887]  ? __this_cpu_preempt_check+0x13/0x20
      <4>[ 1303.254889]  ? sg_kmalloc+0x1e/0x50
      <4>[ 1303.254891]  lock_acquire+0xb0/0x200
      <4>[ 1303.254893]  ? lock_acquire+0xb0/0x200
      <4>[ 1303.254917]  ? __i915_gem_object_set_pages+0x116/0x1f0 [i915]
      <4>[ 1303.254920]  _raw_spin_lock+0x32/0x50
      <4>[ 1303.254944]  ? __i915_gem_object_set_pages+0x116/0x1f0 [i915]
      <4>[ 1303.254967]  __i915_gem_object_set_pages+0x116/0x1f0 [i915]
      <4>[ 1303.254991]  i915_gem_object_get_pages_phys+0x286/0x2b0 [i915]
      <4>[ 1303.255015]  ____i915_gem_object_get_pages+0x20/0x60 [i915]
      <4>[ 1303.255039]  i915_gem_object_attach_phys+0x137/0x1a0 [i915]
      <4>[ 1303.255063]  igt_phys_object+0x45/0x120 [i915]
      <4>[ 1303.255094]  __i915_subtests+0x40/0xd0 [i915]
      <4>[ 1303.255099]  ? work_on_cpu_safe+0x60/0x60
      <4>[ 1303.255131]  i915_gem_object_mock_selftests+0x34/0x50 [i915]
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Matthew Auld <matthew.william.auld@gmail.com>
      Cc: Mika Kuoppala <mika.kuoppala@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171110151919.18451-1-chris@chris-wilson.co.ukReviewed-by: default avatarMatthew Auld <matthew.william.auld@gmail.com>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      9511ce1c
    • Chris Wilson's avatar
      drm/i915: Restore the wait for idle engine after flushing interrupts · 30b29406
      Chris Wilson authored
      So it appears that commit 5427f207 ("drm/i915: Bump wait-times for
      the final CS interrupt before parking") was a little over optimistic in
      its belief that it had successfully waited for all residual activity on
      the engines before parking. Numerous sightings in CI since then of
      
      <7>[   52.542886] [IGT] core_auth: executing
      <3>[   52.561013] [drm:intel_engines_park [i915]] *ERROR* vcs0 is not idle before parking
      <7>[   52.561215] intel_engines_park vcs0
      <7>[   52.561229] intel_engines_park 	current seqno 98, last 98, hangcheck 0 [-247449 ms], inflight 0
      <7>[   52.561238] intel_engines_park 	Reset count: 0
      <7>[   52.561266] intel_engines_park 	Requests:
      <7>[   52.561363] intel_engines_park 	RING_START: 0x00000000 [0x00000000]
      <7>[   52.561377] intel_engines_park 	RING_HEAD:  0x00000000 [0x00000000]
      <7>[   52.561390] intel_engines_park 	RING_TAIL:  0x00000000 [0x00000000]
      <7>[   52.561406] intel_engines_park 	RING_CTL:   0x00000000
      <7>[   52.561422] intel_engines_park 	RING_MODE:  0x00000200 [idle]
      <7>[   52.561442] intel_engines_park 	ACTHD:  0x00000000_00000000
      <7>[   52.561459] intel_engines_park 	BBADDR: 0x00000000_00000000
      <7>[   52.561474] intel_engines_park 	Execlist status: 0x00000301 00000000
      <7>[   52.561489] intel_engines_park 	Execlist CSB read 5 [5 cached], write 5 [5 from hws], interrupt posted? no
      <7>[   52.561500] intel_engines_park 		ELSP[0] idle
      <7>[   52.561510] intel_engines_park 		ELSP[1] idle
      <7>[   52.561519] intel_engines_park 		HW active? 0x0
      <7>[   52.561608] intel_engines_park Idle? yes
      <7>[   52.561617] intel_engines_park
      
      on Braswell, which indicates that the engine just needs that little bit
      longer after flushing the tasklet to settle. So give it a few more
      milliseconds before declaring an err and applying the emergency brake.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103479Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171110112550.28909-1-chris@chris-wilson.co.ukReviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
      30b29406
    • Hans de Goede's avatar
      drm/i915: Acquire PUNIT->PMIC bus for intel_uncore_forcewake_reset() · a5266db4
      Hans de Goede authored
      intel_uncore_forcewake_reset() does forcewake puts and gets as such
      we need to make sure that no-one tries to access the PUNIT->PMIC bus
      (on systems where this bus is shared) while it runs, otherwise bad
      things happen.
      
      Normally this is taken care of by the i915_pmic_bus_access_notifier()
      which does an intel_uncore_forcewake_get(FORCEWAKE_ALL) when some other
      driver tries to access the PMIC bus, so that later forcewake gets are
      no-ops (for the duration of the bus access).
      
      But intel_uncore_forcewake_reset gets called in 3 cases:
      1) Before registering the pmic_bus_access_notifier
      2) After unregistering the pmic_bus_access_notifier
      3) To reset forcewake state on a GPU reset
      
      In all 3 cases the i915_pmic_bus_access_notifier() protection is
      insufficient.
      
      This commit fixes this race by calling iosf_mbi_punit_acquire() before
      calling intel_uncore_forcewake_reset(). In the case where it is called
      directly after unregistering the pmic_bus_access_notifier, we need to
      hold the punit-lock over both calls to avoid a race where
      intel_uncore_fw_release_timer() may execute between the 2 calls.
      Reviewed-by: default avatarImre Deak <imre.deak@intel.com>
      Acked-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171019111620.26761-3-hdegoede@redhat.com
      a5266db4
    • Hans de Goede's avatar
      x86/platform/intel/iosf_mbi: Add unlocked PMIC bus access notifier unregister · af0ab55f
      Hans de Goede authored
      For race free unregistration drivers may need to acquire PMIC bus access
      through iosf_mbi_punit_acquire() and then (un)register the notifier without
      dropping the lock.
      
      This commit adds an unlocked variant of
      iosf_mbi_unregister_pmic_bus_access_notifier for this use case.
      Acked-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171019111620.26761-2-hdegoede@redhat.com
      af0ab55f
    • Chris Wilson's avatar
      drm/i915: Move irqs enabled assertion deeper for mock breadcrumbs · c16c4ba7
      Chris Wilson authored
      In order to allow the mock breadcrumbs tests to run without device irqs
      being enabled, move the intel_irqs_enabled() assert deeper to just
      before we commit to enabling the HW irq.
      
      v2: Add a FIXME explaining that placing the assertion so deep is not
      ideal, but a compromise for mock breadcrumbs.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Matthew Auld <matthew.william.auld@gmail.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171107102003.1802-1-chris@chris-wilson.co.ukReviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      c16c4ba7
    • Chris Wilson's avatar
      drm/i915/selftests: Reduce the volume of the timeout message · b1a1e5d2
      Chris Wilson authored
      Originally it was anticipated that timeouts would be a rare event, and
      so merit a warning that the test was incomplete. However, for igt we
      keep the timeout low, and hitting the timeout is intentional. It no
      longer necessitates a warning, but to be expected.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Matthew Auld <matthew.auld@intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171110101110.12042-1-chris@chris-wilson.co.ukReviwed-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      b1a1e5d2
  2. 09 Nov, 2017 16 commits
  3. 08 Nov, 2017 10 commits
  4. 07 Nov, 2017 7 commits