From patchwork Tue Jul 18 07:51:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhenyu Wang X-Patchwork-Id: 9847135 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 5F42A602C8 for ; Tue, 18 Jul 2017 07:51:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 553D625F31 for ; Tue, 18 Jul 2017 07:51:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 49C4B28572; Tue, 18 Jul 2017 07:51:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E9F6E25F31 for ; Tue, 18 Jul 2017 07:51:29 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 095126E2FB; Tue, 18 Jul 2017 07:51:29 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 48E6B6E2F6; Tue, 18 Jul 2017 07:51:26 +0000 (UTC) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga105.fm.intel.com with ESMTP; 18 Jul 2017 00:51:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,377,1496127600"; d="scan'208";a="109176547" Received: from debian-nuc.sh.intel.com ([10.239.13.133]) by orsmga004.jf.intel.com with ESMTP; 18 Jul 2017 00:51:24 -0700 From: Zhenyu Wang To: intel-gfx@lists.freedesktop.org Date: Tue, 18 Jul 2017 15:51:21 +0800 Message-Id: <20170718075122.20518-2-zhenyuw@linux.intel.com> X-Mailer: git-send-email 2.13.2 In-Reply-To: <20170718075122.20518-1-zhenyuw@linux.intel.com> References: <20170718075122.20518-1-zhenyuw@linux.intel.com> Cc: Jiao@freedesktop.org, intel-gvt-dev@lists.freedesktop.org, Pengyuan , Niu@freedesktop.org Subject: [Intel-gfx] [RFC PATCH 1/2] drm/i915: Add perf property support for context HW id X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP In order to support profiling for special context e.g vGPU context, we can expose vGPU context hw id and enable i915 perf property to get target context for profiling. This adds new perf property to assign target context with hw id. Jiao Pengyuan has helped to fix context reference bug in original code. Cc: Jiao, Pengyuan Cc: Niu, Bing Cc: Lionel Landwerlin Cc: intel-gvt-dev@lists.freedesktop.org Signed-off-by: Zhenyu Wang --- drivers/gpu/drm/i915/i915_perf.c | 37 +++++++++++++++++++++++++++++++++++++ include/uapi/drm/i915_drm.h | 5 +++++ 2 files changed, 42 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c index d9f77a4d85db..350fd259b2d0 100644 --- a/drivers/gpu/drm/i915/i915_perf.c +++ b/drivers/gpu/drm/i915/i915_perf.c @@ -348,7 +348,9 @@ struct perf_open_properties { u32 sample_flags; u64 single_context:1; + u64 single_context_hw:1; u64 ctx_handle; + u64 ctx_hw_id; /* OA sampling state */ int metrics_set; @@ -2555,6 +2557,28 @@ i915_perf_open_ioctl_locked(struct drm_i915_private *dev_priv, } } + if (props->single_context_hw) { + struct i915_gem_context *ctx; + + mutex_lock(&dev_priv->drm.struct_mutex); + list_for_each_entry(ctx, &dev_priv->contexts.list, link) { + if (!i915_gem_context_is_default(ctx)) + continue; + + if (ctx->hw_id == props->ctx_hw_id) { + specific_ctx = ctx; + i915_gem_context_get(specific_ctx); + break; + } + } + mutex_unlock(&dev_priv->drm.struct_mutex); + + if (!specific_ctx) { + DRM_DEBUG("Failed to look up HW context id.\n"); + goto err; + } + } + /* * On Haswell the OA unit supports clock gating off for a specific * context and in this mode there's no visibility of metrics for the @@ -2708,6 +2732,14 @@ static int read_properties_unlocked(struct drm_i915_private *dev_priv, props->single_context = 1; props->ctx_handle = value; break; + case DRM_I915_PERF_PROP_CTX_HW_ID: + if (value >= MAX_CONTEXT_HW_ID) { + DRM_DEBUG("Invalid OA HW context ID\n"); + return -EINVAL; + } + props->single_context_hw = 1; + props->ctx_hw_id = value; + break; case DRM_I915_PERF_PROP_SAMPLE_OA: props->sample_flags |= SAMPLE_OA_REPORT; break; @@ -2779,6 +2811,11 @@ static int read_properties_unlocked(struct drm_i915_private *dev_priv, uprop += 2; } + if (props->single_context && props->single_context_hw) { + DRM_DEBUG("Assign context handler and HW id simultaneously\n"); + return -EINVAL; + } + return 0; } diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h index 7ccbd6a2bbe0..ddafa556e290 100644 --- a/include/uapi/drm/i915_drm.h +++ b/include/uapi/drm/i915_drm.h @@ -1381,6 +1381,11 @@ enum drm_i915_perf_property_id { */ DRM_I915_PERF_PROP_OA_EXPONENT, + /** + * The value specifies ctx with hw_id + */ + DRM_I915_PERF_PROP_CTX_HW_ID, + DRM_I915_PERF_PROP_MAX /* non-ABI */ };