linux/drivers/gpu/drm/i915
Chris Wilson 506a8e87d8 drm/i915: Add soft-pinning API for execbuffer
Userspace can pass in an offset that it presumes the object is located
at. The kernel will then do its utmost to fit the object into that
location. The assumption is that userspace is handling its own object
locations (for example along with full-ppgtt) and that the kernel will
rarely have to make space for the user's requests.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

v2: Fixed incorrect eviction found by Michal Winiarski - fix suggested by Chris
Wilson.  Fixed incorrect error paths causing crash found by Michal Winiarski.
(Not published externally)

v3: Rebased because of trivial conflict in object_bind_to_vm.  Fixed eviction
to allow eviction of soft-pinned objects when another soft-pinned object used
by a subsequent execbuffer overlaps reported by Michal Winiarski.
(Not published externally)

v4: Moved soft-pinned objects to the front of ordered_vmas so that they are
pinned first after an address conflict happens to avoid repeated conflicts in
rare cases (Suggested by Chris Wilson).  Expanded comment on
drm_i915_gem_exec_object2.offset to cover this new API.

v5: Added I915_PARAM_HAS_EXEC_SOFTPIN parameter for detecting this capability
(Kristian). Added check for multiple pinnings on eviction (Akash). Made sure
buffers are not considered misplaced without the user specifying
EXEC_OBJECT_SUPPORTS_48B_ADDRESS.  User must assume responsibility for any
addressing workarounds.  Updated object2.offset field comment again to clarify
NO_RELOC case (Chris).  checkpatch cleanup.

v6: Trivial rebase on latest drm-intel-nightly

v7: Catch attempts to pin above the max virtual address size and return
EINVAL (Tvrtko). Decouple EXEC_OBJECT_SUPPORTS_48B_ADDRESS and
EXEC_OBJECT_PINNED flags, user must pass both flags in any attempt to pin
something at an offset above 4GB (Chris, Daniel Vetter).

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Akash Goel <akash.goel@intel.com>
Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
Cc: Michal Winiarski <michal.winiarski@intel.com>
Cc: Zou Nanhai <nanhai.zou@intel.com>
Cc: Kristian Høgsberg <hoegsberg@gmail.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Reviewed-by: Michel Thierry <michel.thierry@intel.com>
Acked-by: PDT
Signed-off-by: Thomas Daniel <thomas.daniel@intel.com>
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1449575707-20933-1-git-send-email-thomas.daniel@intel.com
2015-12-09 10:20:17 +00:00
..
dvo_ch7xxx.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ch7017.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ivch.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ns2501.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_sil164.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_tfp410.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo.h drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
i915_cmd_parser.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
i915_debugfs.c drm/i915/guc: Clean up locks in GuC 2015-12-03 15:11:54 +01:00
i915_dma.c drm/i915: Add soft-pinning API for execbuffer 2015-12-09 10:20:17 +00:00
i915_drv.c drm/i915/skl: Add SKL GT4 PCI IDs 2015-12-04 19:03:50 +00:00
i915_drv.h drm/i915: Add soft-pinning API for execbuffer 2015-12-09 10:20:17 +00:00
i915_gem_batch_pool.c
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Remove incorrect warning in context cleanup 2015-11-24 11:58:12 +01:00
i915_gem_debug.c
i915_gem_dmabuf.c drm/i915: remove unused has_dma_mapping flag 2015-07-13 22:42:41 +02:00
i915_gem_evict.c drm/i915: Add soft-pinning API for execbuffer 2015-12-09 10:20:17 +00:00
i915_gem_execbuffer.c drm/i915: Add soft-pinning API for execbuffer 2015-12-09 10:20:17 +00:00
i915_gem_fence.c Linux 4.4-rc2 2015-11-23 09:04:05 +01:00
i915_gem_gtt.c drm/i915: Stuff rotation params into view union 2015-11-19 16:42:01 +01:00
i915_gem_gtt.h drm/i915: Fix i915_ggtt_view_equal to handle rotation correctly 2015-11-19 16:42:06 +01:00
i915_gem_render_state.c drm/i915: Add provision to extend Golden context batch 2015-07-21 09:30:57 +02:00
i915_gem_render_state.h drm/i915: Add provision to extend Golden context batch 2015-07-21 09:30:57 +02:00
i915_gem_shrinker.c drm/i915: Fix kerneldoc for i915_gem_shrink_all 2015-10-13 16:21:03 +03:00
i915_gem_stolen.c drm/i915/kbl: Introduce Kabylake platform defition. 2015-10-28 21:35:38 +02:00
i915_gem_tiling.c drm/i915: get runtime PM reference around GEM set_tiling IOCTL 2015-11-17 18:43:30 +02:00
i915_gem_userptr.c Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-11-10 09:33:06 -08:00
i915_gem.c drm/i915: Add soft-pinning API for execbuffer 2015-12-09 10:20:17 +00:00
i915_gpu_error.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
i915_guc_reg.h drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
i915_guc_submission.c drm/i915/guc: Clean up locks in GuC 2015-12-03 15:11:54 +01:00
i915_ioc32.c Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
i915_irq.c drm/i915: Fix kerneldoc indent fails 2015-11-26 18:55:40 +02:00
i915_params.c Linux 4.4-rc2 2015-11-23 09:04:05 +01:00
i915_reg.h drm/i915: Disable CLKOUT_DP bending on LPT/WPT as needed 2015-12-08 16:30:20 +02:00
i915_suspend.c drm/i915: Parametrize and fix SWF registers 2015-10-13 13:20:38 +02:00
i915_sysfs.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
i915_trace_points.c
i915_trace.h drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
i915_vgpu.c drm/i915: Turn __raw_i915_read8() & co. in to inline functions 2015-10-26 16:28:04 +02:00
i915_vgpu.h drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_acpi.c drm/i915: Drop unnecessary #include <linux/vga_switcheroo.h> 2015-10-13 10:18:38 +02:00
intel_atomic_plane.c drm/i915: Wait for object idle without locks in atomic_commit, v2. 2015-11-02 15:50:31 +01:00
intel_atomic.c drm/i915: Calculate watermark related members in the crtc_state, v4. 2015-12-07 10:56:08 +01:00
intel_audio.c Revert "drm/i915: Remove superfluous NULL check" 2015-12-04 15:54:30 +01:00
intel_bios.c drm/i915: Check VBT for CRT port presence on HSW/BDW 2015-12-02 11:24:01 +02:00
intel_bios.h drm/i915: Ignore "digital output" and "not HDMI output" bits for eDP detection 2015-09-23 16:58:29 +02:00
intel_crt.c drm/i915: Disable FDI after the CRT port on LPT-H 2015-12-08 16:30:21 +02:00
intel_csr.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_ddi.c drm/i915/kbl: Use propper ddi buffer translation table for Kabylake ULT and ULX. 2015-12-08 17:04:32 -08:00
intel_display.c drm/i915: Disable LPT-H VGA dotclock during crtc disable 2015-12-08 16:30:21 +02:00
intel_dp_link_training.c drm/i915: Make intel_dp_source_supports_hbr2() take an intel_dp pointer 2015-11-05 15:14:56 +02:00
intel_dp_mst.c Linux 4.4-rc2 2015-11-23 09:04:05 +01:00
intel_dp.c drm/i915: Round the AUX clock divider to closest on all platforms 2015-12-02 11:22:57 +02:00
intel_drv.h drm/i915: Calculate watermark related members in the crtc_state, v4. 2015-12-07 10:56:08 +01:00
intel_dsi_panel_vbt.c
intel_dsi_pll.c drm/i915/bxt: vlv_dsi_reset_clocks() can be static 2015-10-06 10:57:06 +02:00
intel_dsi.c drm/i915: add has_dsi_encoder to crtc state 2015-11-30 12:54:33 +02:00
intel_dsi.h drm/i915/bxt: get DSI pixelclock 2015-10-02 14:45:51 +02:00
intel_dvo.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_fbc.c drm/i915: only recompress FBC after flushing a drawing operation 2015-12-03 11:38:11 -02:00
intel_fbdev.c drm/i915: Tear down fbdev if initialization fails 2015-11-19 17:52:38 +01:00
intel_fifo_underrun.c drm/i915: Introduce bdw_{update,enable,disable}_pipe_irq() 2015-11-26 18:55:39 +02:00
intel_frontbuffer.c drm/i915: fix FBC frontbuffer tracking flushing code 2015-08-05 09:59:44 +02:00
intel_guc_fwif.h drm/i915/guc: Add GuC css header parser 2015-10-21 14:31:34 +02:00
intel_guc_loader.c Linux 4.4-rc2 2015-11-23 09:04:05 +01:00
intel_guc.h drm/i915/guc: Clean up locks in GuC 2015-12-03 15:11:54 +01:00
intel_hdmi.c drm/i915: Don't use crtc->config when reading out infoframe state 2015-12-01 16:01:21 +02:00
intel_hotplug.c Revert "drm/i915: Call encoder hotplug for init and resume cases" 2015-10-08 21:51:57 +02:00
intel_i2c.c drm/i915: abstract i2c bit banging fallback in gmbus xfer 2015-12-02 13:29:41 +02:00
intel_lrc.c Revert "drm/i915: Extend LRC pinning to cover GPU context writeback" 2015-12-04 17:34:40 +01:00
intel_lrc.h Revert "drm/i915: Extend LRC pinning to cover GPU context writeback" 2015-12-04 17:34:40 +01:00
intel_lvds.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_mocs.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_mocs.h drm/i915: Added Programming of the MOCS 2015-07-14 17:13:14 +02:00
intel_modes.c drm/i915: Add HDMI aspect ratio property for SDVO 2015-09-30 10:20:12 +02:00
intel_opregion.c drm/i915: Don't complain about lack of ACPI video bios 2015-10-31 09:26:20 +01:00
intel_overlay.c drm/i915: Wait for object idle without locks in atomic_commit, v2. 2015-11-02 15:50:31 +01:00
intel_panel.c drm/i915: Use cached cdclk_freq for PWM calculations 2015-12-02 11:22:57 +02:00
intel_pm.c drm/i915: vlv: clamp minimum RPS frequency to what Punit allows 2015-12-08 20:51:45 +02:00
intel_psr.c drm/i915: Fix idle_frames counter. 2015-12-07 14:48:11 -08:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h
intel_ringbuffer.c i915: Replace "hweight8(dev_priv->info.subslice_7eu[i]) != 1" with "!is_power_of_2(dev_priv->info.subslice_7eu[i])" 2015-12-07 08:44:20 +01:00
intel_ringbuffer.h drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_runtime_pm.c drm/i915/bxt: Disable power well support 2015-12-01 14:28:37 -08:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_sideband.c
intel_sprite.c drm/i915: Avoid pointer arithmetic in calculating plane surface offset 2015-11-09 20:00:11 +02:00
intel_tv.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next 2015-09-30 08:47:41 +02:00
intel_uncore.c Linux 4.4-rc2 2015-11-23 09:04:05 +01:00
Kconfig drm/i915: Serialise updates to GGTT with access through GGTT on Braswell 2015-11-17 17:36:01 +01:00
Makefile drm/i915: Move generic link training code to a separate file 2015-11-05 15:14:56 +02:00