From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756689AbdJPSdJ (ORCPT ); Mon, 16 Oct 2017 14:33:09 -0400 Received: from mail-sn1nam01on0083.outbound.protection.outlook.com ([104.47.32.83]:6752 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756089AbdJPSdC (ORCPT ); Mon, 16 Oct 2017 14:33:02 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Ganapatrao.Kulkarni@cavium.com; From: Ganapatrao Kulkarni To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Will.Deacon@arm.com, catalin.marinas@arm.com, mark.rutland@arm.com, acme@kernel.org, alexander.shishkin@linux.intel.com, peterz@infradead.org, mingo@redhat.com, jnair@caviumnetworks.com, zhangshaokun@hisilicon.com, Jonathan.Cameron@huawei.com, Robert.Richter@cavium.com, gklkml16@gmail.com Subject: [PATCH v9 2/5] perf tools arm64: Add support for get_cpuid_str function. Date: Tue, 17 Oct 2017 00:02:19 +0530 Message-Id: <20171016183222.25750-3-ganapatrao.kulkarni@cavium.com> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20171016183222.25750-1-ganapatrao.kulkarni@cavium.com> References: <20171016183222.25750-1-ganapatrao.kulkarni@cavium.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: DM5PR2201CA0043.namprd22.prod.outlook.com (10.174.180.160) To CY1PR07MB2570.namprd07.prod.outlook.com (10.167.16.25) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7740763d-b92f-44b6-b3cb-08d514c454de X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:CY1PR07MB2570; X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2570;3:94QmUdnWA/1wPLD1sGcuDk5NvrRl4g15yPE3GdtCule2sQeWE4xWzEqK8mlZI5o395hi8dG9iTB+idUg8ZamchFVYmY9L/k4bXv5xV1nYZj2kiUZDD7dqbFMDVoth7o5jGqKRsfKB2Ye6AQYqzEUL1SFYeAWH6uk/2KJH2XeNMwNMlUv9KFGv1DGHllSYgurR6E/z1ucR/ZxX3+6WltCGnQt76GZFtahmxP5ZECu9Sk8xPb7vWPD0choFRQesetS;25:CCq6LOFkIoKs+0tpW3mGJjyahlTH7YJ1D66BkGlWAosVwLTDDiTaIwGVLQto2SwxcKjggzMDXbnWzgg4kgZHYCnbQI9/+wDJ4qLt0NF/xslMg+GwoxRknghLjkOgoCH+OuuLS1oS5/UjOEK29E6qPVTiQ8JzRrIA+NlO7X8Z0AA2xI6ESW+Dn2vmBBVbDzi6nIfjbTKe+Q89NVZJ4/q+J5wNg6H+E6YQm1bFGdXyJYaKvngjhqWEbkL7HM1By9GrXfCaU3WEdLJno3Es5dCw4UxV42V+zRkX6LoDWlaZw1OpWOCteDm0fqB9sxn7B4Wv0spfQNg04ER2RKluvN19Jg==;31:w8ZOOdejQV6xCrUjfTmvYimhrX8pI53psHepxpMNpMB7T9liJfkolawEkHnhefGzUVwhrPDRWQ0GcPrRRS6mrxEARsQNYewdLPZq7vZ16DlNMS9Skz3eNU3D/RT657FU7sA+NOXmxybPurAgSFKt2bdDuDTNTkg83PyQdRit0nd0wIhee2SqYzkH0WOMlGa7QZrVbes38rJGnpbFr3C5F570vWbVYYnVxTygSK2f4kc= X-MS-TrafficTypeDiagnostic: CY1PR07MB2570: X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2570;20:ky014FVLKrI7TtEZcHa8wW3AnKxKmCLC8VenK/qwF3tnF1S7FjXmLN1LLl61l8WIcWmQd2vh8UQzaYHKDganrlZlriIQY/Cba2dzKYDWp4Z0EEEWWAdIcyFxKEM/7p4gz4DTZsgEt51sa9/CAqqNhpBP7UZRfUDN/9Eu8V8RkGidFfTg2HGWe0lQGDmZVDxGBh9DAj5cI3Nug6lo2qeMTFD3UTcnOt9WcXoUxx5AzJFybCLzeC4aqsKOZXCj31n5twjgKApWdxkmrEBIFR2sGiHHihPfeH8/b3RUqtu5FQMx+/GGwI9C2kB4LrarAG9ALCzc0c/N9vR/pwiQ2J95HhrW/ck13L3+Klcj99Jy4MGZXtUpAyLfvWxjh/Dqs3e/Rf6B0jVK87qqo6LZSiFyiS7S5teW8t7RPZ8LJXZyAAx5FtF+Ycx6OomGKK/wuoKdAYozcnQLI1WZaHNHZ661v+XgX2HCoMIDTpIkDkhFb53A0BexeyTLYc+KT9Y4Puc8;4:9fojTDos67HQY4UXnoF98h1c7dZVETC/eU0kB0nGudir0soZBONmNDrEumudwmlGT/wpgKIDpRm6BmjDpt67nQWIuDZMRZsNikBEoa2KLctKcuKvIDMqH79MsfZfD3o3pFIybyclrn1Hm/GfW3fOq2SpFNFgcHNuJy1+Wxg91JfGwfhH8YnjuZtrjiB94q+GDAzKcqb2KtVPn6pqH77t7si2gFn5HJa9LyQMjUqlstiUFGltrT40Xu6OJZC5WWnl2DAugi5ROjLJeIRgjBOC6UV/H8kRKeN1c9iGRqwlRKmavkV/K+dIL/PPbBDl1abgv0rNC0vEyoE2VkDM3ad3BQ== X-Exchange-Antispam-Report-Test: UriScan:(180628864354917)(209352067349851); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123558100)(20161123560025)(20161123564025)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY1PR07MB2570;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY1PR07MB2570; X-Forefront-PRVS: 0462918D61 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(376002)(346002)(189002)(199003)(5660300001)(86362001)(33646002)(7416002)(25786009)(2906002)(36756003)(7736002)(16526018)(305945005)(81156014)(81166006)(316002)(69596002)(48376002)(50466002)(97736004)(16586007)(8676002)(6116002)(53416004)(76176999)(5009440100003)(50226002)(8936002)(101416001)(3846002)(50986999)(1076002)(106356001)(72206003)(105586002)(478600001)(5003940100001)(6512007)(189998001)(39060400002)(6666003)(6506006)(68736007)(2950100002)(53936002)(4326008)(6486002)(47776003)(66066001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR07MB2570;H:mypc.caveonetworks.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR07MB2570;23:KrxEbutQSEMoOxTrF4aSY4SYRtDr0j60AJGULZUD0?= =?us-ascii?Q?ZE4ca1iOM8twx8oL7vp2ooAqIY7FXfGdsc/Dd8oUmZCRL6mWunrbjs34C9/n?= =?us-ascii?Q?d7H/vFdwtFJLYXroN0qgtk+fRJVXOFsnxBPOsHzRhP4NvLi0HT1CrSoQn17e?= =?us-ascii?Q?HAwJO2cIQ+a7KFEH7v9elcCrhkmRolET9FEw13Ks4x5a0o6eMtFCPHkJDAVw?= =?us-ascii?Q?l32j3hJTll9EQzTdw8Rk8/5btXkcE7n+PgS+Pi8ZAiz7VgWXxFK07ZJ3WzDI?= =?us-ascii?Q?GSqvyV6UVNWcPVvSlnTHKh4LgDaMNO5BRynj3vUHuu2GYkdFDBndNHp9RHQC?= =?us-ascii?Q?e5VydaMB0SbN3NCkum4O278KuDTNah7j+eVy0q61F9/0mzqJ+w0WDVvETTbr?= =?us-ascii?Q?MGQMfYLOvFcWPkiZOkA8dTYVNuMxLFMnlVFnyhm3+HqELpRpynm5KeBlAbZY?= =?us-ascii?Q?dhwulBsLdIF1h95NcfagSuGNSJNUZCQM49iX0nlB5bpHNd0r7lyP6ZtFq+n7?= =?us-ascii?Q?ZYn6SzOkD9UyntsJP0EiTKN1YJirb3Vn9srstvBfwXuM842FxreEOxJtL4al?= =?us-ascii?Q?hl4iyRfWa/FeBZ65N/fCFKGnrQiYL+4UZdq8WYqRPReBSqMElh4PATkig7q2?= =?us-ascii?Q?mjyn1mU2juRlPRLjEIyKyxGoa2yarh4Lw6VI8aIZ/RU8KaYj04ukD09SjjEN?= =?us-ascii?Q?HKv5VfUZQ0F3WDD8HI+3SaYRnJt+xFvT7/5rfNX32QflfX5sCk4dWBXWE8Qt?= =?us-ascii?Q?SNx4lVyNJaCZKGXEHCMLU41oYeTz7xJfQYagfUe54KGDlNf5Y+VM42kY+KS/?= =?us-ascii?Q?cVUPIAtzSoB1FvbfosSwbaw8gjJg3S05qPeHQfhVTB9fiMlNvIXg542iXbXm?= =?us-ascii?Q?QJFqY/fA4ZEXfg3b4IsVHKNwECUY2IDeNHbvwoDeVDWpUYWZH+E4zAUhCBIs?= =?us-ascii?Q?cCxEcCQyxlj+4JqO+wkTEdQ+qg0akEoI7hnuMCx/aQwKZsyBTSdbF8j3O6fn?= =?us-ascii?Q?XRvdA2lcmW5Zp+mqAbhD2BDXa70ZFoO4Ktr8kwGUhVid+RPaGGhMJaMYDuW9?= =?us-ascii?Q?58z3RKc7X46t3cBvfyVZL33OQqr075xvSvIQHFmnfKoos6o+GY7fltsqQ10e?= =?us-ascii?Q?mey6Z/kGMmMKlGpX4fFY0NtNv7w3RI4FIYGyhkNbcZwDsQD70R53DktxsPGU?= =?us-ascii?Q?vBFCuMljFrf/skdSn7lRJYg+LHXt3WdW1j4?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2570;6:FgnLwIS1mOd+jfPomUN4GIWY8/yRSDEc3qt9FmFY1iM5SRVJ3HTNp2aKB3OE+LbVfewPyebIBqxCrxn3qJ5txEqjhq16+AQQNDHhctKFGiwrlCi0pRcCmphLgZaklGm2LHT5Y2dsTmORLmVdF27eK755zyQMKLOUVNZf2CseCIYfkWG8n20hBxk0n774YaSp5tyOq2amDpuB9jPZKALINLQrsVP/nVYbvFwZhXgicWT0tBxX9AZyX8ecs56mUoqRlhkbpObMZnglp9hC6jqnPSUTDTiBtalJvAbm0L5xwm4SDpJM/tZ0j4/PTMUiwvDjigq1evKD7s9bT8LxHpycmw==;5:OX/0I3oPJqDyF2S5lj6+93m3ssCwW0S4G8CVR522y5w/TCGkZ8cWoo0rp7gn1pJ94pjm7qDvzGBvKo8reBPfx/TdS/JrCpaVc2fk9tgqLhaKusdhu3K1ZHv0aTgf++zZ1+ckWMPJcm3gGILiY35k5WromVA787YR27pSYBWUooo=;24:y767lNRU6Pcz7Voq4oWE6GebITcwrIeCpElgQVhPTazoEeNNP/zi0TEE5szZLB0IqEa+USAfvsKSpMosfELx7spPJ6d99uJ4LcSTDUj1cgs=;7:stgvVNu87WMMTLfgaaly2T0+K853iVoGD1bb+2TrkivStpjV+qcLkelQjh3Hb1Wvt0UlAUgfhIjTw2A+6/HqDZ6wXPfB/a4dG7elLY35Gwa5QOlFIdWRwLWzGWT1FTJhqs9IUwGUe8QhL5DKX7V3zV4z6ldcgfVKMMMWjv5N4Q0pnIkAkSMO62c6SbGHOK3h0qCsKl7CGInGrmtg6+Ee58ZLyHn6TrYyBkdmPeh8UHs= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2017 18:32:56.8757 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR07MB2570 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org function get_cpuid_str returns MIDR string of the first online cpu from the range of cpus associated with the PMU CORE device. Acked-by: Will Deacon Signed-off-by: Ganapatrao Kulkarni --- tools/perf/arch/arm64/util/Build | 1 + tools/perf/arch/arm64/util/header.c | 65 +++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 tools/perf/arch/arm64/util/header.c diff --git a/tools/perf/arch/arm64/util/Build b/tools/perf/arch/arm64/util/Build index cef6fb3..b1ab72d 100644 --- a/tools/perf/arch/arm64/util/Build +++ b/tools/perf/arch/arm64/util/Build @@ -1,3 +1,4 @@ +libperf-y += header.o libperf-$(CONFIG_DWARF) += dwarf-regs.o libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o diff --git a/tools/perf/arch/arm64/util/header.c b/tools/perf/arch/arm64/util/header.c new file mode 100644 index 0000000..534cd25 --- /dev/null +++ b/tools/perf/arch/arm64/util/header.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include "header.h" + +#define MIDR "/regs/identification/midr_el1" +#define MIDR_SIZE 19 +#define MIDR_REVISION_MASK 0xf +#define MIDR_VARIANT_SHIFT 20 +#define MIDR_VARIANT_MASK (0xf << MIDR_VARIANT_SHIFT) + +char *get_cpuid_str(struct perf_pmu *pmu) +{ + char *buf = NULL; + char path[PATH_MAX]; + const char *sysfs = sysfs__mountpoint(); + int cpu; + u64 midr = 0; + struct cpu_map *cpus; + FILE *file; + + if (!sysfs || !pmu || !pmu->cpus) + return NULL; + + buf = malloc(MIDR_SIZE); + if (!buf) + return NULL; + + /* read midr from list of cpus mapped to this pmu */ + cpus = cpu_map__get(pmu->cpus); + for (cpu = 0; cpu < cpus->nr; cpu++) { + scnprintf(path, PATH_MAX, "%s/devices/system/cpu/cpu%d"MIDR, + sysfs, cpus->map[cpu]); + + file = fopen(path, "r"); + if (!file) { + pr_debug("fopen failed for file %s\n", path); + continue; + } + + if (!fgets(buf, MIDR_SIZE, file)) { + fclose(file); + continue; + } + fclose(file); + + /* Ignore/clear Variant[23:20] and + * Revision[3:0] of MIDR + */ + midr = strtoul(buf, NULL, 16); + midr &= (~(MIDR_VARIANT_MASK | MIDR_REVISION_MASK)); + scnprintf(buf, MIDR_SIZE, "0x%016lx", midr); + /* got midr break loop */ + break; + } + + if (!midr) { + pr_err("failed to get cpuid string for PMU %s\n", pmu->name); + free(buf); + buf = NULL; + } + + cpu_map__put(cpus); + return buf; +} -- 2.9.4