X-Received: by 2002:a17:90a:3944:b0:1bc:b6a2:f14d with SMTP id n4-20020a17090a394400b001bcb6a2f14dmr5406091pjf.124.1645720839726; Thu, 24 Feb 2022 08:40:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645720839; cv=none; d=google.com; s=arc-20160816; b=ymIGR92GMqwE9Zn6g10a58kD76Sfm4VhWIa4rFzSzGVxzOLX/5hgMaoyRkHMzQ7j7D xxvx67pKNtY1Kx2WTexODR2iQIFVyi05SlSTJRHlClqM8uhYrRsN9NJFmZ556ft/+BYY ci0eZ3kuilDfZce1RfbnxygMfyke1o0+qVmwuOHQcjQeQuhy9RR7/NbI/fqEndVdhpX6 GNf/uPwKiOe/aRDtdUxzP+hUIBvfZnoxjjv+2NNdFhLTDUQ2NMiWqdiwraqK9kVa1PN/ PcxjRToU5KQoIirfRLmR7/7UQsBCNC4HSXtIL4mC27k8d61gcXKuSaqFlN3lA64DKxjT k0JA== 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 :references:in-reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=h7dwl6rAa4zU/Ttq2Hr9iZ7KLPU/+Sb12hdjAUCNGiU=; b=ZZjwrLCdvnXmnYoE8uEd53ggijw3FEAU0c6AN048YpSHsOqZRnyuG5dz51vnPWU/Kx ainCZMswLjgUfitFKcCAwxRc6N5q5r5f4GayFLxHR+FAResAMlaT+xe8i+qqalyUG70F wH0+xJsU3nT247HLOarr2TgRS8TQufrCGBtO93ec6OTpvo83Vn6+E0kQ9Bb/e5gMkTdn fAHdo5/BAcjwgw8sYcL+AaNufaOjAuPrj6CjilZiDtjwdeSRlityFolPfEZw52LwLyhM z1lG00eB4Bu79oPtQR0Ok1HNv6brbKukq+fvhT1XL2UAaj4ZHi31F/87zt0OQWwVAAwl d1+Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=N40eyeIm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id o21si2870804pgu.750.2022.02.24.08.40.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Feb 2022 08:40:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=N40eyeIm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 273A616BFAC; Thu, 24 Feb 2022 08:21:50 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236404AbiBXPz7 (ORCPT + 99 others); Thu, 24 Feb 2022 10:55:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236618AbiBXPz5 (ORCPT ); Thu, 24 Feb 2022 10:55:57 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3778217C438 for ; Thu, 24 Feb 2022 07:55:27 -0800 (PST) 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 C5A2E61764 for ; Thu, 24 Feb 2022 15:55:26 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BA1E0C340EC; Thu, 24 Feb 2022 15:55:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1645718126; bh=QqinqAC468TSKHfPVewQtZrGPuE4gy2uDC9DJz44xt4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=N40eyeImIMne6IsvOpWskvHDWp/1aSFrqsLQecfhnOdC/G5/IU/UeavX9JBh9mau5 U49HHzDmkCsiSX1yA4/Tjm1CPaV8Q0DDjnnvV2LUUIM5ssEQhlbEcpFAC2nQU1/yM1 PQ9plYsKFK7LOPPheOG+RcWz7jFNZPWxUPHp2j60rkRs6OlzQCw6OtjlW0SWOw5oUd SIgY1raFUrHwTlokFJ3PSpBxWbkW1T/TYq5eiFtkR8w9trxvNydX//RWr/ghkaqC1T hn01CWJh8yu0Qym3jeCul7R1ESY6Vm6u2TaMZST6ZvQnYi//ILROLDYtLAqoLSrl5I Z14BSX/QFF6xQ== Date: Fri, 25 Feb 2022 00:55:20 +0900 From: Masami Hiramatsu To: Peter Zijlstra Cc: x86@kernel.org, joao@overdrivepizza.com, hjl.tools@gmail.com, jpoimboe@redhat.com, andrew.cooper3@citrix.com, linux-kernel@vger.kernel.org, ndesaulniers@google.com, keescook@chromium.org, samitolvanen@google.com, mark.rutland@arm.com, alyssa.milburn@intel.com, mbenes@suse.cz, rostedt@goodmis.org, mhiramat@kernel.org, alexei.starovoitov@gmail.com Subject: Re: [PATCH v2 12/39] x86/ibt,ftrace: Search for __fentry__ location Message-Id: <20220225005520.c69be2fbdbd28028361792d9@kernel.org> In-Reply-To: <20220224151322.714815604@infradead.org> References: <20220224145138.952963315@infradead.org> <20220224151322.714815604@infradead.org> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.32; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, NICE_REPLY_A,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable 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 Hi Peter, On Thu, 24 Feb 2022 15:51:50 +0100 Peter Zijlstra wrote: > Have ftrace_location() search the symbol for the __fentry__ location > when it isn't at func+0 and use this for {,un}register_ftrace_direct(). > > This avoids a whole bunch of assumptions about __fentry__ being at > func+0. > > Suggested-by: Steven Rostedt > Signed-off-by: Peter Zijlstra (Intel) > --- > kernel/trace/ftrace.c | 30 ++++++++++++++++++++++++++++-- > 1 file changed, 28 insertions(+), 2 deletions(-) > > --- a/kernel/trace/ftrace.c > +++ b/kernel/trace/ftrace.c > @@ -1578,7 +1578,24 @@ unsigned long ftrace_location_range(unsi > */ > unsigned long ftrace_location(unsigned long ip) > { > - return ftrace_location_range(ip, ip); > + struct dyn_ftrace *rec; > + unsigned long offset; > + unsigned long size; > + > + rec = lookup_rec(ip, ip); > + if (!rec) { > + if (!kallsyms_lookup_size_offset(ip, &size, &offset)) > + goto out; > + > + if (!offset) Isn't this 'if (offset)' ? > + rec = lookup_rec(ip - offset, (ip - offset) + size); > + } > + > + if (rec) > + return rec->ip; > + > +out: > + return 0; > } Thank you, > > /** > @@ -5110,11 +5127,16 @@ int register_ftrace_direct(unsigned long > struct ftrace_func_entry *entry; > struct ftrace_hash *free_hash = NULL; > struct dyn_ftrace *rec; > - int ret = -EBUSY; > + int ret = -ENODEV; > > mutex_lock(&direct_mutex); > > + ip = ftrace_location(ip); > + if (!ip) > + goto out_unlock; > + > /* See if there's a direct function at @ip already */ > + ret = -EBUSY; > if (ftrace_find_rec_direct(ip)) > goto out_unlock; > > @@ -5222,6 +5244,10 @@ int unregister_ftrace_direct(unsigned lo > > mutex_lock(&direct_mutex); > > + ip = ftrace_location(ip); > + if (!ip) > + goto out_unlock; > + > entry = find_direct_entry(&ip, NULL); > if (!entry) > goto out_unlock; > > -- Masami Hiramatsu