From mboxrd@z Thu Jan 1 00:00:00 1970 From: Suravee Suthikulpanit Subject: Re: [PATCH v9 8/8] perf/amd/iommu: Enable support for multiple IOMMUs Date: Wed, 15 Feb 2017 14:13:29 +0700 Message-ID: <483deec0-412f-bc34-de30-ce6ffcce3d4b@amd.com> References: <1486456836-17428-1-git-send-email-Suravee.Suthikulpanit@amd.com> <1486456836-17428-9-git-send-email-Suravee.Suthikulpanit@amd.com> <20170208193340.x7lka54ismqqy7nw@pd.tnic> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20170208193340.x7lka54ismqqy7nw-fF5Pk5pvG8Y@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Borislav Petkov Cc: peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, mingo-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: iommu@lists.linux-foundation.org Boris, On 2/9/17 02:33, Borislav Petkov wrote: > On Tue, Feb 07, 2017 at 02:40:36AM -0600, Suravee Suthikulpanit wrote: >> From: Suravee Suthikulpanit >> [......] >> + perf_iommu->max_banks = amd_iommu_pc_get_max_banks(idx); >> + perf_iommu->max_counters = amd_iommu_pc_get_max_counters(idx); >> if (!perf_iommu->max_banks || !perf_iommu->max_counters) >> return -EINVAL; >> >> + snprintf(perf_iommu->name, PERF_AMD_IOMMU_NAME_SIZE, "amd_iommu_%u", idx); >> + >> + perf_iommu->pmu.event_init = perf_iommu_event_init; >> + perf_iommu->pmu.add = perf_iommu_add; >> + perf_iommu->pmu.del = perf_iommu_del; >> + perf_iommu->pmu.start = perf_iommu_start; >> + perf_iommu->pmu.stop = perf_iommu_stop; >> + perf_iommu->pmu.read = perf_iommu_read; >> + perf_iommu->pmu.task_ctx_nr = perf_invalid_context; >> perf_iommu->pmu.attr_groups = amd_iommu_attr_groups; > > So you can define a static struct pmu in the driver and do struct > assignment directly instead of writing them one-by-one. I believe this is the same suggestion you have made in V8. Here our previous discussion in V8: On 2/7/17 08:42, Suravee Suthikulpanit wrote: > > On 1/23/17 02:55, Borislav Petkov wrote: >> Because otherwise you're carrying a struct pmu in each struct >> perf_amd_iommu which has identical contents. > > Actually, only the callbacks above will be identical on each pmu, but > there are other parts of the structure which are different > (e.g. pmu->name, pmu->type, etc.) Also, we need one pmu instance per > IOMMU since each pmu reference will get assigned to perf_event, and > also used to reference back to struct perf_amd_iommu. Note that each > pmu can also have different events. So, I still don't think we can have just one static PMU structure and assign it to each IOMMU. Lemme know if I am missing your point here. >> [...] >> @@ -463,7 +466,24 @@ static __init int amd_iommu_pc_init(void) >> if (ret) >> return ret; >> >> - ret = _init_perf_amd_iommu(&__perf_iommu, "amd_iommu"); >> + for (i = 0 ; i < amd_iommu_get_num_iommus(); i++) { >> + struct perf_amd_iommu *pi; >> + >> + pi = kzalloc(sizeof(struct perf_amd_iommu), GFP_KERNEL); >> + if (!pi) { >> + ret = -ENOMEM; >> + break; >> + } >> + >> + ret = init_one_perf_amd_iommu(pi, i); >> + if (ret) { >> + kfree(pi); >> + break; > > What happens with the iommus that have been initialized successfully > before this one fails? They remain in use? > > I think we need at least a warning saying here: > > pr_warning("Error initializing IOMMU %d ...") > > so that we at least know why some are missing. > The initialized ones should be functioning independently (as separate PMUs). So, it should be alright to just leave them. I'll add the warning message as you suggested. Thanks, Suravee From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751697AbdBOHNv (ORCPT ); Wed, 15 Feb 2017 02:13:51 -0500 Received: from mail-sn1nam01on0073.outbound.protection.outlook.com ([104.47.32.73]:8224 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750810AbdBOHNt (ORCPT ); Wed, 15 Feb 2017 02:13:49 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Suravee.Suthikulpanit@amd.com; Subject: Re: [PATCH v9 8/8] perf/amd/iommu: Enable support for multiple IOMMUs To: Borislav Petkov References: <1486456836-17428-1-git-send-email-Suravee.Suthikulpanit@amd.com> <1486456836-17428-9-git-send-email-Suravee.Suthikulpanit@amd.com> <20170208193340.x7lka54ismqqy7nw@pd.tnic> CC: , , , , From: Suravee Suthikulpanit Message-ID: <483deec0-412f-bc34-de30-ce6ffcce3d4b@amd.com> Date: Wed, 15 Feb 2017 14:13:29 +0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <20170208193340.x7lka54ismqqy7nw@pd.tnic> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [223.24.108.147] X-ClientProxiedBy: HK2PR04CA0066.apcprd04.prod.outlook.com (10.170.154.34) To DM5PR12MB1450.namprd12.prod.outlook.com (10.172.38.139) X-MS-Office365-Filtering-Correlation-Id: 014d3a21-0ba6-4d25-ea67-08d455722ed0 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:DM5PR12MB1450; X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1450;3:YRbqv0UquyzwGH+TYaM2IejnCoqVCl6KkVdnEE2Fma5fcQu2HMFCtSnrYDmwhaUJCR/IyzXCBSQmxJLTnvL+F+K1AxRqvER14FrEACBGvvELtnsh9m1csfiCaeLmUHL1ZUopcWY/1VRmgnEhSWD3CeYMuPa/Ay4sjaDhj9nf0VWz7H9l6+BljxszykpvgSOiH6rjzre7NEoed1sqBNNS1fs7rk96yefPXbF5rz5HZImpmgb9pxEhfZ3KL/k/11F6RETekUvn1AwjO+iRZqJ76uJ6NyFx4DWBzeUYHmfjGTg=;25:QHhKd7b3tQ95xP51NOtAST+CL4EQsJJ0zB/WEGSjF5cCD3WqX40hUAOpeQ0sCp1VvB3MjdANDOKQj1XIAUiR0lHu3gS/O5NQIAp288HDC7yK3T6abeLVgBzxNTIiizlhXma2ZVtjh/ajN9iCbSPjKbtDl0CH4Ysm9Z1bIEnIwKqINx4qIh25wWJMcCiESDKNzDzEhbOBDZM6LVs5V33uCXuhjFuvHiKeS135I/fdO9NlDLEs4lKquceCC9EBFxwbNTiJuM5OTBaKj8tPFq6qTCuJ3yI2dZUbZPhML1wcOWdlmAg2PY7O4EdrInlX2UyXEnmD0tWt9lDKM8CE8NVoXK24LghIch2tUUbZ+oJQdqD5BxNWcODNFVPDIskn2NVh+2c0na84eJm6M12jTVPrPV0ksgDrkb1evdh/GV6r9LEvH1n6lw6lqLPV/GhSPmyIjIgHF6TZ+GkH2bsXx+07NQ== X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1450;31:TDXL+Q2ZZer6bTgSmTPxN4PWM2O1vOHrlx+U4pPUj+WsexgKOI7bc45E06op+9XfB9nEFDHtoOQ5N/s6WuT0N4uZi7jx+6zhVfQC1Whs9TxhErHhdgZnFsWMlaxWwxcTXyXjg54uJuCS682mwPRHgtmZ8D1KzuUmHQ8/d5g837rX3p0jruEfEFt3hXtHTVKjESTmO1Fdg8OOrVPM4IFWlYoD2Q+Sm/da94KvBozUgx+KK0IM2nyaWXVJE3HRt3u2b7W6FcHalmKKY/MIJ5Z2zt13lIduQt6e71dBmrhX6FQ=;20:B8VsZsfX+z504MssgZl3S3U/L6Jz2Ynwo02DBlcLQ+TWn2MSTgGiFnYz7JhBxaoFTsE/KOIc7pgTT9znLU7wq6feJlIeIFz/uRcr6h0CBKG5Ycx/z739X0Sovstr/Cvfanl/twOJwkjdApQiKHeG9Q9KOeUSQRW4KBTfLRbzUTkfEdCxfUhAH6X+MiWz/0rr24ATzfw3RyNsccWOP3m6Sy8CKMKA7u9togsXtppU966Cwo7evnprVDErtwBpJGYbyyjcuCR/72zhqzL3RIj+xSaLcK9YC6mLsF2WH8O/VTl69xbg3kuDMd8RaAyYkc0I2cPaYcuFGcTHfKxCDovD+Nmzkplm0NtEW53Td4KEWAwmzcRidcW516tGYUEEJxugzQjsPI+VaJ4B1xEOPQ4NGUnlzi20UwFm8Ud1TAhyx0Kby0RTivPyI9sPvcJbbH96o5LTEN+g2JKMhJG07aha7Kynjq0QfMrOsZC/oqMhDEXtrcauvZ6Y+T6t5Zps113m 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)(20161123555025)(20161123564025)(20161123562025)(20161123560025)(6072148);SRVR:DM5PR12MB1450;BCL:0;PCL:0;RULEID:;SRVR:DM5PR12MB1450; X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1450;4:yqm7ao5ObbDTrU/QNyMVRUDszqCSWKrIKBEkqaURTysVVKelbvofbiP+aXI7w0slcjMXhvjwLx2WG95utc38ibaVEyjQn+dgiyr3ABWOZOscbE7PF1tGxWqsdDye6/VJwJPtQK4Nbi+m2nau/aZBvTjo+YrrJu9TJhjgSw0h8bjBUVWolFTstFG9DQM+EAsghukHsFALTpWFMfrgDWjSj0lgQDfnLnSJHoKr8uTkIXHWhF2OdAiaF/TFr/LeqWHer5ZV5fjp2qNFddGaFbEzMzcCOiDtV6pALyV+djNTwMr+VYjZYBKyP9UHt5ufq1r3XianXNTFSlL23rqzCjud19VqxdNGQG24uywMPd3oyT5PeUAA6LS0LRnpn2VpQCszoawK/GvEjOrMzeUobZctYd3q/uRy8LNN4wOfBuqRXjTICgDxN8o15Tx2xD3uFIS44faNtkcV3MZ8YE3oLnCxXr+7l0g6Jh8D8NHH0J/ae25rVL/s24Q6e0H9QL56dktLSE+TjhcVGPW+NaQmbVFNlzcXw1kJqnn+ZKTWNwqvRplsoGsM0iEqjB9dpFjGX6uUpS67/f+xGv89K/z6NuOyYj24ij8VosebSc+9Ax+ECFHf0NMkCdgF+M2OXxqiuKDemdFtvWpQS/GrJkhaKR5ANouBJrnoQAWvVfdY0VEOiMs= X-Forefront-PRVS: 021975AE46 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6049001)(7916002)(39850400002)(39450400003)(39860400002)(39840400002)(39410400002)(189002)(199003)(24454002)(54356999)(5660300001)(101416001)(97736004)(76176999)(7736002)(305945005)(36756003)(50986999)(92566002)(4001350100001)(8676002)(117156001)(6116002)(33646002)(4326007)(2906002)(23676002)(65956001)(50466002)(65806001)(64126003)(106356001)(31686004)(105586002)(66066001)(6486002)(42186005)(68736007)(47776003)(229853002)(54906002)(3846002)(81156014)(53936002)(81166006)(6246003)(53546003)(65826007)(25786008)(90366009)(189998001)(110136004)(38730400002)(6916009)(230700001)(86362001)(6666003)(77096006)(83506001)(31696002)(2950100002)(389900002);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR12MB1450;H:[192.168.43.18];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtETTVQUjEyTUIxNDUwOzIzOk9oVkp0Sm5vaWVPNjJzK0FuUXdzSU5CT3BZ?= =?utf-8?B?aWtJNkNQMEJsTEU5eFZtb3NRNlloT3RZdlJJV25LZCttVVBYUU1vWnF4SkdP?= =?utf-8?B?MHRYWmQyc3ZyQTlUek9lSjgyOW9VV25EVThNRVVlZWZJRmIzRXVjMVhHQldk?= =?utf-8?B?SmU5d3l4b3laUXB2RmtiWGllTHdHNTRBS1RuNVVRVE1wTU00eDFsL0p2bzlr?= =?utf-8?B?RjEveGs4MUJQTzRSOVJtbGVhc2tNQ3l0OUNsaHVXczdBcTdsMTlLMHpsMEVW?= =?utf-8?B?V09yWmtHWkFhUDJPTVpRVFV5ZFhLSFQ5WUdnc2FmWGZWWUllYkw2NWlLT01t?= =?utf-8?B?dWZ1NWJSYXNNVU5xMVM4TnNUT2hSWmYxbGVqL05UbTlKa1Fpa0JWeTh4N3N3?= =?utf-8?B?VWJtRXJEdVBiUytrZUUvbkI2SlBYMTh3UGdLZG5yZEJCZXFoNEhhZlJLQVJX?= =?utf-8?B?WEs1N0UvcmpvZW1CandvaWorSGRsZW5mZVF3Q3FMeHNzQzNQbUltb3VJT2xK?= =?utf-8?B?bXdVOTNRZ1AyMWhTMkY0aVN1YTZSeHViOTREREZwdXV6dGMwWm9nVEdNdWQ5?= =?utf-8?B?MTBqWmt2OTRMY2pGSXphVFo4N1dkU2R1MlpQdVBVbXpWQ3NqUGppVHMzSDJu?= =?utf-8?B?d0VabXZBUWlwSEtrSW5XNGtyYVViMzdraE42YkRTdUtiVGtkMllTUUErNWVU?= =?utf-8?B?ZCsxT2lGOGd3UjdYRyt4SmE2YllLeHVhZjMyMzZoWmRxM0lOZDgwbXlkaTVm?= =?utf-8?B?SWIxRlhBTVhzT1lwMFQzcjN2N2dvQ1RDSHkxbUdrMVlOTHVob2xPa2NJTzdv?= =?utf-8?B?ODJXQnQvWEE4YWswUngweHI1WGMrK0owYlZ3MkNNTGJ0dndOVlRDMnp4N2g0?= =?utf-8?B?Z3p1cHpwd0htbWhxVWd6YWZFQ2p0ZlJ6ekVwVnJod1lWSDc4TVhNSTJMMlU2?= =?utf-8?B?RUxqT1lwNkhMMG1Sa3dVQndPY295dzRkdWpJejF4ODY0YXc0WDdnOHFNS0tl?= =?utf-8?B?K3lLanl3d1YwNTVNdW5zRTJNUjEwZVYveXV4ZDNLaE5Pa0dJSjIvc290ZmxN?= =?utf-8?B?ejZzNU95MHFKTnNRRWRZQTM5OFA2VnJNemZqZXhPbXEzWldzSWFiRkt6NVZQ?= =?utf-8?B?WlR0NHJldlplWFhZN2ZwVWpEbHd4cU5yUmxQTnMwZ21OZS9rQ0w4YWd5dDhE?= =?utf-8?B?bXF4cVRvd2ROYXpJa1RJMUxhZ2ZaQ3U1NXBESGszY3N3dzFROUZPYXc3SnlY?= =?utf-8?B?eW1hWUU3eDlyRWFzZXZWajRiRkJOY295T3BkWWswcEF5OGNRVTVDSThON3kz?= =?utf-8?B?S2NMZi9YTmR3bnRUQ2FYMFBoZUc2S3I4NXkrblBTcmhJYk9QaGFXczZEVnVx?= =?utf-8?B?MWxKcDFxcm1ZTGI0M3JXRnZ6UFlqaVN5aDgxT0Q0ZFc3RXZjdml0anZRaDNM?= =?utf-8?B?WXkyZVVCenRHaGl1N0RmZ1lqYVlwUEhRWHZLY2VFOGs5RVJRYUVVTDRRbVRi?= =?utf-8?B?c2k5SndnVUlmbTBKYm1GWHlCdDh6RmNteGVFTEVnMWx2WHIydTJ3TFZaaW53?= =?utf-8?B?cFVlbG9US2tRMFppNHpzVmxWb01ZOVFQRGt1c2xaNWwxeEFnYmNWbjJqNHRk?= =?utf-8?B?bXo3d3B0Rm5tbG1KV1I4L0pNdFlueWdYTW9Ta0dmZHhDVmFIM1RlM0lPWDY4?= =?utf-8?B?anBNUmlKRExZc3VqY2E1d1BqYUsySzJLYklmbWtTOVNXZnNiVFc2aXhlclNW?= =?utf-8?B?T0VGSjEzVXo1VDdJOE94Y1FLdmJGeFRlUnJsQkhGcURpSnNxOG9OUjRHSnBL?= =?utf-8?B?YklmSW8xU0pmVkw3NEU0TzVVcHZzeUk0MlNLam1UTmNGdmM2TUsyTWJqdFU2?= =?utf-8?B?Qit3eDVFOTUxakZzVjVoYnFiYVkrMW81V0NzVFZzanhBeWtRSENTTVkxRTJm?= =?utf-8?B?cStJa2JOVG13bzVjVDMvS1JJWDUxNzdBZDNKTXR5aHhBMzZIRWYzZHJpNHFM?= =?utf-8?B?V2QxeTdtRzllRWtMbDdmZUIwNmY1blVpWTFUaU03ZGpCK1hocnFVdG1aSjEr?= =?utf-8?B?VzltUDE1eHVoeTU5VGc5VTZjTlBDTE4wUHZ3c2RqZmhuVy9aQlRBK2FsYTVw?= =?utf-8?B?T0E9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1450;6:SoMv72UCFKP//J3Iab+k4EY+6pRCU2xFIEbpfbpylVQ+t5KQHlod5SPsw92cvF8OWLoiNdfIdAHFbyGmFxZNlb/fEqRv2j4rrqUNJXG1jWS2Rpnfj7hox3k3ov8DFH/Se6ZrO8tlHWdiq7JXBOpHI6a1byeFBR5rM3t+ORfx0BesWDuYdKPtRboiENwPnv+hynrrP9Wu6mhgiBlviTkjvz72hDAm+YRZc3xsC4RFlPYrwoHNbwhEMQB2qP2200MfsYwQkdCWMg8ndrk6pRc76q+mZq0HEbbdIaAB8KVOTC4B6euRSiAALI+qnk6cGjrMkgdD+iauB7BYSVYVlwHt0ExizkBqGjD2GcKfSdR5uXTzj7kr4qmgUuvAk5Kx6RtPpSlV+UwGlkQPAl6NH1I09ianZGe6o7YUY+hdr8fRhdU=;5:+wFhYtVLGM327h6E0oDoeJt/JS5TDBuCqCIAQRzSHbcoxUBifYciLLHibGwvTTtzchOmOgc0CAK+x6iFLqf2oBlXjWPMMdgBVVmlQnIqzRv+SmdhyJdnnmJ+2kO0jb2wj+VQfhK4Edt7xzwEDF9OIS7W3iWl3jtUNrXDBDr+dJk=;24:U+qnhKS/pTdmk6EW+a8KYaA+lUsQf/P4M6NFxfgMOLWUd+PpfqsngplxcvkmqLMDiIgfUSxpaqZe9iC0y8QiF040/u8Y6TeGjd79ezTHDmE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1450;7:69vGIWeZlOkL2t9WUBN34NtRlaM8A1w3gMgibzA00onX67mDJaaex1jalkN6ySxCyw7QHgeNTPlpZJ2SEm8Qvuedz5LFJdx0VivEHhkgXbyVe2/+4CiNLi3rDmf7eF109TqNu/4YpNwplrIoJNVZdLovSBHOFwQib8mogAo8anj+fZp3wSk4ctCLniK44W4JxDws3GD88PJzVXfbUfeCQGDGBkNJ1qQcQpKFea3fASUUq7CTVbnYWckOT34eEBErogVQqINV877837FtJp/GZF4EfqyRXfMpQ+4HZc5QsUsa4nOS9coCnLRr0XRrSaQFPLa2bFydU7OW6q+hCcRRiTBgPK0ydP+WeW2QGCCe7UCWIkMm/fXdqpQGrio2Gx7F8crc5o0QV1kbw7ARdjOQvpFV03xafUTSEA1fsNCs+wgCJw+mQETPkbN2UTdktzV9KPU7up4HLwGt0d77fWgD5gCsnihND/jztwgqIVrFdZdShIopljpItydvzY7erbDilvUbeTYj/3sbLGIqu5FKDw==;20:EwOTZ+/u8hHXLFVFih+rR9sqt0P5K7ypxPrUVi3bjDkoF1UyV+p3X1PN1EINwmbRCNoXTNajeaP6YUpM1rDqmysHoqBRXe5nUYJQjuaBuvtiGpQJNmn+ZDgbwcTY0LBsEQSVx7kcX98zLCaeInADBDibaR6p3k1JJAJM+K+CsUb2evSukfMotybUPoPdjeod31+mT3stMrT4TYLBiDxKZLNRq9juUaGcKE8koUY7E1abTEZpUw8hVvEdr5nIYf5t X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Feb 2017 07:13:44.1928 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1450 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Boris, On 2/9/17 02:33, Borislav Petkov wrote: > On Tue, Feb 07, 2017 at 02:40:36AM -0600, Suravee Suthikulpanit wrote: >> From: Suravee Suthikulpanit >> [......] >> + perf_iommu->max_banks = amd_iommu_pc_get_max_banks(idx); >> + perf_iommu->max_counters = amd_iommu_pc_get_max_counters(idx); >> if (!perf_iommu->max_banks || !perf_iommu->max_counters) >> return -EINVAL; >> >> + snprintf(perf_iommu->name, PERF_AMD_IOMMU_NAME_SIZE, "amd_iommu_%u", idx); >> + >> + perf_iommu->pmu.event_init = perf_iommu_event_init; >> + perf_iommu->pmu.add = perf_iommu_add; >> + perf_iommu->pmu.del = perf_iommu_del; >> + perf_iommu->pmu.start = perf_iommu_start; >> + perf_iommu->pmu.stop = perf_iommu_stop; >> + perf_iommu->pmu.read = perf_iommu_read; >> + perf_iommu->pmu.task_ctx_nr = perf_invalid_context; >> perf_iommu->pmu.attr_groups = amd_iommu_attr_groups; > > So you can define a static struct pmu in the driver and do struct > assignment directly instead of writing them one-by-one. I believe this is the same suggestion you have made in V8. Here our previous discussion in V8: On 2/7/17 08:42, Suravee Suthikulpanit wrote: > > On 1/23/17 02:55, Borislav Petkov wrote: >> Because otherwise you're carrying a struct pmu in each struct >> perf_amd_iommu which has identical contents. > > Actually, only the callbacks above will be identical on each pmu, but > there are other parts of the structure which are different > (e.g. pmu->name, pmu->type, etc.) Also, we need one pmu instance per > IOMMU since each pmu reference will get assigned to perf_event, and > also used to reference back to struct perf_amd_iommu. Note that each > pmu can also have different events. So, I still don't think we can have just one static PMU structure and assign it to each IOMMU. Lemme know if I am missing your point here. >> [...] >> @@ -463,7 +466,24 @@ static __init int amd_iommu_pc_init(void) >> if (ret) >> return ret; >> >> - ret = _init_perf_amd_iommu(&__perf_iommu, "amd_iommu"); >> + for (i = 0 ; i < amd_iommu_get_num_iommus(); i++) { >> + struct perf_amd_iommu *pi; >> + >> + pi = kzalloc(sizeof(struct perf_amd_iommu), GFP_KERNEL); >> + if (!pi) { >> + ret = -ENOMEM; >> + break; >> + } >> + >> + ret = init_one_perf_amd_iommu(pi, i); >> + if (ret) { >> + kfree(pi); >> + break; > > What happens with the iommus that have been initialized successfully > before this one fails? They remain in use? > > I think we need at least a warning saying here: > > pr_warning("Error initializing IOMMU %d ...") > > so that we at least know why some are missing. > The initialized ones should be functioning independently (as separate PMUs). So, it should be alright to just leave them. I'll add the warning message as you suggested. Thanks, Suravee