clear-pkgs-linux-iot-lts2018/0662-drm-i915-gvt-Support-v...

89 lines
3.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Zhipeng Gong <zhipeng.gong@intel.com>
Date: Mon, 22 Oct 2018 16:53:59 +0800
Subject: [PATCH] drm/i915/gvt: Support vgpu workload priority config
Add support to configure vgpu workload priority, make the param
writable to facilitate performance issue debug.
Signed-off-by: Zhipeng Gong <zhipeng.gong@intel.com>
Signed-off-by: Min He <min.he@intel.com>
V2: rebased to 4.19
Tracked-On: projectacrn/acrn-hypervisor#1552
Signed-off-by: Xinyun Liu <xinyun.liu@intel.com>
Reviewed-by: Min He <min.he@intel.com>
---
drivers/gpu/drm/i915/gvt/scheduler.c | 12 ++++++++++++
drivers/gpu/drm/i915/i915_params.c | 4 ++++
drivers/gpu/drm/i915/i915_params.h | 1 +
3 files changed, 17 insertions(+)
diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
index 50af02d79de1..3f9e6a0731c4 100644
--- a/drivers/gpu/drm/i915/gvt/scheduler.c
+++ b/drivers/gpu/drm/i915/gvt/scheduler.c
@@ -467,6 +467,15 @@ static void gen8_shadow_pid_cid(struct intel_vgpu_workload *workload)
intel_ring_advance(workload->req, cs);
}
+static int sanitize_priority(int priority)
+{
+ if (priority > I915_CONTEXT_MAX_USER_PRIORITY)
+ return I915_CONTEXT_MAX_USER_PRIORITY;
+ else if (priority < I915_CONTEXT_MIN_USER_PRIORITY)
+ return I915_CONTEXT_MIN_USER_PRIORITY;
+ return priority;
+}
+
static void release_shadow_batch_buffer(struct intel_vgpu_workload *workload);
static int prepare_shadow_batch_buffer(struct intel_vgpu_workload *workload)
@@ -701,6 +710,7 @@ static int dispatch_workload(struct intel_vgpu_workload *workload)
{
struct intel_vgpu *vgpu = workload->vgpu;
struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
+ struct intel_vgpu_submission *s = &vgpu->submission;
int ring_id = workload->ring_id;
int ret;
@@ -729,6 +739,8 @@ static int dispatch_workload(struct intel_vgpu_workload *workload)
if (!IS_ERR_OR_NULL(workload->req)) {
gvt_dbg_sched("ring id %d submit workload to i915 %p\n",
ring_id, workload->req);
+ s->shadow_ctx->sched.priority = i915_modparams.gvt_workload_priority =
+ sanitize_priority(i915_modparams.gvt_workload_priority);
i915_request_add(workload->req);
workload->dispatched = true;
}
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 5c6e7dc48b7f..e594fd3cf6c9 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -174,6 +174,10 @@ i915_param_named(enable_dpcd_backlight, bool, 0600,
i915_param_named(enable_gvt, bool, 0400,
"Enable support for Intel GVT-g graphics virtualization host support(default:false)");
+i915_param_named(gvt_workload_priority, int, 0600,
+ "Set GVT-g workload priority, (range: (-1023, 1023), default: 0, "
+ "more positive value means higher priority).");
+
i915_param_named(domain_scaler_owner, int, 0400,
"scaler owners for each domain and for each pipe ids can be from 0-F");
diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index d902bedad72a..a0d1d7e7a3ac 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -75,6 +75,7 @@ struct drm_printer;
PVMMIO_ELSP_SUBMIT | PVMMIO_PLANE_UPDATE \
| PVMMIO_PLANE_WM_UPDATE | PVMMIO_PPGTT_UPDATE \
| PVMMIO_GGTT_UPDATE ) \
+ param(int, gvt_workload_priority, 0) \
param(bool, enable_gvt, false) \
param(bool, enable_conformance_check, true)
--
https://clearlinux.org