linux/drivers/gpu/drm/i915
Brad Volkin 44e895a8a2 drm/i915: Use hash tables for the command parser
For clients that submit large batch buffers the command parser has
a substantial impact on performance. On my HSW ULT system performance
drops as much as ~20% on some tests. Most of the time is spent in the
command lookup code. Converting that from the current naive search to
a hash table lookup reduces the performance drop to ~10%.

The choice of value for I915_CMD_HASH_ORDER allows all commands
currently used in the parser tables to hash to their own bucket (except
for one collision on the render ring). The tradeoff is that it wastes
memory. Because the opcodes for the commands in the tables are not
particularly well distributed, reducing the order still leaves many
buckets empty. The increased collisions don't seem to have a huge
impact on the performance gain, but for now anyhow, the parser trades
memory for performance.

NB: Ville noticed that the error paths through the ring init code
will leak memory. I've not addressed that here. We can do a follow
up pass to handle all of the leaks.

v2: improved comment describing selection of hash key mask (Damien)
replace a BUG_ON() with an error return (Tvrtko, Ville)
commit message improvements

Signed-off-by: Brad Volkin <bradley.d.volkin@intel.com>
Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2014-05-12 19:15:51 +02:00
..
dvo.h
dvo_ch7xxx.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_ch7017.c
dvo_ivch.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_ns2501.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_sil164.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
dvo_tfp410.c drm/i915: Remove spurious semicolons 2014-04-09 21:54:33 +02:00
i915_cmd_parser.c drm/i915: Use hash tables for the command parser 2014-05-12 19:15:51 +02:00
i915_debugfs.c drm/i915: Avoid NULL ctx->obj dereference in debugfs/i915_context_info 2014-05-05 10:56:51 +02:00
i915_dma.c drm/i915: remove extraneous VGA power domain put calls 2014-05-05 09:09:17 +02:00
i915_drv.c drm/i915: vlv: add runtime PM support 2014-05-07 10:01:39 +02:00
i915_drv.h drm/i915: Use hash tables for the command parser 2014-05-12 19:15:51 +02:00
i915_gem.c drm/i915: Flush request queue when waiting for ring space 2014-05-08 01:23:34 +02:00
i915_gem_context.c Merge tag 'drm-intel-next-2014-04-16' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-05-01 09:11:37 +10:00
i915_gem_debug.c drm/i915: prefer struct drm_i915_private to drm_i915_private_t 2014-03-31 15:34:21 +02:00
i915_gem_dmabuf.c drm/i915: dma_buf_vunmap is presumed not to fail, don't let it 2014-04-09 15:03:05 +02:00
i915_gem_evict.c drm/i915: prefer struct drm_i915_private to drm_i915_private_t 2014-03-31 15:34:21 +02:00
i915_gem_execbuffer.c drm/i915: Support 64b relocations 2014-05-05 16:04:23 +02:00
i915_gem_gtt.c drm/i915: Use topdown allocation for PPGTT PDEs on gen6/7 2014-05-07 10:01:41 +02:00
i915_gem_gtt.h drm/i915/chv: PPAT setup for Cherryview 2014-05-06 18:29:34 +02:00
i915_gem_stolen.c drm/i915: restrict vt-d stolen memory workaround to pre-gen8 2014-03-31 10:45:34 +02:00
i915_gem_tiling.c drm/i915: prefer struct drm_i915_private to drm_i915_private_t 2014-03-31 15:34:21 +02:00
i915_gpu_error.c drm/i915: Move semaphore specific ring members to struct 2014-05-05 10:56:52 +02:00
i915_ioc32.c
i915_irq.c drm/i915: Make sprite updates atomic 2014-05-06 10:18:02 +02:00
i915_params.c drm/i915: Add debug module option for VTd validation 2014-04-03 11:23:11 +02:00
i915_reg.h drm/i915: add various missing GTI/Gunit register definitions 2014-05-07 10:01:38 +02:00
i915_suspend.c drm/i915: Kill most of the FBC register save/restore 2014-01-25 21:17:03 +01:00
i915_sysfs.c drm/i915: get a runtime PM ref for debugfs entries where needed 2014-05-05 09:08:55 +02:00
i915_trace.h drm/i915: Add pipe update trace points 2014-05-06 10:18:03 +02:00
i915_trace_points.c
i915_ums.c drm/i915: Only restore backlight combination mode reg for ums 2014-01-24 17:22:45 +01:00
intel_acpi.c Merge branch 'acpi-dsm' 2014-01-12 23:45:52 +01:00
intel_bios.c drm/i915: Validate VBT header before trusting it 2014-05-05 09:08:59 +02:00
intel_bios.h Merge tag 'drm-intel-next-2014-04-16' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-05-01 09:11:37 +10:00
intel_crt.c drm/i915/crt: Remove ->mode_set callback 2014-05-05 10:56:59 +02:00
intel_ddi.c drm/i915: fix WARNs when reading DDI state while suspended 2014-04-01 22:53:45 +02:00
intel_display.c drm/i915: Convert gmch platforms over to ilk_crtc_{enable, disable}_planes() 2014-05-12 19:15:40 +02:00
intel_dp.c drm/i915: vlv: check port power domain instead of only D0 for eDP VDD on 2014-05-05 09:09:03 +02:00
intel_drv.h drm/i915: Make sprite updates atomic 2014-05-06 10:18:02 +02:00
intel_dsi.c drm/i915: Enable RANDOM resolution support for MIPI panels 2014-04-09 21:54:31 +02:00
intel_dsi.h drm/i915: Parameterize the Clockstop and escape_clk_div 2014-04-09 21:54:29 +02:00
intel_dsi_cmd.c drm/i915: Send DPI command explicitely in LP mode 2014-04-09 21:54:30 +02:00
intel_dsi_cmd.h drm/i915: Send DPI command explicitely in LP mode 2014-04-09 21:54:30 +02:00
intel_dsi_pll.c drm/i915: Try harder to get best m, n, p values with minimal error 2013-12-11 23:52:18 +01:00
intel_dvo.c drm/i915/dvo: Remove ->mode_set callback 2014-05-05 10:56:55 +02:00
intel_fbdev.c drm/i915: Discard BIOS framebuffers too small to accommodate chosen mode 2014-04-24 13:34:37 +03:00
intel_hdmi.c Merge tag 'drm-intel-next-2014-04-16' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-05-01 09:11:37 +10:00
intel_i2c.c drm/i915: Disable dp aux irq on g4x 2014-02-07 16:40:07 +01:00
intel_lvds.c drm/i915: Don't set the 8to6 dither flag when not scaling 2014-04-13 11:59:32 +02:00
intel_modes.c
intel_opregion.c Merge tag 'drm-intel-fixes-2014-02-06' of ssh://git.freedesktop.org/git/drm-intel into drm-next 2014-02-11 12:57:27 +10:00
intel_overlay.c Merge tag 'drm-intel-fixes-2014-04-04' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-04-05 16:14:21 +10:00
intel_panel.c Merge tag 'drm-intel-next-2014-04-16' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-05-01 09:11:37 +10:00
intel_pm.c drm/i915: Merge LP1+ watermarks in safer way 2014-05-06 10:18:04 +02:00
intel_ringbuffer.c drm/i915: Use hash tables for the command parser 2014-05-12 19:15:51 +02:00
intel_ringbuffer.h drm/i915: Use hash tables for the command parser 2014-05-12 19:15:51 +02:00
intel_sdvo.c drm/i915/sdvo: Remove ->mode_set callback 2014-05-05 10:57:00 +02:00
intel_sdvo_regs.h drm/i915: use __packed instead of __attribute__((packed)) 2013-12-03 18:19:49 +01:00
intel_sideband.c drm/i915: Warn when DPIO read returns 0xffffffff 2014-04-03 11:28:39 +02:00
intel_sprite.c drm/i915: Add pipe update trace points 2014-05-06 10:18:03 +02:00
intel_tv.c drm/i915/tv: Remove ->mode_set callback 2014-05-05 10:56:59 +02:00
intel_uncore.c drm/i915/bdw: enable eDRAM. 2014-05-05 09:09:23 +02:00
Kconfig Merge tag 'drm-intel-next-2014-04-16' of git://anongit.freedesktop.org/drm-intel into drm-next 2014-05-01 09:11:37 +10:00
Makefile Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next 2014-03-18 09:43:56 +01:00