Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp4911302pxb; Wed, 20 Apr 2022 12:51:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzTb4ZEYJRy91uexWh4uKY0tQF6UfxtSvM80xgfRJKBKDG91kjQA+JIxZe0WShtBv7rQJNy X-Received: by 2002:a17:907:6d94:b0:6e8:c309:9923 with SMTP id sb20-20020a1709076d9400b006e8c3099923mr19556132ejc.101.1650484260398; Wed, 20 Apr 2022 12:51:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650484260; cv=none; d=google.com; s=arc-20160816; b=zETp5O9gu1GFItICdLRMztd4qHCxcM1seMCSlFRUAX37tPZhexR71EqvGleOUc8LXZ jZyw25j19yGaYPg+5ILZMPY733b5lu+mXpcMyWfS0xrZVIo1k9jZFFJNCCleWoUQTwH1 iTEFxXAac9EBInqM0oCLv5zimv7Z4nETDo4LC4y9wZ1ivgblHfMZnV81xR0Haqq9OjG1 fkaIq0WL+KUh4ZUGFdk/LNTCTBLlpw0L/FUQePwOX+hU35R+oUN2zr2T9j545jfCI+g2 QYJfmUn+GDnwvzmg9e21MLESU4SD+KfNxHWcgjIYrZjShPzmd0ccJSwZfyLo5lt2CvQ5 DzHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=XuvvFH2DNcFzHOyThr557KLrK4OvTEHV/+bMF+3XKEo=; b=w3jMOUeuuTpnVIKXbd/v2sFT3hflhmXZvMeWJpfD03m6TAAXhz/u33xgBUJ6T7xNGm d8PgnyMee26vxpiCXVNcxHCSRceguL27W1vrh1EwYxwgTKLGbFIwrzlPuMwGOKgDjvrd db1Ac/otEjKyruVRRrnO7uHaTroZc8AnhCZfzXLVbeDd3mInRbGsqsqovg3qCr/TN/E4 79cn0Per5OWBO3TRZ/lCSpGmG7ccH/cGGlSG33Kw4BttjBHBfP7Es/TD6EsU7LAmRkkP IPhXTTejx399qTIkPr6bdreuGCXPkFLXMEKebWLPJKxkue2InSvKsBa+sYWWhRE4aec8 mhkg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=1tOUx6He; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h10-20020a170906398a00b006e8d4fe9fefsi2360278eje.115.2022.04.20.12.50.36; Wed, 20 Apr 2022 12:51:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=1tOUx6He; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344286AbiDRO0r (ORCPT + 99 others); Mon, 18 Apr 2022 10:26:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343911AbiDROPv (ORCPT ); Mon, 18 Apr 2022 10:15:51 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A897D393D2; Mon, 18 Apr 2022 06:12:41 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 6F90160F9E; Mon, 18 Apr 2022 13:12:32 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 67393C385A1; Mon, 18 Apr 2022 13:12:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1650287551; bh=mVo4UmQIIjFD79mpgLYNeOvHMT7O3IVl7jFF4a7Vh44=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=1tOUx6HeqOgctR28sZrinOj2eAXYMV5EFxn9JP3wmBWmHS+eD19Sm8ahmr3Esqwa4 Cl13UBvIHckxkpZ8eUj7M02JlXMovLMM6kmxZrLZeBw8VhioYxVAi91rR6C9FrlaqE VF/S2IiyvmTOhvrNcas5lmlO5vemCK3S4ppcnfCs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Guo Ren , Guo Ren , Catalin Marinas , Masami Hiramatsu , Will Deacon Subject: [PATCH 4.9 196/218] arm64: patch_text: Fixup last cpu should be master Date: Mon, 18 Apr 2022 14:14:22 +0200 Message-Id: <20220418121207.133915106@linuxfoundation.org> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20220418121158.636999985@linuxfoundation.org> References: <20220418121158.636999985@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Guo Ren commit 31a099dbd91e69fcab55eef4be15ed7a8c984918 upstream. These patch_text implementations are using stop_machine_cpuslocked infrastructure with atomic cpu_count. The original idea: When the master CPU patch_text, the others should wait for it. But current implementation is using the first CPU as master, which couldn't guarantee the remaining CPUs are waiting. This patch changes the last CPU as the master to solve the potential risk. Fixes: ae16480785de ("arm64: introduce interfaces to hotpatch kernel and module code") Signed-off-by: Guo Ren Signed-off-by: Guo Ren Reviewed-by: Catalin Marinas Reviewed-by: Masami Hiramatsu Cc: Link: https://lore.kernel.org/r/20220407073323.743224-2-guoren@kernel.org Signed-off-by: Will Deacon Signed-off-by: Greg Kroah-Hartman --- arch/arm64/kernel/insn.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/arch/arm64/kernel/insn.c +++ b/arch/arm64/kernel/insn.c @@ -234,8 +234,8 @@ static int __kprobes aarch64_insn_patch_ int i, ret = 0; struct aarch64_insn_patch *pp = arg; - /* The first CPU becomes master */ - if (atomic_inc_return(&pp->cpu_count) == 1) { + /* The last CPU becomes master */ + if (atomic_inc_return(&pp->cpu_count) == num_online_cpus()) { for (i = 0; ret == 0 && i < pp->insn_cnt; i++) ret = aarch64_insn_patch_text_nosync(pp->text_addrs[i], pp->new_insns[i]);