From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751563AbdBXIxO (ORCPT ); Fri, 24 Feb 2017 03:53:14 -0500 Received: from mail-cys01nam02on0080.outbound.protection.outlook.com ([104.47.37.80]:27752 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751334AbdBXIwx (ORCPT ); Fri, 24 Feb 2017 03:52:53 -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 v11 08/10] perf/amd/iommu: Fix sysfs perf attribute groups Date: Fri, 24 Feb 2017 02:48:20 -0600 Message-ID: <1487926102-13073-9-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1487926102-13073-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1487926102-13073-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: HK2PR02CA0037.apcprd02.prod.outlook.com (10.163.104.175) To CY4PR12MB1447.namprd12.prod.outlook.com (10.172.71.139) X-MS-Office365-Filtering-Correlation-Id: 88f74b70-7028-4d2d-1cba-08d45c921504 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:CY4PR12MB1447; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1447;3:Yz9h6MlGTClCWwYhhJQ+cFUUny+AlYRgjVbV8Eo1XU2zUrHxqUljgArVq1c0KUQOhMeAP+Rlv3WCIYTP7p9qN86zUD4wG4yJeWMz0+2HLTW3hMmS3gYtrUpnwjRMlqbl0akaNd8l4EPh0HCAGtTgQroMKS+PkFQh8u50gJaKgGoxHc37Vq4B7nVS+NrLR9D0bvZPNLAdDrk5tYDRPxP+M+cUsiSYl0KCwHB9mlyFUDDf/iXhhQy5WrKFcTdueXNuJfhhDDpPmLUVna0iSNpju/KpqfTnJMFoGg6RTGSInwI=;25:77pH6bpcWaakzOAwSEwUj6qL/v7oZehOTa0lUI5pqCrsjll+6puNLDxkS3kMNfXuL+rMA73XNFHpv8Rx73LAC+L3BFnpsM9G5gzcDXwlCWrhBbQDz/UFi2nKVVquP3i1e2CXqsGl8kPwHcFDkdayqZ5XYq+3/jTfTrZ4WdSROh74mgk6vBwy0lZK3fvDLo/4k1/r1fdhoLxWoYubp5A7BVXHBil+wA5Jwncp1F1M5TOEjODBE0hxGBs+DKU9JCCEVRx+XJu/KJ0UssxrHUoohw3lOekmitLujt4ol7lmAE9xw2k3JJX+7Mk+Z3+jo29HrO/dR5ZMVh0xMtVbPqD3dIcI1tZPcQYvKs+CYbaAKYXkaC/eL3l3peRXhppWxK6PNJZr8mSO9MYTx8xTXGs13czxKjRnJZIrqgDJHuVWqHr6clIcZVG8keUeRd3vgCNIGxbS/GquOmxmxnyFYH4wlA== X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1447;31:I0TEbaL/HxH1k97CpHaCDN9FjgirTdpjILFXUe0zjwkHZuftvk4qmcrkfo5Ii7p9bg52ifC3znj6Ld7dNOIBk/puHyBAEmAUCuEUh51WxLMZYWjBlH7noocA4uyWXr27cPWDX5biT3qz3DhR29SPboO0gdfgLIGgAccIYVBCbpqJUezr297Yd9Hg4K0JGdz10F2UwVK27xN1TzI5IzfNfc6o5BmixQ/ZoETgow43Zq7STOOPTgjXzNlHRx1/RcEEPeSXq6nKrmPc1QMQ2iX8Qw==;20:LYRpmawQLKqX0MPTriSgqBUrk/izbowHGyE8FNXnx/Maea3ldFtnStez30tgbpaPLlct3uhnbANbySYFg+WKPg0pvk0zgfVT2VRzwCFgIwwCrmcMbZgqEq8ywqc8CIKjYFI4OI/dC77SEkNHQq/n3FX3INCnNLdVNxosSA6ZHLLR9SPktm0hZBDBz3NE/vqoWgTKEneTzhSwX36O48Opy4K5hGWS0em9CG9mtXTntBi6vGTKVROZXZjypSv4ptFr3p7jK0DUycP+SbktuTE0JvAK9VKxwRgCOenP1u/+6sV7JhuI5JiBOcyhzBb59vhPfzaowS0pji5Cn5TUBtWTGiUi2MT2ECkRtfeSaP7eKRqThPZuAjG81XCRRtanJE44eNQFROJIyvNDJmuAFDycibjBaKIfFETEPxxToQHVmXrzdpZ+pNEIm/uFgqA6w8uwA4JgfXGJBOGDznnm3HWVbwBc8LmCjAOcmmKWMBCfNYDom7Vfi9VXjWi2Rw/PmXWC 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)(3002001)(10201501046)(6055026)(6041248)(20161123558025)(20161123564025)(20161123560025)(20161123555025)(20161123562025)(6072148);SRVR:CY4PR12MB1447;BCL:0;PCL:0;RULEID:;SRVR:CY4PR12MB1447; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1447;4:qdzbUplkHv7KaHQPCGvCieGZbydd5Cs9erNbo0FYz0ciUhuTznHkkhyOGwdkx42ygzVYtDTfWiZCk3qhw4FJerTGYWohobBWx1vn4rnyx8Qzlz72QeulCcqs/PU5QsnddfBq1zW3XpC9IU/IDTblCgQMQk96Q4sm42OAMSAoQLQbU2ni9+7Tb5Nql1mq+MypnDse+HS3fH7mlWVBG2kxBRcmuKzEjTqN2XJWEHWO4ECgtfOdKVxnwi6syjH/v4F59YD058Wvvgj/DMpwnbbf6lk9b4+m3aXNIMSSChlQmIUZRTsEdgMvMatidp4ftyZtM+Zb+0EKmP+J5xZjADOZYaIzecpaKxTZXossDFXrQCmaeUr69Ov/2KdxJdS/l3AeZisaS98gTHkuMOmHLc6lyZbz6Ht8Re3ipZPIF2w6uakeM7L/lLF1SL4s0axhdp6q0RLso3uVvhhlNluB8WqdN/57wnAbvLsSWRS3Nmeg4Kk0VYseHYHc0dm4nurSM5dMWciT5l4xZLm0pKgrG9riQ0T/unl36Qt+nn0sJrPdfeURqV569oYZ1+Zi0lmifN4k+b3wUstBR3M65vBWIYT+gwecow/2li+0Pnlh+MILpjtRf83gd3R9djREPTzB1eGvG7ppXjPvcal56tU4rpHuycE73QlU9TCBUOT7GNXCycs= X-Forefront-PRVS: 0228DDDDD7 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(39860400002)(39850400002)(39410400002)(39840400002)(39450400003)(189002)(199003)(3846002)(4326007)(105586002)(47776003)(6116002)(76176999)(305945005)(36756003)(86362001)(50986999)(6506006)(101416001)(106356001)(38730400002)(53936002)(6486002)(7736002)(66066001)(68736007)(25786008)(8676002)(48376002)(5660300001)(5003940100001)(54906002)(92566002)(2906002)(189998001)(50466002)(6666003)(81156014)(2950100002)(4720700003)(50226002)(6512007)(81166006)(97736004)(42186005);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR12MB1447;H:ssuthiku-rhel73.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR12MB1447;23:lDHQRMNTSf1RJiKWV2sAZgMglqUB0ZRoUitafgdrm?= =?us-ascii?Q?34Nv2T9z7nPmseXSjVpw11c62zVgJdEFFlFGM7vCCv7HGRWtaDSMfq+p/YJ3?= =?us-ascii?Q?HRhkWrKrrwuTYZleBO9nlibBXtNQXFE4zTCjWzot7DubKzraeyOXWSIdqDGR?= =?us-ascii?Q?9SpVZU3+gG1NHC4I0mrBTFVMLMmDG0voSdhO5xRVUI0q5YKHHbxHrDJzpCuj?= =?us-ascii?Q?2IT5V0GwqNe8sR9tc0khXO1ryYmJY/oXnXphmxeN1L7/gmAY7cYsT20FXmSt?= =?us-ascii?Q?MDNi//+gOvowIFgeXGmS6X1l4xyxNHr6ZXVfG2vOMOsWtYhcfzPaDQOQKZFY?= =?us-ascii?Q?woTpKEYaxXqVOddEeZXG6So3i4Fqonv+mWfmheOYwuQQEqBBQn16Jh4MnPQ1?= =?us-ascii?Q?Ih/X3o+iYzutzE3ocXhyOmU8G7izDh4cA0UzvfgbWwYO7Hd+gF1EYyUkzUGe?= =?us-ascii?Q?lV17xXhqzovwloGMY0D7DizSyvuS/6578DlCfZJXTEbUjICwaW6lSPdfEjiE?= =?us-ascii?Q?9uBDYaNYKmyTKDrbekDDVXKmU+HGI3D4GejjdO3cSrmkUNND+U5zu9A9VQXR?= =?us-ascii?Q?PBTXgB5dh+5IC6BmPpvr7WvOFsLkT2ygqo3XayM0SJi5fNZvQ1tSYY7PD3CA?= =?us-ascii?Q?UmpDKVLZJ16pBX0aLKpkrcYuYPpYx/LLp9Mn3t2wgIPa2eFDo49ss9E4n8lB?= =?us-ascii?Q?LREFYGZYTGkFCNNEhHTyVIsL8Z6SLWhU0E2f/alnOy0lOSK1fTrMamfyR6DZ?= =?us-ascii?Q?4avvRJ3XMWeFOdSClYuJRRyH1iN/PumpaaR8ZRlUy7NzP6cv/CQvmx1DkJcs?= =?us-ascii?Q?2pZF52O3kp1l+5BlP41HXRcvxmjSUb3u027P864U/mwpIMwwKx+oFkv5KLs9?= =?us-ascii?Q?ds+cZLhG9Vsps2ufEJ5UPvHPtiNOfOFEyo/aUT2i2T2oQijAF1WzkZSafpry?= =?us-ascii?Q?QVbtWJmnIoeke/AMVHvZaVU6ehbdrSYw4m8/+oLvYYhkC9E9xrKqyM0XamlU?= =?us-ascii?Q?Fz4D9xTtpvl3vDS5kbrxY+CvjbFax5RYR67HR9/yTlbZj544MCuv2A65QKBu?= =?us-ascii?Q?XzTZp8vGFbRXTDQfvUo7Ycisg5DhlB5kLOwciVZAnGEysjN0JK6zGJyrfe1w?= =?us-ascii?Q?6/K01c2SI73/BVnZb9hkiROLpmgFTAlxq9ELFOKUVPNq7XQD6aAZ1HyQrozH?= =?us-ascii?Q?vT3ifIbF7kYqbs=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1447;6:1pFGSI4ERxIEBVpZZGKl8yMGAMwQcMy8wS7wQ1w3ICX7zii3HVvA/t/jeBuVUqGIYinMJchiDbXBoynWcVDpKv5GblXxxazdZ/xDxlDQJtY+2aTlG9eUnSAv5lvWiIcsV3dbadDkAZQnsUFbctKAzyuW3dMy82YMZGuEPUaFJJ2a44fvvHUVNanwAcsVGxVIgvrryIz+KXTWOPKApNbnWKfoTEYBn8AyOWUe64JSixf5u4+WKQRrW3xdXFuqR8ltg5fHN7aKSIF+SbRrJoFGOkX3Q0tK4DTZfALF3hpgSBRoqsxrzbvwmF6wg94XMfp3BVBRpcMzk83u/49P8iqxZD1CL30FPLh3SYNgc40dmUshKV0hKDVghVt4/30hya6bXhO0cJVgIWGWZrXyfZc9oUbEUXJk1umTUQHYhzPKJg4=;5:9hSaDdiL1IkWbzBuLTyjF8YBr1ktWSNdW/jv+CxeAotCKGW5GcdGRSs6+axnD0G0B9zWW7511NsMkCDYfW/b5DqpP324DPSiEIYGV60bJOvmvZvPnB2CMi9k88NnwIQ1lPg5VJdmdo5H2aCGFIUn+Yki92UooVAUvTURTAAUx8k=;24:td/162GmFaD9djglddfCXuASFMKGYKct7iDYkXB/ArzjXUmcb/SwK4bc4Fj/98+tdgg206gM1w+FjMCzUfwGMUU+KfidR8TfW119Vi5ifEc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1447;7:9SFbOhv+F9Lof24BXVweNiDWA6oYA59GC9c/N6A7dssKS4i/6oXjHipfCl28p06lRD4eqHm1bwN9cERdh6wQV7RNoQTUYiP3+MyYYWUGmEKSsYdTAKDgOB0Ss1nGd/zUqyza+tNPGl7GM980xY7T8oLbTbJCBbNfXtdv8qRfdR/vhP0DIwty37tBv6ZRAWt+wCvnXCHTyYGPYiYe+PszESY22vDI61Y92ScoBtnAZfjuxx/9meStXi21GdK2xH6fqGHGrsb3daX21q92erEg3PcTk0PQZHlLOv95MkPF3DCvfk5TvadZvVQbRACY4txonKTIFYi+sh2PGwOnf1/2Mw==;20:rxSPvCbH0X038KHcu5MefcORLyZgilx5ClmAO7tlpWEPPSgOJ2cQtwEzTxrVoaZl8AHPVMiuiDcPNgAizZtYIhBtSCxgh0IUNabAn/pdYB314Wcy52J9y/mlBU0sE8omeW+TAuZUflimoKpjKZDWfDoIZQNIELUdJOAJYIhsogmY23vjBvmsH2KCYZ8ZudGg4Zl84rw4rfanWvZC5XA4lu86/q0pOgObDo+2qKiDL3kHerWWMUmIcL55yuKufUHk X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Feb 2017 08:49:37.6639 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1447 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 | 81 ++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 49 deletions(-) diff --git a/arch/x86/events/amd/iommu.c b/arch/x86/events/amd/iommu.c index 88fbc80..7ac8138 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; @@ -384,76 +382,60 @@ 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; - } + kfree(amd_iommu_events_group.attrs); } -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("Detected AMD IOMMU (%d banks, %d counters/bank).\n", amd_iommu_pc_get_max_banks(0), amd_iommu_pc_get_max_counters(0)); - } - return ret; } @@ -467,24 +449,25 @@ 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) + return ret; - return 0; + ret = _init_perf_amd_iommu(&__perf_iommu, "amd_iommu"); + if (ret) + amd_iommu_pc_exit(); + + return ret; } device_initcall(amd_iommu_pc_init); -- 1.8.3.1