1. 05 4月, 2017 1 次提交
  2. 30 3月, 2017 1 次提交
  3. 29 3月, 2017 5 次提交
  4. 26 3月, 2017 1 次提交
  5. 16 3月, 2017 2 次提交
    • C
      drm: Skip the waitqueue setup for vblank queries · 82c8e025
      Chris Wilson 提交于
      Avoid adding to the waitqueue and reprobing the current vblank if the
      caller is only querying the current vblank sequence and timestamp, where
      we know that the wait would return immediately.
      
      v2: Add CRTC identifier to debug messages
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Daniel Vetter <daniel@ffwll.ch>
      Cc: Michel Dänzer <michel@daenzer.net>
      Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
      Cc: Dave Airlie <airlied@redhat.com>,
      Cc: Mario Kleiner <mario.kleiner.de@gmail.com>
      Reviewed-by: NMichel Dänzer <michel@daenzer.net>
      Reviewed-and-tested-by: NMario Kleiner <mario.kleiner.de@gmail.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170315204027.20160-2-chris@chris-wilson.co.uk
      82c8e025
    • C
      drm: Defer disabling the vblank IRQ until the next interrupt (for instant-off) · 608b2050
      Chris Wilson 提交于
      On vblank instant-off systems, we can get into a situation where the cost
      of enabling and disabling the vblank IRQ around a drmWaitVblank query
      dominates. And with the advent of even deeper hardware sleep state,
      touching registers becomes ever more expensive.  However, we know that if
      the user wants the current vblank counter, they are also very likely to
      immediately queue a vblank wait and so we can keep the interrupt around
      and only turn it off if we have no further vblank requests queued within
      the interrupt interval.
      
      After vblank event delivery, this patch adds a shadow of one vblank where
      the interrupt is kept alive for the user to query and queue another vblank
      event. Similarly, if the user is using blocking drmWaitVblanks, the
      interrupt will be disabled on the IRQ following the wait completion.
      However, if the user is simply querying the current vblank counter and
      timestamp, the interrupt will be disabled after every IRQ and the user
      will enabled it again on the first query following the IRQ.
      
      v2: Mario Kleiner -
      After testing this, one more thing that would make sense is to move
      the disable block at the end of drm_handle_vblank() instead of at the
      top.
      
      Turns out that if high precision timestaming is disabled or doesn't
      work for some reason (as can be simulated by echo 0 >
      /sys/module/drm/parameters/timestamp_precision_usec), then with your
      delayed disable code at its current place, the vblank counter won't
      increment anymore at all for instant queries, ie. with your other
      "instant query" patches. Clients which repeatedly query the counter
      and wait for it to progress will simply hang, spinning in an endless
      query loop. There's that comment in vblank_disable_and_save:
      
      "* Skip this step if there isn't any high precision timestamp
       * available. In that case we can't account for this and just
       * hope for the best.
       */
      
      With the disable happening after leading edge of vblank (== hw counter
      increment already happened) but before the vblank counter/timestamp
      handling in drm_handle_vblank, that step is needed to keep the counter
      progressing, so skipping it is bad.
      
      Now without high precision timestamping support, a kms driver must not
      set dev->vblank_disable_immediate = true, as this would cause problems
      for clients, so this shouldn't matter, but it would be good to still
      make this robust against a future kms driver which might have
      unreliable high precision timestamping, e.g., high precision
      timestamping that intermittently doesn't work.
      
      v3: Patch before coffee needs extra coffee.
      
      Testcase: igt/kms_vblank
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Daniel Vetter <daniel@ffwll.ch>
      Cc: Michel Dänzer <michel@daenzer.net>
      Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
      Cc: Dave Airlie <airlied@redhat.com>,
      Cc: Mario Kleiner <mario.kleiner.de@gmail.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170315204027.20160-1-chris@chris-wilson.co.uk
      608b2050
  6. 14 3月, 2017 1 次提交
  7. 08 2月, 2017 2 次提交
  8. 26 1月, 2017 1 次提交
  9. 25 1月, 2017 1 次提交
  10. 30 12月, 2016 1 次提交
  11. 18 12月, 2016 1 次提交
  12. 16 11月, 2016 3 次提交
  13. 18 10月, 2016 1 次提交
  14. 04 10月, 2016 1 次提交
  15. 16 8月, 2016 1 次提交
  16. 09 8月, 2016 1 次提交
  17. 08 8月, 2016 2 次提交
  18. 19 7月, 2016 1 次提交
    • D
      drm: Extract&Document drm_irq.h · 34a67dd7
      Daniel Vetter 提交于
      The drm_irq docs want one function from drmP.h, but that one is a
      serious mess. Extract it, and while at it improve the docs a bit.
      There's a bit a header loop issue since core data structures like
      drm_device and drm_driver aren't in their own headers yet, which means
      the drm_irq.h include in drmP.h needs to be in just the right spot :(
      
      Also noticed that drm_vblank_crtc->last_wait is entirely unused,
      remove it.
      
      v2: git add drm_irq.h ...
      Acked-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      34a67dd7
  19. 12 7月, 2016 2 次提交
  20. 27 6月, 2016 1 次提交
  21. 21 6月, 2016 1 次提交
    • M
      drm: fix send_vblank_event use-after-free error · c001da4f
      Matthew Auld 提交于
      The drm_pending_event can be freed by drm_send_event_locked, as a
      result we should call trace_drm_vblank_event_delivered before this
      to avoid hitting a user-after-free error when accessing the pid member:
      
      [  378.438497] BUG: KASAN: use-after-free in send_vblank_event+0xf0/0x310 [drm] at addr ffff8801ac7e50a0
      [  378.438500] Read of size 4 by task Xorg/1562
      [  378.438501] =============================================================================
      [  378.438504] BUG kmalloc-128 (Tainted: G    B          ): kasan: bad access detected
      [  378.438506] -----------------------------------------------------------------------------
      
      [  378.438509] INFO: Freed in 0x10001309c age=18446737369265680575 cpu=0 pid=0
      [  378.438541]  drm_send_event_locked+0x207/0x2f0 [drm]
      [  378.438544]  __slab_free+0x24c/0x650
      [  378.438546]  kfree+0x3a2/0x760
      [  378.438578]  drm_send_event_locked+0x207/0x2f0 [drm]
      [  378.438610]  send_vblank_event+0xb7/0x310 [drm]
      [  378.438643]  drm_crtc_send_vblank_event+0x130/0x1f0 [drm]
      [  378.438722]  intel_atomic_commit_tail+0x23b5/0x53f0 [i915]
      [  378.438802]  intel_atomic_commit+0xbae/0x12f0 [i915]
      [  378.438839]  drm_atomic_commit+0xb0/0x120 [drm]
      [  378.438855]  drm_atomic_helper_connector_dpms+0x339/0x5d0 [drm_kms_helper]
      [  378.438891]  drm_mode_obj_set_property_ioctl+0x8f1/0xcc0 [drm]
      [  378.438927]  drm_mode_connector_property_set_ioctl+0xf3/0x170 [drm]
      [  378.438959]  drm_ioctl+0x2d7/0xae0 [drm]
      [  378.438962]  do_vfs_ioctl+0x1c9/0x1280
      [  378.438964]  SyS_ioctl+0x79/0x90
      [  378.438967]  entry_SYSCALL_64_fastpath+0x1a/0xa4
      
      Cc: dri-devel@lists.freedesktop.org
      Cc: Daniel Vetter <daniel.vetter@intel.com>
      Signed-off-by: NMatthew Auld <matthew.auld@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/1466440966-5410-1-git-send-email-matthew.auld@intel.com
      c001da4f
  22. 14 6月, 2016 3 次提交
  23. 04 6月, 2016 1 次提交
  24. 25 5月, 2016 1 次提交
  25. 21 5月, 2016 1 次提交
    • D
      drm: Nuke ->vblank_disable_allowed · fcee5906
      Daniel Vetter 提交于
      This was added in
      
      commit 0a3e67a4
      Author: Jesse Barnes <jbarnes@virtuousgeek.org>
      Date:   Tue Sep 30 12:14:26 2008 -0700
      
          drm: Rework vblank-wait handling to allow interrupt reduction.
      
      to stay backwards-compatible with old UMS code that didn't even tell
      the kernel when it did a modeset, so that the kernel could
      save/restore vblank counters. At worst this means vblanks will be
      somewhat funky on a setup that very likely no one still runs.
      
      So let's just nuke it.
      
      Plan B would be to set it unconditionally in drm_vblank_init for kms
      drivers, instead of in each driver separately. So if this patch breaks
      anything please only restore the hunks in drmP.h and drm_irq.c, plus
      add a check for DRIVER_MODESET in drm_vblank_init.
      
      Stumbled over this in a discussion on irc with Chris.
      
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: Liviu Dudau <liviu.dudau@arm.com>
      Cc: Russell King <rmk+kernel@arm.linux.org.uk>
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Cc: Eric Anholt <eric@anholt.net>
      Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
      Cc: Inki Dae <inki.dae@samsung.com>
      Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
      Cc: Mark Yao <mark.yao@rock-chips.com>
      Cc: Sascha Hauer <s.hauer@pengutronix.de>
      Cc: Philipp Zabel <p.zabel@pengutronix.de>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Reviewed-by: NAlex Deucher <alexander.deucher@amd.com>
      Acked-by: NLiviu Dudau <Liviu.Dudau@arm.com>
      Acked-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      Tested-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      fcee5906
  26. 19 5月, 2016 1 次提交
    • M
      drm/core: Add drm_accurate_vblank_count, v5. · af61d5ce
      Maarten Lankhorst 提交于
      This function is useful for gen2 intel devices which have no frame
      counter, but need a way to determine the current vblank count without
      racing with the vblank interrupt handler.
      
      intel_pipe_update_start checks if no vblank interrupt will occur
      during vblank evasion, but cannot check whether the vblank handler has
      run to completion. This function uses the timestamps to determine
      when the last vblank has happened, and interpolates from there.
      
      Changes since v1:
      - Take vblank_time_lock and don't use drm_vblank_count_and_time.
      Changes since v2:
      - Don't return time of last vblank.
      Changes since v3:
      - Change pipe to unsigned int. (Ville)
      - Remove unused documentation for tv_ret. (kbuild)
      Changes since v4:
      - Add warning to docs when the function is useful.
      - Add a WARN_ON when get_vblank_timestamp is unavailable.
      - Use drm_vblank_count.
      
      Cc: Mario Kleiner <mario.kleiner.de@gmail.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> #v4
      Acked-by: David Airlie <airlied@linux.ie> #irc, v4
      Link: http://patchwork.freedesktop.org/patch/msgid/1463490484-19540-2-git-send-email-maarten.lankhorst@linux.intel.comReviewed-by: NMario Kleiner <mario.kleiner.de@gmail.com>
      af61d5ce
  27. 30 3月, 2016 1 次提交
  28. 17 2月, 2016 1 次提交
    • M
      drm: Fix treatment of drm_vblank_offdelay in drm_vblank_on() (v2) · bb74fc1b
      Mario Kleiner 提交于
      drm_vblank_offdelay can have three different types of values:
      
      < 0 is to be always treated the same as dev->vblank_disable_immediate
      = 0 is to be treated as "never disable vblanks"
      > 0 is to be treated as disable immediate if kms driver wants it
          that way via dev->vblank_disable_immediate. Otherwise it is
          a disable timeout in msecs.
      
      This got broken in Linux 3.18+ for the implementation of
      drm_vblank_on. If the user specified a value of zero which should
      always reenable vblank irqs in this function, a kms driver could
      override the users choice by setting vblank_disable_immediate
      to true. This patch fixes the regression and keeps the user in
      control.
      
      v2: Only reenable vblank if there are clients left or the user
          requested to "never disable vblanks" via offdelay 0. Enabling
          vblanks even in the "delayed disable" case (offdelay > 0) was
          specifically added by Ville in commit cd19e52a
          ("drm: Kick start vblank interrupts at drm_vblank_on()"),
          but after discussion it turns out that this was done by accident.
      
          Citing Ville: "I think it just ended up as a mess due to changing
          some of the semantics of offdelay<0 vs. offdelay==0 vs.
          disable_immediate during the review of the series. So yeah, given
          how drm_vblank_put() works now, I'd just make this check for
          offdelay==0."
      Signed-off-by: NMario Kleiner <mario.kleiner.de@gmail.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      
      Cc: <stable@vger.kernel.org> # 3.18+
      Cc: michel@daenzer.net
      Cc: vbabka@suse.cz
      Cc: ville.syrjala@linux.intel.com
      Cc: daniel.vetter@ffwll.ch
      Cc: dri-devel@lists.freedesktop.org
      Cc: alexander.deucher@amd.com
      Cc: christian.koenig@amd.com
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      bb74fc1b