2019-03-29 14:12:17 +08:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
2018-10-11 02:06:46 +08:00
|
|
|
From: Min He <min.he@intel.com>
|
|
|
|
Date: Fri, 14 Sep 2018 16:10:17 +0800
|
2019-03-29 14:12:17 +08:00
|
|
|
Subject: [PATCH] drm/i915/gvt: added option to disable wa_ctx shadowing
|
2018-10-11 02:06:46 +08:00
|
|
|
|
|
|
|
This patch add an option in GVTg to disable shadowing wa_ctx. In current
|
|
|
|
IVI environment, since Dom0 and DomU has the same i915, the wa_ctx of
|
|
|
|
them is same. So no need to do shadow copy of wa_ctx.
|
|
|
|
By default, shadowing wa_ctx is disabled. If for testing purpose, people
|
|
|
|
can enable it manually by modifying the code.
|
|
|
|
|
|
|
|
Change-Id: I535af0a720e7ccfbca80686e45c79c5c2a3dd9c6
|
|
|
|
Signed-off-by: Min He <min.he@intel.com>
|
|
|
|
Reviewed-by: Singh, Satyeshwar <satyeshwar.singh@intel.com>
|
2018-10-16 02:05:43 +08:00
|
|
|
Reviewed-on:
|
2018-10-11 02:06:46 +08:00
|
|
|
Reviewed-by: Jiang, Fei <fei.jiang@intel.com>
|
|
|
|
Reviewed-by: Dong, Eddie <eddie.dong@intel.com>
|
|
|
|
Tested-by: Dong, Eddie <eddie.dong@intel.com>
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/i915/gvt/scheduler.c | 18 ++++++++++++------
|
|
|
|
1 file changed, 12 insertions(+), 6 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
|
2020-05-05 09:02:46 +08:00
|
|
|
index 4c3efb417..31262400b 100644
|
2018-10-11 02:06:46 +08:00
|
|
|
--- a/drivers/gpu/drm/i915/gvt/scheduler.c
|
|
|
|
+++ b/drivers/gpu/drm/i915/gvt/scheduler.c
|
|
|
|
@@ -41,6 +41,8 @@
|
|
|
|
#define RING_CTX_OFF(x) \
|
|
|
|
offsetof(struct execlist_ring_context, x)
|
|
|
|
|
|
|
|
+bool gvt_shadow_wa_ctx = false;
|
|
|
|
+
|
|
|
|
static void set_context_pdp_root_pointer(
|
|
|
|
struct execlist_ring_context *ring_context,
|
|
|
|
u32 pdp[8])
|
|
|
|
@@ -403,7 +405,8 @@ int intel_gvt_scan_and_shadow_workload(struct intel_vgpu_workload *workload)
|
|
|
|
goto err_unpin;
|
|
|
|
|
|
|
|
if ((workload->ring_id == RCS) &&
|
|
|
|
- (workload->wa_ctx.indirect_ctx.size != 0)) {
|
|
|
|
+ (workload->wa_ctx.indirect_ctx.size != 0)
|
|
|
|
+ && gvt_shadow_wa_ctx) {
|
|
|
|
ret = intel_gvt_scan_and_shadow_wa_ctx(&workload->wa_ctx);
|
|
|
|
if (ret)
|
|
|
|
goto err_shadow;
|
|
|
|
@@ -628,10 +631,12 @@ static int prepare_workload(struct intel_vgpu_workload *workload)
|
|
|
|
goto err_unpin_mm;
|
|
|
|
}
|
|
|
|
|
|
|
|
- ret = prepare_shadow_wa_ctx(&workload->wa_ctx);
|
|
|
|
- if (ret) {
|
|
|
|
- gvt_vgpu_err("fail to prepare_shadow_wa_ctx\n");
|
|
|
|
- goto err_shadow_batch;
|
|
|
|
+ if (gvt_shadow_wa_ctx) {
|
|
|
|
+ ret = prepare_shadow_wa_ctx(&workload->wa_ctx);
|
|
|
|
+ if (ret) {
|
|
|
|
+ gvt_vgpu_err("fail to prepare_shadow_wa_ctx\n");
|
|
|
|
+ goto err_shadow_batch;
|
|
|
|
+ }
|
|
|
|
}
|
|
|
|
|
|
|
|
if (workload->prepare) {
|
|
|
|
@@ -887,7 +892,8 @@ static void complete_current_workload(struct intel_gvt *gvt, int ring_id)
|
|
|
|
|
|
|
|
if (!workload->status) {
|
|
|
|
release_shadow_batch_buffer(workload);
|
|
|
|
- release_shadow_wa_ctx(&workload->wa_ctx);
|
|
|
|
+ if(gvt_shadow_wa_ctx)
|
|
|
|
+ release_shadow_wa_ctx(&workload->wa_ctx);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (workload->status || (vgpu->resetting_eng & ENGINE_MASK(ring_id))) {
|
|
|
|
--
|
2019-04-08 18:08:36 +08:00
|
|
|
https://clearlinux.org
|
2018-10-11 02:06:46 +08:00
|
|
|
|