[Intel-gfx] [PATCH v2] drm/i915: Sanitize engine context sizes
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Wed Apr 26 13:40:06 UTC 2017
On 26/04/2017 14:16, Tvrtko Ursulin wrote:
> On 26/04/2017 13:20, Joonas Lahtinen wrote:
>> Pre-calculate engine context size based on engine class and device
>> generation and store it in the engine instance.
>>
>> v2:
>> - Squash and get rid of hw_context_size (Chris)
>>
>> Signed-off-by: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
>> Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
>> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>> Cc: Oscar Mateo <oscar.mateo at intel.com>
>> Cc: Zhenyu Wang <zhenyuw at linux.intel.com>
>> Cc: intel-gvt-dev at lists.freedesktop.org
>> ---
>> drivers/gpu/drm/i915/gvt/scheduler.c | 6 +--
>> drivers/gpu/drm/i915/i915_drv.h | 1 -
>> drivers/gpu/drm/i915/i915_gem_context.c | 59 +++-------------------
>> drivers/gpu/drm/i915/i915_guc_submission.c | 3 +-
>> drivers/gpu/drm/i915/i915_reg.h | 10 ----
>> drivers/gpu/drm/i915/intel_engine_cs.c | 78
>> ++++++++++++++++++++++++++++++
>> drivers/gpu/drm/i915/intel_lrc.c | 54 +--------------------
>> drivers/gpu/drm/i915/intel_lrc.h | 2 -
>> drivers/gpu/drm/i915/intel_ringbuffer.h | 7 +--
>> 9 files changed, 93 insertions(+), 127 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c
>> b/drivers/gpu/drm/i915/gvt/scheduler.c
>> index a77db23..ac538dc 100644
>> --- a/drivers/gpu/drm/i915/gvt/scheduler.c
>> +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
>> @@ -69,8 +69,7 @@ static int populate_shadow_context(struct
>> intel_vgpu_workload *workload)
>> gvt_dbg_sched("ring id %d workload lrca %x", ring_id,
>> workload->ctx_desc.lrca);
>>
>> - context_page_num = intel_lr_context_size(
>> - gvt->dev_priv->engine[ring_id]);
>> + context_page_num = gvt->dev_priv->engine[ring_id]->context_size;
>>
>> context_page_num = context_page_num >> PAGE_SHIFT;
>>
>> @@ -333,8 +332,7 @@ static void update_guest_context(struct
>> intel_vgpu_workload *workload)
>> gvt_dbg_sched("ring id %d workload lrca %x\n", ring_id,
>> workload->ctx_desc.lrca);
>>
>> - context_page_num = intel_lr_context_size(
>> - gvt->dev_priv->engine[ring_id]);
>> + context_page_num = gvt->dev_priv->engine[ring_id]->context_size;
>>
>> context_page_num = context_page_num >> PAGE_SHIFT;
>>
>> diff --git a/drivers/gpu/drm/i915/i915_drv.h
>> b/drivers/gpu/drm/i915/i915_drv.h
>> index 357b6c6..4b54b92 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.h
>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> @@ -2359,7 +2359,6 @@ struct drm_i915_private {
>> */
>> struct mutex av_mutex;
>>
>> - uint32_t hw_context_size;
>> struct list_head context_list;
>>
>> u32 fdi_rx_config;
>> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c
>> b/drivers/gpu/drm/i915/i915_gem_context.c
>> index 8bd0c49..b69a026 100644
>> --- a/drivers/gpu/drm/i915/i915_gem_context.c
>> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
>> @@ -92,33 +92,6 @@
>>
>> #define ALL_L3_SLICES(dev) (1 << NUM_L3_SLICES(dev)) - 1
>>
>> -static int get_context_size(struct drm_i915_private *dev_priv)
>> -{
>> - int ret;
>> - u32 reg;
>> -
>> - switch (INTEL_GEN(dev_priv)) {
>> - case 6:
>> - reg = I915_READ(CXT_SIZE);
>> - ret = GEN6_CXT_TOTAL_SIZE(reg) * 64;
>> - break;
>> - case 7:
>> - reg = I915_READ(GEN7_CXT_SIZE);
>> - if (IS_HASWELL(dev_priv))
>> - ret = HSW_CXT_TOTAL_SIZE;
>> - else
>> - ret = GEN7_CXT_TOTAL_SIZE(reg) * 64;
>> - break;
>> - case 8:
>> - ret = GEN8_CXT_TOTAL_SIZE;
>> - break;
>> - default:
>> - BUG();
>> - }
>> -
>> - return ret;
>> -}
>> -
>> void i915_gem_context_free(struct kref *ctx_ref)
>> {
>> struct i915_gem_context *ctx = container_of(ctx_ref,
>> typeof(*ctx), ref);
>> @@ -266,11 +239,12 @@ __create_hw_context(struct drm_i915_private
>> *dev_priv,
>> list_add_tail(&ctx->link, &dev_priv->context_list);
>> ctx->i915 = dev_priv;
>>
>> - if (dev_priv->hw_context_size) {
>> + if (dev_priv->engine[RCS]->context_size) {
>> struct drm_i915_gem_object *obj;
>> struct i915_vma *vma;
>>
>> - obj = alloc_context_obj(dev_priv, dev_priv->hw_context_size);
>> + obj = alloc_context_obj(dev_priv,
>> + dev_priv->engine[RCS]->context_size);
>> if (IS_ERR(obj)) {
>> ret = PTR_ERR(obj);
>> goto err_out;
>> @@ -443,21 +417,6 @@ int i915_gem_context_init(struct drm_i915_private
>> *dev_priv)
>> BUILD_BUG_ON(MAX_CONTEXT_HW_ID > INT_MAX);
>> ida_init(&dev_priv->context_hw_ida);
>>
>> - if (i915.enable_execlists) {
>> - /* NB: intentionally left blank. We will allocate our own
>> - * backing objects as we need them, thank you very much */
>> - dev_priv->hw_context_size = 0;
>> - } else if (HAS_HW_CONTEXTS(dev_priv)) {
>> - dev_priv->hw_context_size =
>> - round_up(get_context_size(dev_priv),
>> - I915_GTT_PAGE_SIZE);
>
> Is this rounding up lost when used from __create_hw_context?
Also lost seems keeping hw_context_size at zero when !HAS_HW_CONTEXT,
deliberate? Looks like the replacement of contexts_enabled will not work
as expected.
Regards,
Tvrtko
More information about the Intel-gfx
mailing list