Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915: kill resource streamer support

After disabling resource streamer on ICL (due to it actually not
existing there), I got feedback that there have been some experimental
patches for mesa to use RS years ago, but nothing ever landed or shipped
because there was no performance improvement.

This removes it from kernel keeping the uapi defines around for
compatibility.

v2: - re-add the inadvertent removal of CTX_CTRL_INHIBIT_SYN_CTX_SWITCH
- don't bother trying to document removed params on uapi header:
applications should know that from the query.
(from Chris)

v3: - disable CTX_CTRL_RS_CTX_ENABLE istead of removing it
- reword commit message after Daniele confirmed no performance
regression on his machine
- reword commit message to make clear RS is being removed due to
never been used
v4: - move I915_EXEC_RESOURCE_STREAMER to __I915_EXEC_ILLEGAL_FLAGS so
the check on ioctl() is made much earlier by
i915_gem_check_execbuffer() (suggested by Tvrtko)

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Acked-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20180803232443.17193-1-lucas.demarchi@intel.com

authored by

Lucas De Marchi and committed by
Chris Wilson
08e3e21a 48928d4b

+9 -33
+1 -1
drivers/gpu/drm/i915/i915_drv.c
··· 373 373 value = 2; 374 374 break; 375 375 case I915_PARAM_HAS_RESOURCE_STREAMER: 376 - value = HAS_RESOURCE_STREAMER(dev_priv); 376 + value = 0; 377 377 break; 378 378 case I915_PARAM_HAS_POOLED_EU: 379 379 value = HAS_POOLED_EU(dev_priv);
-2
drivers/gpu/drm/i915/i915_drv.h
··· 2610 2610 #define USES_GUC_SUBMISSION(dev_priv) intel_uc_is_using_guc_submission() 2611 2611 #define USES_HUC(dev_priv) intel_uc_is_using_huc() 2612 2612 2613 - #define HAS_RESOURCE_STREAMER(dev_priv) ((dev_priv)->info.has_resource_streamer) 2614 - 2615 2613 #define HAS_POOLED_EU(dev_priv) ((dev_priv)->info.has_pooled_eu) 2616 2614 2617 2615 #define INTEL_PCH_DEVICE_ID_MASK 0xff80
+3 -15
drivers/gpu/drm/i915/i915_gem_execbuffer.c
··· 64 64 #define BATCH_OFFSET_BIAS (256*1024) 65 65 66 66 #define __I915_EXEC_ILLEGAL_FLAGS \ 67 - (__I915_EXEC_UNKNOWN_FLAGS | I915_EXEC_CONSTANTS_MASK) 67 + (__I915_EXEC_UNKNOWN_FLAGS | \ 68 + I915_EXEC_CONSTANTS_MASK | \ 69 + I915_EXEC_RESOURCE_STREAMER) 68 70 69 71 /* Catch emission of unexpected errors for CI! */ 70 72 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM) ··· 2222 2220 eb.engine = eb_select_engine(eb.i915, file, args); 2223 2221 if (!eb.engine) 2224 2222 return -EINVAL; 2225 - 2226 - if (args->flags & I915_EXEC_RESOURCE_STREAMER) { 2227 - if (!HAS_RESOURCE_STREAMER(eb.i915)) { 2228 - DRM_DEBUG("RS is only allowed for Haswell and Gen8 - Gen10\n"); 2229 - return -EINVAL; 2230 - } 2231 - if (eb.engine->id != RCS) { 2232 - DRM_DEBUG("RS is not available on %s\n", 2233 - eb.engine->name); 2234 - return -EINVAL; 2235 - } 2236 - 2237 - eb.batch_flags |= I915_DISPATCH_RS; 2238 - } 2239 2223 2240 2224 if (args->flags & I915_EXEC_FENCE_IN) { 2241 2225 in_fence = sync_file_get_fence(lower_32_bits(args->rsvd2));
-4
drivers/gpu/drm/i915/i915_pci.c
··· 368 368 .has_ddi = 1, \ 369 369 .has_fpga_dbg = 1, \ 370 370 .has_psr = 1, \ 371 - .has_resource_streamer = 1, \ 372 371 .has_dp_mst = 1, \ 373 372 .has_rc6p = 0 /* RC6p removed-by HSW */, \ 374 373 .has_runtime_pm = 1 ··· 440 441 .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, 441 442 .has_64bit_reloc = 1, 442 443 .has_runtime_pm = 1, 443 - .has_resource_streamer = 1, 444 444 .has_rc6 = 1, 445 445 .has_logical_ring_contexts = 1, 446 446 .has_gmch_display = 1, ··· 513 515 .has_runtime_pm = 1, \ 514 516 .has_pooled_eu = 0, \ 515 517 .has_csr = 1, \ 516 - .has_resource_streamer = 1, \ 517 518 .has_rc6 = 1, \ 518 519 .has_dp_mst = 1, \ 519 520 .has_logical_ring_contexts = 1, \ ··· 601 604 GEN(11), \ 602 605 .ddb_size = 2048, \ 603 606 .has_csr = 0, \ 604 - .has_resource_streamer = 0, \ 605 607 .has_logical_ring_elsq = 1 606 608 607 609 static const struct intel_device_info intel_icelake_11_info = {
-1
drivers/gpu/drm/i915/intel_device_info.h
··· 103 103 func(has_psr); \ 104 104 func(has_rc6); \ 105 105 func(has_rc6p); \ 106 - func(has_resource_streamer); \ 107 106 func(has_runtime_pm); \ 108 107 func(has_snoop); \ 109 108 func(has_coherent_ggtt); \
+4 -6
drivers/gpu/drm/i915/intel_lrc.c
··· 2065 2065 2066 2066 /* FIXME(BDW): Address space and security selectors. */ 2067 2067 *cs++ = MI_BATCH_BUFFER_START_GEN8 | 2068 - (flags & I915_DISPATCH_SECURE ? 0 : BIT(8)) | 2069 - (flags & I915_DISPATCH_RS ? MI_BATCH_RESOURCE_STREAMER : 0); 2068 + (flags & I915_DISPATCH_SECURE ? 0 : BIT(8)); 2070 2069 *cs++ = lower_32_bits(offset); 2071 2070 *cs++ = upper_32_bits(offset); 2072 2071 ··· 2583 2584 2584 2585 CTX_REG(regs, CTX_CONTEXT_CONTROL, RING_CONTEXT_CONTROL(engine), 2585 2586 _MASKED_BIT_DISABLE(CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT | 2586 - CTX_CTRL_ENGINE_CTX_SAVE_INHIBIT) | 2587 - _MASKED_BIT_ENABLE(CTX_CTRL_INHIBIT_SYN_CTX_SWITCH | 2588 - (HAS_RESOURCE_STREAMER(dev_priv) ? 2589 - CTX_CTRL_RS_CTX_ENABLE : 0))); 2587 + CTX_CTRL_ENGINE_CTX_SAVE_INHIBIT | 2588 + CTX_CTRL_RS_CTX_ENABLE) | 2589 + _MASKED_BIT_ENABLE(CTX_CTRL_INHIBIT_SYN_CTX_SWITCH)); 2590 2590 CTX_REG(regs, CTX_RING_HEAD, RING_HEAD(base), 0); 2591 2591 CTX_REG(regs, CTX_RING_TAIL, RING_TAIL(base), 0); 2592 2592 CTX_REG(regs, CTX_RING_BUFFER_START, RING_START(base), 0);
+1 -3
drivers/gpu/drm/i915/intel_ringbuffer.c
··· 1980 1980 return PTR_ERR(cs); 1981 1981 1982 1982 *cs++ = MI_BATCH_BUFFER_START | (dispatch_flags & I915_DISPATCH_SECURE ? 1983 - 0 : MI_BATCH_PPGTT_HSW | MI_BATCH_NON_SECURE_HSW) | 1984 - (dispatch_flags & I915_DISPATCH_RS ? 1985 - MI_BATCH_RESOURCE_STREAMER : 0); 1983 + 0 : MI_BATCH_PPGTT_HSW | MI_BATCH_NON_SECURE_HSW); 1986 1984 /* bit0-7 is the length on GEN6+ */ 1987 1985 *cs++ = offset; 1988 1986 intel_ring_advance(rq, cs);
-1
drivers/gpu/drm/i915/intel_ringbuffer.h
··· 474 474 unsigned int dispatch_flags); 475 475 #define I915_DISPATCH_SECURE BIT(0) 476 476 #define I915_DISPATCH_PINNED BIT(1) 477 - #define I915_DISPATCH_RS BIT(2) 478 477 void (*emit_breadcrumb)(struct i915_request *rq, u32 *cs); 479 478 int emit_breadcrumb_sz; 480 479