From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752452AbcAASYo (ORCPT ); Fri, 1 Jan 2016 13:24:44 -0500 Received: from mail-by2on0075.outbound.protection.outlook.com ([207.46.100.75]:54991 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752381AbcAASYg (ORCPT ); Fri, 1 Jan 2016 13:24:36 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Suravee.Suthikulpanit@amd.com; From: Suravee Suthikulpanit To: , , , , CC: , , Suravee Suthikulpanit Subject: [PATCH v2 4/6] perf/amd/iommu: Introduce data structure for tracking prev count. Date: Fri, 1 Jan 2016 12:13:38 -0600 Message-ID: <1451672020-2150-5-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1451672020-2150-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1451672020-2150-1-git-send-email-Suravee.Suthikulpanit@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: BLUPR01CA041.prod.exchangelabs.com (25.160.23.31) To SN1PR12MB0446.namprd12.prod.outlook.com (25.162.105.14) X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0446;2:+1KDO96kjojgv8e9mpv9Z6pJEm7ZeTbimN9iaDRhXfjc3PsWOKa/lu4oj4d2n3h58Z2IPSmRJZC7fgUPDeTClHjsWBISoVNDM5Q7WZGpWa+0EUJBNB5FDGUQci9+xwPpmpcy1EfJhgijenoIj59NXA==;3:pFOftpHR6sWsaeiISMnStZ+Z/mH6PIPRL5/K/36b4sFR1dyDz9/ndnFxhU+E6ZZxRxFKZtnSXYLYcDBnz3iW1tU09KyTUYjVEGWTQMSdZM/PAe1m7AWHBcqZX7Ekj5Kg;25:rkUMEkZmzliYq/iyrIrIzN8bmtkI5fXLyhLOKa+xrOxp8mXDw6l1dt2Fj8MQeAa3K7ZraFChu6nFfjGTN36wDuM+r4yF/3wihdzbwDR5kbothTAN0eVrKPihsthPvs6nzyPXmc2pfCYYPvVK6nUp0qdmlQXu3XLRMuRrknXEtz5RcETOLrPZ/WVG8f0rox7Ll+ghdTpvF8nsUG4UKEg74y24V3WuV3x4luh5AZToAHQRKO7lOzTPcirewrrjzqlopqY7gjesf6XsbXPrJOJYSg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0446; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0446;20:noOW5+5dGH2H2sQBluY45LIcAOJuws0QApR3CUPBcLAq7jk4COVmV1jI67RKslxj+JzpiFV47ZeckTXCsb3HWDfHyPiGy64FDHVyie4EDru8znXE4oSTGt6m7SI2QeT/S1iW+MKE8OKChxNh7bxvFdwYqPKojcKHuomwC+CeobsQg4Itdx5B9GKX3vlCjwNYzHtWP90LJfiDA+B+iaJCIIbbJ55jrHtbPrMMLSXT9iaSdomCMQ/DY+o1z9BtOkBTskub8BWPBiWdK4wrfCxt0eal7MgYv0AU87em/CYGViS624NJT8xrSyXEF5p2GWZtqWQ5MmcX36I9mzxcwfvsXWDw5wOZqk5XZK1Ue5YGSB/rNoI2kIVg8xotR1HfXcI2+rOq79UXkPqqFujYuRB0HNuY+SsCDrbNhgc1Z62p/aLA5aG7KUTpNp94GFpzOgZyieFysNgxKbqXzr6EcHMGhQ1Gwzp0XV8dI4nNinopnrkhmEzbKBJEupKun1m/vgtG;4:u1PrKnEYCsICz51LOWWjQICV0KLM4Vw3Lvj4vnSv/sbVH5DgX0uiLCUo8zFvvd3LnchGGnClw+f5tS9LdBddYsTfAsn1G/FPcC6u1qv9mQxGhCMnJzc/cM63acEAbHlvqdnI6IdKYhQSSJfgpIMvj0L1gQM6JLef2nhrFtqNXa11FbcF9Ou33+qnT6SiM3K+7KHg6dPxXBGxGq9c3TR4xBXGxvhqGkTQfVd9CDMv87FaifGQyZu9S5zCaa6QHwS7lM/VQXQOhyt9syBjsHCwJIUfm+TwEwj22Z2FTlKR0i+Df0yai6QGnCrbPGPFbQJGxCd6f/GLN+vDmyQI6A1t7XMFqWKBDzMcZrGVfWoUNhcerYrlZa8aYE2Zi0IZ1kjliLZHRIQk/F7K4s2hSphdssf3lU8ciohwby39BVp4KHo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(3002001)(10201501046);SRVR:SN1PR12MB0446;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0446; X-Forefront-PRVS: 0808323E97 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(189002)(199003)(5008740100001)(19580405001)(97736004)(36756003)(66066001)(50986999)(3846002)(50466002)(586003)(6116002)(40100003)(19580395003)(229853001)(1096002)(122386002)(189998001)(47776003)(2201001)(77096005)(2950100001)(50226001)(76176999)(92566002)(86362001)(5001770100001)(42186005)(48376002)(53416004)(106356001)(101416001)(4326007)(105586002)(5003940100001)(87976001)(5004730100002);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0446;H:ssuthiku-cz-dev.amd.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR12MB0446;23:UwOctuappPSJh+5S++mnIB8d0eDwLA3GDz1L4q9Va?= =?us-ascii?Q?9hwiO0ovxspiJb79VcCj3Pc2dMpZk9gyGfSuwRcK+Qk1nZ/3MU1XvyPyyuz7?= =?us-ascii?Q?C31P0jxqd8lyV9v1G7gENiNxofL6qXvGWGj/sIbnhPBZiLUXOU3sOhkeK6+o?= =?us-ascii?Q?Cwy+CEOrDPYfPpSC2/Db1NZ/g8W9CoTJm/pSITzfa6arY4bY1PB5GfWZ0UBQ?= =?us-ascii?Q?amHLPZWdckH6lql4R8h7nYD+aTQ4MX5Mqy4QZuqivpxfrhTdH83ESHnaX2Hx?= =?us-ascii?Q?nCQveLKLbMXM0tgGbmSE1h+relNBHqODkEP8kIDZZxe+a83S4Mm45HiKkq3p?= =?us-ascii?Q?T7YGz/MFx9IRhdXex75EAQHzdhXQFw13QBzYR3mJZpAvzwunpm0nuvDkfyza?= =?us-ascii?Q?cQkeRHEFcV8rZGeFNYCgCAt+HK284gNUKjM8cKFD36laQ5ylRXsJ2u8Uv8Wb?= =?us-ascii?Q?xB0smWVMJUD2FEcMS0jd+LoyVZ0y8IRNVW9Oymhc491YSKW6mM55ZvWv3dEQ?= =?us-ascii?Q?Z1jnV+F6QKVpSqUr2ynx/QoCidlZpnDdjYw4awNj2l4pwRqW463ZtzPCy95d?= =?us-ascii?Q?ZAfZWRRQ/aGZw8sBKBfAq6Q8sJ657feMNy8Zxd+2zxNa8VHFq6uI0mbieoMr?= =?us-ascii?Q?xIJF8NqTwqfr4vDf8xl+TWCLTVIdW9AYbr1FiY8INLKPfPuwNCi8jHkRC75C?= =?us-ascii?Q?fkl7CgcnQ7datua4QrUQAVzl/59Hpj3KPp8HOPkXpbGfs9/IbVvdsnhMm8hk?= =?us-ascii?Q?DDQxTHMcibNzqF/CMWnAsENs/NrSmADx00BYkkGhqEmqICv0H09FWiULpwag?= =?us-ascii?Q?cxWw35FNERyeP4/hY9FIM2/2vX+bYDOy4uw2AfqPQQ503m19sdAc2YZR760F?= =?us-ascii?Q?ZY0hJNMxE5lJfC1PIXvzYPoTeoJSVctPKPpJllar80FyVqbKtWO5hSJsdVHg?= =?us-ascii?Q?N1fydwclSuISb9wDzz4m338mMfEEMKc7YMka3c8jTF6fSX5gxUgWix+JtyIO?= =?us-ascii?Q?+YfZHZizLbMkQU8L+uCGRff?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0446;5:UO6p6SLZt53zj0Wdg5YFmcHJzFLHxjEMMoqXtiCfeQgtViTcIf5RBX8JAIekipqRN90TmWlH4pJh0pHimi9QR+8A2FkYzTrlrNiwExJ+f/i1DngR06BhDa9MsW4k84I/07Ra6CxAgNnjaEeP8jdqYQ==;24:mLo0cdLsTnaJYQTRE24g1Smy1F2OOckY3mtN2r0EghHQrzJkodA2lJ67BZyNv1nuOLrH9VsRZKqTNJNPvH3xGRsAExvEWnd8/pjjD/wjRFs=;20:S7vrVYRqHOn2tWOh7eyum4QPwXDYmS7pSA4mWIaeysSLsvJfN+aI2FOQpNJWwFyLAG/6BCi96VjzvWb8syHjFQobNsHSjSXif04q96r9yF3taOOJR9QA78K+208XorW1zqzWU3mI5zwIM1OXidFQqIRRQ1QOm57z7d3FZ6HeDlaq5F9cxYDanAxgqkV9YrSe0qZxVLSGs7cs6AjwX3X4RRaRvXY5qCqupadoZuLdLlhoY32Dum0AXoJ4eHak9gSm X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jan 2016 18:24:32.2213 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0446 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org To enable AMD IOMMU PMU to support multiple IOMMUs, this patch introduces a new data structure, perf_amd_iommu.prev_cnts, to track previous counts of IOMMU performance counters in multi-IOMMU environment. Also, this patch allocates perf_iommu_cnts for internal use when manages counters. Signed-off-by: Suravee Suthikulpanit --- arch/x86/kernel/cpu/perf_event_amd_iommu.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/arch/x86/kernel/cpu/perf_event_amd_iommu.c b/arch/x86/kernel/cpu/perf_event_amd_iommu.c index e6d2485..99fcd10 100644 --- a/arch/x86/kernel/cpu/perf_event_amd_iommu.c +++ b/arch/x86/kernel/cpu/perf_event_amd_iommu.c @@ -42,6 +42,7 @@ struct perf_amd_iommu { u64 cntr_assign_mask; raw_spinlock_t lock; const struct attribute_group *attr_groups[4]; + local64_t *prev_cnts; }; #define format_group attr_groups[0] @@ -126,6 +127,8 @@ static struct amd_iommu_event_desc amd_iommu_v2_event_descs[] = { { /* end: all zeroes */ }, }; +static u64 *perf_iommu_cnts; + /*--------------------------------------------- * sysfs cpumask attributes *---------------------------------------------*/ @@ -423,10 +426,14 @@ static __init int _init_events_attrs(struct perf_amd_iommu *perf_iommu) 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(__perf_iommu.events_group); + __perf_iommu.events_group = NULL; + + kfree(__perf_iommu.prev_cnts); + __perf_iommu.prev_cnts = NULL; + + kfree(perf_iommu_cnts); + perf_iommu_cnts = NULL; } static __init int _init_perf_amd_iommu( @@ -456,6 +463,17 @@ static __init int _init_perf_amd_iommu( perf_iommu->null_group = NULL; perf_iommu->pmu.attr_groups = perf_iommu->attr_groups; + perf_iommu->prev_cnts = kzalloc(sizeof(*perf_iommu->prev_cnts) * + (amd_iommu_get_num_iommus() * perf_iommu->max_banks * + perf_iommu->max_counters), GFP_KERNEL); + if (!perf_iommu->prev_cnts) + return -ENOMEM; + + perf_iommu_cnts = kzalloc(sizeof(*perf_iommu_cnts) * + amd_iommu_get_num_iommus(), GFP_KERNEL); + if (!perf_iommu_cnts) + return -ENOMEM; + ret = perf_pmu_register(&perf_iommu->pmu, name, -1); if (ret) { pr_err("perf: amd_iommu: Failed to initialized.\n"); -- 1.9.1