Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp3662000rwb; Mon, 3 Oct 2022 19:46:05 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5nFzx48O8aHzPUG9sP92Tjua4luva7iJZxch/1ALM0AyZqS+RGHFQdWmR/80DhAcYN+bv5 X-Received: by 2002:a05:6402:400c:b0:459:5768:38fd with SMTP id d12-20020a056402400c00b00459576838fdmr809315eda.42.1664851564720; Mon, 03 Oct 2022 19:46:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1664851564; cv=none; d=google.com; s=arc-20160816; b=ZY1dx22tf3za69qDyhkJEWNsVo4tmUdttXpcqeiRs5rYwIiI/vcdHcb5Dem4lv8ZpF Kah9swiz0KG24mazp3JhOpc9MPy6Uj+DYrirzk8+Ar7WKWeQm8hQd8P32yNoO2yg38Ou Vb9k92LNYXtuz+iumiQlrMTqEJ5CeI/PM9B3ZuiSXYEMTk4zNGaSvM/5b80/HIWo1Wvd LOD4PPnWLvPVPbkRQ3uZV2O1ghLaivm/XrC7htoR8/7WWWEzmufGWyln+ff2JvEFiWdd XC987uYPJntscbTT6vNAhZ1sLG0VobiJGEK/XflW1PJ2Jx+DxGsToxET7tJoTQFYlfsO 4dwA== 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=nwYFv1Y9ioR8AS0tEJbiXFzs03GcNWhWnMGa3lC4ElA=; b=WWukKMcxX4F4DZXI+53dpHXJCTg9IrLTqTiBH4QYHv9Y8Jd3wkWyJsTnxKTLxBZzV9 qgTUiNbDxqtFc/VDXYXrX+0iYtOoDNoEVaqcg5NVQkMJmCgC/AuarcCr0pmCI7WSY5Xq u80e8DbT7kiHQu1BVulqTg8u8NuI7/Ph62Jt61tMEoDIUREKjJnlOb61U5yZPeEam2BJ vLKUckyAYM0ystDhCrH9Q7uJZg7GhaZR7xlhJZN2Py9jrcWbiFUVlzdW9KKOI0FmPbf7 /4Nfct4zJdvt4zV+JGzvEkvaj0roulb3XGrL2CU3XWJy2ZiEK0FuHeD574n2SpJU8Km+ yuKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=rQm3RuKA; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bd11-20020a056402206b00b004587e99bcc2si8729457edb.383.2022.10.03.19.45.40; Mon, 03 Oct 2022 19:46:04 -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; dkim=pass header.i=@joelfernandes.org header.s=google header.b=rQm3RuKA; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229890AbiJDCmb (ORCPT + 99 others); Mon, 3 Oct 2022 22:42:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54550 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229677AbiJDCmW (ORCPT ); Mon, 3 Oct 2022 22:42:22 -0400 Received: from mail-qk1-x732.google.com (mail-qk1-x732.google.com [IPv6:2607:f8b0:4864:20::732]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 25BF9222B3 for ; Mon, 3 Oct 2022 19:42:21 -0700 (PDT) Received: by mail-qk1-x732.google.com with SMTP id 3so7700528qka.5 for ; Mon, 03 Oct 2022 19:42:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=nwYFv1Y9ioR8AS0tEJbiXFzs03GcNWhWnMGa3lC4ElA=; b=rQm3RuKAtJ2svua5qye7vza3ywe9xPFi3+1dpPdAJTFeVW/bYL6zRsRdYOD6yx2lBh YzInXrNj5f1HmUXF4uoNK6Bilft/RDtbZram7bQjZsJYNvhyxz13RaEgHjc2HeVeCwLY tIKT9JTP52DnxA3kYIwXR66U/9lBcGTs2PkXw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=nwYFv1Y9ioR8AS0tEJbiXFzs03GcNWhWnMGa3lC4ElA=; b=rn7VpKC/x6GihF7hP9ZSi/7T5ZRGr9x8u2wSoT1tmIVNpQZ/DIafyLfdszAPLJ0x4x fT7UecQ0qJBiHOinTMXq7tLveLHjti+tc/z0sZ3IFpUGaubT+vTvz/eRcBA3+ZBw+gQ7 ieGZqzoX1v6d0tsvCjEPYn9lOyCMjqLlePR7nC1vsE2CZwbFYTqvZCxJU/n4M1XG/lky KCdolMqtc5BHjWccwoKY68yT1oHkiYMaNzPo6F3EssSOOIlYdBnsZaGqnL1HzEjgkzHw wXUujW7oAPXMJPi32mAKV61ESAl/nXPSUkz6qcBhP7cAjuE3C9w1edAzfd+YHqhYZKFw RqRg== X-Gm-Message-State: ACrzQf2iwTmYQZlPmn39NhIlRvLZ6VhKN0S2AS48fe06xrarWfpWq6eM BIj9jyyLJrAFjmdBnvUNswJJrw== X-Received: by 2002:a05:620a:40c9:b0:6ce:ce4c:d0b3 with SMTP id g9-20020a05620a40c900b006cece4cd0b3mr15701499qko.653.1664851340280; Mon, 03 Oct 2022 19:42:20 -0700 (PDT) Received: from joelboxx.c.googlers.com.com (228.221.150.34.bc.googleusercontent.com. [34.150.221.228]) by smtp.gmail.com with ESMTPSA id 1-20020ac85901000000b0035cf5edefa6sm11793875qty.56.2022.10.03.19.42.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Oct 2022 19:42:19 -0700 (PDT) From: "Joel Fernandes (Google)" To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, rushikesh.s.kadam@intel.com, urezki@gmail.com, neeraj.iitr10@gmail.com, frederic@kernel.org, paulmck@kernel.org, rostedt@goodmis.org, youssefesmat@google.com, surenb@google.com, Joel Fernandes Subject: [PATCH v7 01/11] rcu: Wake up nocb gp thread on rcu_barrier_entrain() Date: Tue, 4 Oct 2022 02:41:47 +0000 Message-Id: <20221004024157.2470238-2-joel@joelfernandes.org> X-Mailer: git-send-email 2.38.0.rc1.362.ged0d419d3c-goog In-Reply-To: <20221004024157.2470238-1-joel@joelfernandes.org> References: <20221004024157.2470238-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS 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 From: Frederic Weisbecker In preparation of RCU lazy changes, wake up the RCU nocb gp thread if needed after an entrain. Otherwise, the RCU barrier callback can wait in the queue for several seconds before the lazy callbacks in front of it are serviced. Reported-by: Joel Fernandes (Google) Signed-off-by: Frederic Weisbecker --- kernel/rcu/tree.c | 11 +++++++++++ kernel/rcu/tree_nocb.h | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 5ec97e3f7468..04f33191e5ed 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -3894,6 +3894,8 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) { unsigned long gseq = READ_ONCE(rcu_state.barrier_sequence); unsigned long lseq = READ_ONCE(rdp->barrier_seq_snap); + bool wake_nocb = false; + bool was_done = false; lockdep_assert_held(&rcu_state.barrier_lock); if (rcu_seq_state(lseq) || !rcu_seq_state(gseq) || rcu_seq_ctr(lseq) != rcu_seq_ctr(gseq)) @@ -3902,6 +3904,7 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) rdp->barrier_head.func = rcu_barrier_callback; debug_rcu_head_queue(&rdp->barrier_head); rcu_nocb_lock(rdp); + was_done = rcu_rdp_is_offloaded(rdp) && !rcu_segcblist_pend_cbs(&rdp->cblist); WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, jiffies)); if (rcu_segcblist_entrain(&rdp->cblist, &rdp->barrier_head)) { atomic_inc(&rcu_state.barrier_cpu_count); @@ -3909,7 +3912,15 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) debug_rcu_head_unqueue(&rdp->barrier_head); rcu_barrier_trace(TPS("IRQNQ"), -1, rcu_state.barrier_sequence); } + + /* + * If bypass list was non-empty, wake up the nocb GP thread otherwise + * bypass/lazy CBs may not be noticed, and can cause real long delays! + */ + wake_nocb = was_done && rcu_segcblist_pend_cbs(&rdp->cblist); rcu_nocb_unlock(rdp); + if (wake_nocb) + wake_nocb_gp(rdp, false); smp_store_release(&rdp->barrier_seq_snap, gseq); } diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index f77a6d7e1356..6caade0683dd 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -1558,6 +1558,10 @@ static void rcu_init_one_nocb(struct rcu_node *rnp) { } +static bool wake_nocb_gp(struct rcu_data *rdp, bool force) +{ +} + static bool rcu_nocb_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, unsigned long j) { -- 2.38.0.rc1.362.ged0d419d3c-goog