From patchwork Thu May 7 14:15:52 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Bragg X-Patchwork-Id: 6358531 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id B3D899F32B for ; Thu, 7 May 2015 14:16:13 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C550E203AC for ; Thu, 7 May 2015 14:16:12 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 23FDB203C2 for ; Thu, 7 May 2015 14:16:11 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 642BB6E829; Thu, 7 May 2015 07:16:10 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wi0-f175.google.com (mail-wi0-f175.google.com [209.85.212.175]) by gabe.freedesktop.org (Postfix) with ESMTP id 18CB46E848; Thu, 7 May 2015 07:16:09 -0700 (PDT) Received: by widdi4 with SMTP id di4so244236066wid.0; Thu, 07 May 2015 07:16:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=K3VN3UYdvot1B/V5vM/pXbFYn+rT81TMvovYQixQJcQ=; b=bk1pkqsqjnesPvUFOXCfmR/K7fRRQ05paR7SKvk6j1Q1o/yNiQfV8Om2IGoAXN8gtv iibLoM8kUH0ZB9FoRJjlIMPK5BOI9PqTJvamiWIR1D3/zuHmOTX28SmwZshjh95AkxBu V1o7g7VlMbY4qLqYGZu+flYmmWqMGx6+I3QYIuSh3ozTR45NMvF0F4Xw/sJBWxpbZGyI ZOdLtK2yOVcukSw+1RoWdbHjG+Mi+k0U8AFU64Hj0fEp+lpcpYlDqU4JDRxa3IgubxPT MxPWxxzQh1DBe4zEAnTA2w8fqMbOafAf2j2hxziWilVlFLp7+M0XHyNq0iqUo3Kl1fnB HgOg== X-Received: by 10.194.5.103 with SMTP id r7mr7771586wjr.47.1431008168381; Thu, 07 May 2015 07:16:08 -0700 (PDT) Received: from sixbynine.org (cpc26-heme10-2-0-cust305.9-1.cable.virginm.net. [86.3.57.50]) by mx.google.com with ESMTPSA id js3sm3688324wjc.5.2015.05.07.07.16.07 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 May 2015 07:16:07 -0700 (PDT) From: Robert Bragg To: intel-gfx@lists.freedesktop.org Date: Thu, 7 May 2015 15:15:52 +0100 Message-Id: <1431008154-6833-10-git-send-email-robert@sixbynine.org> X-Mailer: git-send-email 2.3.2 In-Reply-To: <1431008154-6833-1-git-send-email-robert@sixbynine.org> References: <1431008154-6833-1-git-send-email-robert@sixbynine.org> Cc: Peter Zijlstra , David Airlie , linux-api@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Ingo Molnar , Paul Mackerras , Arnaldo Carvalho de Melo , Daniel Vetter Subject: [Intel-gfx] [RFC PATCH 09/11] drm/i915: Add dev.i915.oa_event_paranoid sysctl option 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-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Consistent with the kernel.perf_event_paranoid sysctl option that can allow non-root users to access system wide cpu metrics, this can optionally allow non-root users to access system wide OA counter metrics from Gen graphics hardware. Signed-off-by: Robert Bragg --- drivers/gpu/drm/i915/i915_drv.h | 2 ++ drivers/gpu/drm/i915/i915_oa_perf.c | 40 ++++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 1e65dc2..7bc7243 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1831,6 +1831,8 @@ struct drm_i915_private { struct hrtimer timer; struct pt_regs dummy_regs; + struct ctl_table_header *sysctl_header; + struct perf_event *exclusive_event; struct intel_context *specific_ctx; bool event_active; diff --git a/drivers/gpu/drm/i915/i915_oa_perf.c b/drivers/gpu/drm/i915/i915_oa_perf.c index d0e144c..c3e5059 100644 --- a/drivers/gpu/drm/i915/i915_oa_perf.c +++ b/drivers/gpu/drm/i915/i915_oa_perf.c @@ -11,6 +11,8 @@ #define FREQUENCY 200 #define PERIOD max_t(u64, 10000, NSEC_PER_SEC / FREQUENCY) +static u32 i915_oa_event_paranoid = true; + static int hsw_perf_format_sizes[] = { 64, /* A13_HSW */ 128, /* A29_HSW */ @@ -548,7 +550,8 @@ static int i915_oa_event_init(struct perf_event *event) } } - if (!dev_priv->oa_pmu.specific_ctx && !capable(CAP_SYS_ADMIN)) + if (!dev_priv->oa_pmu.specific_ctx && + i915_oa_event_paranoid && !capable(CAP_SYS_ADMIN)) return -EACCES; mutex_lock(&dev_priv->dev->struct_mutex); @@ -795,6 +798,37 @@ void i915_oa_context_unpin_notify(struct drm_i915_private *dev_priv, spin_unlock_irqrestore(&dev_priv->oa_pmu.lock, flags); } +static struct ctl_table oa_table[] = { + { + .procname = "oa_event_paranoid", + .data = &i915_oa_event_paranoid, + .maxlen = sizeof(i915_oa_event_paranoid), + .mode = 0644, + .proc_handler = proc_dointvec, + }, + {} +}; + +static struct ctl_table i915_root[] = { + { + .procname = "i915", + .maxlen = 0, + .mode = 0555, + .child = oa_table, + }, + {} +}; + +static struct ctl_table dev_root[] = { + { + .procname = "dev", + .maxlen = 0, + .mode = 0555, + .child = i915_root, + }, + {} +}; + void i915_oa_pmu_register(struct drm_device *dev) { struct drm_i915_private *i915 = to_i915(dev); @@ -802,6 +836,8 @@ void i915_oa_pmu_register(struct drm_device *dev) if (!IS_HASWELL(dev)) return; + i915->oa_pmu.sysctl_header = register_sysctl_table(dev_root); + /* We need to be careful about forwarding cpu metrics to * userspace considering that PERF_PMU_CAP_IS_DEVICE bypasses * the events/core security check that stops an unprivileged @@ -841,6 +877,8 @@ void i915_oa_pmu_unregister(struct drm_device *dev) if (i915->oa_pmu.pmu.event_init == NULL) return; + unregister_sysctl_table(i915->oa_pmu.sysctl_header); + perf_pmu_unregister(&i915->oa_pmu.pmu); i915->oa_pmu.pmu.event_init = NULL; }