From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752530AbdBOU6d (ORCPT ); Wed, 15 Feb 2017 15:58:33 -0500 Received: from mail-sn1nam01on0084.outbound.protection.outlook.com ([104.47.32.84]:13151 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752381AbdBOU5q (ORCPT ); Wed, 15 Feb 2017 15:57:46 -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 v10 8/9] perf/amd/iommu: Fix sysfs perf attribute groups Date: Wed, 15 Feb 2017 14:56:24 -0600 Message-ID: <1487192185-31272-9-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1487192185-31272-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1487192185-31272-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: SG2PR01CA0102.apcprd01.prod.exchangelabs.com (10.170.138.156) To BN6PR12MB1444.namprd12.prod.outlook.com (10.172.24.21) X-MS-Office365-Filtering-Correlation-Id: 562fb8bb-c3fb-47a6-8c0f-08d455e54510 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:BN6PR12MB1444; X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1444;3:bdbrBKGqzuvAMQFCQh5h4jxm+ErD8XHR2gl8a5sZImtJcHH3/fciK8v55CxOUGs+DkwW88F8KC/saFBlSirjg0fscyCMS9Rs/50hQ2/1Ba/Z3Ei1ILTKGUCVh6R1X+5ljRu3s6v06mOtcEe0QdKZ1QsvdDQi/1lvv/vmj/rsISuFChawuG1bfuAdHovWOpba/974HIqvqJ++MOQj8cRRVPYaFU4O+fVDCbkerEKBWuJsxBh1Qg1oIIwP0q6k/dib7dkmv7w9e0Q4fXoNjVOhVcuvP986Df05KEQoHkQZfQs=;25:NWxMr1dUxYAaVtNiVbikTpr4d59YPF1lUjesPZAJTxH3EC76W5YJFSQ7uXc6h6jXzCBcZwfXqIA11j5Z78e35I4r6cw1D64nbH7kVY4YCbM3bwuY18rH8FnxPmkczhyWZ65/5sBNjT3faXVeJJQzpzJ1YQFramerVtpfnC2Cb99EF7tJEysL65aDRfkMl+Yea+gKdRAULVqh+MbEWxPLY52+QWVlaIyY2wfzS+UqmjO5lTi4ruBY01J7b1qFDaTh7OQmyF9+2FQkASzKG2DxhQ33T9bUbzAX0yPnOvqQBBSrVfUxtfm5mFrxh4Vt+3IFelC2aVrQYI5qLF0MxUKUHK3s4k16KXY/Oac64cMtTUmsviNYbAzPRB7pwprghGRLGR+8KFxpenRD1Hk8oPeAvGUfCJAwJgLWA+ZnlP6ahi9UoWK7T4w8GZkUeErbWTNFnwHX9XlkVIQXUnoHyLEA+A== X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1444;31:x6AyzMSd2tIePADqPina4EKerTRmNVivDG5t6235iuQzEwXAsmVP7kmc/EBdWZAwsqlEg7biLXL8+E8Jtx4UcO1EsTxcmzAZUuaDVRVSC65boUbE+iOONU+zs0IFg2E0l35KaIyOOYBqWNhY/yShSzYEshEB7Sbfi/BdY0zpQLJTY5KEOP0750CkqPqBp0n9dcifo0GjvodyHuYyeDpjRr3EfZ+pCGLMGp6v9UkJG4o=;20:ldFXUAAVBSqFW6PjaZ1LowvJjEeaAGVnTtZsKb3VMaZaxYaLO88tloYCdzMq5g0luoFziDGhkNk8u2iGSFXqpIPqx6XLlHysoaDFBpuvM4d+FM8qT1EAEew1RIaIxfWYLvCyLtjah0N+bQ9UW8RM/uWD9aWiCrWGZEPjiUqOcmTZid3ouAj0za/OS4ny+I0DEEr5uAv87RPe/WbPZpMXOqmj777YmrnGHs6ojIOCuUb8H9T3upq3evZQwdr2M1CgUpOXFxP/syJNKLOswHmclmWlf2ulvHMmuemruFpUFa4i6RviYR6HQyIqfrzShIIp/slD5qKvGcAqhM4Y2EGIEiO/2Gzd5CYjAO9uPakpKSUhaQzdZCjS9J0mcbXW1KoNd3AzyMFZhGurWqmv6ha4++bly4zyJxkasNttm+hYmcfS7PSknsRmPTkFifxLRid/yDqp9wRyv5FfdiMObL6qWz7obs59sQn9jpr82YjAdAGMfQD7Y4ACQ7y5lzGeQDUA 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)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6041248)(20161123564025)(20161123562025)(20161123558025)(20161123560025)(20161123555025)(6072148);SRVR:BN6PR12MB1444;BCL:0;PCL:0;RULEID:;SRVR:BN6PR12MB1444; X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1444;4:60gkmSTBmyvVjmdAfIeAveYIk3R4VAO1RJP0ODw0zjHydN2eKpte/QDLS05yjmVDGip0vItFmu6mY/+bDpEm34TPaaiWPb4trFPaEomxAuBh10+hBtWT3MVfTVY1k9vtpsSxsBieWTCkV0p+sOAu4l847twhzWve+ql95YOhBb0315mB6imK1jOFTufouZYjnuk7iQ7F6s3ACNsykw0iv9shWxfXAvp9NSnplGBWnNF90WywwWWYKK5BpppoQv9DkxNcZFj0/hlGV8HFcfjnxdvu7DP9XrJCATWwv0qZwsKeOx8wz0gkJZemCM5kSojSByCyaGEy4hrJHUr0fOSmnCNoqmElrDB6sHYG3kPXD2JfxCHn13qqLuh41i72X+Rb9QKRCeLKpdQilacsAbipz3px/8m0MPH/vV4PBl/iAL/2D9ltmZJ4JcMpOH3NmFGDz+fx62gEoD1yvgjl7erDBsbWvBZgjr2Pc29cO3ZfSxiEJ4CefZV8FiO+e7SR3ooVkhHJcTiCwOd2/U1Vxd7JHge7ueKJmt/NlJxudcFdNt0gPvMA/r9LYnCo1dvUjJqRCj8TSRGRQO9Ro2jQ+q8lsWinwxFmIHYDzljfEMxsGxGMjWfI15vb4gd6s/r2rtVzcDWzMlWX9mZw3wfcMPr1oDxwWlk97sstw9QNYCdOUCE= X-Forefront-PRVS: 021975AE46 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(39840400002)(39450400003)(39860400002)(39850400002)(39410400002)(189002)(199003)(6486002)(50986999)(54906002)(38730400002)(53936002)(86362001)(305945005)(48376002)(25786008)(5003940100001)(7736002)(389900002)(42186005)(106356001)(2950100002)(4720700003)(5660300001)(76176999)(105586002)(6666003)(6512007)(189998001)(68736007)(47776003)(50226002)(97736004)(101416001)(50466002)(81166006)(66066001)(81156014)(8676002)(36756003)(6506006)(2906002)(3846002)(4326007)(92566002)(6116002);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR12MB1444;H:ssuthiku-rhel73.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN6PR12MB1444;23:vBwlLldxNZBnYKmVdb63hFOvZXV/IqRNb+P1F0ovp?= =?us-ascii?Q?lJbOhjLWciLiBjI+wMHJPqKNfMDcIrSY0Y6JiUJIHyYJPPQdL+Jhd3twUCBE?= =?us-ascii?Q?T42ZqLqMwfXqq5U7Oh8PRgvDGU3CCFUfGf1uxTBEEe4YxfZTekb7bWiyadhc?= =?us-ascii?Q?OIA4qLVFzkKxw8n0m+xJp14Q1GyoEf3vvWCMNCcikFV+aaPPkubZVfW627HF?= =?us-ascii?Q?LxvKnLIWj82MRN9IVlf+IfsmdYzM3T6+afcafkxcIOOUk5Sl5IyBm1Doh4Mb?= =?us-ascii?Q?Yh1uGCHg7efBwqJbcwxLgkjHGgUoNv1niGVMw40V/Qxekm9LtFAHdHFhXRA6?= =?us-ascii?Q?xYYaUsDCH1uMbvXBBGgO/0dNGF1E8ZrloIVMLcIWulafpQsWvRtVyDaS2Tlm?= =?us-ascii?Q?O9p+AB6R7yJypHoLHb3yAbCtheD64AsoibZ10oXJsqn7WSR1z4Jaz0nPbJ9f?= =?us-ascii?Q?Epuz+oGWBla07a0XTD6ElFBSC0A4PtCOmWJp9U/AvByLAwziSebEhsvtMSHo?= =?us-ascii?Q?0zgX2IhTva5XVL/nywHbSyOMW/npQLOgF1T1uOtzOggQsO8EJDgZxNeAtZmX?= =?us-ascii?Q?T4AqCIbJ6onlybko93tXnmO3Jc3IMasaaOjX8uiEnccqeOfoND9iyFHAEidl?= =?us-ascii?Q?bluiBK6tE3WPPAr6lbQWtDfizNnnFCaye6aJSjjuADTYNuGZwtCqCUWtXXSn?= =?us-ascii?Q?uYkJma1zfTqbEzPn0QDZUL9+XoiL/fnUh+fUVO2f8FCZD2rZOdjxa6U0UQMg?= =?us-ascii?Q?qnPhZZCKNYjNopEGd4mQR+8fWGltz1Amrj3NojQU9W8PlTo3LK9HUTnZGv9U?= =?us-ascii?Q?447OW/Q7cJ7le5r4v2OOLPsu3+AhXQyFO1am05hvHpkuXgfKx9TVpTdj5i7w?= =?us-ascii?Q?TQl1j/53Vaa3uc6f0Q+OmR3Y0VhT8AwhPtGzHla92zysqt+JD9xHwHzkhUXw?= =?us-ascii?Q?gs+5VMz1HaQVOL1uf0kFr/wIEWe1MyfM9M6NznJlLAsBBfVkzOUP7Kk1urNq?= =?us-ascii?Q?sfryNMsSc8J2/Vm0I0cOt0K7ZR0f1BOVQeuG7ntJ3qNA2ndi5NCeWNJlIgtz?= =?us-ascii?Q?tMft21q2ThUd3a+JIYy2ngGpFRRvG4nsY/ec+wd3VpwguZdlPaH3adGI8Jg0?= =?us-ascii?Q?Nst6Dq4lbbridR5Hf8U2LQH2NoMQxqbgZPFGn4Op/AnG73CbfKwM0kyCIE0r?= =?us-ascii?Q?KMKEWIaBI7w2xbIuYiioj8hHNRpXODW37tS?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1444;6:uY9AMueWVVbTKlNVdWXMlfUoz/KjP5ADVuA+WyZ9iq9byYQll346ECVtxpFlmI+CKDHzwIJ62HvzdVopRITvWyfvtqMpucURj3XgnD9AdMeLy/mbJ3NZAZEZlypMMgZ5ala4jep0K1dgpUWvvwSaG0cw9KTHboC70BfgDj2/YgDV0xxU30/DF92hfjn4TkIkR5nKJyNOiAE/0MSdXfAce7c05RNnRqy7kkG0/CwMYEq1uOLaTepXUnwwLXAAD60ev1Jyy7xlmQoQb2jkLAGSDgIcY+hDiOzIxVpvruYjJuLy5WM1lWI7Zegzxiz4l5WWI1G/C1zKJ6p6xz9OlIFjBffght9mfx52yXMBBI0OBR2ufrutypyg9w9APH3rFcoSHLZ2PsCiSjrYIGYFBaUMO1hjKXW8Vj2jzmuqcjGIj18=;5:xUVsdypL3VWn7ShddjpByr34ilQFCuCPUTMlwnTO/f6m727uaTSQ+JSSJ703TVYmqh8UhN+sXY4pw0C37wAQ9NAvmx/QT6Z1lHwr5CWqUOP9Y1xlRynvvFd6zQtmMNahGvxyg7RVmduAwb3Il/oRhw==;24:3ZSBAURDAVJ5Hf9Lrybir7l9TwBPFZvXSMDYVUkX8h4HIB6nGVr863U/z8rzEuQz4fjJZxclpYj6Xit2k6U5dYsxb+h973NhnhTWEWcRcsw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1444;7:FmK9M1ZTtQ2zcYVU94iJNUqe2mzYsy0r76AYgZgCJNvuHW14ZbLDF38WGl2SfI+Op8R0x6RvzPMIbpnvR6DbRotX16+F5FB33Vtc5PRGibL9PViFZUZUqiUS9D+heb+82m/rPGfTzaJEpZ6w/fwf5gbClyfyvdWy4qu8K5NBkeGN4OxiiafgrTu9uzegIodAZ8hhOkfHaHcV8tlL0YvtdJIQPrvpPxfbctf6kxe2OGRCk88hr45bMmXBQJBbvPn9+JK5WY4oB0uk5aLSCjRVyMnNg8gxPMqbMMz2ENHM8ryTiEAkIm6o5MgFNlUjsYFxqvWL6NVjodWdWlLQFiXHAQ==;20:wTs7ALcC1WGOTajBrCuOguR1IC4Gf6zl7MD8vhjr64BbxLH8Squg5pkuG9AnsvV1xi0n8fyK3k+UsnZYP8HzlKZLj25+L5zPwV6V26FVxe4VpGH++E9jN5/ai01etAsUSfJ8XYWw06h1XnN0TZoq5cxEXJ0f1FRRplzH40GwiB6Dj5kRHdhiyHW8MU629W8MjxzPQtNTj1zOb0+NKCikwzhKY4BQZDRbBp/XVfsD59ajxBblVHWJHh0nz2gARJ0f X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Feb 2017 20:57:28.2551 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1444 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 b771914..7bbf405 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("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; } @@ -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