From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Zhipeng Gong 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 Signed-off-by: Min He V2: rebased to 4.19 Tracked-On: projectacrn/acrn-hypervisor#1552 Signed-off-by: Xinyun Liu Reviewed-by: Min He --- 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