From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753640AbdBGIly (ORCPT ); Tue, 7 Feb 2017 03:41:54 -0500 Received: from mail-by2nam01on0047.outbound.protection.outlook.com ([104.47.34.47]:11335 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753611AbdBGIlv (ORCPT ); Tue, 7 Feb 2017 03:41:51 -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 v9 7/8] perf/amd/iommu: Fix sysfs perf attribute groups Date: Tue, 7 Feb 2017 02:40:35 -0600 Message-ID: <1486456836-17428-8-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1486456836-17428-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1486456836-17428-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: SIXPR04CA0023.apcprd04.prod.outlook.com (10.162.171.13) To MWHPR12MB1455.namprd12.prod.outlook.com (10.172.55.136) X-MS-Office365-Filtering-Correlation-Id: cff6afc6-95c9-4149-fe6a-08d44f3527cc X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:MWHPR12MB1455; X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1455;3:p/c+KzgbdoxO7VizqoWSJfzwRpAYdrFgCi2oiRrAa6lC349s12jcqkozjFIwdBWhMDSvRosjwrCePflIh+FD6Fx1Tes83MIEK0/VssY0hHMu6fWxp03dbfkKLF1oQZEez6hLxW8pok0b8YuMwnmhlyzR/tXSbmHwLE78phvMgPrzQR7MWEqbped2CIzJNXkfBJ+eDr13ATY6pMzPRxbC77WqZSQh00nX4xte/Dk3uy3FdauCjk1gWhGUmvPvoqdNVHNOR514UFofRjJPsRHRve4yIUJC6Wk4MlmP/88rmJQ=;25:ni2txXqgvwEn3esXVfOw6owtE2WjwvDTIpSSeYjjwkr0HRwrq+x9Wn6Kbr3E3zYecsededKeUhPaxnsMV2T2S174ao361elgz2v8LwuoiuhtSHqhtytoYqOvduYSvks28eaRSsFp3cEapcOKoFaJe5TPaY29M2UUkWZO/ENRytuUPELbV2Vih9PP1XSv4itXib2MuguHjlmyxGXHOMImty2PAqLomvzSH4bIdlm9GdlA+7mHskPJFD2SBTMEfK80EB8SlBfV4g/YpUA2PycMseW0Yfjo5G4dQvM83wM2jtgBX+gDV5LZ8eLsJ3rj+BvVvPKOXEE9zeH95yPOrqUPNimIR8As0GW+d5tR4+kpc0uFm+C5c8MHAtXGIpBOaR0Cc9RDwA/MSsg/AVf5EDrFvSGOezk+u0dHV6F0RJyX9iJSFdTDqqaGVIiiwVMkVBGpJ9DDmDWMI5BynMwM+zAtbw== X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1455;31:FRpJoYF3WZ+VtvRAcwXJDTLwXznFOYqvb/w6LvdieZpPMr61RUMquTt7sX7HnxQWUNW1cludSY9cFMe3f4ZSD7UTPvJF9tugntNJokn0QMPAKNomv89Qm7/i4SXCwuBtWOjK/Zcge6k9pCw66/5H1qyxEBP84jLmQdxUfyl9+daEgwIABEgxTAY3vTD7EqigqECppkO4gTudHvXbgQ5b+i9cvFay3frH8OUS2UNSxuJobHdoD7jyqzT+ZyhhVDpw9HgHiPXRCeMTIfB77GAJNQ==;20:mJu3pL4wzVq+AvMnmrkCen+b4IL0Gejk3yKhTkv7/Y6Ny++v3xwMgsHml3K5CQ5psobIRhic81OrsypKQIViNzpSJksr1gl/PtZ4pSSOhyUm8fapC2n61iRx1U27uhFtLgG42Nht7zl+2EVpVY3Ykcfcpcjw6WMcWQvM52AbuMF1IWGAJX0OLPG57e8P1nncFW00hSSta1du/1fT4F9tuqCVi8gQhjSKyljPzHyH9/x4HBcVd2wF7KYPPq7oPz4PxXAQPv3Gm8hdU/E3tS9qbI6cFAHPkDjatyrgf18hlka8p4jMsXADNJplVNPjitNFr1hjN1WXZeP2bdNgCYsrI7EtEBBn21LwUkvZd48ImYh5T4+9tAvheaqjj+qwmsVoW3tmo/Bv+hUIFVBfTkX3SYl/umzYvV0vv4vkmESPICM7l41Xsr/gI528NoezT/dELr3avs+kBC37z7rq05oU6wVVCllVRFaLw5Jm1bZ//neTitRPwOrUcqZfVelNuXXx 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)(2017020603029)(8121501046)(5005006)(20170203043)(3002001)(10201501046)(6055026)(6041248)(20161123558025)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6072148);SRVR:MWHPR12MB1455;BCL:0;PCL:0;RULEID:;SRVR:MWHPR12MB1455; X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1455;4:Gtb4dLXnPabDNWcTdnC3p/vl2AqJgDiJLYpqq7GWZisg2P20CQIkrQh5K/rlCmf6EjeACOIBg2oWBpbBMaY3KIEvPZtIghzTB134szCqzmyT/81iGF4CRtau/ycPnR+c6ZLaVhvnVOM2tuv6lwwVuFHifIDJQVieiuJAS7JcBBvdT0pZgt4alwFZc4k8ZOoq+DPyjTIZ4CEKWTy+s1w54ApxRsevbEgC2pR8GnzCKwooLp5KzaftBrNa4/VtTz9T+nH7lfxtRFduKFEK6eVIUgoOScrHnG+plYhRuxVpgKRNO6EWTezAYf93kAfPB4IxLagT+lcflekS4ux4R3hSQH0PN77z6PF1Lprw+ubcVSXtQtABL6kbcFPCd7SFXVCA0S77eU67G/gCh/5C4csqt3v32T6nHMjWZ8YuyoytT17bOPQGcsIfXnha9iSrrQ1rBS99Eyk/N85dQgzsl9hsDFY6okR8tSApVeCA95UX+LR9yTmQsJl3O3RCO1yuPqQrywynfj6ayVFkr7OguC+mgKDHGoAOb3h0p5HK7kV25B3ivCxtDQCeEPzUL2hhusADUkFuT3Bh88r1xkjpRhpfRZdAEjEhoqAQveHG4421TzB6zyFfzshXp43TmqsuTXmwg34gtGAxDsqN65pPCbkpVYO9eke6fEDN+89dGQnq+q3eBmWfeJehUrslcFB73oR5SnoQOKhlBwp68J4r/+qllxkQSi2nmSCf7Bvx465dMrI= X-Forefront-PRVS: 0211965D06 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(39850400002)(39840400002)(39860400002)(39450400003)(39410400002)(189002)(199003)(25786008)(38730400002)(5003940100001)(4326007)(6486002)(305945005)(105586002)(6506006)(7736002)(81156014)(92566002)(68736007)(2906002)(6512007)(54906002)(53936002)(8676002)(50466002)(81166006)(36756003)(42186005)(106356001)(47776003)(6116002)(66066001)(48376002)(3846002)(101416001)(6666003)(4720700003)(2950100002)(86362001)(97736004)(5660300001)(50986999)(76176999)(189998001)(50226002);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR12MB1455;H:ssuthiku-rhel73.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR12MB1455;23:hYT3eKCUALO8yprMvDKncgfqAbwChHIO1nl+LGJFN?= =?us-ascii?Q?jiuIt5sPRFEI5r9O2xPhdKQC/vvzFl0BZ3s1Oyj/GPPlXgKum5gO8b3Nefq9?= =?us-ascii?Q?Xjz2E6C0ipne9W0vq+M4fav0dRfzmb0Ojv3tbmosQBJwSHHc3AAWeeMNLjnX?= =?us-ascii?Q?HXuH/Q3qGsVaSiu12dAliIB4eX9blPDjS2qPxWLGExkNyZwu9RvwtvhhOW0t?= =?us-ascii?Q?BOKg1uUbqrrgcomPfRIS0vaV1crW96haatISk8aCdVdqEdBA6qjf1/Sh+Vg2?= =?us-ascii?Q?mPh1Ci6HPG52UUTl+XNyj8pCrq6o9Ag8MLtafWoESvJBi4sP3/lL4iZ2CQFj?= =?us-ascii?Q?YEQKKXgPLmEy20yYajTU3ttKoUUWNWFNWhW3Hp67rMfZJsIuYW1d6BwiE/mk?= =?us-ascii?Q?mpYd3H4HdUEHZZhjeFK03mgxKwWzJUM+60OYbjWPchFl0tTs+70ARNY5NIPT?= =?us-ascii?Q?HxMJLmebnKTPjIr4MAHyWw0DKE9JrMvtVaioShXF+loxzJWpXHgneDlJ/DFW?= =?us-ascii?Q?Qdq3B0NB/X3tAr2tGtgVqBMyT2S7Z8m31HUkJb403uenV326k8caE1qxGns6?= =?us-ascii?Q?ehtBT4kNJSeAt9dV82iaMUUJhRhoIAOCHt2vlVlQ2bHkEN/G20JWNCum1uB6?= =?us-ascii?Q?2FyOGMjnrtnUgbi0x5H9QKtSNHY1Y32luqQnnm0tkT6oVzm798dPECg7tv35?= =?us-ascii?Q?PdU6nXOe0mef1lS8ely2sGC2doMBb684mdxd1Znihcl4qshDLF+CwqXxwuBL?= =?us-ascii?Q?ulUKCtgFXMtiwBhx4DCLcBRQCL4A13i3vZIzsoMYdEiBOrrxDuSm3z1SzkYa?= =?us-ascii?Q?bpfg+G/H1JhlvEQoVLylIeZH5AFOMRSNFuJ2aGM1QppWd++AfeNx7uTAAd0p?= =?us-ascii?Q?Cqker72eTVBvjKyXkz9zNoWc2B40NSxT+yBcZLl7/+78Kj7Xt31ODRJebQon?= =?us-ascii?Q?E2vQUhehGi2IHWmvB8ey5vVJL6+dIflBFLvAQuCMrnuu+pmPSbjMQHEFtnXK?= =?us-ascii?Q?geWNyxeWMgVQWQMPNObdKV+HaxdDRZonjUgqX8ksvmqjr/pqk9cHQJqi1VGe?= =?us-ascii?Q?YuN726BuGvSeB5xYqE8qXJOK9rlPE1j2F/WG4kDYzoKDZzkWx1AMgnhANqjb?= =?us-ascii?Q?K9ONdYoPWbOy/SClcTzIkTTVwska6CrChIsKUZqJXOktnEQB/HjrlLPf7nkF?= =?us-ascii?Q?w8cPl835EbT/jg=3D?= X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1455;6:THetvUZuP8b9E1osnu+pXGjf0HcdcG8fLkfwl9iefNliYvvunwwCsf9zvxfJ1Bg2sQb1byIEHrgg1QkdI7Qivw892K7eX7HY2bESL5HEoq63CxpBd9T9gmwsB0UycxGgyoaaR+b1Hgq1lpdooKHER1zSWxYRrRu+vBafvIUf/iF5kp8CcgjXqBaI1py0sQsRtloqVJ4U9Gv+JAjQBevZDzz+V3zQqq1ro3ZAli0NyBUEEJjVQIJi3XW/2l8W452Rn02Vb+AOuqD8QyFiz/Y1z4KyNfWpu35SpXoIlJftSqnmf+DpKjY7CnTwZTBQ+shmknwvsaUCdIdcxdfiOtW7Bo146dP/fchdaVUPpLG3ypXVwpCZz1YNvblMu7mzmVUO/ov1h15yYclp/KuE+jxypXBHLBEXHUs14dKd/vg0dA4=;5:PXtZKoJGEQitJiOh0VXB7ABkZ4GtiBpCSXdm+i3l2nwnnwquAlj/Fhxz5/riQvEu+4KyUU0RdN5wnDe0sGD+11oFVm5QGfSuvQH3jQp+I388XIBpA+Zyep9s2Nyf2SIUjcVyUsy04oAGEP517vDIMayC06FnmBj9jlbjB3Fp2jc=;24:G/iSiXlLftAZTDMZkLfgsP0FzRqnycATpX6QovYBGynHmEAR4kvyiePsSAWaPuT/nBVwdnEUFZ0RVWYDaO2/GPa26dxfIQKkeyKiJ0yHPUY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1455;7:rLlJ1ZbkUm+WfKM5zK2q+dUk7WWck6vKiQGJkLQaFxSi10ABYnQj/baZJHBCawK6kGN4UO7UF4rmNpeYmQbkDDcms00Gr2A1Wr0HB9Ubuf0iBaPzd6pRwLmFwwKBW9Zk7ryYMms/U6lepzLq/lnMTSFNkqz+UvTTle1fJV6CH+i0kBiY27sNvUrJp2HWjKZXHh3Zrh83PtP9rT+qPvbgjNhSXjHvo+lNddrnYkxvEn/X2IrpXTgp6nyVgEaY1hEk4qsCK93DKPvi//2vyltpFMz5yypuhfou9tuYXDktF2F1u8CHn22tqjmb0ZlqyXNwqikiQgKX5wfX4sWkBv6VcrJsV7NY7gI4YFAvGRJYiDGOjzQ7Q1X3UeOnrUdCyK46UPDOWWpIrKJtxEsXo2dUEh2RT9YXIxEJu2iC87d2l5PPLkaBvC2t8kICwoYw7qfWEw3GMbnuZwi1nRUxygtavQgiurCy8Bl02Pj/+IiXTpYd7HxeRjVaD59OrMQO683cuslIZZQ0RP66MH5+68x/rg==;20:w+ANU2w1wIeRH65nb/hpi8zeMFlWy6aShCrauEoKM8tOlBkrnaEC2iG4S6BaDQdUOstcIjK0U1JLk1Tg4YrKwviC/GJ0uSMk4I6R6/+fef9k7QRdQb3Zw0nLqESwH3b5j1zNj4inoME4f2n92f+KJBsJZw+JSdpuL8SiF6EMO3JqNj0qjv4hcXxvT8pnVV3lmK5vUQkIycpEaPpfoII7oNyGCv2z4po3geXg4nLZfwDduQ/HYL3+zZzhdUao6Pdx X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Feb 2017 08:41:41.2637 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1455 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