Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp616478pxx; Mon, 26 Oct 2020 17:02:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw8V2myvml+fL/gzNjfG4GpJ6jIqtx2mLa+7tOGF0Vh3lu8PsYHeCN3U5tpDCs70TFhdDRf X-Received: by 2002:a17:906:110b:: with SMTP id h11mr18980395eja.156.1603756927485; Mon, 26 Oct 2020 17:02:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603756927; cv=none; d=google.com; s=arc-20160816; b=PrQOJZK9y+eF+yec5x7ImFxEnulbhB5cwH1vstqpKV9098KgsqozUf1XH7KXLAvjc9 dqEFn+xghC8idTBir43nte5NXbfLt4zOonJ40CfHeBDWbV4voaTr1hDKruPTX5YFy8SI hR/zyzI/JFm2b9+hiqIGNpFzy0294kQIwmk6FdGjKwTyjJ0VDWjp///wWABQxpxfBFFc 8hPb3wKCesZqvJ/V+UN6Shwpr2gHGs/Ovz+TFVqloRo8XAUjhLhp8kNQmtAx5qQcjVB6 o4euhO4vZanx+2afXegmK0W49EiNuoX0W2Bdw2nG2efK2mNMSNETyUf5zGkU5G+//dBV QDWg== 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:date:subject:cc:to:from :dkim-signature; bh=ST09bAbLnEfHnubeqHuDY7K93apYHiTyug5wUNPRE6k=; b=yJGJca15777LoTkbPNLVj9c+5D6G6h/+IjrZkElJHkl+FLE5eFsIDkCJqa5VM2NGAL VVY5sTBEJREo6C9N4noCUrAWSKODouYXtUozXBu56grZH/6B4p3G/ZbglDZoMI/lQ4Wj /5VrkEhwFsypZB5KedY4PKNgW5xMEYQKBe6Es326XRZJVvkFpwfCWmysMgmHIEuMXBBz NKLL9LHiUryVGpZ89wEtoetFhzEWftjf+QSX74FRVNTgtNbl23qQwZb1x2EwkPHgxwzL Kgx/Br4ezAocceLsAHHxCpVADu3VtV6fbPUICIvI77H8rnExigfKn7Xu91a3/iCovDYB BzWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel-dk.20150623.gappssmtp.com header.s=20150623 header.b=DE01M4tf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p7si7908691ejg.491.2020.10.26.17.01.45; Mon, 26 Oct 2020 17:02:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel-dk.20150623.gappssmtp.com header.s=20150623 header.b=DE01M4tf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732186AbgJZUcm (ORCPT + 99 others); Mon, 26 Oct 2020 16:32:42 -0400 Received: from mail-il1-f196.google.com ([209.85.166.196]:35369 "EHLO mail-il1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732066AbgJZUch (ORCPT ); Mon, 26 Oct 2020 16:32:37 -0400 Received: by mail-il1-f196.google.com with SMTP id k6so4655534ilq.2 for ; Mon, 26 Oct 2020 13:32:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel-dk.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ST09bAbLnEfHnubeqHuDY7K93apYHiTyug5wUNPRE6k=; b=DE01M4tfPExCH+UH5N2zhJqLyQhT9tHYycm4CXsT6S48fu4SPiUvlTW0dXWJzYLit+ p54k+uboQpGAxguVfolz+plKKtmiF1xxPNG3vr6AQamxIMeiJmZMbmvLfdU74wB5Et54 bp9hsIgWeGoQi+HRyBNVQjC+Krdb5vh/yFbDoWjMhFByhMsGKTrWhSFOyeUQnkU+pB78 potva0KRwWj/H6Fde9j9L/OlzgwRCdHSLie/srrt2ewhhZWvKQjzeaISclqJ9cGfahBA /nBj8C8COMQxfu68OHIOggiab0uPqcJ9bjAC1Z7x/AZNB5wpXxBq/k/NrzTqAqQp3DK1 REag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ST09bAbLnEfHnubeqHuDY7K93apYHiTyug5wUNPRE6k=; b=igY6yFmUjAGvK9jjftDE8bRCyFERlVDplmg5Fa3olENaJ0VfVX8M/0LmCHbqxiYJyV yVP6Dxe/vgqRiye50yu6jBhz1CsgCXuJHyU/nbicNrAR2ZHeyl9w91Ik+Yd1AZVzDyRP PCPXujsWVFMTKAPCyu+rkf1ZP4et2I5qVJEC4tfzwCpoYGqoduUjI381P0DF5G4u1hyE fnkxb3CY6ejv5SxFJIywLqSCCTxghPfALDUevGMKNO91CBStvK2z8JRA1LVVUwK3uTln GfBncCn73D3cmWYpmcEJ4W0y9qTYs2ykbVPyycxJjPXHLKVndvFXP6dhZ/y8ByBZohef ZOVA== X-Gm-Message-State: AOAM533szS+my/F1ow+sAtd1d2NLygimo55IwGrXTo0kGeRmBQsHQt2t ZiC+WN7SHIwMxjD8gpuydYHS5hr9T/tIvg== X-Received: by 2002:a92:99ce:: with SMTP id t75mr12624304ilk.257.1603744354808; Mon, 26 Oct 2020 13:32:34 -0700 (PDT) Received: from p1.localdomain ([65.144.74.34]) by smtp.gmail.com with ESMTPSA id e12sm6770373ilq.65.2020.10.26.13.32.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Oct 2020 13:32:34 -0700 (PDT) From: Jens Axboe To: linux-kernel@vger.kernel.org, io-uring@vger.kernel.org Cc: peterz@infradead.org, oleg@redhat.com, tglx@linutronix.de, Jens Axboe Subject: [PATCH 1/4] kernel: add task_sigpending() helper Date: Mon, 26 Oct 2020 14:32:27 -0600 Message-Id: <20201026203230.386348-2-axboe@kernel.dk> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20201026203230.386348-1-axboe@kernel.dk> References: <20201026203230.386348-1-axboe@kernel.dk> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is in preparation for maintaining signal_pending() as the decider of whether or not a schedule() loop should be broken, or continue sleeping. This is different than the core signal use cases, where we really want to know if an actual signal is pending or not. task_sigpending() returns non-zero if TIF_SIGPENDING is set. Only core kernel use cases should care about the distinction between the two, make sure those use the task_sigpending() helper. Reviewed-by: Thomas Gleixner Reviewed-by: Oleg Nesterov Signed-off-by: Jens Axboe --- include/linux/sched/signal.h | 9 +++++++-- kernel/events/uprobes.c | 2 +- kernel/signal.c | 8 ++++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h index 1bad18a1d8ba..404145dc536e 100644 --- a/include/linux/sched/signal.h +++ b/include/linux/sched/signal.h @@ -353,11 +353,16 @@ static inline int restart_syscall(void) return -ERESTARTNOINTR; } -static inline int signal_pending(struct task_struct *p) +static inline int task_sigpending(struct task_struct *p) { return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); } +static inline int signal_pending(struct task_struct *p) +{ + return task_sigpending(p); +} + static inline int __fatal_signal_pending(struct task_struct *p) { return unlikely(sigismember(&p->pending.signal, SIGKILL)); @@ -365,7 +370,7 @@ static inline int __fatal_signal_pending(struct task_struct *p) static inline int fatal_signal_pending(struct task_struct *p) { - return signal_pending(p) && __fatal_signal_pending(p); + return task_sigpending(p) && __fatal_signal_pending(p); } static inline int signal_pending_state(long state, struct task_struct *p) diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c index 00b0358739ab..bf9edd8d75be 100644 --- a/kernel/events/uprobes.c +++ b/kernel/events/uprobes.c @@ -1973,7 +1973,7 @@ bool uprobe_deny_signal(void) WARN_ON_ONCE(utask->state != UTASK_SSTEP); - if (signal_pending(t)) { + if (task_sigpending(t)) { spin_lock_irq(&t->sighand->siglock); clear_tsk_thread_flag(t, TIF_SIGPENDING); spin_unlock_irq(&t->sighand->siglock); diff --git a/kernel/signal.c b/kernel/signal.c index a38b3edc6851..9f86246a8637 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -983,7 +983,7 @@ static inline bool wants_signal(int sig, struct task_struct *p) if (task_is_stopped_or_traced(p)) return false; - return task_curr(p) || !signal_pending(p); + return task_curr(p) || !task_sigpending(p); } static void complete_signal(int sig, struct task_struct *p, enum pid_type type) @@ -2822,7 +2822,7 @@ static void retarget_shared_pending(struct task_struct *tsk, sigset_t *which) /* Remove the signals this thread can handle. */ sigandsets(&retarget, &retarget, &t->blocked); - if (!signal_pending(t)) + if (!task_sigpending(t)) signal_wake_up(t, 0); if (sigisemptyset(&retarget)) @@ -2856,7 +2856,7 @@ void exit_signals(struct task_struct *tsk) cgroup_threadgroup_change_end(tsk); - if (!signal_pending(tsk)) + if (!task_sigpending(tsk)) goto out; unblocked = tsk->blocked; @@ -2900,7 +2900,7 @@ long do_no_restart_syscall(struct restart_block *param) static void __set_task_blocked(struct task_struct *tsk, const sigset_t *newset) { - if (signal_pending(tsk) && !thread_group_empty(tsk)) { + if (task_sigpending(tsk) && !thread_group_empty(tsk)) { sigset_t newblocked; /* A set of now blocked but previously unblocked signals. */ sigandnsets(&newblocked, newset, ¤t->blocked); -- 2.29.0