From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 458D3EE49A9 for ; Sat, 19 Aug 2023 06:18:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343561AbjHSGK2 (ORCPT ); Sat, 19 Aug 2023 02:10:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60652 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245396AbjHSGKA (ORCPT ); Sat, 19 Aug 2023 02:10:00 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 68017420E for ; Fri, 18 Aug 2023 23:09:56 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-d6b66b41232so2249510276.0 for ; Fri, 18 Aug 2023 23:09:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1692425395; x=1693030195; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=ncvKoH6sf/PCzVuSyD3Igzt/6x5kYeoqdIlMIk/5YEc=; b=DV0X2Hy9Od7cM66+eII29AbOZjYpPKW9SDJyayjHTkLSCQ07vlfKZgbzI+FLGWI9fx hm6698Sc2Q4K+txTIjgVnW2+lEAvPddNtqoslR6RGLJl8f6ZSe/qNEOWMk4oWQV9wBet bZyly41vDC9QoZ+rpr8Q2bdCzY3tW8eRzHalJ9eHVxuXCo05XN3pThjh1MK+pTywr4/q K6p0IwuwFAAlkChPMCDAIrCX9jpJsyMe3W8oZeSbb/IBQg3FBZ46qLIddsCeUAmqlarf z08hwmBBndPd7UjYbgej6El9y+KRBWqS5QZohVyVRD0obo1DIa7c4u++A7f4DbFA+AQs fgRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692425395; x=1693030195; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ncvKoH6sf/PCzVuSyD3Igzt/6x5kYeoqdIlMIk/5YEc=; b=e1Yqt6QRTGSNBAmTA9w169pbqVjZyIAGKPWvaXUvBzOov3C9KhfHlDAJjdsdXwlDux 4YrejZ6BqIG4r5dRm2sdtvfDehp5B3BNGxaHPM3sxKdDPYzCcETHA3x0YnbYtDdPo/zF K/HofrHVEekKUhRtLIkzE79cDo2h66zeD3T31nAeHiS5eugK5KzIV+E0tDa06OMSWn5B QOWagytfJ4D3ll6Qg/7gJZfpuoO6IsVl2l+dUA4tfnjZn8vi/mzbu4Py2xyTNwK9BGfU /NcYUZZUhmxSnFcIiQcr/SLqvfNyyOTFQcQh6RlhOEHko661wM2N94TSwzOgxFAwGb5f kFdQ== X-Gm-Message-State: AOJu0Yww/c2GdVG8D94Fgh6PpSDrNy2StNiZRjpTyu7x/3uY5WQVt4m/ pPddXKtDXAD54M2n2mG8nCmNCyGwNBZU89++Dyivy337qyJCmlPdbO48Ccak3WzPA+/08TORUA9 r/hGNhnNim6DMYFH4wvQ1UarBSsACWKwotC7iLGgNJvZCG2ZsZ/oUrgRXiUfrgXne0LnFYA8= X-Google-Smtp-Source: AGHT+IHnpgfQLfvQ7spuyWowrDhtej92N6k+Fkuj/lLh41SjSTvPgOfG5Rit0qJTH2bkK1lGbaeF5lnm/m34 X-Received: from jstultz-noogler2.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:600]) (user=jstultz job=sendgmr) by 2002:a05:6902:1612:b0:d47:f09c:cc8e with SMTP id bw18-20020a056902161200b00d47f09ccc8emr9093ybb.10.1692425395416; Fri, 18 Aug 2023 23:09:55 -0700 (PDT) Date: Sat, 19 Aug 2023 06:08:49 +0000 In-Reply-To: <20230819060915.3001568-1-jstultz@google.com> Mime-Version: 1.0 References: <20230819060915.3001568-1-jstultz@google.com> X-Mailer: git-send-email 2.42.0.rc1.204.g551eb34607-goog Message-ID: <20230819060915.3001568-16-jstultz@google.com> Subject: [PATCH v5 15/19] sched: Add proxy deactivate helper From: John Stultz To: LKML Cc: John Stultz , Joel Fernandes , Qais Yousef , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Valentin Schneider , Steven Rostedt , Ben Segall , Zimuzo Ezeozue , Youssef Esmat , Mel Gorman , Daniel Bristot de Oliveira , Will Deacon , Waiman Long , Boqun Feng , "Paul E . McKenney" , kernel-team@android.com Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add small helper for deactivating the selected task Cc: Joel Fernandes Cc: Qais Yousef Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Juri Lelli Cc: Vincent Guittot Cc: Dietmar Eggemann Cc: Valentin Schneider Cc: Steven Rostedt Cc: Ben Segall Cc: Zimuzo Ezeozue Cc: Youssef Esmat Cc: Mel Gorman Cc: Daniel Bristot de Oliveira Cc: Will Deacon Cc: Waiman Long Cc: Boqun Feng Cc: "Paul E . McKenney" Cc: kernel-team@android.com Signed-off-by: John Stultz --- kernel/sched/core.c | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 72d0803c7d47..bee7082b294f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -6599,6 +6599,22 @@ bool try_to_deactivate_task(struct rq *rq, struct task_struct *p, } #ifdef CONFIG_PROXY_EXEC + +bool proxy_deactivate(struct rq *rq, struct task_struct *next) +{ + unsigned long state = READ_ONCE(next->__state); + + /* Don't deactivate if the state has been changed to TASK_RUNNING */ + if (!state) + return false; + if (!try_to_deactivate_task(rq, next, state, true)) + return false; + put_prev_task(rq, next); + rq_set_selected(rq, rq->idle); + resched_curr(rq); + return true; +} + /* * Initial simple proxy that just returns the task if its waking * or deactivates the blocked task so we can pick something that @@ -6607,10 +6623,9 @@ bool try_to_deactivate_task(struct rq *rq, struct task_struct *p, static struct task_struct * proxy(struct rq *rq, struct task_struct *next, struct rq_flags *rf) { + struct task_struct *ret = NULL; struct task_struct *p = next; struct mutex *mutex; - unsigned long state; - mutex = p->blocked_on; /* Something changed in the chain, pick_again */ if (!mutex) @@ -6632,30 +6647,14 @@ proxy(struct rq *rq, struct task_struct *next, struct rq_flags *rf) */ raw_spin_unlock(&p->blocked_lock); raw_spin_unlock(&mutex->wait_lock); - return NULL; - } - - state = READ_ONCE(p->__state); - /* Don't deactivate if the state has been changed to TASK_RUNNING */ - if (!state) { - raw_spin_unlock(&p->blocked_lock); - raw_spin_unlock(&mutex->wait_lock); - return p; + return ret; } - try_to_deactivate_task(rq, next, state, true); - - /* - * If next is the selected task, then remove lingering - * references to it from rq and sched_class structs after - * dequeueing. - */ - put_prev_task(rq, next); - rq_set_selected(rq, rq->idle); - resched_curr(rq); + if (!proxy_deactivate(rq, next)) + ret = p; raw_spin_unlock(&p->blocked_lock); raw_spin_unlock(&mutex->wait_lock); - return NULL; + return ret; } #else /* PROXY_EXEC */ static struct task_struct * -- 2.42.0.rc1.204.g551eb34607-goog