Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933620AbdCVHFb (ORCPT ); Wed, 22 Mar 2017 03:05:31 -0400 Received: from mail-cys01nam02on0087.outbound.protection.outlook.com ([104.47.37.87]:25814 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1758856AbdCVHEY (ORCPT ); Wed, 22 Mar 2017 03:04:24 -0400 Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=amd.com; From: Suravee Suthikulpanit To: , CC: , , , , Suravee Suthikulpanit , Suravee Suthikulpanit Subject: [PATCH v12 08/10] perf/amd/iommu: Fix sysfs perf attribute groups Date: Wed, 22 Mar 2017 02:02:40 -0500 Message-ID: <1490166162-10002-9-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1490166162-10002-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1490166162-10002-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: SG2PR01CA0012.apcprd01.prod.exchangelabs.com (10.165.9.150) To MWHPR12MB1454.namprd12.prod.outlook.com (10.172.55.135) X-MS-Office365-Filtering-Correlation-Id: 62125cd3-cf82-4cd4-0cb7-08d470f19bd2 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:MWHPR12MB1454; X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;3:AH16kBIH+D4rGbtAK2x3X/3YLy74KCRxScwCpgvuEdEfy2oKygkENgGEp1FrCWLfXixwkm8r6tIEi545ydQ26OUS1s1EBcZ+M6GgTnN+HaN/0Hz2qE7zcwjtlDrcsPGgVcRXXRf+pVF2W8S7Ja89Pdjnktw1lzZbrHqlHzL/Zv8SS3tnprHws4plH2GDbNe4DNBYT84ZSd+R6OfhYzGS0OOPTvtzyIbLN4OK8vCQmpyqVg2BOKFV5y7rXmR+chtcL8hFMbXRwUTjJvXrOvF22ER579cZWjuuFRWTse1YtO4=;25:WrjLxWq/9Muur1pPXM6Svs5554cWOSG/7OM/CW0Q1LU9o97+btx5Md7eGEUbotquNi8eJcFBIxqRAoxdrdHT6cS4qKDDehu3pIKthN5x3Nwa/S4TXfp/0HJJSX7ABmXhCdqoOEryyS6NsoAY96bkbPDB7coA6eOIi3Dvx9KMXqX79HtR6cn2H6LIfsM9wLx4ksqMkIn0H5/N4essLXAYSdiEru+HJ4HrvcsMNt8r5L7TKee4+/4LeskacrSOICwRttqqCNiAvR/evPuPiTejfyr2/TU3Has5PS/oOk5cEKRj0O7idYVGVPTsSOvg1ItNCeWiM0S9nnyGdM+51mRbrLmENKzYLSYoVpffHEdraaihV7E4DEMXkn7fRsOubQ1r+nKlIaAoL0wlbB58KvR4mINtWoLflq0Q63lkzzZt6RWRzG/DvFQn8m40hCM7gb6+Crr2TYDaZfvG88TzLstkqg== X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;31:tusp6MDefGqDgwlednz00HVeYZBlbAt8uBVGWPrf5QVJJmkeq/Wvxg8qAaDRIotqjX3S7OhFK2ezx+klzhdmYR0rNHpTg5iWw5lmIr0Q8dgxo6qP5CWseSeFixYo654MIgkXdw5OWjt/G3f2Mxkige2EpslTk6rIvhedWkPmieUI7AZCdxvrH7AnMIxnBV6uhUUTKoSu/WMOphiN/PnxKUEmAAzFv+oKQFn4I4HAEwW6fiJxrasvijyJGwzQ4Wsb;20:BQYiShvRRq1ievOz92E/UsF7GNpOh8OcBWhXq0W4a9NBYXReXBau5z1RrZ52x8Hkun9DMPWk/YxLB6nByFfR/8JjAXESrsIhpdOy51KTGqOcuPx3dIuOpAx3nIt64s+wFTcAc9QvPosKoNh1pVmq7LLjD8ThNryvh+ZN21vtSRNOFFHTSE/+Bt/AGTHW6PZq92uHgSzUPHeCUb17iihkEIV23+jO0iNvDe6jLgr4sGrWzMXuFQUQDEUf4LhlKQCJ/S2/oUUksT72EN/g8ami79Qo2l2lOwayUkmmto2zSNohdRTUkPzWnQGFwBhlqa9/JrEUraZJ2w/hCf3xwiFcd5QJfa50MKYhCuYCBdIOtOeXtoze6aHMzNB8PL3334yxZ2BpMMioiI7LpghGF0fNZB+oa69oDOg4EgQ5/s18uT1Mx5uXZDKxM1WTG6oxCB3uhpLJ1nqdVKAr6+zBtrvWy/rmbaCNbFG4naBuWzPsVNYRT2YY0BLzpdQvAMyTsqas 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)(20161123555025)(20161123560025)(20161123558025)(20161123562025)(20161123564025)(6072148);SRVR:MWHPR12MB1454;BCL:0;PCL:0;RULEID:;SRVR:MWHPR12MB1454; X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;4:J6G60dqJ97s/974MJAV9BPgacEQ1mPWhFtHl+ZmNMdcXqTG7+sf90uAgP2h3MDSTt3TSqBrkRtNeX7xwJTV34wAv0YSq9BL4oDBvYpYBPA4en/z3xm6LQl6WmkhwhXi4HwR1oVEJZU34lf+zcJOJwEImGM4Ufv8t3lLmIBC7HvdQEfZBisI2msf7IcFGH7pTW2RttGwE+GlAjwfFyNsGgrumyL6CUR/dEpe6/CvP/rzJqHXCdbmU+g+jfWTphmW0C1CpEo4HuD10PkIKimQ9YFUD2U0K98SpDhypYc56AiVV21JDmloWNp1z4xRiu2GMw2iCEUKyvCx3x/z6dRBdFBMB8x7ujUNDlBAD3hJQV9zp7Ikq4x0PsPlYX68776TPV1UqCOA2z0mYNCf4zODfcVmuy2vseSDet1jI+EPMafo30NtfKGp4vSF4XYEWbo05JQmOWIuheZBIG/pjxYozGcRHDLSTuDOKnon3RqfLvoHePtfBzkKMzJ20tTqBte+rkHQC9TMk1Z7IhwFs/J88QF1YmZtRMFzfhniVhhSqs/D8QqS/7sGxya9ycl2ztNyeoPpUoLw0Ry2UBM2+cVWwKYScWM9ys8aTNo83WU4aLH7ywQo65Us4CSjOVlJxJAu7CWWoZyzWQxDMX9Vw0B7EpTdS8JexBTqTCe1TcwP0+hI= X-Forefront-PRVS: 02543CD7CD X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39410400002)(39840400002)(39860400002)(39450400003)(39850400002)(50466002)(189998001)(2950100002)(4326008)(6666003)(6486002)(5660300001)(50226002)(8676002)(5003940100001)(47776003)(66066001)(81166006)(53936002)(6506006)(50986999)(76176999)(4720700003)(54906002)(2906002)(42186005)(38730400002)(7736002)(36756003)(305945005)(6512007)(3846002)(6116002)(86362001)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR12MB1454;H:ssuthiku-rhel73.localdomain;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR12MB1454;23:gngevOBBv36alorkZNo1SBvMGTTqfaUnjbn6uZdiN?= =?us-ascii?Q?LEUm9XGNv/+FGiaJZa1DuN8E+CTVz1J+4jomFeWGm0Ziw6W0EIJkrLF9nPta?= =?us-ascii?Q?T8P0crH/tIb4Uj5Opdz4+NA1XkSMymY6Zhwh5X8GJJS6PeyZvYn0hhyb39wb?= =?us-ascii?Q?zocGrxYLWndXiP1Xh1bolQzl70tjwIfimey3t9lUF+2gHGOg/ojy/KPpb30y?= =?us-ascii?Q?22GoZr9cGZSltKIxEBGFedUU1bZeIDEJozgV1DDnENC5aL74iPB9nf6uKH5V?= =?us-ascii?Q?t0vfz6ZylTb6dqLKuuHRtSlwQrjuRrieF/XgA//SRsXJeSuGdZCwOesydY6k?= =?us-ascii?Q?i+0DQVTgHOrCeDBl6YSv+sePLqBEqvlOUc5nkEBI9m8NGt53lmYCJbfYCNfX?= =?us-ascii?Q?vEo9K1GGYq5Ty4n/f4sVP1L2erZhK4Pqkvv0sfcce+djR2kvTGr7WlJtQ5UT?= =?us-ascii?Q?bqY6aIieUMPoMo7G2Vq7AJvfWjKob4ljxmPtUpsBN8wmQd7XP+Ro1tS3fhEv?= =?us-ascii?Q?p5Zv+9XkBIxVQLkgTEAbPPO/BW8SYzlantbuvNbprPoyXXuuR+R9E0K0oxWr?= =?us-ascii?Q?ZGtbt2lNs4MrJBjdqGGNQJYAaiRfhtxhdgO6qgJ0eo6eb9JRsS+IgMUYbLHt?= =?us-ascii?Q?M5SWQe3YqmwZZ/nqBAz5SYNqLIKekz6zzZCfVkm3phPmc634IQD+OYpbjKaG?= =?us-ascii?Q?ujyh1jP2t+G0I18qD/46Q02e8HURhAfiJpYHWJJziDGTYLhV9HjP3LWhMG+g?= =?us-ascii?Q?VvXf1bhTQb3JFTGqB5cGAVsShi29/f+0Q/L3+bbCHnhhrs4M77j5vEOdT2n0?= =?us-ascii?Q?VZZnaareJsf+f9yEUqrSrc+udME7KWLfx02xR4d3sEsfKBGMHBjPyKm6RTaI?= =?us-ascii?Q?xPIawJr08Lxb5fYfJ4hogTcvZnKRogq9haH5ebXiacyNo/gJ1U6/cMkw+LzF?= =?us-ascii?Q?Xr4n6qRaqYP9z9kmVsUXzjRlFcOKPh9/DpyMeyWCg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;6:ZUmqFZuwFlBHApQlnG2IrO8ZgpzxolA5NXq/ewM1p3Cw5Jj4cxK69/USaMDIn8kYSDgu1dE3KjaycnJrBpeGLslJdv++aDjgsrtTva5ry26UxwbMfS1yS2M3bZ0s4D2SVOy+8mu+Nxcbt716p8kV0EaMrYd6X5GEJiun6H8K7o60kjajvOEX9leTpvn0SSuJqseq4BUkmKk0e5vDpH9lFCd5urz9YsPca99ofu/T3TvJis3WvVvEiQ99fV8OLhUcxEUrRhBENBbMaFYwXfrAUVUS4HUyPpUEgG0OJwDyQMZEdyk8gz9Gyj+esRsBgV/I5oqC2Tqd3KBTek02GRZj5dWcX++6PgYG0hVPistXli2B8KcrQTBWjsbw9s52+AQoiBBD4TLM89AlPXz264clnWYVCcJj/UT39XK4YfUSZxY=;5:IHlaIqr7y89GJIuu2MCrP4pS+r88AzNqadpPTGWySsqcWcVhMO0L+dZ+JDNAlI+hmRUQIU7WqrSuwxi0a5TFFKRC/1dyFEBSYx8V5nHSssKXqm8fApJJ7e6aUQf6Z0UQOuKcZlHoIEW1iyhK7+nwrw==;24:6yMYrbNbMDZ5aoVszUHVtZV3Nd+lIhQQrni20z41dKnK8dMxcloJZZzAOuRPzxjIcgzc7t4G7ObHiuOJEYKMhFmAZoa0xLFTMeAfM9I06iM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;7:Xyf89yAADDt4CFwy0BgSxmnpf2CK49NSoF8y32x4OceQH5/TNpyRRWcddS838eFQEonymStFQh6Bv0Q8Li8Z9P4upv3fLiRtdhZ787VuCOX/wVN8JXg6bbA6onpRtCGIsiv2EbRdzXVpW/pOLgsWn236WkHZeVCo4Id9arMKVwA+tz/aTYLwSCXOkUmsVIvfDeFZu/XRFMsmWgV8P844mCLJqKgKtp5eRW8PvA9Hc0armwhelHRqtnY9+Zj/tTuwtlxRGOnJ64fF7m2oBuuKgF31ix9GRK2W3m+JQOCasCw6i1VK9qP+RvzJs50GtVj8NMcLQBhAvJ4lnmWsAw8W3w==;20:RotIDUJ8vDbOJ54XyuUDvHgLgNMyXbH4yLOhhUrTQdIRYHXRjPn7umgFAZ/nm0rUmF6RIzpC1VulFJjusF+HqklztW3SeME9N97igwVB2y7YsNU7mwWKfZsiAurJTbw7LCcLarMN9A9VD4mjCCLJr2Nn16ST8fAhpWGl2b63Mipyzh6mrbWsrlEluZoTQ0rftR6mOv9sY6NS7/5ftwshNWxIj5G/qOW6EBkrqXXP7J1gEcLtt9F4489Nk7DwKqFO X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2017 07:03:49.6695 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1454 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4706 Lines: 174 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