Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp545971pxb; Tue, 3 Nov 2020 06:28:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJyh8MLO3LhyFeNuKor4iHTiWQLDFT7ZCnCQcHmkgXIr/v7BerWzU3dqYuafyjOAd780qoCi X-Received: by 2002:a50:930f:: with SMTP id m15mr2019027eda.112.1604413694044; Tue, 03 Nov 2020 06:28:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604413694; cv=none; d=google.com; s=arc-20160816; b=knyMv3Ej6pz/VqHhpzTr6ioIUjle4zd8cs1j4PSni8HK/ywFYV5gNDixJur89VC4TX a3IfZQ4i/8NTGvSTnj1ZZnDw76X2zAEp6Tq7ii6SFoCm+NfCu4zY0YOr90l+hdsCk9e8 lClKLoZgALYcUD7AlLcQjztT2Ph1jif3e73orHwtuNatWYZdYWaM4j2d3Nj8LQXBLvtE APGgFsRWjPc4C49e4gf8lApliaraNVNlWRivC0PROXo796jl1aEshqDa0rmXuFm3rEtP urv6PuJHIEXCq+BZEHUX4jfjb5bZTqLknvr4Sn2am4alispahJMOJvqdFc3J67z14ny1 yXuw== 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=K36lTmcygIVW9GX4CyKRbjzZ9I8J8t7aoDmagNP67Xo=; b=Oj5paiBYV5LJFOBSJrwFSuHIroYpBin4kpcH2JZQKfQijz8w9Q7ku3NQA2O7WGtjGJ 4oRg0XeKv4NA/8keZOcDPpplo447b3blS+1Bb0R7W/zRIrKwtlvGJ0CtPeh6CDyg0ny3 30VFPqdrRRSig68KKqyrjsQYuiCJw6zubPT6IPHBcprR7gVGa5rGosLKO3DxF0t6FFoE gyh7Ez1R2vGUhseL2xVns9vxyqFL8+E8Iks3L1unN699pI70vzo99nE318TVkihUzwUC QMQc6eNHGh48l6vpryL0VnGoFWhWjjvQ0VxJ2P3FjLbmi6igXAIrxwiX/hizBOjzXSif cIyQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=xamyF4mQ; 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 qq1si4450369ejb.240.2020.11.03.06.27.51; Tue, 03 Nov 2020 06:28:14 -0800 (PST) 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=@joelfernandes.org header.s=google header.b=xamyF4mQ; 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 S1729738AbgKCO0S (ORCPT + 99 others); Tue, 3 Nov 2020 09:26:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46744 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729697AbgKCO0M (ORCPT ); Tue, 3 Nov 2020 09:26:12 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B216FC0613D1 for ; Tue, 3 Nov 2020 06:26:12 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id z6so14784813qkz.4 for ; Tue, 03 Nov 2020 06:26:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=K36lTmcygIVW9GX4CyKRbjzZ9I8J8t7aoDmagNP67Xo=; b=xamyF4mQ1HWNRmynLV9Nmwh902AuT4oNHrYm/uYQggun56ZLLojds5LizwcvilZP2U OJUI86QvCobbDatJMo22AiPONLvKEkkR3B0ToQD4WroQP+3KgRF5Vq9PSzpvSD3pseYh EigdUa0blpBR9wIw8iyZ5BBWmkcDeuhfSmd1I= 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=K36lTmcygIVW9GX4CyKRbjzZ9I8J8t7aoDmagNP67Xo=; b=tJKwuMO46NiyFb7aATLBz5wYWSRvkAW+5DOmQruWDhLRs+PvXQoB/CzRVw1yjdGZPj 8q4UVL8c3RW3I6p+4wv8q/nKsgs9ZeDOdW6AxBogVTmC+Fno7ec2m3TcUXqycKXyd/WA 1r5n8E8NhPrA7zFxM1+HBVUFqbNBtRs8u1FdYj/04B4T6T/VLNMjlOUZcOro3XkGpL+i cJyXVjp8/eWjmKi5OL5lkC9m+ahaKaiCnzEz8il4MaAFf9kk6GiI7uszLonhWkURXXdU Q7zUFYE8Y6pMjJtqHiy1i7Tbv+822Non0Fj8XqiP/jXe3ISyw/aLf+SKjAJhYmZVedT8 okGg== X-Gm-Message-State: AOAM533LoX/BRXYxbL43I7h7dAagzY0Ok4oXqOzmCcHDwmXI0Wzg39If LaJY7n3Tsy3Af4OXZd5cMM79E4Rt2OPcRQ== X-Received: by 2002:a05:620a:20d2:: with SMTP id f18mr20404850qka.190.1604413571691; Tue, 03 Nov 2020 06:26:11 -0800 (PST) Received: from joelaf.cam.corp.google.com ([2620:15c:6:411:cad3:ffff:feb3:bd59]) by smtp.gmail.com with ESMTPSA id l30sm10564967qta.73.2020.11.03.06.26.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Nov 2020 06:26:11 -0800 (PST) From: "Joel Fernandes (Google)" To: linux-kernel@vger.kernel.org Cc: "Joel Fernandes (Google)" , Frederic Weisbecker , Josh Triplett , Lai Jiangshan , Marco Elver , Mathieu Desnoyers , "Paul E. McKenney" , rcu@vger.kernel.org, Steven Rostedt , "Uladzislau Rezki (Sony)" , fweisbec@gmail.com, neeraj.iitr10@gmail.com Subject: [PATCH v9 3/7] srcu: Fix invoke_rcu_callbacks() segcb length adjustment Date: Tue, 3 Nov 2020 09:25:59 -0500 Message-Id: <20201103142603.1302207-4-joel@joelfernandes.org> X-Mailer: git-send-email 2.29.1.341.ge80a0c044ae-goog In-Reply-To: <20201103142603.1302207-1-joel@joelfernandes.org> References: <20201103142603.1302207-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With earlier patches, the negative counting of the unsegmented list cannot be used to adjust the segmented one. To fix this, sample the unsegmented length in advance, and use it after CB execution to adjust the segmented list's length. Reviewed-by: Frederic Weisbecker Suggested-by: Frederic Weisbecker Signed-off-by: Joel Fernandes (Google) --- kernel/rcu/srcutree.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c index 0f23d20d485a..79b7081143a7 100644 --- a/kernel/rcu/srcutree.c +++ b/kernel/rcu/srcutree.c @@ -1160,6 +1160,7 @@ static void srcu_advance_state(struct srcu_struct *ssp) */ static void srcu_invoke_callbacks(struct work_struct *work) { + long len; bool more; struct rcu_cblist ready_cbs; struct rcu_head *rhp; @@ -1182,6 +1183,7 @@ static void srcu_invoke_callbacks(struct work_struct *work) /* We are on the job! Extract and invoke ready callbacks. */ sdp->srcu_cblist_invoking = true; rcu_segcblist_extract_done_cbs(&sdp->srcu_cblist, &ready_cbs); + len = ready_cbs.len; spin_unlock_irq_rcu_node(sdp); rhp = rcu_cblist_dequeue(&ready_cbs); for (; rhp != NULL; rhp = rcu_cblist_dequeue(&ready_cbs)) { @@ -1190,13 +1192,14 @@ static void srcu_invoke_callbacks(struct work_struct *work) rhp->func(rhp); local_bh_enable(); } + WARN_ON_ONCE(ready_cbs.len); /* * Update counts, accelerate new callbacks, and if needed, * schedule another round of callback invocation. */ spin_lock_irq_rcu_node(sdp); - rcu_segcblist_insert_count(&sdp->srcu_cblist, &ready_cbs); + rcu_segcblist_add_len(&sdp->srcu_cblist, -len); (void)rcu_segcblist_accelerate(&sdp->srcu_cblist, rcu_seq_snap(&ssp->srcu_gp_seq)); sdp->srcu_cblist_invoking = false; -- 2.29.1.341.ge80a0c044ae-goog