linux-stable/drivers/gpu/drm/i915
Chris Wilson fa545cbf97 drm/i915: Refactor activity tracking for requests
With the introduction of requests, we amplified the number of atomic
refcounted objects we use and update every execbuffer; from none to
several references, and a set of references that need to be changed. We
also introduced interesting side-effects in the order of retiring
requests and objects.

Instead of independently tracking the last request for an object, track
the active objects for each request. The object will reside in the
buffer list of its most recent active request and so we reduce the kref
interchange to a list_move. Now retirements are entirely driven by the
request, dramatically simplifying activity tracking on the object
themselves, and removing the ambiguity between retiring objects and
retiring requests.

Furthermore with the consolidation of managing the activity tracking
centrally, we can look forward to using RCU to enable lockless lookup of
the current active requests for an object. In the future, we will be
able to query the status or wait upon rendering to an object without
even touching the struct_mutex BKL.

All told, less code, simpler and faster, and more extensible.

v2: Add a typedef for the function pointer for convenience later.
v3: Make the noop retirement callback explicit. Allow passing NULL to
the init_request_active() which is expanded to a common noop function.

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/1470293567-10811-16-git-send-email-chris@chris-wilson.co.uk
2016-08-04 08:09:25 +01:00
..
gvt drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +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/cmdparser: Remove stray intel_engine_cs *ring 2016-07-27 16:23:05 +01:00
i915_debugfs.c drm/i915: Rename request->list to link for consistency 2016-08-04 08:09:23 +01:00
i915_drv.c drm/i915: Split early global GTT initialisation 2016-08-04 08:09:15 +01:00
i915_drv.h drm/i915: Refactor activity tracking for requests 2016-08-04 08:09:25 +01:00
i915_gem.c drm/i915: Refactor activity tracking for requests 2016-08-04 08:09:25 +01:00
i915_gem.h
i915_gem_batch_pool.c drm/i915: Only drop the batch-pool's object reference 2016-07-26 13:01:00 +01:00
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Store owning file on the i915_address_space 2016-08-04 08:09:17 +01:00
i915_gem_dmabuf.c drm/i915: Wrap drm_gem_object_reference in i915_gem_object_get 2016-07-20 13:40:11 +01:00
i915_gem_dmabuf.h drm/i915: Serialise presentation with imported dmabufs 2016-06-17 10:32:26 +01:00
i915_gem_evict.c drm/i915: Rename drm_gem_object_unreference in preparation for lockless free 2016-07-20 13:40:12 +01:00
i915_gem_execbuffer.c drm/i915: Introduce i915_gem_active for request tracking 2016-08-04 08:09:20 +01:00
i915_gem_fence.c drm/i915: Refactor activity tracking for requests 2016-08-04 08:09:25 +01:00
i915_gem_gtt.c drm/i915: Store owning file on the i915_address_space 2016-08-04 08:09:17 +01:00
i915_gem_gtt.h drm/i915: Store owning file on the i915_address_space 2016-08-04 08:09:17 +01:00
i915_gem_render_state.c drm/i915: Refactor golden render state emission to unconfuse gcc 2016-08-02 22:58:31 +01:00
i915_gem_render_state.h drm/i915: Remove duplicate golden render state init from execlists 2016-08-02 22:58:30 +01:00
i915_gem_request.c drm/i915: Refactor activity tracking for requests 2016-08-04 08:09:25 +01:00
i915_gem_request.h drm/i915: Refactor activity tracking for requests 2016-08-04 08:09:25 +01:00
i915_gem_shrinker.c drm/i915: Be more careful when unbinding vma 2016-08-04 08:09:18 +01:00
i915_gem_stolen.c drm/i915: Count how many VMA are bound for an object 2016-08-04 08:09:17 +01:00
i915_gem_tiling.c drm/i915: Mark up i915_gem_active for locking annotation 2016-08-04 08:09:22 +01:00
i915_gem_userptr.c drm/i915: Mark up i915_gem_active for locking annotation 2016-08-04 08:09:22 +01:00
i915_gpu_error.c drm/i915: Rename request->list to link for consistency 2016-08-04 08:09:23 +01:00
i915_guc_reg.h drm/i915/bxt: reserve space for RC6 in the the GuC WOPCM 2016-05-18 12:49:19 +01:00
i915_guc_submission.c drm/i915/lrc: Update function names to match request flow 2016-08-02 22:58:27 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
i915_params.c drm/i915/guc: Revert "drm/i915/guc: enable GuC loading & submission by default" 2016-07-19 15:45:21 -07:00
i915_params.h drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
i915_pci.c drm/i915: Add missing ring_mask to Pineview 2016-07-29 16:22:42 +01:00
i915_pvinfo.h drm/i915: Use offsetof() to calculate the offset of members in PVINFO page 2016-06-17 19:44:25 +01:00
i915_reg.h drm/i915/gen9: Update i915_drpc_info debugfs for coarse pg & forcewake info 2016-08-02 16:09:14 +02:00
i915_suspend.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
i915_sysfs.c drm/i915: Fix up some stray to_i915(dev) after a recent merge 2016-07-28 07:28:17 +01:00
i915_trace.h drm/i915: Simplify request_alloc by returning the allocated request 2016-08-02 22:58:20 +01:00
i915_trace_points.c
i915_vgpu.c drm/i915: Update missing kerneldoc 2016-07-19 10:34:24 +02:00
i915_vgpu.h drm/i915: Fold vGPU active check into inner functions 2016-06-17 19:44:29 +01:00
intel_acpi.c
intel_atomic.c drm: Consolidate plane arrays in drm_atomic_state 2016-06-02 17:20:25 +02:00
intel_atomic_plane.c drm/i915: Revert async unpin and nonblocking atomic commit 2016-06-01 09:46:46 +02:00
intel_audio.c drm/i915: Replace some open coded intel_crtc_has_dp_encoder()s 2016-07-07 13:10:12 +03:00
intel_bios.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_bios.h drm/i915: Parse LFP brightness control field in VBT 2016-05-02 16:17:38 +03:00
intel_breadcrumbs.c drm/i915: Reduce breadcrumb lock coverage for intel_engine_enable_signaling() 2016-07-26 13:00:58 +01:00
intel_color.c drm/i915: Kill has_dsi_encoder 2016-07-07 13:10:20 +03:00
intel_crt.c drm/i915/vlv: Disable HPD in valleyview_crt_detect_hotplug() 2016-07-14 22:06:11 +02:00
intel_csr.c drm/i915: Remove misleading CSR firmware loading docs 2016-07-21 22:23:04 +02:00
intel_ddi.c drm/i915: Extract bdw_get_buf_trans_edp() 2016-08-02 15:09:20 +03:00
intel_device_info.c drm/i915: Split out runtime configuration of device info to its own file 2016-07-05 11:53:27 +01:00
intel_display.c drm/i915: Mark up i915_gem_active for locking annotation 2016-08-04 08:09:22 +01:00
intel_dp.c drm/i915: Warn about aux msg buffer vs. size mismatch 2016-08-02 16:25:10 +03:00
intel_dp_aux_backlight.c drm/i915: Add Backlight Control using DPCD for eDP connectors (v9) 2016-04-26 15:17:54 +03:00
intel_dp_link_training.c drm/i915: Revert DisplayPort fast link training feature 2016-06-20 12:37:07 +03:00
intel_dp_mst.c drm/i915: Split DP/eDP/FDI and HDMI/DVI DDI buffer programming apart 2016-08-02 15:09:20 +03:00
intel_dpio_phy.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dpll_mgr.c drm/i915: s/INTEL_OUTPUT_DISPLAYPORT/INTEL_OUTPUT_DP/ 2016-07-07 13:10:16 +03:00
intel_dpll_mgr.h
intel_drv.h drm/i915: Split DP/eDP/FDI and HDMI/DVI DDI buffer programming apart 2016-08-02 15:09:20 +03:00
intel_dsi.c drm/i915: Kill has_dsi_encoder 2016-07-07 13:10:20 +03:00
intel_dsi.h drm/i915/dsi: CABC support for Panel PWM backlight control 2016-05-17 16:12:39 +03:00
intel_dsi_dcs_backlight.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi_panel_vbt.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi_pll.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dvo.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_engine_cs.c drm/i915: Refactor activity tracking for requests 2016-08-04 08:09:25 +01:00
intel_fbc.c drm/i915: remove redundant fbc warnings 2016-08-02 14:25:46 +03:00
intel_fbdev.c drm/i915: Treat ringbuffer writes as write to normal memory 2016-07-20 13:40:14 +01:00
intel_fifo_underrun.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_frontbuffer.c
intel_guc.h drm/i915: Unify request submission 2016-08-02 22:58:26 +01:00
intel_guc_fwif.h drm/i915/guc: rework guc_add_workqueue_item() 2016-05-23 14:21:53 +01:00
intel_guc_loader.c drm/i915:gen9: restrict WaC6DisallowByGfxPause 2016-07-21 14:48:00 +01:00
intel_gvt.c drm/i915/gvt: Mark i915.enable_gvt as false if loading fails 2016-06-21 12:40:13 +01:00
intel_gvt.h drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
intel_hdmi.c drm/i915: Simplify hdmi_12bpc_possible() 2016-07-07 13:10:24 +03:00
intel_hotplug.c drm/i915: Update missing kerneldoc 2016-07-19 10:34:24 +02:00
intel_i2c.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_lrc.c drm/i915: Move the common engine cleanup to intel_engine_cs.c 2016-08-03 14:01:12 +01:00
intel_lrc.h drm/i915: Unify legacy/execlists submit_execbuf callbacks 2016-08-02 22:58:31 +01:00
intel_lvds.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_mocs.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
intel_mocs.h drm/i915: rename 'ring' where it refers to an engine or engine_id 2016-07-21 09:59:41 +01:00
intel_modes.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_opregion.c drm/i915: Ignore panel type from OpRegion on SKL 2016-07-14 16:05:40 +03:00
intel_overlay.c drm/i915: Simplify request_alloc by returning the allocated request 2016-08-02 22:58:20 +01:00
intel_panel.c drm/i915: Introduce Kabypoint PCH for Kabylake H/DT. 2016-07-07 10:01:37 -07:00
intel_pm.c drm/i915: Clean up the extra RPM ref on CHV with i915.enable_rc6=0 2016-08-03 18:28:09 +03:00
intel_psr.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_renderstate.h drm/i915: Remove duplicate golden render state init from execlists 2016-08-02 22:58:30 +01:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_ringbuffer.c drm/i915: Rename request->list to link for consistency 2016-08-04 08:09:23 +01:00
intel_ringbuffer.h drm/i915: Refactor activity tracking for requests 2016-08-04 08:09:25 +01:00
intel_runtime_pm.c drm/i915: Enable polling when we don't have hpd 2016-07-14 22:06:11 +02:00
intel_sdvo.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_sdvo_regs.h
intel_sideband.c drm/i915: Convert wait_for(I915_READ(reg)) to intel_wait_for_register() 2016-06-30 15:42:33 +01:00
intel_sprite.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_tv.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_uncore.c Revert "drm/i915: Enable RC6 immediately" 2016-07-21 21:43:19 +01:00
intel_vbt_defs.h drm/i915: Extract physical display dimensions from VBT 2016-06-02 14:33:09 +03:00
Kconfig drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
Kconfig.debug drm/i915: Select DRM_VGEM for igt 2016-07-10 13:22:39 +01:00
Makefile drm/i915: Refactor activity tracking for requests 2016-08-04 08:09:25 +01:00