From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759680AbbIDQEj (ORCPT ); Fri, 4 Sep 2015 12:04:39 -0400 Received: from mail-bn1on0067.outbound.protection.outlook.com ([157.56.110.67]:27264 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755140AbbIDQEi (ORCPT ); Fri, 4 Sep 2015 12:04:38 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; From: Yury Norov To: , , CC: , , , , , , Yury Norov Subject: [RFC PATCH] arm64: cpuinfo: reduce cache contention on update_{feature}_support Date: Fri, 4 Sep 2015 19:04:11 +0300 Message-ID: <1441382651-12058-1-git-send-email-ynorov@caviumnetworks.com> X-Mailer: git-send-email 2.1.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [91.77.150.194] X-ClientProxiedBy: HE1PR01CA0012.eurprd01.prod.exchangelabs.com (25.163.2.150) To DM2PR07MB622.namprd07.prod.outlook.com (10.141.177.146) X-Microsoft-Exchange-Diagnostics: 1;DM2PR07MB622;2:QHj2c+m1i6HJC0sVc4aSKijHZ+P2qBrY8FPRbwORMg727k1lDapRVBnukfy1XEmb1UqQG5bB2hSLNWex3AV250RAxExyhtNnbNmGM1za36jFIO0esWvFDkia9gNfZDPEvl8PyQoem4OUvKQVMK9+Zn+Ua18Qz1PpDnSGDrInmQE=;3:5fZcIbGowSTU8f6dT4qmU1bF5zqBKLsmMf/2yTEm3cKakQOa+EgdPR7lDQO5OS/dVfPoWQEwpov6WsEarzL2AWm46uyK2yaaO7wMZf1wy92G5+26L74On7R5x389vNOctdoPA+7w1PeAQKutOuA7dA==;25:aLEnOWzr+55rmny2DRX2lGgmcYj0Pq6nc9GZ6vlcsod3Q89eOTDZR9S7HMWqyd8FXAVyufwLPYmgT1Tn2P8UeUyuGXNpvDE/TVUolimaiUp+uvhBCytAuXdDy6cab3ebZesTNPdGJD99fK3s+baeYtjImf7xFagKsMD8yGJWTJOinQpCNP2cPwi4p3i4IZo1N2zTLntsORN+f/YSQn6ofh1liomKvo5LkLrkGz9UUHSIn8vCVeTjbG9B8Wrq0wOQKuPVPGP/oStUeqywsMrQHQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR07MB622; X-Microsoft-Exchange-Diagnostics: 1;DM2PR07MB622;20:tP7wF1z5cfotbHOn5TFxfOFMRkrG+srYv1x4/PEiFrxd1woHHqhT0Bc+9cg1dz2AE4frS1egX/d8ro4pKK7jUZYhirsjhYFm84+tPKbS0YJFU6XUXAfm+QqJ/WBCCcZT5jxWqKsuHADBq+moq6wCA/R2FkgSRvnCw/WtrfAHGGKfInv1y3mIDYMOKs/M9oKvHMfJA/RUgCm4U4QNydYuLbWlpFBHuTHHmt6RZVD0LacnOBgbdkjVzYHVzasb0aOWH2u58rRPZQ0Rk8+ofliJVkpi9TUNJ8M/43+EEX1zGKKYlhn5OUiauTimF/TJPQ08t50V4wMyf92GYvoxXqQvt811d3vt5jyDWaOhuZfXJ6OfdpGd3kl5BVXKWKmIo2j3AmJq2d7VhRmxUaLiXtGlWHUDmkfcLLVVphjJlRZcheG6seP82d3evfkZx6DaE7PpDGAzffNt9FTVb2LhATVlVHc3pL6I3JxFKgSD+9aPCwzFzrAYVrKnjLpa6nzL36GELCstb4wmwsUtbVKHml66Pq0MdGDielLv44i0pfJiK0ZH/+ziwKSTTBB/VKMnEhzGPgKRRyrcX+Ae7agaJmPHxPEKJLQemd8dCIKJmppWR9A=;4:erIMWxHIFqtf22qivEv9yRgFql5tdwNC0GJ9M2Z5p26e52EM5+OQmU901glbbLe4a48Qbc28vkf8Y/4zEJ2FgjOxyHMhPkOD7gbpaUnTi4trG/7UtfaKEDBKw3Aqds1PBspu9dgdd1jw5LGFnKqNP5b/nqQy+5PORKLIW0pudtl0PuIaodkR3WQWaUJ9iMer3kd755jveVhDAJDl1RWJI12emmmr8Syp7b/LQvaF1G7H7IAbIMPXp7ooL93IORBqWwaaeV6uMZUH1HI8t4nNKp6jPeXud190HlSpZA+ka6L3t35B65HYe6Knmp9YVUkW X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(8121501046)(3002001);SRVR:DM2PR07MB622;BCL:0;PCL:0;RULEID:;SRVR:DM2PR07MB622; X-Forefront-PRVS: 06891E23FB X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6069001)(6009001)(189002)(199003)(189998001)(40100003)(46102003)(5001770100001)(50986999)(33646002)(92566002)(4001540100001)(97736004)(87976001)(5003940100001)(42186005)(47776003)(77096005)(81156007)(68736005)(101416001)(15975445007)(107886002)(66066001)(105586002)(5007970100001)(48376002)(229853001)(5001920100001)(106356001)(2201001)(50226001)(76506005)(5001960100002)(19580405001)(36756003)(62966003)(77156002)(64706001)(19580395003)(50466002)(122386002)(5001830100001)(5004730100002)(5001860100001)(4001430100001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM2PR07MB622;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR07MB622;23:0emoc9b2nosEOd6kq5vUgYZHv3l2gF50Mrylw//CSW?= =?us-ascii?Q?17YdpEHwXw0beMSbJtPVErqjS8sDYdhsKpE1XGJ2Ym1qiqRxqwN4bxjxL/C+?= =?us-ascii?Q?CYOQYy2N1RdQ+hUcFp6OiibZE9IDKRwcfDgh7C/YCVNyaY8jICzLfMrRqIEr?= =?us-ascii?Q?F8++p9rt7pFyf2uAsPyNAFhQE6wbpsjKfRai9rvNuGZzCw/y98wBbgkZVCFY?= =?us-ascii?Q?BZmLX/EDxmjJRvi6UaJ3oNHAnGasp2dZA6F0G/wA2qNAoNqRv3SpahQH4lgP?= =?us-ascii?Q?BcoBWzegkpSJyqlTxNtgjBrCyYNBhtG2QEpjSQ94H8S7UaW59BK2zfdKHV0/?= =?us-ascii?Q?4L+AVo9h8EYQjFMN/rYP6xxgFblOzxBZ4cZZflACvBjy5UV6ScK6yVTNxTZv?= =?us-ascii?Q?PJJrJbFvD9QJVsAKqzM2Frb8htdorFUXfRdqoobV3aQBw0M14OBNv9qptMKf?= =?us-ascii?Q?BSXNjuJxf54lkpOu/zsAG7Uip8aDkLvZaKVhFjnrMdp+KUlQ6tEl1YP7T7s0?= =?us-ascii?Q?FNtgOo5mVgtqObVK8o3trIF651Yolv2DH4Pqrohy8TOSw4kBb43v8404XHBG?= =?us-ascii?Q?NrpooaVCldsJfqZow97qy1/MnXwADCGyZsveehKGustFcHgw7tbb3OmabSAw?= =?us-ascii?Q?EzR+NbhG2muz3yLqUOVYL+fV7aQF6ZMTkcLzsLWw/NRUNlw/k8lAr+CwzO/Q?= =?us-ascii?Q?Z87sigcBnRpl8+ZHIeOhQZE/ZirGSdQjolzgujNeTUV4pLpG95aKEJOGGx2o?= =?us-ascii?Q?ylEkatMbWEzvVPxberNm3aWW6FknDWZLv0gMfJzKsEGBqXH6jZnz0/Au51jU?= =?us-ascii?Q?QxCiCoEvcqbtTa6nF3yt/Ij0Ey7/KmfGZbHEJjvBcTuLKWFP11iWAlH1X0h2?= =?us-ascii?Q?XepZQdvkO2uP5EwDG3s4p4BbiO9CcD6ZEkAytcA0BQgB9kAXtpUtOxflmUJ1?= =?us-ascii?Q?QL/OvBKtgZ6CcLf3I8wok5rsnpoOXmbJe5WWkuOBevXIxNeB9zaezzoWH5XR?= =?us-ascii?Q?4lMOi//N1LaD6HbmlNNBEOg+tPjzNarjMqo1Ych7n/rMk2GPkJzZvShcWgpz?= =?us-ascii?Q?PrNhMY5yk/CU+doVidXVC+r3560bN5eOojlTesBbd6d7iKH6iNRio7yjP0mV?= =?us-ascii?Q?HBZnHnyuG+BBUGu1s6dghhVkwRbee53tcXENnzcj0oMQ2Fc9FZT28XjCs/Ii?= =?us-ascii?Q?cGKg4vq8rbnFFzG4l2jNn6JPRu3vdaHvJbLWehR/VUKX4ySLHw3HnCoMA4fi?= =?us-ascii?Q?CvBn7iIY+5XsjDxJ/qe9nmmFrKV/V2eeZeA3E1?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR07MB622;5:vq+GPTWWl7tmU40nd34OkdlUSOVSE1zXydxKIo6WSjmBfKKB6fkEGJ8ZuKDpfKpKamSH4sQe6BpdvQxHjIYbLKtcwfe8U099P7vdJQC0Qfhn1uBRGx3rKpLlIm7OfXRY0TH8+G0TQ52HmFG30Vd0RA==;24:1LnpNbJYC8FyvJryRIa+VuZTKctskrOAfNP+DEcmSRlT2/7sRG4CZyAQ7QB2Q8zlpSOd3MnUK40DzXv6q61LOj7duIEbP9aYUrRHAVEELSc=;20:621IUM96bPsaOyjDbMCVQ+jvm4weCGh3vKzYg6Ok47QtDbtfyVLdUhslMHV2p4+c9BHRb4n6cLwcXaNMYalTfw== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Sep 2015 16:04:34.9840 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR07MB622 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch is on top of https://lkml.org/lkml/2015/9/2/413 In master, there's only a single function - update_mixed_endian_el0_support And similar function is on review mentioned above. The algorithm for them is like this: - there's system-wide boolean marker for the feature that is initially enabled; - there's also updater for the feature that may disable it system-widely if feature is not supported on current CPU. - updater is called for each CPU on bootup. The problem is the way updater does its work. On each CPU, it unconditionally updates system-wide marker. For multi-core system it makes CPU issue invalidate message for a cache line containing marker. This invalidate increases cache contention for nothing, because there's a single marker reset that is really needed, and the others are useless. If the number of system-wide markers of this sort will grow, it may become a trouble on large-scale SOCs. The fix is trivial, though: do system-wide marker update conditionally, and preserve corresponding cache line in shared state for all update() calls, except, probably, one. Signed-off-by: Yury Norov --- arch/arm64/kernel/cpuinfo.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c index 4a6ae31..9972c1e 100644 --- a/arch/arm64/kernel/cpuinfo.c +++ b/arch/arm64/kernel/cpuinfo.c @@ -87,12 +87,14 @@ bool system_supports_aarch32_el0(void) static void update_mixed_endian_el0_support(struct cpuinfo_arm64 *info) { - mixed_endian_el0 &= id_aa64mmfr0_mixed_endian_el0(info->reg_id_aa64mmfr0); + if (mixed_endian_el0 && !id_aa64mmfr0_mixed_endian_el0(info->reg_id_aa64mmfr0)) + mixed_endian_el0 = false; } static void update_aarch32_el0_support(struct cpuinfo_arm64 *info) { - aarch32_el0 &= id_aa64pfr0_aarch32_el0(info->reg_id_aa64pfr0); + if (aarch32_el0 && !id_aa64pfr0_aarch32_el0(info->reg_id_aa64pfr0)) + aarch32_el0 = false; } static void update_cpu_features(struct cpuinfo_arm64 *info) -- 2.1.4