linux-stable/drivers/gpu/drm/i915
Chris Wilson fbbd37b36f drm/i915: Move object release to a freelist + worker
We want to hide the latency of releasing objects and their backing
storage from the submission, so we move the actual free to a worker.
This allows us to switch to struct_mutex freeing of the object in the
next patch.

Furthermore, if we know that the object we are dereferencing remains valid
for the duration of our access, we can forgo the usual synchronisation
barriers and atomic reference counting. To ensure this we defer freeing
an object til after an RCU grace period, such that any lookup of the
object within an RCU read critical section will remain valid until
after we exit that critical section. We also employ this delay for
rate-limiting the serialisation on reallocation - we have to slow down
object creation in order to prevent resource starvation (in particular,
files).

v2: Return early in i915_gem_tiling() ioctl to skip over superfluous
work on error.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161028125858.23563-19-chris@chris-wilson.co.uk
2016-10-28 20:53:49 +01:00
..
gvt drm/i915: Rearrange i915_wait_request() accounting with callers 2016-10-28 20:53:43 +01:00
dvo.h
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
i915_cmd_parser.c drm/i915: Refactor object page API 2016-10-28 20:53:46 +01:00
i915_debugfs.c drm/i915: Move object release to a freelist + worker 2016-10-28 20:53:49 +01:00
i915_drv.c drm/i915: Move object release to a freelist + worker 2016-10-28 20:53:49 +01:00
i915_drv.h drm/i915: Move object release to a freelist + worker 2016-10-28 20:53:49 +01:00
i915_gem.c drm/i915: Move object release to a freelist + worker 2016-10-28 20:53:49 +01:00
i915_gem.h
i915_gem_batch_pool.c drm/i915: Refactor object page API 2016-10-28 20:53:46 +01:00
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Defer active reference until required 2016-10-28 20:53:43 +01:00
i915_gem_dmabuf.c drm/i915/dmabuf: Acquire the backing storage outside of struct_mutex 2016-10-28 20:53:48 +01:00
i915_gem_dmabuf.h
i915_gem_evict.c drm/i915: Markup GEM API with lockdep asserts 2016-10-28 20:53:45 +01:00
i915_gem_execbuffer.c drm/i915: Refactor object page API 2016-10-28 20:53:46 +01:00
i915_gem_fence.c drm/i915: Pass around sg_table to get_pages/put_pages backend 2016-10-28 20:53:47 +01:00
i915_gem_gtt.c drm/i915: Pass around sg_table to get_pages/put_pages backend 2016-10-28 20:53:47 +01:00
i915_gem_gtt.h drm/i915: Pass around sg_table to get_pages/put_pages backend 2016-10-28 20:53:47 +01:00
i915_gem_internal.c drm/i915: Pass around sg_table to get_pages/put_pages backend 2016-10-28 20:53:47 +01:00
i915_gem_render_state.c drm/i915: Refactor object page API 2016-10-28 20:53:46 +01:00
i915_gem_render_state.h drm/i915: Reuse the active golden render state batch 2016-10-28 20:53:44 +01:00
i915_gem_request.c drm/i915: Markup GEM API with lockdep asserts 2016-10-28 20:53:45 +01:00
i915_gem_request.h drm/i915: Remove unused i915_gem_active_wait() in favour of _unlocked() 2016-10-28 20:53:43 +01:00
i915_gem_shrinker.c drm/i915: Move object release to a freelist + worker 2016-10-28 20:53:49 +01:00
i915_gem_stolen.c drm/i915: Pass around sg_table to get_pages/put_pages backend 2016-10-28 20:53:47 +01:00
i915_gem_tiling.c drm/i915: Move object release to a freelist + worker 2016-10-28 20:53:49 +01:00
i915_gem_userptr.c drm/i915: Move object backing storage manipulation to its own locking 2016-10-28 20:53:47 +01:00
i915_gpu_error.c drm/i915: Refactor object page API 2016-10-28 20:53:46 +01:00
i915_guc_reg.h
i915_guc_submission.c drm/i915/guc: WA to address the Ringbuffer coherency issue 2016-10-25 21:00:29 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Correct pipe fault reporting string 2016-10-27 15:08:43 +01:00
i915_memcpy.c
i915_mm.c
i915_params.c drm/i915: Allow disabling error capture 2016-10-12 12:00:32 +01:00
i915_params.h drm/i915: Allow disabling error capture 2016-10-12 12:00:32 +01:00
i915_pci.c
i915_pvinfo.h
i915_reg.h drm/i915: Address broxton phy registers based on phy and channel number 2016-10-28 12:25:24 +03:00
i915_suspend.c drm/i915: Make IS_GEN macros only take dev_priv 2016-10-14 12:23:22 +01:00
i915_sw_fence.c drm/i915: Allow i915_sw_fence_await_sw_fence() to allocate 2016-10-28 20:53:42 +01:00
i915_sw_fence.h drm/i915: Allow i915_sw_fence_await_sw_fence() to allocate 2016-10-28 20:53:42 +01:00
i915_sysfs.c drm/i915: Allow disabling error capture 2016-10-12 12:00:32 +01:00
i915_trace.h dma-buf: Rename struct fence to dma_fence 2016-10-25 14:40:39 +02:00
i915_trace_points.c
i915_vgpu.c
i915_vgpu.h
intel_acpi.c
intel_atomic.c
intel_atomic_plane.c drm: Add drm_rotation_90_or_270() 2016-10-21 18:21:33 +02:00
intel_audio.c drm/i915/audio: set proper N/M in modeset 2016-10-26 12:36:30 +03:00
intel_bios.c drm/i915: Clean up DDI DDC/AUX CH sanitation 2016-10-21 15:43:40 +03:00
intel_bios.h
intel_breadcrumbs.c dma-buf: Rename struct fence to dma_fence 2016-10-25 14:40:39 +02:00
intel_color.c drm/i915: Make IS_CHERRYVIEW only take dev_priv 2016-10-14 12:23:19 +01:00
intel_crt.c drm/i915: Make IS_GEN macros only take dev_priv 2016-10-14 12:23:22 +01:00
intel_csr.c drm/i915/DMC/KBL: Load DMC on KBL using the no_stepping_info array 2016-10-26 14:20:53 -07:00
intel_ddi.c drm/i915: Move broxton vswing sequence to intel_dpio_phy.c 2016-10-28 12:24:45 +03:00
intel_device_info.c drm/i915: Reduce trickery in DEV_INFO_FOR_EACH_FLAG 2016-10-05 15:24:54 +03:00
intel_display.c drm/i915: Rearrange i915_wait_request() accounting with callers 2016-10-28 20:53:43 +01:00
intel_dp.c drm/i915: Change the placement of some static functions in intel_dp.c 2016-10-28 15:06:31 +03:00
intel_dp_aux_backlight.c
intel_dp_link_training.c
intel_dp_mst.c
intel_dpio_phy.c drm/i915: Address broxton phy registers based on phy and channel number 2016-10-28 12:25:24 +03:00
intel_dpll_mgr.c drm/i915: Address broxton phy registers based on phy and channel number 2016-10-28 12:25:24 +03:00
intel_dpll_mgr.h
intel_drv.h drm/i915: Use macro in place of open-coded for_each_universal_plane loop 2016-10-28 11:27:19 -07:00
intel_dsi.c drm/i915: Make IS_CHERRYVIEW only take dev_priv 2016-10-14 12:23:19 +01:00
intel_dsi.h
intel_dsi_dcs_backlight.c
intel_dsi_panel_vbt.c
intel_dsi_pll.c drm/i915: Make IS_BROXTON only take dev_priv 2016-10-14 12:23:19 +01:00
intel_dvo.c
intel_engine_cs.c drm/i915: Reuse the active golden render state batch 2016-10-28 20:53:44 +01:00
intel_fbc.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued 2016-10-25 08:57:53 +02:00
intel_fbdev.c
intel_fifo_underrun.c drm/i915: Make IS_GEN macros only take dev_priv 2016-10-14 12:23:22 +01:00
intel_frontbuffer.c
intel_frontbuffer.h
intel_guc.h drm/i915: Debugfs support for GuC logging control 2016-10-25 09:34:23 +01:00
intel_guc_fwif.h drm/i915: Increase GuC log buffer size to reduce flush interrupts 2016-10-25 09:34:23 +01:00
intel_guc_loader.c drm/i915: Support for GuC interrupts 2016-10-25 09:34:06 +01:00
intel_gvt.c Documentation/gpu: Add section for Intel GVT-g host support 2016-10-20 17:18:39 +08:00
intel_gvt.h drm/i915/gvt: clean up intel_gvt.h as interface for i915 core 2016-10-20 17:18:30 +08:00
intel_hdmi.c drm/i915: Respect alternate_ddc_pin for all DDI ports 2016-10-21 15:43:40 +03:00
intel_hotplug.c
intel_i2c.c drm/i915: GMBUS don't need no forcewake 2016-10-17 14:26:42 +03:00
intel_lrc.c drm/i915: Refactor object page API 2016-10-28 20:53:46 +01:00
intel_lrc.h
intel_lspcon.c drm/i915/lspcon: Add workaround for resuming in PCON mode 2016-10-26 12:41:01 +03:00
intel_lvds.c drm/i915: Make IS_GEN macros only take dev_priv 2016-10-14 12:23:22 +01:00
intel_mocs.c
intel_mocs.h
intel_modes.c
intel_opregion.c
intel_overlay.c drm/i915: Allocate intel_engine_cs structure only for the enabled engines 2016-10-14 09:58:43 +01:00
intel_panel.c drm/i915/backlight: setup backlight pwm alternate increment on backlight enable 2016-10-10 16:05:52 +03:00
intel_pm.c drm/i915: Use macro in place of open-coded for_each_universal_plane loop 2016-10-28 11:27:19 -07:00
intel_psr.c drm/i915: Make IS_CHERRYVIEW only take dev_priv 2016-10-14 12:23:19 +01:00
intel_renderstate.h
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_ringbuffer.c drm/i915: Reuse the active golden render state batch 2016-10-28 20:53:44 +01:00
intel_ringbuffer.h drm/i915: Reuse the active golden render state batch 2016-10-28 20:53:44 +01:00
intel_runtime_pm.c drm/i915: Add location of the Rcomp resistor to bxt_ddi_phy_info 2016-10-28 12:25:03 +03:00
intel_sdvo.c drm/i915: Make INTEL_DEVID only take dev_priv 2016-10-14 12:23:19 +01:00
intel_sdvo_regs.h
intel_sideband.c
intel_sprite.c Merge tag 'drm-intel-next-2016-10-24' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-10-25 16:39:43 +10:00
intel_tv.c drm/i915: Make INTEL_DEVID only take dev_priv 2016-10-14 12:23:19 +01:00
intel_uncore.c drm/i915: Just clear the mmiodebug before a register access 2016-10-10 16:06:41 +03:00
intel_vbt_defs.h
Kconfig Merge tag 'gvt-next-2016-10-27' of https://github.com/01org/gvt-linux into drm-intel-next-queued 2016-10-27 10:33:17 +02:00
Kconfig.debug
Makefile drm/i915: Introduce an internal allocator for disposable private objects 2016-10-28 20:53:44 +01:00