1. 19 6月, 2014 1 次提交
    • O
      drm/i915: Remove ctx->last_ring · 14d8ec54
      Oscar Mateo 提交于
      The original comment that introduced it said:
      
      commit 0009e46c
      Author: Ben Widawsky <ben@bwidawsk.net>
      Date:   Fri Dec 6 14:11:02 2013 -0800
      
          drm/i915: Track which ring a context ran on
      
          Previously we dropped the association of a context to a ring. It is
          however very important to know which ring a context ran on (we could
          have reused the other member, but I was nitpicky).
      
          This is very important when we switch address spaces, which unlike
          context objects, do change per ring.
      
          As an example, if we have:
      
                  RCS   BCS
          ctx            A
          ctx      A
          ctx      B
          ctx            B
      
          Without tracking the last ring B ran on, we wouldn't know to switch the
          address space on BCS in the last row.
      
      But this is not really true, because we are already checking to != from (with
      "from" being = ring->last_context) and that should be enough to make sure we
      switch to the right address space.
      
      We would have a problem if we switched the context object for every ring (since
      then we would fail to do it in some situations) but we only switch it for the
      render ring, so we don't care.
      Signed-off-by: NOscar Mateo <oscar.mateo@intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      14d8ec54
  2. 18 6月, 2014 8 次提交
    • O
      drm/i915/chv: Ack interrupts before handling them (CHV) · 27b6c122
      Oscar Mateo 提交于
      Otherwise, we might receive a new interrupt before we have time to
      ack the first one, eventually missing it.
      
      Without an atomic XCHG operation with mmio space, this patch merely
      reduces the window in which we can miss an interrupt (especially when
      you consider how heavyweight the I915_READ/I915_WRITE operations are).
      
      Notice that, before clearing a port-sourced interrupt in the IIR, the
      corresponding interrupt source status in the PORT_HOTPLUG_STAT must be
      cleared.
      
      Spotted by Bob Beckett <robert.beckett@intel.com>.
      
      v2:
      - Add warning to commit message and comments to the code as per Chris
        Wilson's request.
      - Imre Deak pointed out that the pipe underrun flag might not be signaled
        in IIR, so do not make valleyview_pipestat_irq_handler depend on it.
      
      v3: Improve the source code comment.
      Signed-off-by: NOscar Mateo <oscar.mateo@intel.com>
      Reviewed-by: NImre Deak <imre.deak@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      27b6c122
    • O
      drm/i915/bdw: Ack interrupts before handling them (GEN8) · 38cc46d7
      Oscar Mateo 提交于
      Otherwise, we might receive a new interrupt before we have time to
      ack the first one, eventually missing it.
      
      The right order should be:
      
      1 - Disable Master Interrupt Control.
      2 - Find the category of interrupt that is pending.
      3 - Find the source(s) of the interrupt and clear the Interrupt Identity bits (IIR)
      4 - Process the interrupt(s) that had bits set in the IIRs.
      5 - Re-enable Master Interrupt Control.
      
      Without an atomic XCHG operation with mmio space, the above merely reduces the window
      in which we can miss an interrupt (especially when you consider how heavyweight the
      I915_READ/I915_WRITE operations are).
      
      Spotted by Bob Beckett <robert.beckett@intel.com>.
      
      v2: Add warning to commit message and comments to the code as per Chris Wilson's request.
      
      v3: Improve the source code comment.
      Signed-off-by: NOscar Mateo <oscar.mateo@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      38cc46d7
    • O
      drm/i915/vlv: Ack interrupts before handling them (VLV) · 3ff60f89
      Oscar Mateo 提交于
      Otherwise, we might receive a new interrupt before we have time to
      ack the first one, eventually missing it.
      
      Without an atomic XCHG operation with mmio space, this patch merely
      reduces the window in which we can miss an interrupt (especially when
      you consider how heavyweight the I915_READ/I915_WRITE operations are).
      
      Notice that, before clearing a port-sourced interrupt in the IIR, the
      corresponding interrupt source status in the PORT_HOTPLUG_STAT must be
      cleared.
      
      Spotted by Bob Beckett <robert.beckett@intel.com>.
      
      v2:
      - Reorder the IIR clearing to reduce the window even further.
      - Add warning to commit message and comments to the code as per Chris
        Wilson's request.
      - Imre Deak pointed out that the pipe underrun flag might not be signaled
        in IIR, so do not make valleyview_pipestat_irq_handler depend on it.
      
      v3: Improve the source code comment.
      Signed-off-by: NOscar Mateo <oscar.mateo@intel.com>
      Reviewed-by: NImre Deak <imre.deak@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      3ff60f89
    • O
      drm/i915: Ack interrupts before handling them (GEN5 - GEN7) · 72c90f62
      Oscar Mateo 提交于
      Otherwise, we might receive a new interrupt before we have time to ack the first
      one, eventually missing it.
      
      According to BSPec, the right order should be:
      
      1 - Disable Master Interrupt Control.
      2 - Find the source(s) of the interrupt.
      3 - Clear the Interrupt Identity bits (IIR).
      4 - Process the interrupt(s) that had bits set in the IIRs.
      5 - Re-enable Master Interrupt Control.
      
      Without an atomic XCHG operation with mmio space, the above merely reduces the window
      in which we can miss an interrupt (especially when you consider how heavyweight the
      I915_READ/I915_WRITE operations are).
      
      We maintain the "disable SDE interrupts when handling" hack since apparently it works.
      
      Spotted by Bob Beckett <robert.beckett@intel.com>.
      
      v2: Add warning to commit message and comments to the code as per Chris Wilson's request.
      v3: Improve the source comments.
      Signed-off-by: NOscar Mateo <oscar.mateo@intel.com>
      Reviewed-by: NImre Deak <imre.deak@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      72c90f62
    • D
      drm/i915: Don't BUG_ON in i915_gem_obj_offset · f25748ea
      Daniel Vetter 提交于
      A WARN_ON is perfectly fine.
      
      The BUG in here seems to be the cause behind hard-hangs when I cat the
      i915_gem_pageflip debugfs file (which calls this from an irq
      spinlock). But only while running a full igt run after a while. I
      still need to root cause the underlying issue.
      
      I'll also start reject patches which add new BUG_ON but don't come
      with a really good justification for it. The general rule really
      should be to just WARN and hope the driver survives for long enough.
      
      v2: Make the WARN a bit more useful per Chris' suggestion.
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      f25748ea
    • D
      drm/i915: Grab dev->struct_mutex in i915_gem_pageflip_info · 8a270ebf
      Daniel Vetter 提交于
      We could walk of a bad list otherwise when someone concurrently
      unbinds stuff for fun.
      
      I've suspected this as the root-cause behind seemingly inconsistent
      state, but alas it's not.
      Acked-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      8a270ebf
    • B
      drm/i915: Add some L3 registers to the parser whitelist · c9224faa
      Brad Volkin 提交于
      Beignet needs these in order to program the L3 cache config for
      OpenCL workloads, particularly when using SLM.
      Signed-off-by: NBrad Volkin <bradley.d.volkin@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      c9224faa
    • V
      drm/i915: Don't prefault the entire obj if the vma is smaller · beff0d0f
      Ville Syrjälä 提交于
      Take the minimum of the object size and the vma size and prefault
      only that much. Avoids a SIGBUS when mmapping only a portion of the
      object.
      
      Prefaulting was introduced here:
       commit b90b91d8
       Author: Chris Wilson <chris@chris-wilson.co.uk>
       Date:   Tue Jun 10 12:14:40 2014 +0100
      
          drm/i915: Prefault the entire object on first page fault
      
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Testcase: igt/gem_mmap/short-mmap
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      beff0d0f
  3. 17 6月, 2014 10 次提交
  4. 14 6月, 2014 4 次提交
  5. 13 6月, 2014 17 次提交
    • V
      drm/i915: Fix __user sparse warning · d593d992
      Ville Syrjälä 提交于
      CHECK   linux/drivers/gpu/drm/i915/i915_gem_execbuffer.c
      linux/drivers/gpu/drm/i915/i915_gem_execbuffer.c:1529:47: warning: incorrect type in initializer (different address spaces)
      linux/drivers/gpu/drm/i915/i915_gem_execbuffer.c:1529:47:    expected struct drm_i915_gem_exec_object2 *user_exec_list
      linux/drivers/gpu/drm/i915/i915_gem_execbuffer.c:1529:47:    got void [noderef] <asn:1>*
      linux/drivers/gpu/drm/i915/i915_gem_execbuffer.c:1533:61: warning: incorrect type in argument 1 (different address spaces)
      linux/drivers/gpu/drm/i915/i915_gem_execbuffer.c:1533:61:    expected void [noderef] <asn:1>*dst
      linux/drivers/gpu/drm/i915/i915_gem_execbuffer.c:1533:61:    got unsigned long long *<noident>
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      d593d992
    • V
      drm/i915: Print PCI revision in i915_dump_device_info() · 19c656a1
      Ville Syrjälä 提交于
      Knowing the device stepping may be crucial in analyzing problems. Since
      we always ask bug reporters for dmegs with drm.debug=0xe (or something)
      it would be nice if the PCI revision is already included in the dump.
      Avoids having to ask for lspci output as well.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      19c656a1
    • V
      drm/i915: Add locking around framebuffer_references-- · 60a5ca01
      Ville Syrjälä 提交于
      obj->framebuffer_references isn't an atomic_t so the decrement needs to
      be protected by some lock. struct_mutex seems like the appropriate lock
      here, and we may already take it for the obj unref anyway.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      60a5ca01
    • R
      drm/i915: PSR HSW: update after enabling sprite. · 642f9bb5
      Rodrigo Vivi 提交于
      On the current structure HSW doesn't support PSR with sprites enabled
      but sprites can be enabled after PSR was enabled what would cause
      user to miss screen updates.
      
      v2: move it to update_plane.
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NVijay Purushothaman <vijay.a.purushothaman@intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      642f9bb5
    • R
      drm/i915: BDW PSR: Remove DDIA limitation for Broadwell. · 0e0ae652
      Rodrigo Vivi 提交于
      Broadwell has a PSR per transcoder, where DDIA supports
      link disable and link standby modes while other
      transcoders only support link standby.
      Reviewed-by: NVijay Purushothaman <vijay.a.purushothaman@intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      0e0ae652
    • R
    • R
      drm/i915: BDW PSR: Add single frame update support. · 82c56254
      Rodrigo Vivi 提交于
      When link is in stand by and PSR exit is triggered by a primary or sprite
      plane flip this mode allows only one single updated frame to be send to
      display than get back to PSR immediately.
      Reviewed-by: NVijay Purushothaman <vijay.a.purushothaman@intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      82c56254
    • R
      drm/i915: Do not try to enable PSR when Panel doesn't suport it. · 34eb7579
      Rodrigo Vivi 提交于
      Also do not cache aux info. That info could be related to another panel.
      Reviewed-by: NVijay Purushothaman <vijay.a.purushothaman@intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      34eb7579
    • R
      drm/i915: Don't let update_psr function actually enable PSR. · 16487254
      Rodrigo Vivi 提交于
      Being more conservative by enabling PSR only on psr_enable function.
      Reviewed-by: NVijay Purushothaman <vijay.a.purushothaman@intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      16487254
    • R
      drm/i915: Use HAS_PSR to avoid unecessary interactions. · 4704c573
      Rodrigo Vivi 提交于
      Let's be more conservative and protect platforms that don't
      support PSR from unecessary interactions.
      Reviewed-by: NVijay Purushothaman <vijay.a.purushothaman@intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      4704c573
    • M
      drm/i915: Switch to unified plane cursor handling (v4) · 3d7d6510
      Matt Roper 提交于
      The DRM core will translate calls to legacy cursor ioctls into universal
      cursor calls automatically, so there's no need to maintain the legacy
      cursor support.  This greatly simplifies the transition since we don't
      have to handle reference counting differently depending on which cursor
      interface was called.
      
      The aim here is to transition to the universal plane interface with
      minimal code change.  There's a lot of cleanup that can be done (e.g.,
      using state stored in crtc->cursor->fb rather than intel_crtc) that is
      left to future patches.
      
      v4:
       - Drop drm_gem_object_unreference() that is no longer needed now that
         we receive the GEM obj directly rather than looking up the ID.
      v3:
       - Pass cursor obj to intel_crtc_cursor_set_obj() if cursor fb changes,
         even if 'visible' is false.  intel_crtc_cursor_set_obj() will notice
         that the cursor isn't visible and disable it properly, but we still
         need to get intel_crtc->cursor_addr set properly so that we behave
         properly if the cursor becomes visible again in the future without
         changing the cursor buffer (noted by Chris Wilson and verified
         via i-g-t kms_cursor_crc).
       - s/drm_plane_init/drm_universal_plane_init/.  Due to type
         compatibility between enum and bool, everything actually works
         correctly with the wrong init call, except for the type of plane that
         gets exposed to userspace (it shows up as type 'primary' rather than
         type 'cursor').
      v2:
       - Remove duplicate dimension checks on cursor
       - Drop explicit cursor disable from crtc destroy (fb & plane
         destruction will take care of that now)
       - Use DRM plane helper to check update parameters
      
      Cc: intel-gfx@lists.freedesktop.org
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: Pallavi G<pallavi.g@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      3d7d6510
    • M
      drm/i915: Add intel_crtc_cursor_set_obj() to set cursor buffer (v2) · e3287951
      Matt Roper 提交于
      Refactor cursor buffer setting such that the code to actually update the
      cursor lives in a new function, intel_crtc_cursor_set_obj(), and takes
      a GEM object as a parameter.  The existing legacy cursor ioctl handler,
      intel_crtc_cursor_set() will now perform the userspace handle lookup and
      then call this new function.
      
      This refactoring is in preparation for the universal plane cursor
      support where we'll want to update the cursor with an actual GEM buffer
      object (obtained via drm_framebuffer) rather than a userspace handle.
      
      v2:  Drop obvious kerneldoc and replace with note about function's
           reference consumption
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: Pallavi G<pallavi.g@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      e3287951
    • M
      drm: Allow drivers to register cursor planes with crtc · fc1d3e44
      Matt Roper 提交于
      Universal plane support had placeholders for cursor planes, but didn't
      actually do anything with them.  Save the cursor plane reference inside
      the crtc and update the cursor plane parameter from void* to drm_plane.
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: Pallavi G<pallavi.g@intel.com>
      Acked-by: NDave Airlie <airlied@linux.ie>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      fc1d3e44
    • C
      drm: Avoid NULL deference when disabling a plane from userspace · 17cfd91f
      Chris Wilson 提交于
      To disable a plane, userspace passes in an framebuffer id of 0. This
      causes us to pass CRTC == NULL to setplane_internal, who promptly
      deferences it to grab the struct drm_device. Oops.
      
      [ 1296.467327] BUG: unable to handle kernel NULL pointer dereference at   (null)
      [ 1296.467332] IP: [<c134dc51>] setplane_internal+0x11/0x280
      [ 1296.467338] *pde = 00000000
      [ 1296.467341] Oops: 0000 [#1] SMP
      [ 1296.467344] Modules linked in: ccm bnep bluetooth snd_hda_codec_hdmi snd_hda_codec_idt snd_hda_codec_generic snd_hda_intel arc4 iwldvm snd_hda_controller snd_hda_codec mac80211 snd_hwdep snd_seq snd_seq_device snd_pcm snd_timer iwlwifi sdhci_pci snd cfg80211 x86_pkg_temp_thermal hp_wmi sdhci sparse_keymap mmc_core crc32c_intel rfkill microcode hp_accel lpc_ich lis3lv02d wmi mfd_core serio_raw input_polldev soundcore e1000e ptp pps_core
      [ 1296.467367] CPU: 1 PID: 672 Comm: Xorg Tainted: G        W     3.15.0-rc8+ #351
      [ 1296.467369] Hardware name: Hewlett-Packard HP ProBook 6360b/1620, BIOS 68SCF Ver. B.42 12/29/2010
      [ 1296.467371] task: f423b5c0 ti: c2332000 task.ti: c2332000
      [ 1296.467374] EIP: 0060:[<c134dc51>] EFLAGS: 00013286 CPU: 1
      [ 1296.467376] EIP is at setplane_internal+0x11/0x280
      [ 1296.467378] EAX: 00000000 EBX: c2333e90 ECX: 00000000 EDX: f3165600
      [ 1296.467380] ESI: f430f400 EDI: 00000000 EBP: c2333e14 ESP: c2333dd4
      [ 1296.467382]  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
      [ 1296.467384] CR0: 80050033 CR2: 00000000 CR3: 00159000 CR4: 000407d0
      [ 1296.467385] Stack:
      [ 1296.467387]  000200da 00000002 c2333de8 c15dc4a0 f430f400 c2333e00 c134c54f eeeeeeee
      [ 1296.467391]  f430f400 00000007 f416b480 c2333e14 00000000 c2333e90 f430f400 00000000
      [ 1296.467396]  c2333e4c c1350aed 00000000 00000000 00000000 00000000 00000000 00000000
      [ 1296.467400] Call Trace:
      [ 1296.467406]  [<c15dc4a0>] ? mutex_lock+0x10/0x28
      [ 1296.467408]  [<c134c54f>] ? _object_find+0x5f/0x90
      [ 1296.467413]  [<c1350aed>] drm_mode_setplane+0x10d/0x1f0
      [ 1296.467416]  [<c13509e0>] ? drm_mode_getplane+0x100/0x100
      [ 1296.467420]  [<c1342e4d>] drm_ioctl+0x1bd/0x4f0
      [ 1296.467423]  [<c13509e0>] ? drm_mode_getplane+0x100/0x100
      [ 1296.467427]  [<c111c023>] ? handle_mm_fault+0x5d3/0xb30
      [ 1296.467431]  [<c1118f31>] ? tlb_finish_mmu+0x11/0x40
      [ 1296.467435]  [<c1342c90>] ? drm_ioctl_flags+0x40/0x40
      [ 1296.467438]  [<c11593d2>] do_vfs_ioctl+0x2f2/0x4d0
      [ 1296.467443]  [<c1226512>] ? inode_has_perm.isra.32+0x32/0x40
      [ 1296.467446]  [<c122662f>] ? file_has_perm+0x7f/0x90
      [ 1296.467449]  [<c1226fec>] ? selinux_file_ioctl+0x4c/0xf0
      [ 1296.467452]  [<c1159610>] SyS_ioctl+0x60/0x90
      [ 1296.467456]  [<c15e578c>] sysenter_do_call+0x12/0x22
      [ 1296.467457] Code: 3f cf ff eb dd ba 3f 00 00 00 b8 d9 c9 7f c1 e8 e6 3f cf ff eb d9 8d 74 26 00 55 89 e5 57 56 53 83 ec 34 66 66 66 66 90 89 45 f0 <8b> 00 85 c9 89 d6 89 cb 89 45 ec 0f 84 16 01 00 00 8b 45 f0 e8
      [ 1296.467485] EIP: [<c134dc51>] setplane_internal+0x11/0x280 SS:ESP 0068:c2
      
      Fixes regression from
      commit b02fd7fd8a541c3d590bfdda23365a927b507ceb
      Author: Matt Roper <matthew.d.roper@intel.com>
      Date:   Tue Jun 10 08:28:10 2014 -0700
      
          drm: Support legacy cursor ioctls via universal planes when possible (v4)
      
      While at it move the plane parameter to the first position in
      setplane_internal since that's the main object we're manipulating.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Pallavi G<pallavi.g@intel.com>
      Cc: Matt Roper <matthew.d.roper@intel.com>
      Reviewed-by: NMatt Roper <matthew.d.roper@intel.com>
      [danvet: Add note about parameter reordering.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      17cfd91f
    • M
      drm: Support legacy cursor ioctls via universal planes when possible (v4) · 161d0dc1
      Matt Roper 提交于
      If drivers support universal planes and have registered a cursor plane
      with the DRM core, we should use that universal plane support when
      handling legacy cursor ioctls.  Drivers that transition to universal
      planes won't have to maintain separate legacy ioctl handling; drivers
      that don't transition to universal planes will continue to operate
      without any change to behavior.
      
      Note that there's a bit of a mismatch between the legacy cursor ioctls
      and the universal plane API's --- legacy ioctl's use driver buffer
      handles directly whereas the universal plane API takes drm_framebuffers.
      Since there's no way to recover the driver handle from a
      drm_framebuffer, we can implement legacy ioctl's in terms of universal
      plane interfaces, but cannot implement universal plane interfaces in
      terms of legacy ioctls.  Specifically, there's no way to create a
      general cursor helper in the way we previously created a primary plane
      helper.
      
      It's important to land this patch before any patches that add universal
      cursor support to individual drivers so that drivers don't have to worry
      about juggling two different styles of reference counting for cursor
      buffers when userspace mixes and matches legacy and universal cursor
      calls.  With this patch, a driver that switches to universal cursor
      support may assume that all cursor buffers are wrapped in a
      drm_framebuffer and can rely on framebuffer reference counting for all
      cursor operations.
      
      v4:
       - Add comments pointing out setplane_internal's reference-eating
         semantics.
      v3:
       - Drop drm_mode_rmfb() call that is no longer needed now that we're
         using setplane_internal(), which takes care of deref'ing the
         appropriate framebuffer.
      v2:
       - Use new add_framebuffer_internal() function to create framebuffer
         rather than trying to call directly into the ioctl interface and
         look up the handle returned.
       - Use new setplane_internal() function to update the cursor plane
         rather than calling through the ioctl interface.  Note that since
         we're no longer looking up an fb_id, no extra reference will be
         taken here.
       - Grab extra reference to fb under lock in !BO case to avoid issues
         where racing userspace could cause the fb to be destroyed out from
         under us after we grab the fb pointer.
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: Pallavi G<pallavi.g@intel.com>
      Acked-by: NDave Airlie <airlied@linux.ie>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      161d0dc1
    • M
      drm: Refactor setplane to allow internal use (v3) · b36552b3
      Matt Roper 提交于
      Refactor DRM setplane code into a new setplane_internal() function that
      takes DRM objects directly as parameters rather than looking them up by
      ID.  We'll use this in a future patch when we implement legacy cursor
      ioctls on top of the universal plane interface.
      
      v3:
       - Move integer overflow checking from setplane_internal to setplane
         ioctl.  The upcoming legacy cursor support via universal planes needs
         to maintain current cursor ioctl semantics and not return error for
         these extreme values (found via intel-gpu-tools kms_cursor_crc test).
      v2:
       - Allow planes to be disabled without a valid crtc again (and add
         mention of this to setplane's kerneldoc, since it doesn't seem to be
         mentioned anywhere else).
       - Reformat some parameter line wrap
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: Pallavi G<pallavi.g@intel.com>
      Acked-by: NDave Airlie <airlied@linux.ie>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      b36552b3
    • M
      drm: Refactor framebuffer creation to allow internal use (v2) · c394c2b0
      Matt Roper 提交于
      Refactor DRM framebuffer creation into a new function that returns a
      struct drm_framebuffer directly.  The upcoming universal cursor support
      will want to create framebuffers internally to wrap cursor buffers, so
      we want to be able to share that framebuffer creation with the
      drm_mode_addfb2 ioctl handler.
      
      v2: Take struct drm_mode_fb_cmd2 parameter directly rather than void*
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: Pallavi G<pallavi.g@intel.com>
      Acked-by: NDave Airlie <airlied@linux.ie>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      c394c2b0