1. 21 6月, 2017 1 次提交
  2. 03 6月, 2017 1 次提交
  3. 17 5月, 2017 3 次提交
    • C
      drm/i915: Don't force serialisation on marking up execlists irq posted · 955a4b89
      Chris Wilson 提交于
      Since we coordinate with the execlists tasklet using a locked schedule
      operation that ensures that after we set the engine->irq_posted we
      always have an invocation of the tasklet, we do not need to use a locked
      operation to set the engine->irq_posted itself.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170517121007.27224-12-chris@chris-wilson.co.uk
      955a4b89
    • C
      drm/i915: Stop inlining the execlists IRQ handler · 5d3d69d5
      Chris Wilson 提交于
      As the handler is now quite complex, involving a few atomics, the cost
      of the function preamble is negligible in comparison and so we should
      leave the function out-of-line for better I$.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NMika Kuoppala <mika.kuoppala@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170517121007.27224-11-chris@chris-wilson.co.uk
      5d3d69d5
    • C
      drm/i915: Don't mark an execlists context-switch when idle · a4b2b015
      Chris Wilson 提交于
      If we *know* that the engine is idle, i.e. we have not more contexts in
      flight, we can skip any spurious CSB idle interrupts. These spurious
      interrupts seem to arrive long after we assert that the engines are
      completely idle, triggering later assertions:
      
      [  178.896646] intel_engine_is_idle(bcs): interrupt not handled, irq_posted=2
      [  178.896655] ------------[ cut here ]------------
      [  178.896658] kernel BUG at drivers/gpu/drm/i915/intel_engine_cs.c:226!
      [  178.896661] invalid opcode: 0000 [#1] SMP
      [  178.896663] Modules linked in: i915(E) x86_pkg_temp_thermal(E) crct10dif_pclmul(E) crc32_pclmul(E) crc32c_intel(E) ghash_clmulni_intel(E) nls_ascii(E) nls_cp437(E) vfat(E) fat(E) intel_gtt(E) i2c_algo_bit(E) drm_kms_helper(E) syscopyarea(E) sysfillrect(E) sysimgblt(E) fb_sys_fops(E) aesni_intel(E) prime_numbers(E) evdev(E) aes_x86_64(E) drm(E) crypto_simd(E) cryptd(E) glue_helper(E) mei_me(E) mei(E) lpc_ich(E) efivars(E) mfd_core(E) battery(E) video(E) acpi_pad(E) button(E) tpm_tis(E) tpm_tis_core(E) tpm(E) autofs4(E) i2c_i801(E) fan(E) thermal(E) i2c_designware_platform(E) i2c_designware_core(E)
      [  178.896694] CPU: 1 PID: 522 Comm: gem_exec_whispe Tainted: G            E   4.11.0-rc5+ #14
      [  178.896702] task: ffff88040aba8d40 task.stack: ffffc900003f0000
      [  178.896722] RIP: 0010:intel_engine_init_global_seqno+0x1db/0x1f0 [i915]
      [  178.896725] RSP: 0018:ffffc900003f3ab0 EFLAGS: 00010246
      [  178.896728] RAX: 0000000000000000 RBX: ffff88040af54000 RCX: 0000000000000000
      [  178.896731] RDX: ffff88041ec933e0 RSI: ffff88041ec8cc48 RDI: ffff88041ec8cc48
      [  178.896734] RBP: ffffc900003f3ac8 R08: 0000000000000000 R09: 000000000000047d
      [  178.896736] R10: 0000000000000040 R11: ffff88040b344f80 R12: 0000000000000000
      [  178.896739] R13: ffff88040bce0000 R14: ffff88040bce52d8 R15: ffff88040bce0000
      [  178.896742] FS:  00007f2cccc2d8c0(0000) GS:ffff88041ec80000(0000) knlGS:0000000000000000
      [  178.896746] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  178.896749] CR2: 00007f41ddd8f000 CR3: 000000040bb03000 CR4: 00000000001406e0
      [  178.896752] Call Trace:
      [  178.896768]  reset_all_global_seqno.part.33+0x4e/0xd0 [i915]
      [  178.896782]  i915_gem_request_alloc+0x304/0x330 [i915]
      [  178.896795]  i915_gem_do_execbuffer+0x8a1/0x17d0 [i915]
      [  178.896799]  ? remove_wait_queue+0x48/0x50
      [  178.896812]  ? i915_wait_request+0x300/0x590 [i915]
      [  178.896816]  ? wake_up_q+0x70/0x70
      [  178.896819]  ? refcount_dec_and_test+0x11/0x20
      [  178.896823]  ? reservation_object_add_excl_fence+0xa5/0x100
      [  178.896835]  i915_gem_execbuffer2+0xab/0x1f0 [i915]
      [  178.896844]  drm_ioctl+0x1e6/0x460 [drm]
      [  178.896858]  ? i915_gem_execbuffer+0x260/0x260 [i915]
      [  178.896862]  ? dput+0xcf/0x250
      [  178.896866]  ? full_proxy_release+0x66/0x80
      [  178.896869]  ? mntput+0x1f/0x30
      [  178.896872]  do_vfs_ioctl+0x8f/0x5b0
      [  178.896875]  ? ____fput+0x9/0x10
      [  178.896878]  ? task_work_run+0x80/0xa0
      [  178.896881]  SyS_ioctl+0x3c/0x70
      [  178.896885]  entry_SYSCALL_64_fastpath+0x17/0x98
      [  178.896888] RIP: 0033:0x7f2ccb455ca7
      [  178.896890] RSP: 002b:00007ffcabec72d8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      [  178.896894] RAX: ffffffffffffffda RBX: 000055f897a44b90 RCX: 00007f2ccb455ca7
      [  178.896897] RDX: 00007ffcabec74a0 RSI: 0000000040406469 RDI: 0000000000000003
      [  178.896900] RBP: 00007f2ccb70a440 R08: 00007f2ccb70d0a4 R09: 0000000000000000
      [  178.896903] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
      [  178.896905] R13: 000055f89782d71a R14: 00007ffcabecf838 R15: 0000000000000003
      [  178.896908] Code: 00 31 d2 4c 89 ef 8d 70 48 41 ff 95 f8 06 00 00 e9 68 fe ff ff be 0f 00 00 00 48 c7 c7 48 dc 37 a0 e8 fa 33 d6 e0 e9 0b ff ff ff <0f> 0b 0f 0b 0f 0b 0f 0b 0f 1f 00 66 2e 0f 1f 84 00 00 00 00 00
      
      On the other hand, by ignoring the interrupt do we risk running out of
      space in CSB ring? Testing for a few hours suggests not, i.e. that we
      only seem to get the odd delayed CSB idle notification.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170517121007.27224-6-chris@chris-wilson.co.uk
      a4b2b015
  4. 10 5月, 2017 4 次提交
    • D
      drm/vblank: Lock down vblank->hwmode more · 5caa0fea
      Daniel Vetter 提交于
      In the previous patch we've implemented hwmode tracking a la i915 for
      the vblank timestamp calculations. But that was just the basic
      semantics, i915 has some nice sanity checks to make sure we keep
      getting this right. Move them over too.
      
      v2:
      - WARN_ON_ONCE to avoid excessive spam (Ville)
      - Really only WARN on atomic drivers.
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NNeil Armstrong <narmstrong@baylibre.com>
      Acked-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170509140329.24114-5-daniel.vetter@ffwll.ch
      5caa0fea
    • D
      drm/vblank: drop the mode argument from drm_calc_vbltimestamp_from_scanoutpos · 1bf6ad62
      Daniel Vetter 提交于
      If we restrict this helper to only kms drivers (which is the case) we
      can look up the correct mode easily ourselves. But it's a bit tricky:
      
      - All legacy drivers look at crtc->hwmode. But that is updated already
        at the beginning of the modeset helper, which means when we disable
        a pipe. Hence the final timestamps might be a bit off. But since
        this is an existing bug I'm not going to change it, but just try to
        be bug-for-bug compatible with the current code. This only applies
        to radeon&amdgpu.
      
      - i915 tries to get it perfect by updating crtc->hwmode when the pipe
        is off (i.e. vblank->enabled = false).
      
      - All other atomic drivers look at crtc->state->adjusted_mode. Those
        that look at state->requested_mode simply don't adjust their mode,
        so it's the same. That has two problems: Accessing crtc->state from
        interrupt handling code is unsafe, and it's updated before we shut
        down the pipe. For nonblocking modesets it's even worse.
      
      For atomic drivers try to implement what i915 does. To do that we add
      a new hwmode field to the vblank structure, and update it from
      drm_calc_timestamping_constants(). For atomic drivers that's called
      from the right spot by the helper library already, so all fine. But
      for safety let's enforce that.
      
      For legacy driver this function is only called at the end (oh the
      fun), which is broken, so again let's not bother and just stay
      bug-for-bug compatible.
      
      The  benefit is that we can use drm_calc_vbltimestamp_from_scanoutpos
      directly to implement ->get_vblank_timestamp in every driver, deleting
      a lot of code.
      
      v2: Completely new approach, trying to mimick the i915 solution.
      
      v3: Fixup kerneldoc.
      
      v4: Drop the WARN_ON to check that the vblank is off, atomic helpers
      currently unconditionally call this. Recomputing the same stuff should
      be harmless.
      
      v5: Fix typos and move misplaced hunks to the right patches (Neil).
      
      v6: Undo hunk movement (kbuild).
      
      Cc: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
      Cc: Eric Anholt <eric@anholt.net>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: linux-arm-msm@vger.kernel.org
      Cc: freedreno@lists.freedesktop.org
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Ben Skeggs <bskeggs@redhat.com>
      Reviewed-by: NNeil Armstrong <narmstrong@baylibre.com>
      Acked-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170509140329.24114-4-daniel.vetter@ffwll.ch
      1bf6ad62
    • D
      drm/vblank: Switch to bool in_vblank_irq in get_vblank_timestamp · 3fcdcb27
      Daniel Vetter 提交于
      It's overkill to have a flag parameter which is essentially used just
      as a boolean. This takes care of core + adjusting drivers.
      
      Adjusting the scanout position callback is a bit harder, since radeon
      also supplies it's own driver-private flags in there.
      
      v2: Fixup misplaced hunks (Neil).
      
      v3: kbuild says v1 was better ...
      
      Cc: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
      Cc: Eric Anholt <eric@anholt.net>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: linux-arm-msm@vger.kernel.org
      Cc: freedreno@lists.freedesktop.org
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Ben Skeggs <bskeggs@redhat.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NNeil Armstrong <narmstrong@baylibre.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170509140329.24114-2-daniel.vetter@ffwll.ch
      3fcdcb27
    • D
      drm/vblank: Switch drm_driver->get_vblank_timestamp to return a bool · d673c02c
      Daniel Vetter 提交于
      There's really no reason for anything more:
      - Calling this while the crtc vblank stuff isn't set up is a driver
        bug. Those places alrready DRM_ERROR.
      - Calling this when the crtc is off is either a driver bug (calling
        drm_crtc_handle_vblank at the wrong time) or a core bug (for
        anything else). Again, we DRM_ERROR.
      - EINVAL is checked at higher levels already, and if we'd use struct
        drm_crtc * instead of (dev, pipe) it would be real obvious that
        those are again core bugs.
      
      The only valid failure mode is crap hardware that couldn't sample a
      useful timestamp, to ask the core to just grab a not-so-accurate
      timestamp. Bool is perfectly fine for that.
      
      v2: Also fix up the one caller, I lost that in the shuffling (Jani).
      
      v3: Fixup commit message (Neil).
      
      Cc: Jani Nikula <jani.nikula@linux.intel.com>
      Cc: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
      Cc: Eric Anholt <eric@anholt.net>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: linux-arm-msm@vger.kernel.org
      Cc: freedreno@lists.freedesktop.org
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Ben Skeggs <bskeggs@redhat.com>
      Reviewed-by: NNeil Armstrong <narmstrong@baylibre.com>
      Acked-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170509140329.24114-1-daniel.vetter@ffwll.ch
      d673c02c
  5. 03 5月, 2017 1 次提交
    • V
      drm/i915: Stop pretending to mask/unmask LPE audio interrupts · ebf5f921
      Ville Syrjälä 提交于
      vlv_display_irq_postinstall() enables the LPE audio interrupts
      regardless of whether the LPE audio irq chip has masked/unmasked
      them. Also the irqchip masking/unmasking doesn't consider the state
      of the display power well or the device, and hence just leads to
      dmesg spew when it tries to access the hardware while it's powered
      down.
      
      If the current way works, then we don't need to do anything in the
      mask/unmask hooks. If it doesn't work, well, then we'd need to properly
      track whether the irqchip has masked/unmasked the interrupts when
      we enable display interrupts. And the mask/unmask hooks would need
      to check whether display interrupts are even enabled before frobbing
      with he registers.
      
      So let's just assume the current way works and neuter the mask/unmask
      hooks. Also clean up vlv_display_irq_postinstall() a bit and stop
      it from trying to unmask/enable the LPE C interrupt on VLV since it
      doesn't exist.
      
      Cc: Takashi Iwai <tiwai@suse.de>
      Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170427160231.13337-4-ville.syrjala@linux.intel.comReviewed-by: NTakashi Iwai <tiwai@suse.de>
      ebf5f921
  6. 02 5月, 2017 1 次提交
  7. 26 4月, 2017 1 次提交
  8. 18 4月, 2017 1 次提交
  9. 23 3月, 2017 1 次提交
  10. 17 3月, 2017 1 次提交
  11. 16 3月, 2017 4 次提交
  12. 15 3月, 2017 1 次提交
  13. 14 3月, 2017 4 次提交
  14. 13 3月, 2017 2 次提交
  15. 12 3月, 2017 2 次提交
  16. 10 3月, 2017 3 次提交
  17. 09 3月, 2017 1 次提交
  18. 04 3月, 2017 1 次提交
  19. 03 3月, 2017 2 次提交
    • C
      drm/i915: Take reference for signaling the request from hardirq · 24754d75
      Chris Wilson 提交于
      Being inside a spinlock signaling that the hardware just completed a
      request doesn't prevent a second thread already spotting that the
      request is complete, freeing it and reallocating it! The code currently
      tries to prevent this using RCU -- but that only prevents the request
      from being freed, it doesn't prevent us from reallocating it - that
      requires us to take a reference.
      
      [  206.922985] BUG: spinlock already unlocked on CPU#4, gem_exec_parall/7796
      [  206.922994]  lock: 0xffff8801c6047120, .magic: dead4ead, .owner: <none>/-1, .owner_cpu: -1
      [  206.923000] CPU: 4 PID: 7796 Comm: gem_exec_parall Not tainted 4.10.0-CI-Patchwork_4008+ #1
      [  206.923006] Hardware name: System manufacturer System Product Name/Z170M-PLUS, BIOS 1805 06/20/2016
      [  206.923012] Call Trace:
      [  206.923014]  <IRQ>
      [  206.923019]  dump_stack+0x67/0x92
      [  206.923023]  spin_dump+0x73/0xc0
      [  206.923027]  do_raw_spin_unlock+0x79/0xb0
      [  206.923031]  _raw_spin_unlock_irqrestore+0x27/0x60
      [  206.923042]  dma_fence_signal+0x160/0x230
      [  206.923060]  notify_ring+0xae/0x2e0 [i915]
      [  206.923073]  ? ibx_hpd_irq_handler+0xc0/0xc0 [i915]
      [  206.923086]  gen8_gt_irq_handler+0x219/0x290 [i915]
      [  206.923100]  gen8_irq_handler+0x8e/0x6b0 [i915]
      [  206.923105]  __handle_irq_event_percpu+0x58/0x370
      [  206.923109]  handle_irq_event_percpu+0x1e/0x50
      [  206.923113]  handle_irq_event+0x34/0x60
      [  206.923117]  handle_edge_irq+0xbe/0x150
      [  206.923122]  handle_irq+0x15/0x20
      [  206.923126]  do_IRQ+0x63/0x130
      [  206.923142]  ? i915_mutex_lock_interruptible+0x39/0x140 [i915]
      [  206.923148]  common_interrupt+0x90/0x90
      [  206.923153] RIP: 0010:osq_lock+0x77/0x110
      [  206.923157] RSP: 0018:ffffc90001cabaa0 EFLAGS: 00000246 ORIG_RAX: ffffffffffffff6e
      [  206.923164] RAX: 0000000000000000 RBX: ffff880236d1abc0 RCX: ffff8801ef642fc0
      [  206.923169] RDX: ffff8801ef6427c0 RSI: ffffffff81c6e7fd RDI: ffffffff81c7c848
      [  206.923175] RBP: ffffc90001cabab8 R08: 00000000692bb19b R09: 08c1493200000000
      [  206.923180] R10: 0000000000000001 R11: 0000000000000001 R12: ffff880236cdabc0
      [  206.923185] R13: ffff8802207f00b0 R14: ffffffffa00b7cd9 R15: ffff8802207f0070
      [  206.923191]  </IRQ>
      [  206.923206]  ? i915_mutex_lock_interruptible+0x39/0x140 [i915]
      [  206.923213]  __mutex_lock+0x649/0x990
      [  206.923217]  ? __mutex_lock+0xb0/0x990
      [  206.923221]  ? _raw_spin_unlock+0x2c/0x50
      [  206.923226]  ? __pm_runtime_resume+0x56/0x80
      [  206.923242]  ? i915_mutex_lock_interruptible+0x39/0x140 [i915]
      [  206.923249]  mutex_lock_interruptible_nested+0x16/0x20
      [  206.923264]  i915_mutex_lock_interruptible+0x39/0x140 [i915]
      [  206.923270]  ? __pm_runtime_resume+0x56/0x80
      [  206.923285]  i915_gem_do_execbuffer.isra.15+0x442/0x1d10 [i915]
      [  206.923291]  ? __lock_acquire+0x449/0x1b50
      [  206.923296]  ? __might_fault+0x3e/0x90
      [  206.923301]  ? __might_fault+0x87/0x90
      [  206.923305]  ? __might_fault+0x3e/0x90
      [  206.923320]  i915_gem_execbuffer2+0xb5/0x220 [i915]
      [  206.923327]  drm_ioctl+0x200/0x450
      [  206.923341]  ? i915_gem_execbuffer+0x330/0x330 [i915]
      [  206.923348]  do_vfs_ioctl+0x90/0x6e0
      [  206.923352]  ? __fget+0x108/0x200
      [  206.923356]  ? expand_files+0x2b0/0x2b0
      [  206.923361]  SyS_ioctl+0x3c/0x70
      [  206.923365]  entry_SYSCALL_64_fastpath+0x1c/0xb1
      [  206.923369] RIP: 0033:0x7fdd75fc6357
      [  206.923373] RSP: 002b:00007fdd20e59bf8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      [  206.923380] RAX: ffffffffffffffda RBX: ffffffff81481ff3 RCX: 00007fdd75fc6357
      [  206.923385] RDX: 00007fdd20e59c70 RSI: 0000000040406469 RDI: 0000000000000003
      [  206.923390] RBP: ffffc90001cabf88 R08: 0000000000000040 R09: 00000000000003f7
      [  206.923396] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
      [  206.923401] R13: 0000000000000003 R14: 0000000040406469 R15: 0000000001cf9cb0
      [  206.923408]  ? __this_cpu_preempt_check+0x13/0x20
      
      Fixes: 56299fb7 ("drm/i915: Signal first fence from irq handler if complete")
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100051Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170303144557.4815-1-chris@chris-wilson.co.ukReviewed-by: NMika Kuoppala <mika.kuoppala@linux.intel.com>
      24754d75
    • V
      drm/i915: Add plane update/disable tracepoints · 72259536
      Ville Syrjälä 提交于
      Add tracepoints for plane programming. The tracepoints will dump
      the frame and scanline counters, so this can be used to verify eg. that
      the plane gets reprogrammed at the right time with respect to watermark
      programming (if we have appropriate tracepoints for that as well).
      
      v2: Rebase due to legacy cursor changes
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170302171508.1666-16-ville.syrjala@linux.intel.com
      72259536
  20. 02 3月, 2017 1 次提交
  21. 28 2月, 2017 2 次提交
    • C
      drm/i915: Delay disabling the user interrupt for breadcrumbs · 67b807a8
      Chris Wilson 提交于
      A significant cost in setting up a wait is the overhead of enabling the
      interrupt. As we disable the interrupt whenever the queue of waiters is
      empty, if we are frequently waiting on alternating batches, we end up
      re-enabling the interrupt on a frequent basis. We do want to disable the
      interrupt during normal operations as under high load it may add several
      thousand interrupts/s - we have been known in the past to occupy whole
      cores with our interrupt handler after accidentally leaving user
      interrupts enabled. As a compromise, leave the interrupt enabled until
      the next IRQ, or the system is idle. This gives a small window for a
      waiter to keep the interrupt active and not be delayed by having to
      re-enable the interrupt.
      
      v2: Restore hangcheck/missed-irq detection for continuations
      v3: Be more careful restoring the hangcheck timer after reset
      v4: Be more careful restoring the fake irq after reset (if required!)
      v5: Redo changes to intel_engine_wakeup()
      v6: Factor out __intel_engine_wakeup()
      v7: Improve commentary for declaring a missed wakeup
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170227205850.2828-4-chris@chris-wilson.co.uk
      67b807a8
    • C
      drm/i915: Signal first fence from irq handler if complete · 56299fb7
      Chris Wilson 提交于
      As execlists and other non-semaphore multi-engine devices coordinate
      between engines using interrupts, we can shave off a few 10s of
      microsecond of scheduling latency by doing the fence signaling from the
      interrupt as opposed to a RT kthread. (Realistically the delay adds
      about 1% to an individual cross-engine workload.) We only signal the
      first fence in order to limit the amount of work we move into the
      interrupt handler. We also have to remember that our breadcrumbs may be
      unordered with respect to the interrupt and so we still require the
      waiter process to perform some heavyweight coherency fixups, as well as
      traversing the tree of waiters.
      
      v2: No need for early exit in irq handler - it breaks the flow between
      patches and prevents the tracepoint
      v3: Restore rcu hold across irq signaling of request
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170227205850.2828-2-chris@chris-wilson.co.uk
      56299fb7
  22. 21 2月, 2017 1 次提交
  23. 17 2月, 2017 1 次提交