Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp1002518rwb; Fri, 23 Sep 2022 07:04:44 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6TGgyGb0dNJ8CFJpI3sNm7CPhYH8liQJGtlnN9pgu97vOEPaU0XK7/X1YRQdrOuNyH7Wq4 X-Received: by 2002:a17:907:6da2:b0:781:aae:d8fc with SMTP id sb34-20020a1709076da200b007810aaed8fcmr7299552ejc.236.1663941884416; Fri, 23 Sep 2022 07:04:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663941884; cv=none; d=google.com; s=arc-20160816; b=s9xlwmPsxDY2h5oF/mfcx8i32ZsnK/a3YfxynzDmJ4juqtVBZwmGEqJHD7w4cI0bce GeYyEWQGfNLruoEZY16mGjJNdx48xprrtXL3vf+yTyHPr5jDyd8CBOTLSL1dp6mNCQ4a 2d9PefMANqlEWxZt7S/DJsNdZVwL2QdO7S1SX/9COHnh1Wpv9tHS3jqtCeWZF0NktKgp 56/nAecxO1u3H0nLdCn8tpdGyVWTKxdb996omVUtPau1gyyWUSxqafC9ppQ3AepI/r93 lWbTeeNPuiSfT9xJg8k5pYVHa3R9enAaCW9Y/8oprBGMh0/8Ajg06nd8XBG5fYTl+aw5 AOkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=W/KvaDFhkQeQ1z4rxlEnCF9Xls3pkQ0h9pwSqImH3fA=; b=aj+952Nfu36/TAZKgSgsSBqdnG/I4WQal/h2zJiy7kQrOWg8LxE9xC0vqyelL4syyw UtJQMUeMrX+zdWQVvEqywaQB9rZ9fWmE0uR/rfRpgygw0TAusjlKAarL1nolBQ/cR2M1 JxHenutNvMSP3ljOs3aVYoBPjzfKwndOqvCWnt1QlJrQaTKe/A1K9bQxaw87EIA7l19/ zhiHXuRNG0uHrChfJ6An29WRSe0N2IDGELHYfqyZLLGCiSv3+SWz7GNwIpmU+7a+7idS DBQJIkTv5tcPYsJ885agZmcw9keESxGGnh4dkpphUz9Cs1lwu+yMP9skmARqLduHbzLz yizQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id oz9-20020a1709077d8900b0077ca4e6ea93si11614599ejc.250.2022.09.23.07.04.18; Fri, 23 Sep 2022 07:04:44 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231211AbiIWMji (ORCPT + 99 others); Fri, 23 Sep 2022 08:39:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51560 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229637AbiIWMjg (ORCPT ); Fri, 23 Sep 2022 08:39:36 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 5248F638C; Fri, 23 Sep 2022 05:39:33 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id AA1D3139F; Fri, 23 Sep 2022 05:39:39 -0700 (PDT) Received: from FVFF77S0Q05N (unknown [10.57.80.223]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D2B323F73B; Fri, 23 Sep 2022 05:39:30 -0700 (PDT) Date: Fri, 23 Sep 2022 13:39:28 +0100 From: Mark Rutland To: Liao Chang Cc: catalin.marinas@arm.com, will@kernel.org, guoren@kernel.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, mhiramat@kernel.org, rostedt@goodmis.org, maz@kernel.org, alexandru.elisei@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-csky@vger.kernel.org, linux-riscv@lists.infradead.org Subject: Re: [PATCH 3/3] arm64/kprobe: Optimize the performance of patching single-step slot Message-ID: References: <20220923084658.99304-1-liaochang1@huawei.com> <20220923084658.99304-4-liaochang1@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220923084658.99304-4-liaochang1@huawei.com> X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE 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 On Fri, Sep 23, 2022 at 04:46:58PM +0800, Liao Chang wrote: > Single-step slot would not be used until kprobe is enabled, that means > no race condition occurs on it under SMP, hence it is safe to pacth ss > slot without stopping machine. I think this is correct, but this depends on a couple of subtleties, importantly: * That the I-cache maintenance for these instructions is complete *before* the kprobe BRK is written (and aarch64_insn_patch_text_nosync() ensures this, but just omits causing a Context-Synchronization-Event on all CPUS). * That the kprobe BRK results in an exception (and consequently a Context-Synchronoization-Event), which ensures that the CPU will fetch the single-step slot instructions *after* this, ensuring that the new instructions are used. It would be good if we could call that out explicitly. Thanks, Mark. > Since I and D caches are coherent within single-step slot from > aarch64_insn_patch_text_nosync(), hence no need to do it again via > flush_icache_range(). > > Acked-by: Masami Hiramatsu (Google) > Signed-off-by: Liao Chang > --- > arch/arm64/kernel/probes/kprobes.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/kernel/probes/kprobes.c b/arch/arm64/kernel/probes/kprobes.c > index d1d182320245..29b98bc12833 100644 > --- a/arch/arm64/kernel/probes/kprobes.c > +++ b/arch/arm64/kernel/probes/kprobes.c > @@ -44,13 +44,10 @@ post_kprobe_handler(struct kprobe *, struct kprobe_ctlblk *, struct pt_regs *); > static void __kprobes arch_prepare_ss_slot(struct kprobe *p) > { > kprobe_opcode_t *addr = p->ainsn.api.insn; > - void *addrs[] = {addr, addr + 1}; > - u32 insns[] = {p->opcode, BRK64_OPCODE_KPROBES_SS}; > > /* prepare insn slot */ > - aarch64_insn_patch_text(addrs, insns, 2); > - > - flush_icache_range((uintptr_t)addr, (uintptr_t)(addr + MAX_INSN_SIZE)); > + aarch64_insn_patch_text_nosync(addr, p->opcode); > + aarch64_insn_patch_text_nosync(addr + 1, BRK64_OPCODE_KPROBES_SS); > > /* > * Needs restoring of return address after stepping xol. > -- > 2.17.1 >