drm/i915: always pin lrc context for vgpu with Intel GVT-g
Subsystems (2)
PATCH 4/7 drm/i915: always pin lrc context for vgpu with Intel GVT-g
Intel GVT-g will perform EXECLIST context shadowing and ring buffer shadowing. The shadow copy is created when guest creates a context. If a context changes its LRCA address, the hypervisor is hard to know whether it is a new context or not. We always pin context objects to global GTT to make life easier.
Signed-off-by Zhiyuan Lv <[email protected]>
Signed-off-by Zhi Wang <[email protected]>
--- drivers/gpu/drm/i915/intel_lrc.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
drivers/gpu/drm/i915/intel_lrc.c +8 -5
@@ -2282,7 +2282,8 @@ void intel_lr_context_free(struct intel_context *ctx) ctx->engine[i].ringbuf;struct intel_engine_cs *ring = ringbuf->ring; -if (ctx == ring->default_context) { +if ((ctx == ring->default_context) || + (intel_vgpu_active (ring->dev))) {intel_unpin_ringbuffer_obj (ringbuf);i915_gem_object_ggtt_unpin (ctx_obj); }
@@ -2353,6 +2354,8 @@ int intel_lr_context_deferred_create(struct intel_context *ctx, struct intel_engine_cs *ring) {const bool is_global_default_ctx = (ctx == ring->default_context); +const bool need_to_pin_ctx = (is_global_default_ctx || + (intel_vgpu_active (ring->dev)));struct drm_device *dev = ring->dev;struct drm_i915_private *dev_priv = dev->dev_private;struct drm_i915_gem_object *ctx_obj;
@@ -2374,7 +2377,7 @@ int intel_lr_context_deferred_create(struct intel_context *ctx,return -ENOMEM ; } -if (is_global_default_ctx) { +if (need_to_pin_ctx) { ret =i915_gem_obj_ggtt_pin (ctx_obj,GEN8_LR_CONTEXT_ALIGN ,PIN_OFFSET_BIAS |GUC_WOPCM_TOP );if (ret) {
@@ -2415,7 +2418,7 @@ int intel_lr_context_deferred_create(struct intel_context *ctx, goto error_free_rbuf; } -if (is_global_default_ctx) { +if (need_to_pin_ctx) { ret =intel_pin_and_map_ringbuffer_obj (dev, ringbuf);if (ret) { DRM_ERROR(
@@ -2464,14 +2467,14 @@ int intel_lr_context_deferred_create(struct intel_context *ctx,return 0 ; error: -if (is_global_default_ctx) +if (need_to_pin_ctx)intel_unpin_ringbuffer_obj (ringbuf); error_destroy_rbuf:intel_destroy_ringbuffer_obj (ringbuf); error_free_rbuf:kfree (ringbuf); error_unpin_ctx: -if (is_global_default_ctx) +if (need_to_pin_ctx)i915_gem_object_ggtt_unpin (ctx_obj);drm_gem_object_unreference (&ctx_obj->base);return ret;
Signature · 6 lines
1.9.1 _______________________________________________ Intel-gfx mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/intel-gfx