Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp4625379ybb; Tue, 24 Mar 2020 02:12:07 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtlBiK+U8vwO9eVJXuhX8iGyCBA8C1tuRg7X5sckB9n4KkdHufTPYb2Fz5TtTnGYR70xpQl X-Received: by 2002:aca:130f:: with SMTP id e15mr2549550oii.160.1585041127088; Tue, 24 Mar 2020 02:12:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585041127; cv=none; d=google.com; s=arc-20160816; b=DlVy1jmkdM8Xw0GqomlvsVUGofX3YNL3zzhMYXhaed5hf9yaDOP2kmPGS+rE08spWK TicWCb+yTB8ynuaKLlXrq75asD3PTZI7rCumXRFQVdAoI36pJNsmDizYMHks0kGrAtBu ClvJP+T8cN9dLAdNlwks2D+ztrX4emEkkZs03LzFJBEk1x9zxoJBK+Jq6g4Eh3yofHlj UPQXYeWysUZR7ZVOTanOQCEi85qxwaMFsaS7mrFjoae0/+Yu8+N2gf+VA1IO/zeFiVPe fBJrPhYg9T4azFlpvRmsA6So3n54wdtHcJbV1XL9x1jjUqeAY6ZX1dlgwtYRbJzMSONQ EjbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :robot-unsubscribe:robot-id:message-id:mime-version:references :in-reply-to:cc:subject:to:reply-to:from:date; bh=J3G4AhpaPXgsIujOLHY4yX5BrAmXTTYx6qF0e0utE4M=; b=qKyrRVcPrYVI0GF11YGi29AibDctgTkgVwMHv/XiaXN3DcUAJDRnbl2Bgz3612ob8j Wr8HYuIxcavwp94ZeMnCMGf9QlrqATOQFTRHNjUf8uTeN1Ur4L/jVNLVLZFsx7uS4roX VxsnJ9MWjf4b0PiKxE/L1PNK/3i3RJaoCQAmlZmt3HmXsqfXgTk8tWRW+QerDDvEfxQo tot5kkWLbgDxtAKVhAE483VqjJIuwmgxc2zHGFVWokbKQYGJ/XAXhE3m7ZTbCvLPYhVs yPB2W6l0VKbNBG8ROYrLG4F1kCh0MZAMgKb8rWKjshpbC+3yilzkzkuI1iv874MLB7ny JMmA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u1si9383613otg.231.2020.03.24.02.11.54; Tue, 24 Mar 2020 02:12:07 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727511AbgCXJLY (ORCPT + 99 others); Tue, 24 Mar 2020 05:11:24 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:43831 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727466AbgCXJLW (ORCPT ); Tue, 24 Mar 2020 05:11:22 -0400 Received: from [5.158.153.53] (helo=tip-bot2.lab.linutronix.de) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1jGfae-0007d6-21; Tue, 24 Mar 2020 10:11:17 +0100 Received: from [127.0.1.1] (localhost [IPv6:::1]) by tip-bot2.lab.linutronix.de (Postfix) with ESMTP id CB3A71C0475; Tue, 24 Mar 2020 10:11:03 +0100 (CET) Date: Tue, 24 Mar 2020 09:11:03 -0000 From: "tip-bot2 for Marco Elver" Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: locking/kcsan] kcsan: Prefer __always_inline for fast-path Cc: Randy Dunlap , Marco Elver , "Paul E. McKenney" , Ingo Molnar , x86 , LKML In-Reply-To: <58708908-84a0-0a81-a836-ad97e33dbb62@infradead.org> References: <58708908-84a0-0a81-a836-ad97e33dbb62@infradead.org> MIME-Version: 1.0 Message-ID: <158504106342.28353.7031721344502833730.tip-bot2@tip-bot2> X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the locking/kcsan branch of tip: Commit-ID: 5c361425744d1e3b03d835dde659708683ca27d1 Gitweb: https://git.kernel.org/tip/5c361425744d1e3b03d835dde659708683ca27d1 Author: Marco Elver AuthorDate: Tue, 07 Jan 2020 17:31:04 +01:00 Committer: Ingo Molnar CommitterDate: Sat, 21 Mar 2020 09:40:19 +01:00 kcsan: Prefer __always_inline for fast-path Prefer __always_inline for fast-path functions that are called outside of user_access_save, to avoid generating UACCESS warnings when optimizing for size (CC_OPTIMIZE_FOR_SIZE). It will also avoid future surprises with compiler versions that change the inlining heuristic even when optimizing for performance. Reported-by: Randy Dunlap Acked-by: Randy Dunlap # build-tested Signed-off-by: Marco Elver Signed-off-by: Paul E. McKenney Signed-off-by: Ingo Molnar Link: http://lkml.kernel.org/r/58708908-84a0-0a81-a836-ad97e33dbb62@infradead.org --- kernel/kcsan/atomic.h | 2 +- kernel/kcsan/core.c | 18 +++++++++--------- kernel/kcsan/encoding.h | 14 +++++++------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/kernel/kcsan/atomic.h b/kernel/kcsan/atomic.h index 576e03d..a9c1930 100644 --- a/kernel/kcsan/atomic.h +++ b/kernel/kcsan/atomic.h @@ -18,7 +18,7 @@ * than cast to volatile. Eventually, we hope to be able to remove this * function. */ -static inline bool kcsan_is_atomic(const volatile void *ptr) +static __always_inline bool kcsan_is_atomic(const volatile void *ptr) { /* only jiffies for now */ return ptr == &jiffies; diff --git a/kernel/kcsan/core.c b/kernel/kcsan/core.c index 3314fc2..4d4ab5c 100644 --- a/kernel/kcsan/core.c +++ b/kernel/kcsan/core.c @@ -78,10 +78,10 @@ static atomic_long_t watchpoints[CONFIG_KCSAN_NUM_WATCHPOINTS + NUM_SLOTS-1]; */ static DEFINE_PER_CPU(long, kcsan_skip); -static inline atomic_long_t *find_watchpoint(unsigned long addr, - size_t size, - bool expect_write, - long *encoded_watchpoint) +static __always_inline atomic_long_t *find_watchpoint(unsigned long addr, + size_t size, + bool expect_write, + long *encoded_watchpoint) { const int slot = watchpoint_slot(addr); const unsigned long addr_masked = addr & WATCHPOINT_ADDR_MASK; @@ -146,7 +146,7 @@ insert_watchpoint(unsigned long addr, size_t size, bool is_write) * 2. the thread that set up the watchpoint already removed it; * 3. the watchpoint was removed and then re-used. */ -static inline bool +static __always_inline bool try_consume_watchpoint(atomic_long_t *watchpoint, long encoded_watchpoint) { return atomic_long_try_cmpxchg_relaxed(watchpoint, &encoded_watchpoint, CONSUMED_WATCHPOINT); @@ -160,7 +160,7 @@ static inline bool remove_watchpoint(atomic_long_t *watchpoint) return atomic_long_xchg_relaxed(watchpoint, INVALID_WATCHPOINT) != CONSUMED_WATCHPOINT; } -static inline struct kcsan_ctx *get_ctx(void) +static __always_inline struct kcsan_ctx *get_ctx(void) { /* * In interrupts, use raw_cpu_ptr to avoid unnecessary checks, that would @@ -169,7 +169,7 @@ static inline struct kcsan_ctx *get_ctx(void) return in_task() ? ¤t->kcsan_ctx : raw_cpu_ptr(&kcsan_cpu_ctx); } -static inline bool is_atomic(const volatile void *ptr) +static __always_inline bool is_atomic(const volatile void *ptr) { struct kcsan_ctx *ctx = get_ctx(); @@ -193,7 +193,7 @@ static inline bool is_atomic(const volatile void *ptr) return kcsan_is_atomic(ptr); } -static inline bool should_watch(const volatile void *ptr, int type) +static __always_inline bool should_watch(const volatile void *ptr, int type) { /* * Never set up watchpoints when memory operations are atomic. @@ -226,7 +226,7 @@ static inline void reset_kcsan_skip(void) this_cpu_write(kcsan_skip, skip_count); } -static inline bool kcsan_is_enabled(void) +static __always_inline bool kcsan_is_enabled(void) { return READ_ONCE(kcsan_enabled) && get_ctx()->disable_count == 0; } diff --git a/kernel/kcsan/encoding.h b/kernel/kcsan/encoding.h index b63890e..f03562a 100644 --- a/kernel/kcsan/encoding.h +++ b/kernel/kcsan/encoding.h @@ -59,10 +59,10 @@ encode_watchpoint(unsigned long addr, size_t size, bool is_write) (addr & WATCHPOINT_ADDR_MASK)); } -static inline bool decode_watchpoint(long watchpoint, - unsigned long *addr_masked, - size_t *size, - bool *is_write) +static __always_inline bool decode_watchpoint(long watchpoint, + unsigned long *addr_masked, + size_t *size, + bool *is_write) { if (watchpoint == INVALID_WATCHPOINT || watchpoint == CONSUMED_WATCHPOINT) @@ -78,13 +78,13 @@ static inline bool decode_watchpoint(long watchpoint, /* * Return watchpoint slot for an address. */ -static inline int watchpoint_slot(unsigned long addr) +static __always_inline int watchpoint_slot(unsigned long addr) { return (addr / PAGE_SIZE) % CONFIG_KCSAN_NUM_WATCHPOINTS; } -static inline bool matching_access(unsigned long addr1, size_t size1, - unsigned long addr2, size_t size2) +static __always_inline bool matching_access(unsigned long addr1, size_t size1, + unsigned long addr2, size_t size2) { unsigned long end_range1 = addr1 + size1 - 1; unsigned long end_range2 = addr2 + size2 - 1;