From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751654AbdAPHZQ (ORCPT ); Mon, 16 Jan 2017 02:25:16 -0500 Received: from mail-dm3nam03on0059.outbound.protection.outlook.com ([104.47.41.59]:59698 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751522AbdAPHY5 (ORCPT ); Mon, 16 Jan 2017 02:24:57 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Suravee.Suthikulpanit@amd.com; From: Suravee Suthikulpanit To: , CC: , , , , Suravee Suthikulpanit , Suravee Suthikulpanit Subject: [PATCH v8 8/9] perf/amd/iommu: Fix sysfs perf attribute groups Date: Mon, 16 Jan 2017 01:23:35 -0600 Message-ID: <1484551416-5440-9-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1484551416-5440-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1484551416-5440-1-git-send-email-Suravee.Suthikulpanit@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [114.109.128.54] X-ClientProxiedBy: KL1PR0201CA0003.apcprd02.prod.outlook.com (10.167.53.141) To BN6PR12MB1443.namprd12.prod.outlook.com (10.172.24.20) X-MS-Office365-Filtering-Correlation-Id: 50e42a08-4ed4-41df-7543-08d43de0c4ea X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:BN6PR12MB1443; X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1443;3:UaZthCKwNQ9nZGcStKPzvIBrlr6O0ke/0FeaXremOTLgtWFTx3mkGCO1y0iSqH6kyyx9on7u4EY3oN0qGY3WxWFqCilSv9ayBUtWO9mN+bxfs/v9yU/MErsg10JNY4RUoWtCIIH0fRc/OlF/mPo8CYvA8+9CDX9pd4AfVouI52C1RvEfePIN07hQFUAwUBvcSQbAccaNCN/k+n1VZCjhuBS2tFIX+hLCk8OFnjWK4c7IwPnj0ZOMykjPFuen/yFowgvIFICQ8fmRAIaUBg6laQ==;25:Q0/0LeSEmcI3BJXPY2RYC1386dqHmgDSXONpzIGx92Da6fC/uo7Db3LguKwAnMvwLwqXA7UWd3+333TESwD1kAKVhTo8E1ncfTb8HXfEfjT1vbl1U9apYDGnkggiC9gDz6oftbLPbNth9ytofsgd4NtZYFRhga3yTycDHza1SV9DKV1j45WlPnYZUfO6chpVaEZm6nYuUGxBds65gEjXxptQsm9HLHFT+DNPYWqLlMqtdvs7UyXzrA74cIDdw3ymEgk8AfR40XigCqKEubHeIkfzke2zHDqTPbmlutpPa+2CrnQz3ToQfe7f7enQI9zOm3VYh0sp7xQdVRD28dS+C+6LIdcloNvuawVgO0LgwnN4DkiAbk6frJPraF3R0baxhrqxhQumsGklCDxFwzRR9mgHgK+UYObh98lavDhUyy9sPlZNVgKrqqsXc4J9nquVJkmRQBARM+WY2vwLLW6UnQ== X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1443;31:uqnVN/iOPH0KQSu0e2gK3fYbtdcshnLzlu5u32M4v1+4rYx1w4sb0fKiHzbeQq4BjFBARxahbUFvychEmvcpbdP35wJaoOil07SEfab9UrljuaHahq1HZ8CWL7RJ8Hbc0FC/LLSazplrCNzlrp+B2ElxfGOPCj2WkqdA3fYOzrIuzs1tfijudJ3qIT62sotMQWOlBmPT67S8ILVwkJHPjQiuMYRvwXzLyj9j+km3WUmbUJVpTtLFOMO98c0Ks+I/d52og7YtWtfeAkXKnIMR/A==;20:T/Tpfe8hXrsbT2p8Sp2jrw9iQgBlUViG8m7uuokhFpJ16gm3hlp3y3+rLhiJLgb59WrPpXjBBigzj1uATQ5mlkDhrUTrfbZpmp/mdr76SaevyfamrzDRJlK/cO6qqP18G6posZdKswbcC3wQbgzNl7ZPl9gO6JGzgo8+D76vGQFbH7sHirQadDOiV/mPsp/Fspcho90g+o25Eaw3FUH1zzMVUwTnemLLrkMit/gbOiZI1jMtHC8qHPo6MfkvB314UFVfegTuoC102tot/VSyu5UgP99tnOIWGL8fLKVnFLmVQr4VICvtNIOBW6RoIYSWxYEXFC4G36ahC39ERHYCfS8faLXD39hnez/Te5y/xeRG7Ka5CwexgqMic4KaT9gtzbb6G+AMUWBarfnAWRhMVQ66f4vva7PLjhkQs9QjDTMjwwBoexAgPnbV7HSGTPwGoSxjzr6X1HgtdY1bP5MCD5CfxlxVq1ttDBP95TBkJIr3xfoVE9JOjZg/qnhGZJoc X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123555025)(20161123564025)(20161123562025)(20161123560025)(6072148);SRVR:BN6PR12MB1443;BCL:0;PCL:0;RULEID:;SRVR:BN6PR12MB1443; X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1443;4:9hYQpOBtez9SMEqvzH6Q5r0dXZa0pLAj/7pCK+8YfzWTUCnJu8I4hDse6tUWb1pRFjL+WMmy+H+6/FgUsjP5TQVbuxOERFx5CqjBbxQDEKidztszJK+tR7bccpzQwLeIW5MUk/AmtcXMyJMOv2Bj+i0bhL/mRQnJ4Td1RUbOj9Cr85pIGyB9AqHGZfOYylP0PHQ1PmpLFJKMjQ75xr9gPqKGigpumkSUWfmTbMHXdE+0qjavn0bNSXzMBgbP6TdYsyWwUr1/4mn0sBZ+cvaIwk2+6R62WL6w37o5oBj/rvMeQDDs0H2KcEQhF4JzQgkPmrVSPWz+OzZzmuJ3min710ng2GeelJ5DR5jo2tOwHFb4KdlXiNvW34cUQVrTDPKo+rE1JeRbqMVp7dOkNXpYKMWa4bdl5/cWDFY9D0EGjyfD/0diShwZTCeFbVh7HYkCDrlskJT4Xw7qEuKQqThF+PSazhVZJlfcUt/EtLmmycBdnJHm4QnYZHqg6SX9aKVQuU/v+V9hWaTwiEf9436kwGUv7u6BxqJEZpNiFq1aV4lhr9PeSbJLZcOosrzMk1JEqGW/Dp4sz9aKuWyV/Pe5Y1btJzyiSZksLzQBhDDSnkE34dHMqLhDqYEYKh2szf5s X-Forefront-PRVS: 01894AD3B8 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(39840400002)(39860400002)(39410400002)(39850400002)(39450400003)(199003)(189002)(2906002)(6116002)(5001770100001)(86362001)(189998001)(92566002)(66066001)(68736007)(97736004)(3846002)(6512007)(305945005)(7736002)(4326007)(27001)(42186005)(8676002)(2950100002)(81156014)(81166006)(50226002)(6666003)(106356001)(5003940100001)(105586002)(50986999)(48376002)(38730400001)(101416001)(25786008)(6486002)(5660300001)(6506006)(4720700003)(76176999)(47776003)(54906002)(36756003)(50466002);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR12MB1443;H:ssuthiku-rhel73.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN6PR12MB1443;23:ALjhJIrFM84Z6e+M5gXx4f48MwPe3zJsAfzYbb3K2?= =?us-ascii?Q?2YpueQPh6+BQenHk8uZABLGJsHRtuKO6HDak3OWOw/ov7SoAi46XX+5QP67k?= =?us-ascii?Q?Tuip7wlCLpfE/iSiH96xi3ouZqlug+Ts3LL3ELXiskUb4BlvDa6ISf3Qy0u5?= =?us-ascii?Q?+LsTgjaJcxoR+r0i+G5T94g0gu9D6DgGwtUrGSEhdUOZmLJtaBmzJeLGbkWr?= =?us-ascii?Q?c7KZI96zrActrMJDwA2HroU7iUPvxh78dG+vayg7+Of0rbXaByCS1jfNS954?= =?us-ascii?Q?pLRxxNxaG0MTOkPm+E+QAjx78nCRTsayqh+YYWQvpkXjd0iIS5Iq1WOV7O0h?= =?us-ascii?Q?aFDzoll06FeAHbI6fwLyxfjPMJc/Pt6uz6/inZHxpGp+2jpko/l7k/+R4gvg?= =?us-ascii?Q?aN91oK3DLbrRAju7v4zOOeXo7E3jsv1Qhw+LZnGryuwMnywAEWZ9kSzZT3Cx?= =?us-ascii?Q?2chKTuc8kDQJ6SOKz/VRW1oTwA+HeVij7QtNHDOwJu2EDE0klQEGtd7IHxWk?= =?us-ascii?Q?Se0TKbjXNVFT85K8NY44xDPwI5JeeEJwn5ZBz9znLuyZdwEf1gLkgsx4kuFT?= =?us-ascii?Q?Izj+HrjMu3DmlQSNNGxBcx9qVrZyXFL6S94XXtOB311Wm6mqOponb9QN4I7a?= =?us-ascii?Q?ne41JStF9rmMwPrPSVGOWUY6zgAU8YaoG7YneULfUuWHAd6O5Yx6DSjTAaeg?= =?us-ascii?Q?PSHaxF+Zg3CPFJQq6JEq4RVI8RBUuXWkE5QHJyTWL3shuPEnTZNtWQgMWtUp?= =?us-ascii?Q?USubskGHLCLKuIhgxK01qg4vJGCqUBeHhpiDR6CjeY58gUZbsLqZtMrueCcw?= =?us-ascii?Q?M5iR6t0NjjXlhJwt7fRDnGfjIJHLGu+ONOc/sA4EGaTYEdm6BF/6HqYhKD1X?= =?us-ascii?Q?+5gbqE1bRVBW6qwZcQs1wX2DWEnVDHlRYLeUXXx4ZkPm0oOZfmS4CsZRUNDg?= =?us-ascii?Q?dJCD1WFbdh0dFzzRGRHYGauBfOuKsRNlup//OvCXwUXlYAOFxDqZi+cgiOHV?= =?us-ascii?Q?+Fnvfhq3Fyas74Ky9MKExc980n4uQO7ATwiaZM59498KoGNOW4po3HfkzUrv?= =?us-ascii?Q?q7kyxI+9Up/yjVBYbnsY/qLscv5tRAemjcjQsV5uLfkTxIob5n7uw28vG4We?= =?us-ascii?Q?iIDjxYipZFKV62UwpfPelYw1ZDFM0ZKV7CN+kMShgGODcsUKc+AQOMDrfLN+?= =?us-ascii?Q?Yeczo8BdCxTphDrUPOdWP4n1rqmvxgypRKD?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1443;6:6kj4PlfjhpCCs69Nrt1ahwZKPy90KWmSc+natBY4RMeWjY3CX8ZzFkt3nS7utc0ELYWohsdc6xf+alIWWWqB1PQ9qGaHS7Wz7MQtRR+woqIRvwyq3klUqCZmtNKCuhLQl2kukA5oBE05szRZXsJfJu4JhknitRGQgmpvBcFVQYA1knzvx3xl/jVD1p7jlJkqhNATYIMthxQJ/PRnMeqPfQUyylbLLNvqu+82xNsY1E8oWaBK0ZNTUK5gToWKdnSbYu6ToHj2JNWpXCg1o88DyOw7tadP2aRFJ8q+wpJfU6FLRl9YBNnq/AMHx4Ir+FPE8P7fQrYLNwHHSPzcthxK/9z1E9NGsV98YT7AuhSmJDEs5lydZKoUo5Y9E6GdORkLPDpX9Edv/JKJtOpudb+12LubIyayQsclTITeqM4hqtpQUy1TlBzN9rI2l3hrSMql2lh6eH8LENm0SNzwk6sXMA==;5:Gk/INN9WAWUN1MgodusIJw9929x/8RzQrvQpH6rbCUtaZHjsQMiLrFEalC8b/Gr8z1IIaJod19IQaPhHIlBPlUvW7kMLrRtihSfmsS2p9TX4q9UNazppt5w+EFZngHFYxVHlkgl10w6ua8AMhqDZSOIERbtEziG5tGgWUdzVAHk=;24:GEztpwl5vAfu74WDlI/0rRIDZl//Cxx8BA1CABSpHoGR+Bfyaqaqj2RIH/mVempPx4D/SQhSBbaz9mdJ8cVCRiL4X3WQ2/xVA5zzgDK2HCs= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1443;7:fUWtG4kDsUnIPwATJYVbPQfBWJ+fa+wZGap2T5WcB5IXb8q3MM6yE8oDXk9PCOHbRDxU9IFcRl6/DZwfMBsyorl38AD3+ilG8l1Am3LNPoZcR5wa6F8Gu3lgSmTzdXVFg0HcZlMxeoaF64ahh3wPozdeXvqL/auMsoHJlHmAgmo1lrg+1e11Ev4UfUPXnK2VTpqTtl5ny17v9915J9TUal22s8zwuhzKcJhZTSTgIRQP9eYtX+uglJ98vT/I3nClDPNWMxmkeC42HZ2wKnIY5jwSn+zwpaxOBRcfMRpwLNNOhI036n69wcXHLYbbFHS0Okjm+2AW96scG7ia1VreiGKxz7dmEbag5AiUpeSE5V1D25+j0C6yuLvctMyN2pX4o/qdpoxBzOtkd5EKloQc2y4w/HTUxxirtLl+Zz7ntY8q6CPvm6MtqXSCAgfMfcToeuZGrM7OkuQcoehT8XbtLQ==;20:8uLfLbIvZfWQb4k79ttjg8W+5IDMCvl1vpuf5YKFAGYzFvysmouVNYIz4TkcXXbDkX2SnPjmribGt2XyEctCeUWlCfTi4LxEUJ7u6AbtgqGisqWp+DCCakZUpmLbmvbob9ZuInDsdJeNn4wYsxsWAbH8nbjVikbPYC1mjRH2wxGtgL/PAby63GCo7Z3U1ePTlBxLTf9hecoc4o2hEThCO6AL0zjpBth6TUTW8JRb10FMZtYfKpklesiEeCx72XI+ X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2017 07:24:47.1954 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1443 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Suravee Suthikulpanit Introduce static amd_iommu_attr_groups to simplify the sysfs attributes initialization code. Cc: Peter Zijlstra Cc: Borislav Petkov Signed-off-by: Suravee Suthikulpanit --- arch/x86/events/amd/iommu.c | 85 ++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 48 deletions(-) diff --git a/arch/x86/events/amd/iommu.c b/arch/x86/events/amd/iommu.c index cc7bea4..223c01d 100644 --- a/arch/x86/events/amd/iommu.c +++ b/arch/x86/events/amd/iommu.c @@ -43,14 +43,8 @@ struct perf_amd_iommu { u8 max_counters; u64 cntr_assign_mask; raw_spinlock_t lock; - const struct attribute_group *attr_groups[4]; }; -#define format_group attr_groups[0] -#define cpumask_group attr_groups[1] -#define events_group attr_groups[2] -#define null_group attr_groups[3] - /*--------------------------------------------- * sysfs format attributes *---------------------------------------------*/ @@ -81,6 +75,10 @@ struct perf_amd_iommu { /*--------------------------------------------- * sysfs events attributes *---------------------------------------------*/ +static struct attribute_group amd_iommu_events_group = { + .name = "events", +}; + struct amd_iommu_event_desc { struct kobj_attribute attr; const char *event; @@ -388,76 +386,63 @@ static void perf_iommu_del(struct perf_event *event, int flags) perf_event_update_userpage(event); } -static __init int _init_events_attrs(struct perf_amd_iommu *perf_iommu) +static __init int _init_events_attrs(void) { - struct attribute **attrs; - struct attribute_group *attr_group; int i = 0, j; + struct attribute **attrs; while (amd_iommu_v2_event_descs[i].attr.attr.name) i++; - attr_group = kzalloc(sizeof(struct attribute *) - * (i + 1) + sizeof(*attr_group), GFP_KERNEL); - if (!attr_group) + attrs = kzalloc(sizeof(struct attribute **) * (i + 1), GFP_KERNEL); + if (!attrs) return -ENOMEM; - attrs = (struct attribute **)(attr_group + 1); for (j = 0; j < i; j++) attrs[j] = &amd_iommu_v2_event_descs[j].attr.attr; - attr_group->name = "events"; - attr_group->attrs = attrs; - perf_iommu->events_group = attr_group; - + amd_iommu_events_group.attrs = attrs; return 0; } static __init void amd_iommu_pc_exit(void) { - if (__perf_iommu.events_group != NULL) { - kfree(__perf_iommu.events_group); - __perf_iommu.events_group = NULL; + if (amd_iommu_events_group.attrs) { + kfree(amd_iommu_events_group.attrs); + amd_iommu_events_group.attrs = NULL; } } -static __init int _init_perf_amd_iommu( - struct perf_amd_iommu *perf_iommu, char *name) +const struct attribute_group *amd_iommu_attr_groups[] = { + &amd_iommu_format_group, + &amd_iommu_cpumask_group, + &amd_iommu_events_group, + NULL, +}; + +static __init int +_init_perf_amd_iommu(struct perf_amd_iommu *perf_iommu, char *name) { int ret; raw_spin_lock_init(&perf_iommu->lock); - perf_iommu->format_group = &amd_iommu_format_group; - /* Init cpumask attributes to only core 0 */ cpumask_set_cpu(0, &iommu_cpumask); - perf_iommu->cpumask_group = &amd_iommu_cpumask_group; - - ret = _init_events_attrs(perf_iommu); - if (ret) { - pr_err("Error initializing AMD IOMMU perf events.\n"); - return ret; - } perf_iommu->max_banks = amd_iommu_pc_get_max_banks(0); perf_iommu->max_counters = amd_iommu_pc_get_max_counters(0); if (!perf_iommu->max_banks || !perf_iommu->max_counters) return -EINVAL; - perf_iommu->null_group = NULL; - perf_iommu->pmu.attr_groups = perf_iommu->attr_groups; - + perf_iommu->pmu.attr_groups = amd_iommu_attr_groups; ret = perf_pmu_register(&perf_iommu->pmu, name, -1); - if (ret) { + if (ret) pr_err("Error initializing AMD IOMMU perf counters.\n"); - amd_iommu_pc_exit(); - } else { + else pr_info("perf: amd_iommu: Detected. (%d banks, %d counters/bank)\n", amd_iommu_pc_get_max_banks(0), amd_iommu_pc_get_max_counters(0)); - } - return ret; } @@ -471,24 +456,28 @@ static __init int _init_perf_amd_iommu( .stop = perf_iommu_stop, .read = perf_iommu_read, }, - .max_banks = 0x00, - .max_counters = 0x00, - .cntr_assign_mask = 0ULL, - .format_group = NULL, - .cpumask_group = NULL, - .events_group = NULL, - .null_group = NULL, }; static __init int amd_iommu_pc_init(void) { + int ret; + /* Make sure the IOMMU PC resource is available */ if (!amd_iommu_pc_supported()) return -ENODEV; - _init_perf_amd_iommu(&__perf_iommu, "amd_iommu"); + ret = _init_events_attrs(); + if (ret) + goto err_out; - return 0; + ret = _init_perf_amd_iommu(&__perf_iommu, "amd_iommu"); + if (ret) + goto err_out; + + return ret; +err_out: + amd_iommu_pc_exit(); + return ret; } device_initcall(amd_iommu_pc_init); -- 1.8.3.1