From patchwork Thu Aug 11 16:21:00 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Poirier X-Patchwork-Id: 73799 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp192291qga; Thu, 11 Aug 2016 09:23:30 -0700 (PDT) X-Received: by 10.98.200.29 with SMTP id z29mr18520305pff.143.1470932610048; Thu, 11 Aug 2016 09:23:30 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ro7si3887374pab.37.2016.08.11.09.23.25; Thu, 11 Aug 2016 09:23:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932955AbcHKQXW (ORCPT + 27 others); Thu, 11 Aug 2016 12:23:22 -0400 Received: from mail-it0-f52.google.com ([209.85.214.52]:34980 "EHLO mail-it0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932739AbcHKQVX (ORCPT ); Thu, 11 Aug 2016 12:21:23 -0400 Received: by mail-it0-f52.google.com with SMTP id u186so938438ita.0 for ; Thu, 11 Aug 2016 09:21:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=EGRmgDU/jd2xrslPTQK0rxhB18zuDzXjItCaZ32f7oQ=; b=DXNBxd3NPofTYV+QosM+dlvE77LoKcALF/W2DBPJgEre9JYHJi1LFVpl90VxG7A24e W131DZFw86EpM+BUlRZfNEEU908UNHe8QIJhLsznLklq5oTOxMJTUnN2omxSxdDnLNzM wuSNWMEVa8QN5xB5wMbqpvMaOgEeR+mzLa9wE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=EGRmgDU/jd2xrslPTQK0rxhB18zuDzXjItCaZ32f7oQ=; b=b/HkMPDCaHAg+HHA+r0UcDaAO6nl0B/x9StZeLV5uXp0L2UXegqds1EsJHu5V9oI54 xVRJGvgSXL02IELpwSimLHobhqrM1shN7xqProeacZgBYE/R5BGrO150l+Im10icKzF6 SHShLU5OwAziNnZ8ggAvxuXSLwc23+GggZCAtNEZLhsK1Z2sscu8qOlzvE7AjHLmQlwl q6GzLxguYE7/OqMo0v3KhB27vJZXeKHe08wPQPah0eAhT1D0PtaNfEB+UPfLhPqPUkFg SC22J2EyE2OrpbTedrIlMKQYSG0S0NuvrBsLsVXI2RSb9JopBSVE2JaSgYgNQJzIe9xR ieqw== X-Gm-Message-State: AEkoouu88+K2FRSj9sf+W8dB9pT80OpPkRZuJT7xf542MsestEvZiP7KvNJaWzFFo67FQaiL X-Received: by 10.36.204.68 with SMTP id x65mr11071683itf.54.1470932482507; Thu, 11 Aug 2016 09:21:22 -0700 (PDT) Received: from t430.cg.shawcable.net (S0106002369de4dac.cg.shawcable.net. [68.147.8.254]) by smtp.gmail.com with ESMTPSA id d71sm1605485ioj.33.2016.08.11.09.21.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 11 Aug 2016 09:21:20 -0700 (PDT) From: Mathieu Poirier To: peterz@infradead.org Cc: acme@kernel.org, jolsa@kernel.org, mingo@redhat.com, vince@deater.net, mtk.manpages@gmail.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Mathieu Poirier , Alexander Shishkin Subject: [PATCH V5 5/9] perf: Passing struct perf_event to function setup_aux() Date: Thu, 11 Aug 2016 10:21:00 -0600 Message-Id: <1470932464-726-6-git-send-email-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1470932464-726-1-git-send-email-mathieu.poirier@linaro.org> References: <1470932464-726-1-git-send-email-mathieu.poirier@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some information, like driver specific configuration, is found in the hw_perf_event structure. As such pass a 'struct perf_event' to function setup_aux() rather than just the CPU number so that individual drivers can make the right configuration when setting up a session. For example the sink definition for a given CoreSight session can be embedded in the perf cmd line: perf record -e cs_etm/@sink=20070000.etr/ ... The string "sink=20070000.etr" is conveyed to the kernel by way of of an ioctl() call. From there is is handed over to the PMU driver for parsing and processing. If the format is valid the substring "20070000.etr" is kept in the hw_perf_event::drv_configs for future reference. When pmu::setup_aux() is called information about both the perf_event::cpu and the hw_perf_event::drv_configs is needed to setup a path from source to sink. Signed-off-by: Mathieu Poirier Cc: Alexander Shishkin --- arch/x86/events/intel/bts.c | 4 +++- arch/x86/events/intel/pt.c | 5 +++-- drivers/hwtracing/coresight/coresight-etm-perf.c | 4 ++-- include/linux/perf_event.h | 2 +- kernel/events/ring_buffer.c | 2 +- 5 files changed, 10 insertions(+), 7 deletions(-) -- 2.7.4 diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c index 0a6e393a2e62..98155c2dfcce 100644 --- a/arch/x86/events/intel/bts.c +++ b/arch/x86/events/intel/bts.c @@ -68,8 +68,10 @@ static size_t buf_size(struct page *page) } static void * -bts_buffer_setup_aux(int cpu, void **pages, int nr_pages, bool overwrite) +bts_buffer_setup_aux(struct perf_event *event, void **pages, + int nr_pages, bool overwrite) { + int cpu = event->cpu; struct bts_buffer *buf; struct page *page; int node = (cpu == -1) ? cpu : cpu_to_node(cpu); diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c index 04bb5fb5a8d7..5178c5de0b19 100644 --- a/arch/x86/events/intel/pt.c +++ b/arch/x86/events/intel/pt.c @@ -1003,10 +1003,11 @@ static int pt_buffer_init_topa(struct pt_buffer *buf, unsigned long nr_pages, * Return: Our private PT buffer structure. */ static void * -pt_buffer_setup_aux(int cpu, void **pages, int nr_pages, bool snapshot) +pt_buffer_setup_aux(struct perf_event *event, void **pages, + int nr_pages, bool snapshot) { struct pt_buffer *buf; - int node, ret; + int node, ret, cpu = event->cpu; if (!nr_pages) return NULL; diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c index 755125f7917f..f4174f36c5a0 100644 --- a/drivers/hwtracing/coresight/coresight-etm-perf.c +++ b/drivers/hwtracing/coresight/coresight-etm-perf.c @@ -155,7 +155,7 @@ static void etm_free_aux(void *data) schedule_work(&event_data->work); } -static void *etm_setup_aux(int event_cpu, void **pages, +static void *etm_setup_aux(struct perf_event *event, void **pages, int nr_pages, bool overwrite) { int cpu; @@ -163,7 +163,7 @@ static void *etm_setup_aux(int event_cpu, void **pages, struct coresight_device *sink; struct etm_event_data *event_data = NULL; - event_data = alloc_event_data(event_cpu); + event_data = alloc_event_data(event->cpu); if (!event_data) return NULL; diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 1ea2028d9848..16f797561907 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -421,7 +421,7 @@ struct pmu { /* * Set up pmu-private data structures for an AUX area */ - void *(*setup_aux) (int cpu, void **pages, + void *(*setup_aux) (struct perf_event *event, void **pages, int nr_pages, bool overwrite); /* optional */ diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c index ae9b90dc9a5a..56aba90af437 100644 --- a/kernel/events/ring_buffer.c +++ b/kernel/events/ring_buffer.c @@ -616,7 +616,7 @@ int rb_alloc_aux(struct ring_buffer *rb, struct perf_event *event, goto out; } - rb->aux_priv = event->pmu->setup_aux(event->cpu, rb->aux_pages, nr_pages, + rb->aux_priv = event->pmu->setup_aux(event, rb->aux_pages, nr_pages, overwrite); if (!rb->aux_priv) goto out;