From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A16614AD19 for ; Fri, 26 Jul 2024 21:57:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031029; cv=none; b=OCPIXvc4lcOpA3nljNVxpYnnrtBNReb9OfoX10q6YU/nYFmfZYeD1/+LL4VgDxikNRVuPpKU03sjlg0DYHc+2USPjgvnXHyYnx8MH/CixYeRhUxPvgx9NcSVxKIeoqYt1RDJrl2EnRJ7fpbB0Z2DN11NpMFs5HzA5v8bxIHRlrI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031029; c=relaxed/simple; bh=+TkN7tN2uMXDLL+Z8qGtECBNBa+6qsa5rGwPPeI7P3M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d3lJrv/D3yZaKQuKZx/q8AwriCGbmwk8t83ZCK2F2PcdL1roFfYuvRTPDjHhRSkYC9Zo1aeIr1uho77/FYCv6nbzR97aAHiV+lbe4GS1amLgmymkWJxqKagHOI5cYxGXWRgJ9auzXSDm+sZsRWIXpAus/iY9Tg8wOLqeL1HcUAc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oaadakLA; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oaadakLA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0AA81C4AF09; Fri, 26 Jul 2024 21:57:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031028; bh=+TkN7tN2uMXDLL+Z8qGtECBNBa+6qsa5rGwPPeI7P3M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oaadakLAefQ96ENToJYEMPO1xO++rukkGM5rYo+n2HftEC1Pib2oOjdosseUCGpYc rUBAASveV6B3Ft9azUwaF1UYZGq2YJLcrDKH/5sKCx+EeFYS0uSJuSkhwUCg/QEmnP QstZC5gmx32fTLp/vHMvYonVE96dPBlTg1IGlx4d84vw/d9ylTrghwMPabMdrBIbht 2TzVZAmwSVB41MnZ/WjKuQHTRCvE57gIS/ex4yWwrC6koBLBbnfmSxOxqruvhiMO87 QJk/fd4kYxW2FjJNnfvAfMqiXLtspliBlurelJm1aQmgx+Esgd/aE99FWg2oGLvlzQ jx3PuYwugg9Lg== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Russell King , linux-arm-kernel@lists.infradead.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [PATCH 01/20] arm/bL_switcher: Use kthread_run_on_cpu() Date: Fri, 26 Jul 2024 23:56:37 +0200 Message-ID: <20240726215701.19459-2-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the proper API instead of open coding it. Signed-off-by: Frederic Weisbecker Acked-by: Nicolas Pitre Reviewed-by: Dave Martin --- arch/arm/common/bL_switcher.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/arch/arm/common/bL_switcher.c b/arch/arm/common/bL_switcher.c index 9a9aa53547a6..d1e82a318e3b 100644 --- a/arch/arm/common/bL_switcher.c +++ b/arch/arm/common/bL_switcher.c @@ -307,13 +307,11 @@ static struct task_struct *bL_switcher_thread_create(= int cpu, void *arg) { struct task_struct *task; =20 - task =3D kthread_create_on_node(bL_switcher_thread, arg, - cpu_to_node(cpu), "kswitcher_%d", cpu); - if (!IS_ERR(task)) { - kthread_bind(task, cpu); - wake_up_process(task); - } else + task =3D kthread_run_on_cpu(bL_switcher_thread, arg, + cpu, "kswitcher_%d"); + if (IS_ERR(task)) pr_err("%s failed for CPU %d\n", __func__, cpu); + return task; } =20 --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A0F2A152166 for ; Fri, 26 Jul 2024 21:57:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031031; cv=none; b=jyqnGtA+Lm36gsB+2RoHZlY0M9l+BpK7R6KEogvVLlkvLWi7W9D+5xBt557jBOb1aUssE89FzIfWnFRmRmp8lEwiU8ft1Vxk+q5L8wT6UuJfhs9oUJQSvugNXop6RgSF2Ywo1KC8YM97cO2lEL6rExSm+tvQf8TWCwRzSVKhRMA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031031; c=relaxed/simple; bh=6bIiF2HH3HUsJJc37tbdsLXdubo38jKZqYpDgeWswng=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M8xfqdl+KYQSR8mnaUw+T8nvS2eKp8Tnw97QRFLm+2jD9raey5K/cvhiDE0ZZ+nz66npmVuWas7De3UN8YVdt1a9cbwgehCvsvIYbFO1ZpFsuSxUZ084GKOq/Yw3OVe3Gw25X0rE1uwvcluEiVqTBB56K7L58+VXtbv8aFpi+9M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bj9jBOmM; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bj9jBOmM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EBB5CC4AF0F; Fri, 26 Jul 2024 21:57:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031031; bh=6bIiF2HH3HUsJJc37tbdsLXdubo38jKZqYpDgeWswng=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bj9jBOmMStNzj+cgOq8CHPJI5UEiBVpJp1mpVKrwD6nI/9pozNwhAEdEasqNPH2p5 NpU/hf3UtOliCw9SZ4GGjlBH7BZKYgYBzn62hepa6YkrJXNmFteXBYL+ibANjCp9dc IavAccxMauMlFtFnkkV68hdOMtAefb3M0vZrkP9+WeNm4Pm9Y9CCvLMViV1s65HJ8V e1AxtaURwgVatoAf1nxAIOyP55yz4HJ9dxh6W96ai75Jzk8tklAMJDr+JsaS5kVmNZ PoVeRFQFUQA5muJO+2o+ySiqE1hm5l9OF8fTVwexMyZm+IgYopU4WoKen13QG5267R k6eF1/n2+Fkvw== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Fenghua Yu , Reinette Chatre , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [PATCH 02/20] x86/resctrl: Use kthread_run_on_cpu() Date: Fri, 26 Jul 2024 23:56:38 +0200 Message-ID: <20240726215701.19459-3-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the proper API instead of open coding it. Signed-off-by: Frederic Weisbecker Acked-by: Reinette Chatre --- arch/x86/kernel/cpu/resctrl/pseudo_lock.c | 28 +++++++---------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c b/arch/x86/kernel/cp= u/resctrl/pseudo_lock.c index aacf236dfe3b..a07778fade31 100644 --- a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c +++ b/arch/x86/kernel/cpu/resctrl/pseudo_lock.c @@ -1207,20 +1207,14 @@ static int pseudo_lock_measure_cycles(struct rdtgro= up *rdtgrp, int sel) plr->cpu =3D cpu; =20 if (sel =3D=3D 1) - thread =3D kthread_create_on_node(measure_cycles_lat_fn, plr, - cpu_to_node(cpu), - "pseudo_lock_measure/%u", - cpu); + thread =3D kthread_run_on_cpu(measure_cycles_lat_fn, plr, + cpu, "pseudo_lock_measure/%u"); else if (sel =3D=3D 2) - thread =3D kthread_create_on_node(measure_l2_residency, plr, - cpu_to_node(cpu), - "pseudo_lock_measure/%u", - cpu); + thread =3D kthread_run_on_cpu(measure_l2_residency, plr, + cpu, "pseudo_lock_measure/%u"); else if (sel =3D=3D 3) - thread =3D kthread_create_on_node(measure_l3_residency, plr, - cpu_to_node(cpu), - "pseudo_lock_measure/%u", - cpu); + thread =3D kthread_run_on_cpu(measure_l3_residency, plr, + cpu, "pseudo_lock_measure/%u"); else goto out; =20 @@ -1228,8 +1222,6 @@ static int pseudo_lock_measure_cycles(struct rdtgroup= *rdtgrp, int sel) ret =3D PTR_ERR(thread); goto out; } - kthread_bind(thread, cpu); - wake_up_process(thread); =20 ret =3D wait_event_interruptible(plr->lock_thread_wq, plr->thread_done =3D=3D 1); @@ -1317,18 +1309,14 @@ int rdtgroup_pseudo_lock_create(struct rdtgroup *rd= tgrp) =20 plr->thread_done =3D 0; =20 - thread =3D kthread_create_on_node(pseudo_lock_fn, rdtgrp, - cpu_to_node(plr->cpu), - "pseudo_lock/%u", plr->cpu); + thread =3D kthread_run_on_cpu(pseudo_lock_fn, rdtgrp, + plr->cpu, "pseudo_lock/%u"); if (IS_ERR(thread)) { ret =3D PTR_ERR(thread); rdt_last_cmd_printf("Locking thread returned error %d\n", ret); goto out_cstates; } =20 - kthread_bind(thread, plr->cpu); - wake_up_process(thread); - ret =3D wait_event_interruptible(plr->lock_thread_wq, plr->thread_done =3D=3D 1); if (ret < 0) { --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 58C09153836 for ; Fri, 26 Jul 2024 21:57:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031033; cv=none; b=hcD+xybnlA4djZbdhe1sauVItt6XRdufTWBaAHADbkEvlZmSsWAGZHjBu4Wc90WecobxlAdmniSG6wkRskgAlOMODBZEMLh/8uIupURUPAqNFqjaN3vT4/C4CzlwPazH1e7iU7dpj6QlBgZTf0b1MFLMgBerMU67UQJ+TKHXKTI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031033; c=relaxed/simple; bh=xQm/Blenebln1H3o3tKc4fTJ6K2fC1fA3KMGh8EFNkM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ECYHGzJM0E9WLHuhO+lCNCj5DHr0/tRqrhqlGBo88NIGKWyHMeTbrczlEzR0GBR1X7msvliXVXN8uUZBR+inI9ytU9qBw0tIVxV2GTvUvYXqvHc8l4YSMwWRnwPZJY55neM9b/8Pi6mfYTN/okO3TRNd0Ok+oNmInnBMB67oixc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=c1DOQbJa; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="c1DOQbJa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AD62CC4AF09; Fri, 26 Jul 2024 21:57:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031033; bh=xQm/Blenebln1H3o3tKc4fTJ6K2fC1fA3KMGh8EFNkM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c1DOQbJaZ756sFC42oFP2ciwft2vEyCQZhxZqfCUGZyexUUZpcrjkN4xHDYHoSv+Z UZwZKKVr/JYg9pG2e/C/tKKAjUVNa8PVJTV4jadxhInPdIQUCZx2vygpTqPhWDL5St +NWkU8Jawk2I4egagJDdVNp8nhAJKOq1EQDdsBkw+yxLyQGLBvgK6FWrEzZk4gFHEK GcfuetUp9bUsvbz3ipFW3+QCd1fGMP/Ps4Nmjjo8foEsqqJiMLo96DaA+jztZPdEti 4oPLtqf4/O9hzsI3MAAVt+2SfjvslMDMy1JrCJUk+V82WlatkXXve+Y5jvyr2cx7QJ QXx0mub+ZITMg== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Dinh Nguyen , Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [PATCH 03/20] firmware: stratix10-svc: Use kthread_run_on_cpu() Date: Fri, 26 Jul 2024 23:56:39 +0200 Message-ID: <20240726215701.19459-4-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the proper API instead of open coding it. Signed-off-by: Frederic Weisbecker --- drivers/firmware/stratix10-svc.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-= svc.c index 528f37417aea..4cf5bd5647a4 100644 --- a/drivers/firmware/stratix10-svc.c +++ b/drivers/firmware/stratix10-svc.c @@ -967,18 +967,15 @@ int stratix10_svc_send(struct stratix10_svc_chan *cha= n, void *msg) /* first client will create kernel thread */ if (!chan->ctrl->task) { chan->ctrl->task =3D - kthread_create_on_node(svc_normal_to_secure_thread, - (void *)chan->ctrl, - cpu_to_node(cpu), - "svc_smc_hvc_thread"); + kthread_run_on_cpu(svc_normal_to_secure_thread, + (void *)chan->ctrl, + cpu, "svc_smc_hvc_thread"); if (IS_ERR(chan->ctrl->task)) { dev_err(chan->ctrl->dev, "failed to create svc_smc_hvc_thread\n"); kfree(p_data); return -EINVAL; } - kthread_bind(chan->ctrl->task, cpu); - wake_up_process(chan->ctrl->task); } =20 pr_debug("%s: sent P-va=3D%p, P-com=3D%x, P-size=3D%u\n", __func__, --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A1761552FE; Fri, 26 Jul 2024 21:57:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031036; cv=none; b=SvvZw7MpVIbFzwvKJNJ0wXvpLfASCUF5IooceT0v5GM07SyL8PDOJ8FL1j5XPfX6rERebrP57k3C17EqdC161mvmzftgkyLcdXg78QV/HNBLmZO4KLP55aDtUJIAe04vYpHFO3bJpbIXPibqHvPtfpbNNbu/H59P7Fjc4aXslaw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031036; c=relaxed/simple; bh=yDztet0jee00Ipe/s5EJY6qHQwJ1DkD7Qxns7aI/l+o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R64IdnEbrcVoe8+wOrm7FBg+ibrM1Hc7rmKtCbHUbODnQiuZRFGhf9rJVr4Akhatg0A33/WKhUnA1aEKviOxZpg6rp2kzLlLwtkv8z5mc5rd+omPIFL8DiOb/tw0e0rFybjY1AvvFHQek7exPuIM38NN6FrcLyH/hq7sUsz/zkE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GavtaFA8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GavtaFA8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 63FD5C4AF0A; Fri, 26 Jul 2024 21:57:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031035; bh=yDztet0jee00Ipe/s5EJY6qHQwJ1DkD7Qxns7aI/l+o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GavtaFA8yIc1xKeXM/ayPWrKoyOXfjnnpLhLizLKSSnJp99gaIWXaoSesmUSvWDrK DDpFz5O3ow0e/AnZoycPeTzQ3R6o44T9efOT5wURIBIsTg4K3HdXZHss2kdBg8zpV0 QbczJLW7AmY8wHFIBo3P316kXQergQRc9HXiYj+oyTFHfLjVI4RIiz4WA/cJc9yubr /92aqFaqkVOrNlXgf2HSCmVkzuSCdcg4MLK8u9D8SrSvt8Hta0BtGXUvb/PjrIMRDW YOWr/Xef2AbSP7ijf4u4BBsbfPzZ9FKXKQcOu6SxUoxR/YNokmQskii+hubSgi3gRA OtP3dZKEdiOhg== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Saurav Kashyap , Javed Hasan , GR-QLogic-Storage-Upstream@marvell.com, "James E.J. Bottomley" , "Martin K. Petersen" , linux-scsi@vger.kernel.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [PATCH 04/20] scsi: bnx2fc: Use kthread_create_on_cpu() Date: Fri, 26 Jul 2024 23:56:40 +0200 Message-ID: <20240726215701.19459-5-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the proper API instead of open coding it. However it looks like bnx2fc_percpu_io_thread() kthread could be replaced by the use of a high prio workqueue instead. Signed-off-by: Frederic Weisbecker --- drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc= _fcoe.c index 1078c20c5ef6..789c155b939d 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c +++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c @@ -2610,14 +2610,11 @@ static int bnx2fc_cpu_online(unsigned int cpu) =20 p =3D &per_cpu(bnx2fc_percpu, cpu); =20 - thread =3D kthread_create_on_node(bnx2fc_percpu_io_thread, - (void *)p, cpu_to_node(cpu), - "bnx2fc_thread/%d", cpu); + thread =3D kthread_create_on_cpu(bnx2fc_percpu_io_thread, + (void *)p, cpu, "bnx2fc_thread/%d"); if (IS_ERR(thread)) return PTR_ERR(thread); =20 - /* bind thread to the cpu */ - kthread_bind(thread, cpu); p->iothread =3D thread; wake_up_process(thread); return 0; --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 27DC9155385; Fri, 26 Jul 2024 21:57:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031039; cv=none; b=KrSnKfE1d36moAKugXggswOCaTImNhFepmPNauSwXwdWbCyulSiOtkJD1ABgFVoPoCh01s92+qhc8tPq2tbi94I0rppBj86McOute5E74PACog1f51nB61Ny5EEqXytBKsSiGeue14dT5zYWXyGVK7T+KuU3HRCkMTPiMeZw/Xk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031039; c=relaxed/simple; bh=OdAmLrtcC1w3Cxa06wD8vbSjhHVtYldnsGlOoNisnoA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gu1QHPHLq8Gr6ov41hX6Tdw/VsQ7oImDnB3FP1kU56SSipfcVuhuI8lalvqUGhvAYxqBKtZl/xNstn1S95hIxAHrz4Pd9pGfO9f+w32NNzHdji4djSCcC56faeScdcaNqG/GfXHucV0FDTmKDxZo4+AaYpYF+8KyhJHBJ1i5wQA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OBpAWcdP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OBpAWcdP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3181BC4AF09; Fri, 26 Jul 2024 21:57:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031038; bh=OdAmLrtcC1w3Cxa06wD8vbSjhHVtYldnsGlOoNisnoA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OBpAWcdPUAbdar3RhuqK72OujDWsU1hnIBOH7SkrnuNMROENbGJxtz156klFJVppZ ylojY+psSgnSbanDF9YGu67qObcLJGP1SHyRc16qeqE0A0FgEEyPtff/lVAdZt/L7A kSSIW0VbkL+RGzO+wWXv1Y98jmapJvAPpLSnsIypd+e2v4A/M7Atmd+nK8trttEtXc czEnAamfVdDOYMHDMvg7t3qHMh8iW9Q9xOju8VECluNTM4fm7MJJLQbv0ESiqgLxPC Yr0u8eubBrUC9trSr87J5GDs7EBWtREJoF6R35028taf5ITM+Sg1/CLfGgX/UcKBw3 AhuY7JQSiBXXQ== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Nilesh Javali , Manish Rangankar , GR-QLogic-Storage-Upstream@marvell.com, "James E.J. Bottomley" , "Martin K. Petersen" , linux-scsi@vger.kernel.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [PATCH 05/20] scsi: bnx2i: Use kthread_create_on_cpu() Date: Fri, 26 Jul 2024 23:56:41 +0200 Message-ID: <20240726215701.19459-6-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the proper API instead of open coding it. However it looks like bnx2i_percpu_io_thread() kthread could be replaced by the use of a high prio workqueue instead. Signed-off-by: Frederic Weisbecker --- drivers/scsi/bnx2i/bnx2i_init.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/scsi/bnx2i/bnx2i_init.c b/drivers/scsi/bnx2i/bnx2i_ini= t.c index 872ad37e2a6e..cecc3a026762 100644 --- a/drivers/scsi/bnx2i/bnx2i_init.c +++ b/drivers/scsi/bnx2i/bnx2i_init.c @@ -415,14 +415,11 @@ static int bnx2i_cpu_online(unsigned int cpu) =20 p =3D &per_cpu(bnx2i_percpu, cpu); =20 - thread =3D kthread_create_on_node(bnx2i_percpu_io_thread, (void *)p, - cpu_to_node(cpu), - "bnx2i_thread/%d", cpu); + thread =3D kthread_create_on_cpu(bnx2i_percpu_io_thread, (void *)p, + cpu, "bnx2i_thread/%d"); if (IS_ERR(thread)) return PTR_ERR(thread); =20 - /* bind thread to the cpu */ - kthread_bind(thread, cpu); p->iothread =3D thread; wake_up_process(thread); return 0; --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B6AEE155A21; Fri, 26 Jul 2024 21:57:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031041; cv=none; b=m0f1SA7st6jk17JFIU9lBpDoqsZJduHq7H5NmcRkUlndZwXfZ9X8IBRt52714ANMjZegid66/UZK0liyQwsK6tGA5N+kKQVyW5wwGgKCYO4t25edVcqiDMsCtLxK505Z+tyxLjYx6XLXkpKC7ebK6UrHO1ngKO6tcqSts4rgIvM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031041; c=relaxed/simple; bh=/RulNbNlovlYsV+8HlxUGhpAD5m4gMOyHvdHkAFhJrE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nrwO8DIC6fRqm/mZvx9hfNiZmi3a04htFSqHYPKLFCdS+KitkUawC1JY0Infs/XnM/sNxtf3ax5gUhI/aiprYjHT5q6yRwFcrRcYACBUvbta9GCtuvsxL65xPxQ1dZWs6I5P/QZhjWUCMxK6Z42nNLgE5GWz/5pKtui2pBXIhjQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ENHW0rS0; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ENHW0rS0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1A1DFC4AF12; Fri, 26 Jul 2024 21:57:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031041; bh=/RulNbNlovlYsV+8HlxUGhpAD5m4gMOyHvdHkAFhJrE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ENHW0rS02/kad5POLgck+he3vIm6aP6gzNJ13rtT0DHih+ZjZetNfHh+e4DQ20tT2 y9LKilMGULebYDWFCINkLJEgzje6QSqvzjAs5s/NAvFyJkVSGv6OQbG7VYPt7OEFQ9 CkDNE4j5FU3QgVKQ8zxHODULdDFakmoI4xEhYf6VKIjzPyLMxdC8GS9Z0D/rZFWlug k6DydeWF7yAcaXRwhtQqr/2iGXg5w7PN+GT8+zZFsQdJNpBGYGD6JZiuXMz015EYQ2 JfI8sZqq8rfi4MxW9ZXBvJ7k2w2NdFNuf7ZH4ml4vO9+4Q+Z8DCg1GymSxDAOMzO5S iJd4+yLvVImiQ== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Nilesh Javali , Manish Rangankar , GR-QLogic-Storage-Upstream@marvell.com, "James E.J. Bottomley" , "Martin K. Petersen" , linux-scsi@vger.kernel.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [PATCH 06/20] scsi: qedi: Use kthread_create_on_cpu() Date: Fri, 26 Jul 2024 23:56:42 +0200 Message-ID: <20240726215701.19459-7-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the proper API instead of open coding it. However it looks like qedi_percpu_io_thread() kthread could be replaced by the use of a high prio workqueue instead. Signed-off-by: Frederic Weisbecker --- drivers/scsi/qedi/qedi_main.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c index cd0180b1f5b9..f30e27bb2233 100644 --- a/drivers/scsi/qedi/qedi_main.c +++ b/drivers/scsi/qedi/qedi_main.c @@ -1960,13 +1960,11 @@ static int qedi_cpu_online(unsigned int cpu) struct qedi_percpu_s *p =3D this_cpu_ptr(&qedi_percpu); struct task_struct *thread; =20 - thread =3D kthread_create_on_node(qedi_percpu_io_thread, (void *)p, - cpu_to_node(cpu), - "qedi_thread/%d", cpu); + thread =3D kthread_create_on_cpu(qedi_percpu_io_thread, (void *)p, + cpu, "qedi_thread/%d"); if (IS_ERR(thread)) return PTR_ERR(thread); =20 - kthread_bind(thread, cpu); p->iothread =3D thread; wake_up_process(thread); return 0; --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 80F8D156230 for ; Fri, 26 Jul 2024 21:57:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031045; cv=none; b=HehfR8k1Mhsdf6nB34JibmzUwsjVWTSOqDAk03ASBQJYsrBX6QYSUmBvGXoFAyuEVJC/4DpEgLgiQPvpiR22wVL0bKHVsBbuSvFsfcJlIrhICzueQoRstRNmQGPwBZWuHf44ON5W5VRsFiOuMlvSoH9yTQPczxYxcQg6y66sVaI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031045; c=relaxed/simple; bh=KUPM3WCD3VyrnlEzvVZNfdnolRYrDWJJnT+Gw+3b/Oo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=vAb7t/OdUIv7A/PG9ctKsspibnnnZKG87r8p5m9B/adiT5xc6JT+S7/6qat23q9nnb+JQ3z4RoidL7b9Hm1W8vm7vxkHIWHGjfBwZMYQsb2Oq2c993mk2LMgxj+8Lm+HFIj88vA5SrNZyubuyWldF8sdM+kjFghu2gCfa+P+ZOQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=N7xB+7B/; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="N7xB+7B/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BAD7DC32782; Fri, 26 Jul 2024 21:57:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031043; bh=KUPM3WCD3VyrnlEzvVZNfdnolRYrDWJJnT+Gw+3b/Oo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=N7xB+7B/CH4lSoIo1HiT1+qTw9+wJAq2aSmIP4N16GSjzvi0SjpcTz5sP6DpJW1wX 0R2Zca1ViPmS+tA6juWFZXdZjfCQySN6tiP8mUQBt4qHUW/bsGpM2wPYtzHZUJfTjI 94ufFxgWH75hz2XPhPW1jFo11kvE8NfxhhVtD1sz0BipYnRxAyaPhep6lo+gGFA3Pn dhQrORpQbR8HWfJKOAGov3x+mfuNNyA7vUw+VIKIOHU0fs2beU/nbCK+7VlXlcaUit em3uNRgRk/Z/c+P9tGsgNWCX3FgzXXL4SkJGytmJUVqdwLuFJrTaHBPwuBjM/IXOjN 48KIpB6oKmnfw== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [PATCH 07/20] soc/qman: test: Use kthread_run_on_cpu() Date: Fri, 26 Jul 2024 23:56:43 +0200 Message-ID: <20240726215701.19459-8-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the proper API instead of open coding it. However it looks like kthreads here could be replaced by the use of a per-cpu workqueue instead. Signed-off-by: Frederic Weisbecker --- drivers/soc/fsl/qbman/qman_test_stash.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/soc/fsl/qbman/qman_test_stash.c b/drivers/soc/fsl/qbma= n/qman_test_stash.c index b7e8e5ec884c..f4d3c2146f4f 100644 --- a/drivers/soc/fsl/qbman/qman_test_stash.c +++ b/drivers/soc/fsl/qbman/qman_test_stash.c @@ -108,14 +108,12 @@ static int on_all_cpus(int (*fn)(void)) .fn =3D fn, .started =3D ATOMIC_INIT(0) }; - struct task_struct *k =3D kthread_create(bstrap_fn, &bstrap, - "hotpotato%d", cpu); + struct task_struct *k =3D kthread_run_on_cpu(bstrap_fn, &bstrap, + cpu, "hotpotato%d"); int ret; =20 if (IS_ERR(k)) return -ENOMEM; - kthread_bind(k, cpu); - wake_up_process(k); /* * If we call kthread_stop() before the "wake up" has had an * effect, then the thread may exit with -EINTR without ever --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 80FBD156231 for ; Fri, 26 Jul 2024 21:57:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031045; cv=none; b=ILKEOOdj+RSe1HMim0aWbHzkfqnQOTDRGPwRdgUJRwJeX1YfpEmrT1KeqPQFJf9MrLzlGiR6bw2T4jU+PncItkN+kFyQq1Sw6DarqW3+nA0u9bcffnBG9//vPYp+M6jL9vjQi1/xYC7WHCkA9mAfhe787ChCk78UWGjrdDYm6IM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031045; c=relaxed/simple; bh=9kOLAfsZJjFZ6fYtWV+X45xaPDhWdeE6pob4ljCqnAk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jzns4dZDDR3TDJiPfvSqCpDItHQFBOAdQadRt54IDTggpHMrNNJOsM3rXLepW+GpHb05fEVl4oFXz7GOJppSwDAH/Jq+i0R+ZMi90EvBeu+mesCrHRDd7s2vTf3+Mt2muyReUPMgIMbJYvinlBeI4UhDjhxamNBGmB9mY3VxyaQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NVRoiIez; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NVRoiIez" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C6D64C4AF0B; Fri, 26 Jul 2024 21:57:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031045; bh=9kOLAfsZJjFZ6fYtWV+X45xaPDhWdeE6pob4ljCqnAk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NVRoiIezWu8rePHLxwFAy6FCDOnSxSxivQcPyRCd/kK9tf0ZRgdpOFzEVHMjY9pqf vZzAPwo6A0euFdMEv8e0UnymlKAw0n6iOesYYWmYcWcdnx8JMNmjKc6cRIS5nwJGHn bdjPFymOYh7cVZTjGzizyUqNAPBTx1jaVtoiSo1aTuHAmUyXWI0nMwZ5BZpB81Xmg7 UE/tZqGz+bYBP2cDiZDJR0RCuZiooAgEBMyGb1i5SycADhT8DXnh8EMRy7RV6cXdME IhGnEiDvn5gpx+gJSTnrfu6h9Blr+BC1uz/oFD9sGcgJqAtxELz9H+ZAKw5H+FZ7Gi CjV0Z9Kp41K7g== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Kees Cook , Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [PATCH 08/20] kallsyms: Use kthread_run_on_cpu() Date: Fri, 26 Jul 2024 23:56:44 +0200 Message-ID: <20240726215701.19459-9-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the proper API instead of open coding it. Signed-off-by: Frederic Weisbecker --- kernel/kallsyms_selftest.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/kernel/kallsyms_selftest.c b/kernel/kallsyms_selftest.c index 2f84896a7bcb..b5f3f14a01f4 100644 --- a/kernel/kallsyms_selftest.c +++ b/kernel/kallsyms_selftest.c @@ -455,13 +455,11 @@ static int __init kallsyms_test_init(void) { struct task_struct *t; =20 - t =3D kthread_create(test_entry, NULL, "kallsyms_test"); + t =3D kthread_run_on_cpu(test_entry, NULL, 0, "kallsyms_test"); if (IS_ERR(t)) { pr_info("Create kallsyms selftest task failed\n"); return PTR_ERR(t); } - kthread_bind(t, 0); - wake_up_process(t); =20 return 0; } --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 12C4A156676 for ; Fri, 26 Jul 2024 21:57:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031047; cv=none; b=UQyVklgm+jrkj/hUU87yaIpo+TA8cqkWvKOYomARzF6GZPgQBk7Va4CYTbgxXmly4PcHD42vh3JMiYTyFcxCfSFj34x8xb5Sr029nhkmNCPg95u5fj+RqwaNsClgCsFfOyE63apVpUNdppBAW68sAA4iw8fz4itxRoFNp44paUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031047; c=relaxed/simple; bh=IZ4smXEyGOpkoZrnK52T7YfinkiKMtD7c8oxd58z+nA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jBMi8pgVjOJ219MwnAHhovTP9bEmIi9IgpXH8hEn3Ib2bkl06vQexJz16bo3m4y7fW/sCPfN2AIHelZT1TMfOM4ijl/UG5FbusSn1PtEW195eJeLqEfvUxoS7beAeOuyUomDOlSyo/MJ4+/MAnh/81oS58MFGyIue7T1ldSV4E4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ttp1+U6F; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ttp1+U6F" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 80582C4AF09; Fri, 26 Jul 2024 21:57:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031046; bh=IZ4smXEyGOpkoZrnK52T7YfinkiKMtD7c8oxd58z+nA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ttp1+U6Fmkh7Lx0lLRgOc0Nia44DE5Nh7wtY+5b2SOtGhC59Y387jxgVddnWlC7z3 hGtCTY4EdhGfIl6PQxm6TpPhjPLvnSVLmNK9ER/s0btLTSAFv3omSlsUQbXLrk7lFS c5UPAcK86EzCmRA2RomRUzREz+MZLDYyfLCSkFbtoO83aUoMdOGSGONrlIN/aoj3YO lefMk8gjoeyINBfKNJgrwZy7rqhn7fDUUKXPfeYRbRzU+s13iKGCPy9S4tqjM5I5hG 0EDrzqVKXlaogR3RjizuBjWtFZJpawyRHv5Wv29jPK4XSx99J8S8Y99elVQTaxmHym IEHJe9WR5O1VQ== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Matt Wu , Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [PATCH 09/20] lib: test_objpool: Use kthread_run_on_cpu() Date: Fri, 26 Jul 2024 23:56:45 +0200 Message-ID: <20240726215701.19459-10-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the proper API instead of open coding it. Signed-off-by: Frederic Weisbecker --- lib/test_objpool.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/lib/test_objpool.c b/lib/test_objpool.c index bfdb81599832..2c09dd91e731 100644 --- a/lib/test_objpool.c +++ b/lib/test_objpool.c @@ -371,14 +371,10 @@ static int ot_start_sync(struct ot_test *test) if (!cpu_online(cpu)) continue; =20 - work =3D kthread_create_on_node(ot_thread_worker, item, - cpu_to_node(cpu), "ot_worker_%d", cpu); - if (IS_ERR(work)) { + work =3D kthread_run_on_cpu(ot_thread_worker, item, + cpu, "ot_worker_%d"); + if (IS_ERR(work)) pr_err("failed to create thread for cpu %d\n", cpu); - } else { - kthread_bind(work, cpu); - wake_up_process(work); - } } =20 /* wait a while to make sure all threads waiting at start line */ @@ -562,14 +558,9 @@ static int ot_start_async(struct ot_test *test) if (!cpu_online(cpu)) continue; =20 - work =3D kthread_create_on_node(ot_thread_worker, item, - cpu_to_node(cpu), "ot_worker_%d", cpu); - if (IS_ERR(work)) { + work =3D kthread_run_on_cpu(ot_thread_worker, item, cpu, "ot_worker_%d"); + if (IS_ERR(work)) pr_err("failed to create thread for cpu %d\n", cpu); - } else { - kthread_bind(work, cpu); - wake_up_process(work); - } } =20 /* wait a while to make sure all threads waiting at start line */ --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 78FA4158DB1 for ; Fri, 26 Jul 2024 21:57:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031050; cv=none; b=iwlOSiVTCREUXsQTEc4qyZ/PKzy1hCwDfJp7wxAZJg+TBLDtCaHbXhKmY4bl7HnLEhvhKWrShkY60bOy+Bwt92l0x9sKVeaw3zgh6p+ioiho2G6ReJUwNmT34aOb/xDl/8PsLMCuby0ueoJwyxpsg9+YP9aaJyTdfsLKXenUk4Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031050; c=relaxed/simple; bh=SK/q9IX8+ZNrXySOpPmzKAM8VwetiutydeoRgKiyPao=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RPglzaqX1uQapPOQPUfkpyMAkmYPkbzM8wGxtVfarwuNZIMqTuDajvHwo8L/iPnx4VkbCLlBhx3L6ABEH4XKlQGxQPx+GAJCT8rjaoKBkAnxX9LMAmiPEOKM6GcEmx55RviQ/RfRV4bnpxEP7487+0oxq4rPLoFitDWdQdVy224= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SO0/NdwN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SO0/NdwN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 761A4C4AF0B; Fri, 26 Jul 2024 21:57:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031050; bh=SK/q9IX8+ZNrXySOpPmzKAM8VwetiutydeoRgKiyPao=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SO0/NdwN/p0LhFc6GQDSsoAkHrOK1AZ4NVhXtPK0WK3S0wFaUbiaKLCk8mLAsoRDg hx+/QnEu/B5a9us8RvLBDQWULZkHxWGBnuOiNvaSddVjpzHO9R8HB0UkCX7n7lTFYv yZpzBN5dSrcC/ff4CYI5eixr1jOvUTM9MQj695W0bY50bVcbu27kVqex5imt+D8tcq riPVU+ELznNnKXaq8c++ix4NVQmH2cI/XKbZ/Gf38VrbOsc9rIB2XisvpJvbhP5Hry 9EurUTVlYH3LVpeVZVEcoCg5TItRMAU/A/zO1kAG6V0h7T++Mu/Ai0w3RW2rL874Et wdOAxu1C0M+4A== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [PATCH 10/20] net: pktgen: Use kthread_create_on_node() Date: Fri, 26 Jul 2024 23:56:46 +0200 Message-ID: <20240726215701.19459-11-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the proper API instead of open coding it. Signed-off-by: Frederic Weisbecker --- net/core/pktgen.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index ea55a758a475..b80b2704588c 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -3883,17 +3883,14 @@ static int __net_init pktgen_create_thread(int cpu,= struct pktgen_net *pn) list_add_tail(&t->th_list, &pn->pktgen_threads); init_completion(&t->start_done); =20 - p =3D kthread_create_on_node(pktgen_thread_worker, - t, - cpu_to_node(cpu), - "kpktgend_%d", cpu); + p =3D kthread_create_on_cpu(pktgen_thread_worker, t, cpu, "kpktgend_%d"); if (IS_ERR(p)) { pr_err("kthread_create_on_node() failed for cpu %d\n", t->cpu); list_del(&t->th_list); kfree(t); return PTR_ERR(p); } - kthread_bind(p, cpu); + t->tsk =3D p; =20 pe =3D proc_create_data(t->tsk->comm, 0600, pn->proc_dir, --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 668DD14D2BD; Fri, 26 Jul 2024 21:57:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031054; cv=none; b=kniBiYlzvlHUq7IOdPVAHbkAq14Sa2rKlJHVt9nQHsJS8uv8DfW+p3dkxAjV6lIpegh+oWk4CirXVPs/PtK77YDje2nuAzCyeeeU5A6L8JLHK8LH7z4zjV6FFcQpL9R0mRFceNICcTeqbZNA5VsSLPhD0eN/sflfYcxj3zmkmxk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031054; c=relaxed/simple; bh=MUWUbgWSkKV4GLdom7VkftM4X5LXDstggWbHIa2p29w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TaDKGwUfCBNHlSV20+AUzOmUVZpwRHY8pV+D4myE+REKDc3pvJqaXBhthyamNNSHdUGzBT47Lhl7YXWTFJPw0C8SGNu4vjOKxjVAAaHMa7+cxbuc3r7kWCEZC/zxYR/+Z2Zz41uqg88Z1zvvr0cgJeVneD/aw7YQXZkVDTMMbBQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dWmrsooC; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dWmrsooC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A1FDDC4AF09; Fri, 26 Jul 2024 21:57:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031053; bh=MUWUbgWSkKV4GLdom7VkftM4X5LXDstggWbHIa2p29w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dWmrsooCdYxUdk/aCUzDpll4gueCMQsfkinYrKzAWc1v/GAaIsHjE3rm8GWfqufpy gKRyDSNOjiXVu5BGliAyGQJhFUrk1RQuDB0kNKtBzDasPdPZvrIqiCgBy2WKWw0dXy zwLgigU+SitEoGE7TrTGk6i+9RF0xdScyWgbLzJH5VQihFensb8LOZ/Astq125xDGo bUggEcJQVzgvcNRlDFR4LEap94c9Tg6FMyRYZqG70PLQLhhXB7cvyZa2XUx1ECWnPF KMrNN2lDQKT3EJi/PW5+2xQjAbSKxLd7az60jjUo0uD2e8O5hDCpQPdjuMG827Vb1O aQ0djG1ROPjcg== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Andrew Morton , Kees Cook , Peter Zijlstra , Thomas Gleixner , Michal Hocko , Vlastimil Babka , linux-mm@kvack.org, "Paul E. McKenney" , Neeraj Upadhyay , Joel Fernandes , Boqun Feng , Zqiang , rcu@vger.kernel.org Subject: [RFC PATCH 11/20] kthread: Make sure kthread hasn't started while binding it Date: Fri, 26 Jul 2024 23:56:47 +0200 Message-ID: <20240726215701.19459-12-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make sure the kthread is sleeping in the schedule_preempt_disabled() call before calling its handler when kthread_bind[_mask]() is called on it. This provides a sanity check verifying that the task is not randomly blocked later at some point within its function handler, in which case it could be just concurrently awaken, leaving the call to do_set_cpus_allowed() without any effect until the next voluntary sleep. Rely on the wake-up ordering to ensure that the newly introduced "started" field returns the expected value: TASK A TASK B ------ ------ READ kthread->started wake_up_process(B) rq_lock() ... rq_unlock() // RELEASE schedule() rq_lock() // ACQUIRE // schedule task B rq_unlock() WRITE kthread->started Similarly, writing kthread->started before subsequent voluntary sleeps will be visible after calling wait_task_inactive() in __kthread_bind_mask(), reporting potential misuse of the API. Upcoming patches will make further use of this facility. Signed-off-by: Frederic Weisbecker Acked-by: Vlastimil Babka --- kernel/kthread.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/kernel/kthread.c b/kernel/kthread.c index f7be976ff88a..ecb719f54f7a 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -53,6 +53,7 @@ struct kthread_create_info struct kthread { unsigned long flags; unsigned int cpu; + int started; int result; int (*threadfn)(void *); void *data; @@ -382,6 +383,8 @@ static int kthread(void *_create) schedule_preempt_disabled(); preempt_enable(); =20 + self->started =3D 1; + ret =3D -EINTR; if (!test_bit(KTHREAD_SHOULD_STOP, &self->flags)) { cgroup_kthread_ready(); @@ -540,7 +543,9 @@ static void __kthread_bind(struct task_struct *p, unsig= ned int cpu, unsigned int =20 void kthread_bind_mask(struct task_struct *p, const struct cpumask *mask) { + struct kthread *kthread =3D to_kthread(p); __kthread_bind_mask(p, mask, TASK_UNINTERRUPTIBLE); + WARN_ON_ONCE(kthread->started); } =20 /** @@ -554,7 +559,9 @@ void kthread_bind_mask(struct task_struct *p, const str= uct cpumask *mask) */ void kthread_bind(struct task_struct *p, unsigned int cpu) { + struct kthread *kthread =3D to_kthread(p); __kthread_bind(p, cpu, TASK_UNINTERRUPTIBLE); + WARN_ON_ONCE(kthread->started); } EXPORT_SYMBOL(kthread_bind); =20 --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F103114F12C; Fri, 26 Jul 2024 21:57:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031058; cv=none; b=Krf7b9fZ8IrKfiSEsz6Z7pNxwfC0J8rY8e0IMC45PhPNiR7Sb/l7FnyxHZpSYYOqeUFuvZKSXOjo938Oi3/2ubMiAXD/zM8WTzrzA43Ox2NPnlTgKu9yFy3G92w1z97NfKeapwFOR7gx/mlocX43m7amo5tMBZ350vUr4BK8y00= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031058; c=relaxed/simple; bh=ti4mfUgveAuqTAPPwXGYkPNNFuo7Vc9aOZIdnCtmsYQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aadfqqwwZ0ngFe+2yJNnY9iCap0txTBtuCNamYXjXNTIW2Vj9VCQpTvM4dS/ZzjuWDnxOjjpCFIE1xF3VWgcE6abBX3ff5OtFqzmgw+6xIwWOmtkgRwXZKRdIJFfMy46aO/vdlD+0udVzX0RTcPatZRm2947zXU/caZCAyrjFV0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=heNYtWqP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="heNYtWqP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4DCB0C4AF0B; Fri, 26 Jul 2024 21:57:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031057; bh=ti4mfUgveAuqTAPPwXGYkPNNFuo7Vc9aOZIdnCtmsYQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=heNYtWqPzI279b23ynorkZtq9s+XtrGZuDGs5HGiedBJIbhqIYfZlNLZbVnJRlGWb OoIJj85ZxFgF5Pf0IoPAk1ly5fkb/U6UyuT5cW0GnVsadONHBpy7j2gDi7LQybe50+ I4fHIxGYUhytu7KJ87eKYGc87z8Mzg0xc3xy96B3iDivajwqofkWVWVJujy2Gx3XVF a2bFKPz4bsNe5kK7YlfbJU6R/0i7zEH59l/Er15+P8rBvDbO2OVJ0sx5U7dcnX1D2n wWZXB/LQV7ncN0jrEUJxS/KDWlj6z3hX0I+H0asvSQRZgwj5QmDkOnsHlYVNJPc5yU wB+175sFPcwyQ== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Andrew Morton , Kees Cook , Peter Zijlstra , Thomas Gleixner , Michal Hocko , Vlastimil Babka , linux-mm@kvack.org, "Paul E. McKenney" , Neeraj Upadhyay , Joel Fernandes , Boqun Feng , Zqiang , rcu@vger.kernel.org Subject: [RFC PATCH 12/20] kthread: Implement preferred affinity Date: Fri, 26 Jul 2024 23:56:48 +0200 Message-ID: <20240726215701.19459-13-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Affining kthreads follow either of three existing different patterns: 1) Per-CPU kthreads must stay affine to a single CPU and never execute relevant code on any other CPU. This is currently handled by smpboot code which takes care of CPU-hotplug operations. 2) Kthreads that _have_ to be affine to a specific set of CPUs and can't run anywhere else. The affinity is set through kthread_bind_mask() and the subsystem takes care by itself to handle CPU-hotplug operations. 3) Kthreads that have a _preferred_ affinity but that can run anywhere without breaking correctness. Userspace can overwrite the affinity. It is set manually like any other task and CPU-hotplug is supposed to be handled by the relevant subsystem so that the task is properly reaffined whenever a given CPU from the preferred affinity comes up or down. Also care must be taken so that the preferred affinity doesn't cross housekeeping cpumask boundaries. Currently the preferred affinity pattern has at least 4 identified users, with more or less success when it comes to handle CPU-hotplug operations and housekeeping cpumask. Provide an infrastructure to handle this usecase patter. A new kthread_affine_preferred() API is introduced, to be used just like kthread_bind_mask(), right after kthread creation and before the first wake up. The kthread is then affine right away to the cpumask passed through the API if it has online housekeeping CPUs. Otherwise it will be affine to all online housekeeping CPUs as a last resort. It is aware of CPU hotplug events such that: * When a housekeeping CPU goes up and is part of the preferred affinity of a given kthread, it is added to its applied affinity set (and possibly the default last resort online housekeeping set is removed from the set). * When a housekeeping CPU goes down while it was part of the preferred affinity of a kthread, it is removed from the kthread's applied affinity. The last resort is to affine the kthread to all online housekeeping CPUs. Signed-off-by: Frederic Weisbecker Acked-by: Vlastimil Babka --- include/linux/cpuhotplug.h | 1 + include/linux/kthread.h | 1 + kernel/kthread.c | 121 +++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+) diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h index 7a5785f405b6..5c204bd0fed6 100644 --- a/include/linux/cpuhotplug.h +++ b/include/linux/cpuhotplug.h @@ -238,6 +238,7 @@ enum cpuhp_state { CPUHP_AP_WORKQUEUE_ONLINE, CPUHP_AP_RANDOM_ONLINE, CPUHP_AP_RCUTREE_ONLINE, + CPUHP_AP_KTHREADS_ONLINE, CPUHP_AP_BASE_CACHEINFO_ONLINE, CPUHP_AP_ONLINE_DYN, CPUHP_AP_ONLINE_DYN_END =3D CPUHP_AP_ONLINE_DYN + 40, diff --git a/include/linux/kthread.h b/include/linux/kthread.h index b11f53c1ba2e..30209bdf83a2 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h @@ -85,6 +85,7 @@ kthread_run_on_cpu(int (*threadfn)(void *data), void *dat= a, void free_kthread_struct(struct task_struct *k); void kthread_bind(struct task_struct *k, unsigned int cpu); void kthread_bind_mask(struct task_struct *k, const struct cpumask *mask); +int kthread_affine_preferred(struct task_struct *p, const struct cpumask *= mask); int kthread_stop(struct task_struct *k); int kthread_stop_put(struct task_struct *k); bool kthread_should_stop(void); diff --git a/kernel/kthread.c b/kernel/kthread.c index ecb719f54f7a..cfa6e1b8d933 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -35,6 +35,10 @@ static DEFINE_SPINLOCK(kthread_create_lock); static LIST_HEAD(kthread_create_list); struct task_struct *kthreadd_task; =20 +static struct cpumask kthread_online_mask; +static LIST_HEAD(kthreads_hotplug); +static DEFINE_MUTEX(kthreads_hotplug_lock); + struct kthread_create_info { /* Information passed to kthread() from kthreadd. */ @@ -64,6 +68,9 @@ struct kthread { #endif /* To store the full name if task comm is truncated. */ char *full_name; + struct task_struct *task; + struct list_head hotplug_node; + struct cpumask *preferred_affinity; }; =20 enum KTHREAD_BITS { @@ -124,6 +131,7 @@ bool set_kthread_struct(struct task_struct *p) init_completion(&kthread->parked); p->vfork_done =3D &kthread->exited; =20 + kthread->task =3D p; p->worker_private =3D kthread; return true; } @@ -314,6 +322,16 @@ void __noreturn kthread_exit(long result) { struct kthread *kthread =3D to_kthread(current); kthread->result =3D result; + if (kthread->preferred_affinity) { + mutex_lock(&kthreads_hotplug_lock); + list_del(&kthread->hotplug_node); + /* Make sure the kthread never gets re-affined globally */ + set_cpus_allowed_ptr(current, housekeeping_cpumask(HK_TYPE_KTHREAD)); + mutex_unlock(&kthreads_hotplug_lock); + + kfree(kthread->preferred_affinity); + kthread->preferred_affinity =3D NULL; + } do_exit(0); } EXPORT_SYMBOL(kthread_exit); @@ -779,6 +797,109 @@ int kthreadd(void *unused) return 0; } =20 +static void kthread_fetch_affinity(struct kthread *k, struct cpumask *mask) +{ + cpumask_and(mask, k->preferred_affinity, &kthread_online_mask); + cpumask_and(mask, mask, housekeeping_cpumask(HK_TYPE_KTHREAD)); + if (cpumask_empty(mask)) + cpumask_copy(mask, housekeeping_cpumask(HK_TYPE_KTHREAD)); +} + +int kthread_affine_preferred(struct task_struct *p, const struct cpumask *= mask) +{ + struct kthread *kthread =3D to_kthread(p); + cpumask_var_t affinity; + unsigned long flags; + int ret; + + if (!wait_task_inactive(p, TASK_UNINTERRUPTIBLE) || kthread->started) { + WARN_ON(1); + return -EINVAL; + } + + if (!zalloc_cpumask_var(&affinity, GFP_KERNEL)) + return -ENOMEM; + + kthread->preferred_affinity =3D kzalloc(sizeof(struct cpumask), GFP_KERNE= L); + if (!kthread->preferred_affinity) { + ret =3D -ENOMEM; + goto out; + } + + mutex_lock(&kthreads_hotplug_lock); + cpumask_copy(kthread->preferred_affinity, mask); + list_add_tail(&kthread->hotplug_node, &kthreads_hotplug); + kthread_fetch_affinity(kthread, affinity); + + /* It's safe because the task is inactive. */ + raw_spin_lock_irqsave(&p->pi_lock, flags); + do_set_cpus_allowed(p, mask); + raw_spin_unlock_irqrestore(&p->pi_lock, flags); + + mutex_unlock(&kthreads_hotplug_lock); +out: + free_cpumask_var(affinity); + + return 0; +} + +static int kthreads_hotplug_update(void) +{ + cpumask_var_t affinity; + struct kthread *k; + int err =3D 0; + + if (list_empty(&kthreads_hotplug)) + return 0; + + if (!zalloc_cpumask_var(&affinity, GFP_KERNEL)) + return -ENOMEM; + + list_for_each_entry(k, &kthreads_hotplug, hotplug_node) { + if (WARN_ON_ONCE(!k->preferred_affinity)) { + err =3D -EINVAL; + break; + } + kthread_fetch_affinity(k, affinity); + set_cpus_allowed_ptr(k->task, affinity); + } + + free_cpumask_var(affinity); + + return err; +} + +static int kthreads_offline_cpu(unsigned int cpu) +{ + int ret =3D 0; + + mutex_lock(&kthreads_hotplug_lock); + cpumask_clear_cpu(cpu, &kthread_online_mask); + ret =3D kthreads_hotplug_update(); + mutex_unlock(&kthreads_hotplug_lock); + + return ret; +} + +static int kthreads_online_cpu(unsigned int cpu) +{ + int ret =3D 0; + + mutex_lock(&kthreads_hotplug_lock); + cpumask_set_cpu(cpu, &kthread_online_mask); + ret =3D kthreads_hotplug_update(); + mutex_unlock(&kthreads_hotplug_lock); + + return ret; +} + +static int kthreads_init(void) +{ + return cpuhp_setup_state(CPUHP_AP_KTHREADS_ONLINE, "kthreads:online", + kthreads_online_cpu, kthreads_offline_cpu); +} +early_initcall(kthreads_init); + void __kthread_init_worker(struct kthread_worker *worker, const char *name, struct lock_class_key *key) --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 56A4D158DAC for ; Fri, 26 Jul 2024 21:57:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031060; cv=none; b=bJ5DpKnEJNuBByhwVh6v7xvucW1SuiTjbqqeaDRIRqGIlwC/u9szXOZXzh1i7DvnL457rjMHtaAhARgMvjPx8vg2nSw/a+hNUSpQ+ociDyJPdcjKI7L0rcjwkAU2WSALvdxom9OuZzv+vOwZ720KECLmiVGkCcK/4IGpQXODwTo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031060; c=relaxed/simple; bh=Rndu056GW69+sdbAKM3F/CfIuWiCWMVJcK3IHpS2rDo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KP5UO36U6nCkywzf8BJQylSDQvygkOssCTnvP9ApqwEyGF0OVBm539NijDNqewrzVMpfqFJwPMpGOAtiMUGmeDkmbGM1qo1SyHWSdh6rHPGhbIp+xbSyowC5lL339gqFaMD5maOfSUPQiUKXsGG72jbyBlnVArp7D75+ZtXVJ1c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jKF0qw8o; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jKF0qw8o" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DFBB2C4AF0E; Fri, 26 Jul 2024 21:57:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031059; bh=Rndu056GW69+sdbAKM3F/CfIuWiCWMVJcK3IHpS2rDo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jKF0qw8oA9DB/ULKFIjWqBbIOivCNKNnP+icJQt71lrPxYLykaWaAGlKghIpOZukx fb58LWldjmjvwQJ8wN4PuM2kjFU9SJrJ0EQAa5gu2Y6Y6vor0u0/bX79kSl5BiQouI izJpmQ21q4aeCG1vc1o7OLlVRd41dYSzwgoq6ZMqQj4V1yb4DnBw3ecF9leZKgYXsx vV6HUhfxUkd+67VNqXhahAUB071lXMNcM8UxLLi/e8aPVCHWvrijo96H21LzJW8fZY zUAm9K9yimYovCNXHgUrc0q0g0ZhyzvyFhcNRS66sqXsaIdUtmQc8VnJ1pN3JpEHYu zVLO0zCMmrnRA== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Michal Hocko , Vlastimil Babka , Andrew Morton , linux-mm@kvack.org, Peter Zijlstra , Thomas Gleixner Subject: [RFC PATCH 13/20] mm: Make Kcompactd use kthread's preferred affinity Date: Fri, 26 Jul 2024 23:56:49 +0200 Message-ID: <20240726215701.19459-14-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that kthreads have an infrastructure to handle preferred affinity against CPU hotplug and housekeeping cpumask, convert Kcompactd to use it instead of handling halfway all the constraints by itself. Signed-off-by: Frederic Weisbecker Acked-by: Vlastimil Babka --- mm/compaction.c | 43 +++---------------------------------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index 739b1bf3d637..64a6486f06e1 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -3179,15 +3179,9 @@ void wakeup_kcompactd(pg_data_t *pgdat, int order, i= nt highest_zoneidx) static int kcompactd(void *p) { pg_data_t *pgdat =3D (pg_data_t *)p; - struct task_struct *tsk =3D current; long default_timeout =3D msecs_to_jiffies(HPAGE_FRAG_CHECK_INTERVAL_MSEC); long timeout =3D default_timeout; =20 - const struct cpumask *cpumask =3D cpumask_of_node(pgdat->node_id); - - if (!cpumask_empty(cpumask)) - set_cpus_allowed_ptr(tsk, cpumask); - set_freezable(); =20 pgdat->kcompactd_max_order =3D 0; @@ -3258,11 +3252,13 @@ void __meminit kcompactd_run(int nid) if (pgdat->kcompactd) return; =20 - pgdat->kcompactd =3D kthread_run(kcompactd, pgdat, "kcompactd%d", nid); + pgdat->kcompactd =3D kthread_create(kcompactd, pgdat, "kcompactd%d", nid); if (IS_ERR(pgdat->kcompactd)) { pr_err("Failed to start kcompactd on node %d\n", nid); pgdat->kcompactd =3D NULL; } + kthread_affine_preferred(pgdat->kcompactd, cpumask_of_node(pgdat->node_id= )); + wake_up_process(pgdat->kcompactd); } =20 /* @@ -3279,30 +3275,6 @@ void __meminit kcompactd_stop(int nid) } } =20 -/* - * It's optimal to keep kcompactd on the same CPUs as their memory, but - * not required for correctness. So if the last cpu in a node goes - * away, we get changed to run anywhere: as the first one comes back, - * restore their cpu bindings. - */ -static int kcompactd_cpu_online(unsigned int cpu) -{ - int nid; - - for_each_node_state(nid, N_MEMORY) { - pg_data_t *pgdat =3D NODE_DATA(nid); - const struct cpumask *mask; - - mask =3D cpumask_of_node(pgdat->node_id); - - if (cpumask_any_and(cpu_online_mask, mask) < nr_cpu_ids) - /* One of our CPUs online: restore mask */ - if (pgdat->kcompactd) - set_cpus_allowed_ptr(pgdat->kcompactd, mask); - } - return 0; -} - static int proc_dointvec_minmax_warn_RT_change(struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos) { @@ -3362,15 +3334,6 @@ static struct ctl_table vm_compaction[] =3D { static int __init kcompactd_init(void) { int nid; - int ret; - - ret =3D cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN, - "mm/compaction:online", - kcompactd_cpu_online, NULL); - if (ret < 0) { - pr_err("kcompactd: failed to register hotplug callbacks.\n"); - return ret; - } =20 for_each_node_state(nid, N_MEMORY) kcompactd_run(nid); --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A0DC315A858 for ; Fri, 26 Jul 2024 21:57:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031062; cv=none; b=T9DmkILJsLGKokuewNLsCkRizVSk8auox8cTlRFtdlo7XD6Cz/JnmkwUWt7GJIQAokF0+vxQAhkFo5wBPdsNOOcp/XOZkX8d8aRGxTSmeswpXhPfZxDSYdE1UtAqee1ZALYYbs6ztSh6NggNeKQtC3aXWM06xPJwJOLTxbRw1VA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031062; c=relaxed/simple; bh=0SibR5bQwBKFRBO45aA49JEwgVAnlIbZLSKlUtRYW0s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nyqPxUz4KnzGKwch4rEXFRu3fHMdtbpnbVhkmpfhQ5p+IavAFOxudoCNh6932SnF65Xkm5duJJJDewSDUrxUgyssczW35o37l3jl/EMx162q0OKUw/tP8hOA+JKYZ4/ELyNaCf+K/TWJGuKLUylwbJpVlSTcFnRCSNZzom/WAR4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EfaHtNlM; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="EfaHtNlM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4A550C4AF09; Fri, 26 Jul 2024 21:57:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031062; bh=0SibR5bQwBKFRBO45aA49JEwgVAnlIbZLSKlUtRYW0s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EfaHtNlMZlMJahhsPYP3XpnKrqeJqsjfxxstfWQNrL9lYhrDvZtANMo274OaJx/WR DK06QKky13O60roB5A1PC+pKD3hZucY4vdLhblwxyPKDFOePStfUXAM/+oCpScsUF2 VQHCBe3uZD8wqdoKdHhmwfxBAD00C1S76vldsuXXYD/yILvkN86vgtKpOVHSbLjCIo ixfo2steYAN967ul7maL36yPU0W2mRJU0P8dmMoi6Vzt6t/ObrFIeg0/+AxrxQFv6U cmkFLHddcdM3frJXp9chc8owG7UMLfzeBceiOIUjFtLAUGktjLI922jIcKN8lmkBz4 /9K0TNVD224dw== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Michal Hocko , Vlastimil Babka , linux-mm@kvack.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [RFC PATCH 14/20] mm: Allocate kcompactd on its node Date: Fri, 26 Jul 2024 23:56:50 +0200 Message-ID: <20240726215701.19459-15-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" kcompactd runs preferrably on a specific node. Allocate its task structure accordingly for better memory locality. Signed-off-by: Frederic Weisbecker Acked-by: Vlastimil Babka --- mm/compaction.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/compaction.c b/mm/compaction.c index 64a6486f06e1..dc4347c4e352 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -3252,7 +3252,7 @@ void __meminit kcompactd_run(int nid) if (pgdat->kcompactd) return; =20 - pgdat->kcompactd =3D kthread_create(kcompactd, pgdat, "kcompactd%d", nid); + pgdat->kcompactd =3D kthread_create_on_node(kcompactd, pgdat, nid, "kcomp= actd%d", nid); if (IS_ERR(pgdat->kcompactd)) { pr_err("Failed to start kcompactd on node %d\n", nid); pgdat->kcompactd =3D NULL; --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4E5C15AADB for ; Fri, 26 Jul 2024 21:57:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031064; cv=none; b=AxYuejOrHaA6ekpq1Lf9hw44WXxfVhfU7ruCxhm8kV3JeFSvHg8DdSBovINazDxNXDudzxIQAXHv/HxhJuxh2/JGGmV6aCG/mNfbJh0G2CgxV9KMxdqJcr+ThVzQz5dAK2zw28tcZrNqIsKIKYYO+PHRgvhWDSTAQapHZ26PsgA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031064; c=relaxed/simple; bh=gPMXvX+GlymTegeJ33I/1BOjjt7hvEufmzbmhRPnpxg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WSBRhsU0feMzV4N7zkAwD/GBlWgcs5dFUJxywS2PD9VXUwuCtF59DpTIacgNcNWXpktplDQC+t6JQwcGc8S4qoucEXXvoKlDQFFCTKt79c4UVLaxIL2CACb6FwBITCd4O6ONzgGXCla5bSTQmSUa/6ewTJ/6WRg46RDgoCnTtyU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iqgrHSmz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="iqgrHSmz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A2B33C32782; Fri, 26 Jul 2024 21:57:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031064; bh=gPMXvX+GlymTegeJ33I/1BOjjt7hvEufmzbmhRPnpxg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iqgrHSmz8YA7EVyJFrBUszMUuoULJREzG0WmIVQaPwZgshXH9zPEIRF+Y8MrjnWkM Zt3wRLuZMuDHLaUl7mHZVZJJebIAnhF3ewfY12xrp+pMS3rOrGHuwiCIrXgDtdgbpo fqrvDWzHarZ5T4rMmD8B0dQWcCrjj7zT4ofXxfLUT1/BcPwCJnP2kMJVcshvr4xbwW xdMDv2GNTaRv6yTwhplpRpErKEak9nfL5A3iL7FO8eM/NlgFldnD6GIsJ4MQTFVPMn svskNbqqQ3C0B6v8p/pu/8VrsrkvDTA2qxa0iiKGjB9B0mJJXmZ3Z1wJndxKQW2vdE GB5zT8LjtgUBg== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Michal Hocko , Vlastimil Babka , linux-mm@kvack.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [RFC PATCH 15/20] mm: Make kswapd use kthread's preferred affinity Date: Fri, 26 Jul 2024 23:56:51 +0200 Message-ID: <20240726215701.19459-16-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Now that kthreads have an infrastructure to handle preferred affinity against CPU hotplug and housekeeping cpumask, convert kswapd to use it instead of handling halfway all the constraints by itself. Signed-off-by: Frederic Weisbecker Acked-by: Vlastimil Babka --- mm/vmscan.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 2e34de9cd0d4..94359a893b4f 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -7116,10 +7116,6 @@ static int kswapd(void *p) unsigned int highest_zoneidx =3D MAX_NR_ZONES - 1; pg_data_t *pgdat =3D (pg_data_t *)p; struct task_struct *tsk =3D current; - const struct cpumask *cpumask =3D cpumask_of_node(pgdat->node_id); - - if (!cpumask_empty(cpumask)) - set_cpus_allowed_ptr(tsk, cpumask); =20 /* * Tell the memory management that we're a "memory allocator", @@ -7288,7 +7284,7 @@ void __meminit kswapd_run(int nid) =20 pgdat_kswapd_lock(pgdat); if (!pgdat->kswapd) { - pgdat->kswapd =3D kthread_run(kswapd, pgdat, "kswapd%d", nid); + pgdat->kswapd =3D kthread_create(kswapd, pgdat, "kswapd%d", nid); if (IS_ERR(pgdat->kswapd)) { /* failure at boot is fatal */ pr_err("Failed to start kswapd on node %d=EF=BC=8Cret=3D%ld\n", @@ -7296,6 +7292,8 @@ void __meminit kswapd_run(int nid) BUG_ON(system_state < SYSTEM_RUNNING); pgdat->kswapd =3D NULL; } + kthread_affine_preferred(pgdat->kswapd, cpumask_of_node(pgdat->node_id)); + wake_up_process(pgdat->kswapd); } pgdat_kswapd_unlock(pgdat); } --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C197215B14C for ; Fri, 26 Jul 2024 21:57:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031066; cv=none; b=bmyNNjSk2+X9y9Zh5UnKtK5Fl/FImHp5V8Bgzw0XZVwm4b5oq3wVwVAziks4PeM/ghqQJlwkhpDvNIRduD3a++LyFdOk6f0HPtnA7AuzoMQqbEq47+LRQ4FZXXxhDbdG3qHANJ1e+1hggE3m+yJ0Ag0/8vJlvuoL+e/AF8DqYMc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031066; c=relaxed/simple; bh=xSTwda2GjtC4wyMIao/A441KBqg4odJRHj3hK2x1g+0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Om4rkXd0wJnkwJwjFxtv18chy583J9rcNcs5sG7ePO3P+C1KJLb4W5M+mU2UkDMqVrwyBQeIb8XBNdbDvPABFdnXbBPWOT+BcfyxfvKSei5Hp1XWGAi7BJsxstaPZqeUM+d39uR3KeirpLkIlT4BE64Jc4AbRbdHhgNXf4YS0XM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HNJiSszU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HNJiSszU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ECEAAC4AF09; Fri, 26 Jul 2024 21:57:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031066; bh=xSTwda2GjtC4wyMIao/A441KBqg4odJRHj3hK2x1g+0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HNJiSszULYtzhaeEVutUpqJehUbmWxSB6jq8VWOWPfAZdbHMxbimJX7PAPIKb+rCX W52rkj7eh6tAwyR8729dwXxsywgY8xzA8VBFr+v2kTGuMnpKDvsv1NhQBNyZXe5t0+ 01bV5vKyjTeG1oCaskaQOhyWG0qKuvAVy5laatvcHYtQ5BlQE8ER+P3CHL5deVon20 /J3e2MFPcvAexLrmDbabvPFF2loz01wv2FpsqHyCNxkF/0bpaB4P0ISCX/bAd7HSex ZUsqxDXFzSeoxk0tsvawONxFpR1xpWqnzoXRtkGhxX2Kqohw7My6WB+nP6z0KMxwOp LSSFCfUmNrGAQ== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Michal Hocko , Vlastimil Babka , linux-mm@kvack.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [RFC PATCH 16/20] mm: Allocate kswapd on its node Date: Fri, 26 Jul 2024 23:56:52 +0200 Message-ID: <20240726215701.19459-17-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable kswapd runs preferrably on a specific node. Allocate its task structure accordingly for better memory locality. Signed-off-by: Frederic Weisbecker Acked-by: Vlastimil Babka --- mm/vmscan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 94359a893b4f..adf8c1e7e89d 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -7284,7 +7284,7 @@ void __meminit kswapd_run(int nid) =20 pgdat_kswapd_lock(pgdat); if (!pgdat->kswapd) { - pgdat->kswapd =3D kthread_create(kswapd, pgdat, "kswapd%d", nid); + pgdat->kswapd =3D kthread_create_on_node(kswapd, pgdat, nid, "kswapd%d",= nid); if (IS_ERR(pgdat->kswapd)) { /* failure at boot is fatal */ pr_err("Failed to start kswapd on node %d=EF=BC=8Cret=3D%ld\n", --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDF8815D5C3; Fri, 26 Jul 2024 21:57:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031069; cv=none; b=CJBau4jJclyozmAuQ3ZF9MCQYGbfglPs7kGD7K16xLdM7xoNEWZdh9cdMckgtsm2XEzYELnZ/Yc+6vRtwroa+YjKeQ3/yaJAtngRkyigrdjBa1GvN+aWQOaMaLw85HbJI2PSjvgS3myaDvQ9Xak9Lgc8SgAI2jxXjjPGX3Hltv8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031069; c=relaxed/simple; bh=khKkjbT/ZH5M6AKkiB5PGWU0fksrZMOgOpy6DcH7Xws=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hV04bN8jC9T2fUKbuS1nDSUpxGk/udHp8mHnlwlJ7MKqX20hiFsbgSSIzFWOdAv1Kvu2KobjZomU5YVkMwBhUrcwztIXXwYduA41vAc7zaQP9K1qa1idti1JyLsD4C1q7SfpNi4U+go6HLLsQuAj3UvTmjIOBanRuUxXXfBjlBk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BI/Az33f; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BI/Az33f" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 17872C32782; Fri, 26 Jul 2024 21:57:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031069; bh=khKkjbT/ZH5M6AKkiB5PGWU0fksrZMOgOpy6DcH7Xws=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BI/Az33fd593k7oPng2yPoEpT9iGCqXvLQ1HENLex3XgArF2gmp9w6s0K1ZPxk0Xj 8Wgk0TjZBt98gAvlqFQP4ZMQ1AwYSHrHfHCYpEYgufr19gmmBeLN9Dj9ysuECqwJaJ nH+zwJU96o2SDm5oBNzhPRvXH2ix3+ssQxwG1VJJryT+vgRn4C+KhSclydsfoYUtTF ID7jVZV9vIz58Xy7J1qJAEULkpqVWOINgL2rkN8w+W1FLdoXUGKrFG9LM0GHLlh7df oSFb/J2PoyDojvYxyJFZV4jTn/w/1KXbD39exywojHa2Fs59ZP50S4O8tbYor/8PBt mcelqv8RZ5TGw== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , "Paul E. McKenney" , Neeraj Upadhyay , Joel Fernandes , Boqun Feng , Zqiang , rcu@vger.kernel.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [RFC PATCH 17/20] rcu: Use kthread preferred affinity for RCU boost Date: Fri, 26 Jul 2024 23:56:53 +0200 Message-ID: <20240726215701.19459-18-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that kthreads have an infrastructure to handle preferred affinity against CPU hotplug and housekeeping cpumask, convert RCU boost to use it instead of handling all the constraints by itself. Signed-off-by: Frederic Weisbecker --- kernel/rcu/tree.c | 27 +++++++++++++++++++-------- kernel/rcu/tree_plugin.h | 11 ++--------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 28c7031711a3..6ff87a3e000b 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -148,7 +148,6 @@ static int rcu_scheduler_fully_active __read_mostly; =20 static void rcu_report_qs_rnp(unsigned long mask, struct rcu_node *rnp, unsigned long gps, unsigned long flags); -static struct task_struct *rcu_boost_task(struct rcu_node *rnp); static void invoke_rcu_core(void); static void rcu_report_exp_rdp(struct rcu_data *rdp); static void sync_sched_exp_online_cleanup(int cpu); @@ -4894,6 +4893,22 @@ int rcutree_prepare_cpu(unsigned int cpu) return 0; } =20 +static void rcu_thread_affine_rnp(struct task_struct *t, struct rcu_node *= rnp) +{ + cpumask_var_t affinity; + int cpu; + + if (!zalloc_cpumask_var(&affinity, GFP_KERNEL)) + return; + + for_each_leaf_node_possible_cpu(rnp, cpu) + cpumask_set_cpu(cpu, affinity); + + kthread_affine_preferred(t, affinity); + + free_cpumask_var(affinity); +} + /* * Update kthreads affinity during CPU-hotplug changes. * @@ -4913,19 +4928,18 @@ static void rcutree_affinity_setting(unsigned int c= pu, int outgoingcpu) unsigned long mask; struct rcu_data *rdp; struct rcu_node *rnp; - struct task_struct *task_boost, *task_exp; + struct task_struct *task_exp; =20 rdp =3D per_cpu_ptr(&rcu_data, cpu); rnp =3D rdp->mynode; =20 - task_boost =3D rcu_boost_task(rnp); task_exp =3D rcu_exp_par_gp_task(rnp); =20 /* - * If CPU is the boot one, those tasks are created later from early + * If CPU is the boot one, this task is created later from early * initcall since kthreadd must be created first. */ - if (!task_boost && !task_exp) + if (!task_exp) return; =20 if (!zalloc_cpumask_var(&cm, GFP_KERNEL)) @@ -4947,9 +4961,6 @@ static void rcutree_affinity_setting(unsigned int cpu= , int outgoingcpu) if (task_exp) set_cpus_allowed_ptr(task_exp, cm); =20 - if (task_boost) - set_cpus_allowed_ptr(task_boost, cm); - mutex_unlock(&rnp->kthread_mutex); =20 free_cpumask_var(cm); diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h index 340bbefe5f65..2d9eca53cb7e 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h @@ -1206,16 +1206,13 @@ static void rcu_spawn_one_boost_kthread(struct rcu_= node *rnp) raw_spin_lock_irqsave_rcu_node(rnp, flags); rnp->boost_kthread_task =3D t; raw_spin_unlock_irqrestore_rcu_node(rnp, flags); + sp.sched_priority =3D kthread_prio; sched_setscheduler_nocheck(t, SCHED_FIFO, &sp); + rcu_thread_affine_rnp(t, rnp); wake_up_process(t); /* get to TASK_INTERRUPTIBLE quickly. */ } =20 -static struct task_struct *rcu_boost_task(struct rcu_node *rnp) -{ - return READ_ONCE(rnp->boost_kthread_task); -} - #else /* #ifdef CONFIG_RCU_BOOST */ =20 static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags) @@ -1232,10 +1229,6 @@ static void rcu_spawn_one_boost_kthread(struct rcu_n= ode *rnp) { } =20 -static struct task_struct *rcu_boost_task(struct rcu_node *rnp) -{ - return NULL; -} #endif /* #else #ifdef CONFIG_RCU_BOOST */ =20 /* --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A34E15ECD9; Fri, 26 Jul 2024 21:57:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031072; cv=none; b=AdBYcdpk2HYiOpET5WATKPI5JhtmXgzu+cRyYjYUnvqrSFw04C0orpRcrnGuUUvwgF3rY0sVk+0pzMa7dTchJBYtifhBb2rpW3DyFEZXQ5Utfit/LskV8e72+5vjr09A8sSKkTCK+LTbfjs5t8ga+dtXo13qdCgjkcRyhzQbz9M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031072; c=relaxed/simple; bh=0IRZnerP4JJuLsM6ioOa9fqNgjgqlyJtmh1bXDlgZQI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KWfSZgqYggp5rJRjuOsA3RbHsCx1lEG86NNMHlluQUPos6FK2CIGjcoERIH7+mn8u0SKSdcN2qFAkFMr5imJJJlj8qjgqpuw88DwVMqljCOEjCNTWvY/KvfwHbvodgt5FQUaKVMvtr1JI++8K5WseWitpmeIwVuAgSDgYXmtzU8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qhBiH36h; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qhBiH36h" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CA9EEC4AF0A; Fri, 26 Jul 2024 21:57:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031072; bh=0IRZnerP4JJuLsM6ioOa9fqNgjgqlyJtmh1bXDlgZQI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qhBiH36hRHHviYo7jDxdy01XTnqIV9L+S+pcYerNLmkMj/4JwX4diEqEafVsNoSGK TW3x7IYQ0TPoG3jmXeNjp79aZy74kGyYPgFe6TWpAWnhJCNU0kXQxmZ0mnRkKfEKg6 HnXBlt818QF6ORZ1Ro4tcqm7IFQqg3OzPBAH7YIlm4mBpnUtU+NxEvr+0WCJL1UUWT aUxtacCcp0oVWtUCMYCWhG/HXvcrTtwZlLWDkyWJsiakZMDJbrxKkl6kAtSavv9lW/ EtMI/XD96xqFHAEtEHnGALT3GiEH1vxRZLak/26uW8jjc0q9TZcTgXVQto/bzRI180 12D/YIyWfBAvQ== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , "Paul E. McKenney" , Neeraj Upadhyay , Joel Fernandes , Boqun Feng , Zqiang , rcu@vger.kernel.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [RFC PATCH 18/20] kthread: Unify kthread_create_on_cpu() and kthread_create_worker_on_cpu() automatic format Date: Fri, 26 Jul 2024 23:56:54 +0200 Message-ID: <20240726215701.19459-19-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" kthread_create_on_cpu() uses the CPU argument as an implicit and unique printf argument to add to the format whereas kthread_create_worker_on_cpu() still relies on explicitly passing the printf arguments. This difference in behaviour is error prone and doesn't help standardizing per-CPU kthread names. Unify the behaviours and convert kthread_create_worker_on_cpu() to use the printf behaviour of kthread_create_on_cpu(). Signed-off-by: Frederic Weisbecker --- fs/erofs/zdata.c | 2 +- include/linux/kthread.h | 21 +++++++++++---- kernel/kthread.c | 59 ++++++++++++++++++++++++----------------- 3 files changed, 52 insertions(+), 30 deletions(-) diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c index d6fe002a4a71..f1ccdf47585b 100644 --- a/fs/erofs/zdata.c +++ b/fs/erofs/zdata.c @@ -356,7 +356,7 @@ static void erofs_destroy_percpu_workers(void) static struct kthread_worker *erofs_init_percpu_worker(int cpu) { struct kthread_worker *worker =3D - kthread_create_worker_on_cpu(cpu, 0, "erofs_worker/%u", cpu); + kthread_create_worker_on_cpu(cpu, 0, "erofs_worker/%u"); =20 if (IS_ERR(worker)) return worker; diff --git a/include/linux/kthread.h b/include/linux/kthread.h index 30209bdf83a2..0c66e7c1092a 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h @@ -187,13 +187,24 @@ extern void __kthread_init_worker(struct kthread_work= er *worker, =20 int kthread_worker_fn(void *worker_ptr); =20 -__printf(2, 3) +__printf(3, 4) +struct kthread_worker *kthread_create_worker_on_node(unsigned int flags, + int node, + const char namefmt[], ...); + +#define kthread_create_worker(flags, namefmt, ...) \ +({ \ + struct kthread_worker *__kw \ + =3D kthread_create_worker_on_node(flags, NUMA_NO_NODE, \ + namefmt, ## __VA_ARGS__); \ + if (!IS_ERR(__kw)) \ + wake_up_process(__kw->task); \ + __kw; \ +}) + struct kthread_worker * -kthread_create_worker(unsigned int flags, const char namefmt[], ...); - -__printf(3, 4) struct kthread_worker * kthread_create_worker_on_cpu(int cpu, unsigned int flags, - const char namefmt[], ...); + const char namefmt[]); =20 bool kthread_queue_work(struct kthread_worker *worker, struct kthread_work *work); diff --git a/kernel/kthread.c b/kernel/kthread.c index cfa6e1b8d933..34b11dbfc756 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -983,12 +983,11 @@ int kthread_worker_fn(void *worker_ptr) EXPORT_SYMBOL_GPL(kthread_worker_fn); =20 static __printf(3, 0) struct kthread_worker * -__kthread_create_worker(int cpu, unsigned int flags, - const char namefmt[], va_list args) +__kthread_create_worker_on_node(unsigned int flags, int node, + const char namefmt[], va_list args) { struct kthread_worker *worker; struct task_struct *task; - int node =3D NUMA_NO_NODE; =20 worker =3D kzalloc(sizeof(*worker), GFP_KERNEL); if (!worker) @@ -996,20 +995,14 @@ __kthread_create_worker(int cpu, unsigned int flags, =20 kthread_init_worker(worker); =20 - if (cpu >=3D 0) - node =3D cpu_to_node(cpu); - task =3D __kthread_create_on_node(kthread_worker_fn, worker, - node, namefmt, args); + node, namefmt, args); if (IS_ERR(task)) goto fail_task; =20 - if (cpu >=3D 0) - kthread_bind(task, cpu); - worker->flags =3D flags; worker->task =3D task; - wake_up_process(task); + return worker; =20 fail_task: @@ -1020,6 +1013,7 @@ __kthread_create_worker(int cpu, unsigned int flags, /** * kthread_create_worker - create a kthread worker * @flags: flags modifying the default behavior of the worker + * @node: task structure for the thread is allocated on this node * @namefmt: printf-style name for the kthread worker (task). * * Returns a pointer to the allocated worker on success, ERR_PTR(-ENOMEM) @@ -1027,25 +1021,49 @@ __kthread_create_worker(int cpu, unsigned int flags, * when the caller was killed by a fatal signal. */ struct kthread_worker * -kthread_create_worker(unsigned int flags, const char namefmt[], ...) +kthread_create_worker_on_node(unsigned int flags, int node, const char nam= efmt[], ...) { struct kthread_worker *worker; va_list args; =20 va_start(args, namefmt); - worker =3D __kthread_create_worker(-1, flags, namefmt, args); + worker =3D __kthread_create_worker_on_node(flags, node, namefmt, args); va_end(args); =20 + if (worker) + wake_up_process(worker->task); + + return worker; +} +EXPORT_SYMBOL(kthread_create_worker_on_node); + +static __printf(3, 4) struct kthread_worker * +__kthread_create_worker_on_cpu(int cpu, unsigned int flags, + const char namefmt[], ...) +{ + struct kthread_worker *worker; + va_list args; + + va_start(args, namefmt); + worker =3D __kthread_create_worker_on_node(flags, cpu_to_node(cpu), + namefmt, args); + va_end(args); + + if (worker) { + kthread_bind(worker->task, cpu); + wake_up_process(worker->task); + } + return worker; } -EXPORT_SYMBOL(kthread_create_worker); =20 /** * kthread_create_worker_on_cpu - create a kthread worker and bind it * to a given CPU and the associated NUMA node. * @cpu: CPU number * @flags: flags modifying the default behavior of the worker - * @namefmt: printf-style name for the kthread worker (task). + * @namefmt: printf-style name for the thread. Format is restricted + * to "name.*%u". Code fills in cpu number. * * Use a valid CPU number if you want to bind the kthread worker * to the given CPU and the associated NUMA node. @@ -1077,16 +1095,9 @@ EXPORT_SYMBOL(kthread_create_worker); */ struct kthread_worker * kthread_create_worker_on_cpu(int cpu, unsigned int flags, - const char namefmt[], ...) + const char namefmt[]) { - struct kthread_worker *worker; - va_list args; - - va_start(args, namefmt); - worker =3D __kthread_create_worker(cpu, flags, namefmt, args); - va_end(args); - - return worker; + return __kthread_create_worker_on_cpu(cpu, flags, namefmt, cpu); } EXPORT_SYMBOL(kthread_create_worker_on_cpu); =20 --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9C12214D2BD; Fri, 26 Jul 2024 21:57:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031075; cv=none; b=Yo66nc/ajWjPjCa84P5YnzGmnD83tved560KHe0rGLgaoSffNWSWNxzMpomLsXuao5bP4Ba5+5n1BlN1HadB2/tIXPZs6vVkack+w8Zf4lP48pEWnroo0hKivDxYj60QqjpLDGSAoDhyxxrskkulTVLZORloW6fldpaEw19WSHo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031075; c=relaxed/simple; bh=HnXNUI/k/3S9rvSe78DiEiG0bgzV5gAA+FeaTo+qPDM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rT6HvYyOIjUH1q9znK640XDDouibDDtxslT6OqVscURYt+Vr93fHNzFCSdCOBDid41oA65CnWhk3990ZhiYGhWVoktfDkz0VSGtZ+8YsYfbTRzKmFlFf8q/Fp+2DIDQ5aFoa/lOMreT4z7V52vLBIid6TWdnex1OkwOnj80Bj68= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gp9NkUcy; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gp9NkUcy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A0375C4AF0A; Fri, 26 Jul 2024 21:57:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031075; bh=HnXNUI/k/3S9rvSe78DiEiG0bgzV5gAA+FeaTo+qPDM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gp9NkUcypPNM7V5p6QJ+roSHHENHbq9Qg3MY5OvwbONgaeua8cOBMpGMeEM3F8UQM e/WGlYRcpvHh3csmS6X4GAUe96Xoxn/JBHLFIfyOsji50MUe5EwCS0tMFn5964rrgY aR9zOK2wqzNyae+mzj1AeWcsyI/jP5QUXpOXhg8UNI/jIcNHCr7Xr5dj1BpXatb8NH aDSgKrJYgCg8eBjINCJkStCfZmngmOEL4PO1CAHVkuw6m5IhzW6gVKz8nYGeyg3ysz pzaK7SA276Ali6jNP48zk5DWlWTga2KZZ3vgYZuVyR0MGI1nNADjOAz1oCs9TXWTLO DPQoyUSpTu3Uw== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , "Paul E. McKenney" , Neeraj Upadhyay , Joel Fernandes , Boqun Feng , Zqiang , rcu@vger.kernel.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [RFC PATCH 19/20] treewide: Introduce kthread_run_worker[_on_cpu]() Date: Fri, 26 Jul 2024 23:56:55 +0200 Message-ID: <20240726215701.19459-20-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" kthread_create() creates a kthread without running it yet. kthread_run() creates a kthread and runs it. On the other hand, kthread_create_worker() creates a kthread worker and runs it. This difference in behaviours is confusing. Also there is no way to create a kthread worker and affine it using kthread_bind_mask() or kthread_affine_preferred() before starting it. Consolidate the behaviours and introduce kthread_run_worker[_on_cpu]() that behaves just like kthread_run(). kthread_create_worker[_on_cpu]() will now only create a kthread worker without starting it. Signed-off-by: Frederic Weisbecker --- arch/x86/kvm/i8254.c | 2 +- crypto/crypto_engine.c | 2 +- drivers/cpufreq/cppc_cpufreq.c | 2 +- drivers/gpu/drm/drm_vblank_work.c | 2 +- .../drm/i915/gem/selftests/i915_gem_context.c | 2 +- drivers/gpu/drm/i915/gt/selftest_execlists.c | 2 +- drivers/gpu/drm/i915/gt/selftest_hangcheck.c | 2 +- drivers/gpu/drm/i915/gt/selftest_slpc.c | 2 +- drivers/gpu/drm/i915/selftests/i915_request.c | 8 ++-- drivers/gpu/drm/msm/disp/msm_disp_snapshot.c | 2 +- drivers/gpu/drm/msm/msm_atomic.c | 2 +- drivers/gpu/drm/msm/msm_gpu.c | 2 +- drivers/gpu/drm/msm/msm_kms.c | 2 +- .../platform/chips-media/wave5/wave5-vpu.c | 2 +- drivers/net/dsa/mv88e6xxx/chip.c | 2 +- drivers/net/ethernet/intel/ice/ice_dpll.c | 2 +- drivers/net/ethernet/intel/ice/ice_gnss.c | 2 +- drivers/net/ethernet/intel/ice/ice_ptp.c | 2 +- drivers/platform/chrome/cros_ec_spi.c | 2 +- drivers/ptp/ptp_clock.c | 2 +- drivers/spi/spi.c | 2 +- drivers/usb/typec/tcpm/tcpm.c | 2 +- drivers/vdpa/vdpa_sim/vdpa_sim.c | 2 +- drivers/watchdog/watchdog_dev.c | 2 +- fs/erofs/zdata.c | 2 +- include/linux/kthread.h | 48 ++++++++++++++++--- kernel/kthread.c | 31 +++--------- kernel/rcu/tree.c | 4 +- kernel/workqueue.c | 2 +- net/dsa/tag_ksz.c | 2 +- net/dsa/tag_ocelot_8021q.c | 2 +- net/dsa/tag_sja1105.c | 2 +- 32 files changed, 82 insertions(+), 65 deletions(-) diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c index cd57a517d04a..d7ab8780ab9e 100644 --- a/arch/x86/kvm/i8254.c +++ b/arch/x86/kvm/i8254.c @@ -681,7 +681,7 @@ struct kvm_pit *kvm_create_pit(struct kvm *kvm, u32 fla= gs) pid_nr =3D pid_vnr(pid); put_pid(pid); =20 - pit->worker =3D kthread_create_worker(0, "kvm-pit/%d", pid_nr); + pit->worker =3D kthread_run_worker(0, "kvm-pit/%d", pid_nr); if (IS_ERR(pit->worker)) goto fail_kthread; =20 diff --git a/crypto/crypto_engine.c b/crypto/crypto_engine.c index e60a0eb628e8..c7c16da5e649 100644 --- a/crypto/crypto_engine.c +++ b/crypto/crypto_engine.c @@ -517,7 +517,7 @@ struct crypto_engine *crypto_engine_alloc_init_and_set(= struct device *dev, crypto_init_queue(&engine->queue, qlen); spin_lock_init(&engine->queue_lock); =20 - engine->kworker =3D kthread_create_worker(0, "%s", engine->name); + engine->kworker =3D kthread_run_worker(0, "%s", engine->name); if (IS_ERR(engine->kworker)) { dev_err(dev, "failed to create crypto request pump task\n"); return NULL; diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c index 15f1d41920a3..09421424b4ec 100644 --- a/drivers/cpufreq/cppc_cpufreq.c +++ b/drivers/cpufreq/cppc_cpufreq.c @@ -241,7 +241,7 @@ static void __init cppc_freq_invariance_init(void) if (fie_disabled) return; =20 - kworker_fie =3D kthread_create_worker(0, "cppc_fie"); + kworker_fie =3D kthread_run_worker(0, "cppc_fie"); if (IS_ERR(kworker_fie)) { pr_warn("%s: failed to create kworker_fie: %ld\n", __func__, PTR_ERR(kworker_fie)); diff --git a/drivers/gpu/drm/drm_vblank_work.c b/drivers/gpu/drm/drm_vblank= _work.c index 4fe9b1d3b00f..02ff12744396 100644 --- a/drivers/gpu/drm/drm_vblank_work.c +++ b/drivers/gpu/drm/drm_vblank_work.c @@ -255,7 +255,7 @@ int drm_vblank_worker_init(struct drm_vblank_crtc *vbla= nk) =20 INIT_LIST_HEAD(&vblank->pending_work); init_waitqueue_head(&vblank->work_wait_queue); - worker =3D kthread_create_worker(0, "card%d-crtc%d", + worker =3D kthread_run_worker(0, "card%d-crtc%d", vblank->dev->primary->index, vblank->pipe); if (IS_ERR(worker)) diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/driver= s/gpu/drm/i915/gem/selftests/i915_gem_context.c index 89d4dc8b60c6..eb0158e43417 100644 --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c @@ -369,7 +369,7 @@ static int live_parallel_switch(void *arg) if (!data[n].ce[0]) continue; =20 - worker =3D kthread_create_worker(0, "igt/parallel:%s", + worker =3D kthread_run_worker(0, "igt/parallel:%s", data[n].ce[0]->engine->name); if (IS_ERR(worker)) { err =3D PTR_ERR(worker); diff --git a/drivers/gpu/drm/i915/gt/selftest_execlists.c b/drivers/gpu/drm= /i915/gt/selftest_execlists.c index 4202df5b8c12..7da05fd6807f 100644 --- a/drivers/gpu/drm/i915/gt/selftest_execlists.c +++ b/drivers/gpu/drm/i915/gt/selftest_execlists.c @@ -3574,7 +3574,7 @@ static int smoke_crescendo(struct preempt_smoke *smok= e, unsigned int flags) arg[id].batch =3D NULL; arg[id].count =3D 0; =20 - worker[id] =3D kthread_create_worker(0, "igt/smoke:%d", id); + worker[id] =3D kthread_run_worker(0, "igt/smoke:%d", id); if (IS_ERR(worker[id])) { err =3D PTR_ERR(worker[id]); break; diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm= /i915/gt/selftest_hangcheck.c index 9ce8ff1c04fe..9d3aeb237295 100644 --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c @@ -1025,7 +1025,7 @@ static int __igt_reset_engines(struct intel_gt *gt, threads[tmp].engine =3D other; threads[tmp].flags =3D flags; =20 - worker =3D kthread_create_worker(0, "igt/%s", + worker =3D kthread_run_worker(0, "igt/%s", other->name); if (IS_ERR(worker)) { err =3D PTR_ERR(worker); diff --git a/drivers/gpu/drm/i915/gt/selftest_slpc.c b/drivers/gpu/drm/i915= /gt/selftest_slpc.c index 4ecc4ae74a54..e218b229681f 100644 --- a/drivers/gpu/drm/i915/gt/selftest_slpc.c +++ b/drivers/gpu/drm/i915/gt/selftest_slpc.c @@ -489,7 +489,7 @@ static int live_slpc_tile_interaction(void *arg) return -ENOMEM; =20 for_each_gt(gt, i915, i) { - threads[i].worker =3D kthread_create_worker(0, "igt/slpc_parallel:%d", g= t->info.id); + threads[i].worker =3D kthread_run_worker(0, "igt/slpc_parallel:%d", gt->= info.id); =20 if (IS_ERR(threads[i].worker)) { ret =3D PTR_ERR(threads[i].worker); diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/dr= m/i915/selftests/i915_request.c index acae30a04a94..88870844b5bd 100644 --- a/drivers/gpu/drm/i915/selftests/i915_request.c +++ b/drivers/gpu/drm/i915/selftests/i915_request.c @@ -492,7 +492,7 @@ static int mock_breadcrumbs_smoketest(void *arg) for (n =3D 0; n < ncpus; n++) { struct kthread_worker *worker; =20 - worker =3D kthread_create_worker(0, "igt/%d", n); + worker =3D kthread_run_worker(0, "igt/%d", n); if (IS_ERR(worker)) { ret =3D PTR_ERR(worker); ncpus =3D n; @@ -1645,7 +1645,7 @@ static int live_parallel_engines(void *arg) for_each_uabi_engine(engine, i915) { struct kthread_worker *worker; =20 - worker =3D kthread_create_worker(0, "igt/parallel:%s", + worker =3D kthread_run_worker(0, "igt/parallel:%s", engine->name); if (IS_ERR(worker)) { err =3D PTR_ERR(worker); @@ -1806,7 +1806,7 @@ static int live_breadcrumbs_smoketest(void *arg) unsigned int i =3D idx * ncpus + n; struct kthread_worker *worker; =20 - worker =3D kthread_create_worker(0, "igt/%d.%d", idx, n); + worker =3D kthread_run_worker(0, "igt/%d.%d", idx, n); if (IS_ERR(worker)) { ret =3D PTR_ERR(worker); goto out_flush; @@ -3219,7 +3219,7 @@ static int perf_parallel_engines(void *arg) =20 memset(&engines[idx].p, 0, sizeof(engines[idx].p)); =20 - worker =3D kthread_create_worker(0, "igt:%s", + worker =3D kthread_run_worker(0, "igt:%s", engine->name); if (IS_ERR(worker)) { err =3D PTR_ERR(worker); diff --git a/drivers/gpu/drm/msm/disp/msm_disp_snapshot.c b/drivers/gpu/drm= /msm/disp/msm_disp_snapshot.c index e75b97127c0d..2be00b11e557 100644 --- a/drivers/gpu/drm/msm/disp/msm_disp_snapshot.c +++ b/drivers/gpu/drm/msm/disp/msm_disp_snapshot.c @@ -109,7 +109,7 @@ int msm_disp_snapshot_init(struct drm_device *drm_dev) =20 mutex_init(&kms->dump_mutex); =20 - kms->dump_worker =3D kthread_create_worker(0, "%s", "disp_snapshot"); + kms->dump_worker =3D kthread_run_worker(0, "%s", "disp_snapshot"); if (IS_ERR(kms->dump_worker)) DRM_ERROR("failed to create disp state task\n"); =20 diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_ato= mic.c index 9c45d641b521..a7a2384044ff 100644 --- a/drivers/gpu/drm/msm/msm_atomic.c +++ b/drivers/gpu/drm/msm/msm_atomic.c @@ -115,7 +115,7 @@ int msm_atomic_init_pending_timer(struct msm_pending_ti= mer *timer, timer->kms =3D kms; timer->crtc_idx =3D crtc_idx; =20 - timer->worker =3D kthread_create_worker(0, "atomic-worker-%d", crtc_idx); + timer->worker =3D kthread_run_worker(0, "atomic-worker-%d", crtc_idx); if (IS_ERR(timer->worker)) { int ret =3D PTR_ERR(timer->worker); timer->worker =3D NULL; diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index cd185b9636d2..5ce4f76ada53 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -857,7 +857,7 @@ int msm_gpu_init(struct drm_device *drm, struct platfor= m_device *pdev, gpu->funcs =3D funcs; gpu->name =3D name; =20 - gpu->worker =3D kthread_create_worker(0, "gpu-worker"); + gpu->worker =3D kthread_run_worker(0, "gpu-worker"); if (IS_ERR(gpu->worker)) { ret =3D PTR_ERR(gpu->worker); gpu->worker =3D NULL; diff --git a/drivers/gpu/drm/msm/msm_kms.c b/drivers/gpu/drm/msm/msm_kms.c index af6a6fcb1173..8db9f3afb8ac 100644 --- a/drivers/gpu/drm/msm/msm_kms.c +++ b/drivers/gpu/drm/msm/msm_kms.c @@ -269,7 +269,7 @@ int msm_drm_kms_init(struct device *dev, const struct d= rm_driver *drv) /* initialize event thread */ ev_thread =3D &priv->event_thread[drm_crtc_index(crtc)]; ev_thread->dev =3D ddev; - ev_thread->worker =3D kthread_create_worker(0, "crtc_event:%d", crtc->ba= se.id); + ev_thread->worker =3D kthread_run_worker(0, "crtc_event:%d", crtc->base.= id); if (IS_ERR(ev_thread->worker)) { ret =3D PTR_ERR(ev_thread->worker); DRM_DEV_ERROR(dev, "failed to create crtc_event kthread\n"); diff --git a/drivers/media/platform/chips-media/wave5/wave5-vpu.c b/drivers= /media/platform/chips-media/wave5/wave5-vpu.c index 68a519ac412d..0530954563c5 100644 --- a/drivers/media/platform/chips-media/wave5/wave5-vpu.c +++ b/drivers/media/platform/chips-media/wave5/wave5-vpu.c @@ -218,7 +218,7 @@ static int wave5_vpu_probe(struct platform_device *pdev) dev_err(&pdev->dev, "failed to get irq resource, falling back to polling= \n"); hrtimer_init(&dev->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_PINNED); dev->hrtimer.function =3D &wave5_vpu_timer_callback; - dev->worker =3D kthread_create_worker(0, "vpu_irq_thread"); + dev->worker =3D kthread_run_worker(0, "vpu_irq_thread"); if (IS_ERR(dev->worker)) { dev_err(&pdev->dev, "failed to create vpu irq worker\n"); ret =3D PTR_ERR(dev->worker); diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/c= hip.c index 07c897b13de1..9df4d113af35 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -393,7 +393,7 @@ static int mv88e6xxx_irq_poll_setup(struct mv88e6xxx_ch= ip *chip) kthread_init_delayed_work(&chip->irq_poll_work, mv88e6xxx_irq_poll); =20 - chip->kworker =3D kthread_create_worker(0, "%s", dev_name(chip->dev)); + chip->kworker =3D kthread_run_worker(0, "%s", dev_name(chip->dev)); if (IS_ERR(chip->kworker)) return PTR_ERR(chip->kworker); =20 diff --git a/drivers/net/ethernet/intel/ice/ice_dpll.c b/drivers/net/ethern= et/intel/ice/ice_dpll.c index e92be6f130a3..f065a1dc0414 100644 --- a/drivers/net/ethernet/intel/ice/ice_dpll.c +++ b/drivers/net/ethernet/intel/ice/ice_dpll.c @@ -1833,7 +1833,7 @@ static int ice_dpll_init_worker(struct ice_pf *pf) struct kthread_worker *kworker; =20 kthread_init_delayed_work(&d->work, ice_dpll_periodic_work); - kworker =3D kthread_create_worker(0, "ice-dplls-%s", + kworker =3D kthread_run_worker(0, "ice-dplls-%s", dev_name(ice_pf_to_dev(pf))); if (IS_ERR(kworker)) return PTR_ERR(kworker); diff --git a/drivers/net/ethernet/intel/ice/ice_gnss.c b/drivers/net/ethern= et/intel/ice/ice_gnss.c index c8ea1af51ad3..fcd1f808b696 100644 --- a/drivers/net/ethernet/intel/ice/ice_gnss.c +++ b/drivers/net/ethernet/intel/ice/ice_gnss.c @@ -182,7 +182,7 @@ static struct gnss_serial *ice_gnss_struct_init(struct = ice_pf *pf) pf->gnss_serial =3D gnss; =20 kthread_init_delayed_work(&gnss->read_work, ice_gnss_read); - kworker =3D kthread_create_worker(0, "ice-gnss-%s", dev_name(dev)); + kworker =3D kthread_run_worker(0, "ice-gnss-%s", dev_name(dev)); if (IS_ERR(kworker)) { kfree(gnss); return NULL; diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/etherne= t/intel/ice/ice_ptp.c index fefaf52fd677..d6663876c721 100644 --- a/drivers/net/ethernet/intel/ice/ice_ptp.c +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c @@ -3121,7 +3121,7 @@ static int ice_ptp_init_work(struct ice_pf *pf, struc= t ice_ptp *ptp) /* Allocate a kworker for handling work required for the ports * connected to the PTP hardware clock. */ - kworker =3D kthread_create_worker(0, "ice-ptp-%s", + kworker =3D kthread_run_worker(0, "ice-ptp-%s", dev_name(ice_pf_to_dev(pf))); if (IS_ERR(kworker)) return PTR_ERR(kworker); diff --git a/drivers/platform/chrome/cros_ec_spi.c b/drivers/platform/chrom= e/cros_ec_spi.c index 86a3d32a7763..08f566cc1480 100644 --- a/drivers/platform/chrome/cros_ec_spi.c +++ b/drivers/platform/chrome/cros_ec_spi.c @@ -715,7 +715,7 @@ static int cros_ec_spi_devm_high_pri_alloc(struct devic= e *dev, int err; =20 ec_spi->high_pri_worker =3D - kthread_create_worker(0, "cros_ec_spi_high_pri"); + kthread_run_worker(0, "cros_ec_spi_high_pri"); =20 if (IS_ERR(ec_spi->high_pri_worker)) { err =3D PTR_ERR(ec_spi->high_pri_worker); diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c index c56cd0f63909..89a4420972e7 100644 --- a/drivers/ptp/ptp_clock.c +++ b/drivers/ptp/ptp_clock.c @@ -295,7 +295,7 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_i= nfo *info, =20 if (ptp->info->do_aux_work) { kthread_init_delayed_work(&ptp->aux_work, ptp_aux_kworker); - ptp->kworker =3D kthread_create_worker(0, "ptp%d", ptp->index); + ptp->kworker =3D kthread_run_worker(0, "ptp%d", ptp->index); if (IS_ERR(ptp->kworker)) { err =3D PTR_ERR(ptp->kworker); pr_err("failed to create ptp aux_worker %d\n", err); diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index fc13fa192189..0a4b9b634631 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -2072,7 +2072,7 @@ static int spi_init_queue(struct spi_controller *ctlr) ctlr->busy =3D false; ctlr->queue_empty =3D true; =20 - ctlr->kworker =3D kthread_create_worker(0, dev_name(&ctlr->dev)); + ctlr->kworker =3D kthread_run_worker(0, dev_name(&ctlr->dev)); if (IS_ERR(ctlr->kworker)) { dev_err(&ctlr->dev, "failed to create message pump kworker\n"); return PTR_ERR(ctlr->kworker); diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index 5d4da962acc8..81ca212ed495 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -7558,7 +7558,7 @@ struct tcpm_port *tcpm_register_port(struct device *d= ev, struct tcpc_dev *tcpc) mutex_init(&port->lock); mutex_init(&port->swap_lock); =20 - port->wq =3D kthread_create_worker(0, dev_name(dev)); + port->wq =3D kthread_run_worker(0, dev_name(dev)); if (IS_ERR(port->wq)) return ERR_CAST(port->wq); sched_set_fifo(port->wq->task); diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_= sim.c index 8ffea8430f95..c204fc8e471a 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c @@ -229,7 +229,7 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr = *dev_attr, dev =3D &vdpasim->vdpa.dev; =20 kthread_init_work(&vdpasim->work, vdpasim_work_fn); - vdpasim->worker =3D kthread_create_worker(0, "vDPA sim worker: %s", + vdpasim->worker =3D kthread_run_worker(0, "vDPA sim worker: %s", dev_attr->name); if (IS_ERR(vdpasim->worker)) goto err_iommu; diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_de= v.c index e2bd266b1b5b..ed4566997459 100644 --- a/drivers/watchdog/watchdog_dev.c +++ b/drivers/watchdog/watchdog_dev.c @@ -1229,7 +1229,7 @@ int __init watchdog_dev_init(void) { int err; =20 - watchdog_kworker =3D kthread_create_worker(0, "watchdogd"); + watchdog_kworker =3D kthread_run_worker(0, "watchdogd"); if (IS_ERR(watchdog_kworker)) { pr_err("Failed to create watchdog kworker\n"); return PTR_ERR(watchdog_kworker); diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c index f1ccdf47585b..cf108812c284 100644 --- a/fs/erofs/zdata.c +++ b/fs/erofs/zdata.c @@ -356,7 +356,7 @@ static void erofs_destroy_percpu_workers(void) static struct kthread_worker *erofs_init_percpu_worker(int cpu) { struct kthread_worker *worker =3D - kthread_create_worker_on_cpu(cpu, 0, "erofs_worker/%u"); + kthread_run_worker_on_cpu(cpu, 0, "erofs_worker/%u"); =20 if (IS_ERR(worker)) return worker; diff --git a/include/linux/kthread.h b/include/linux/kthread.h index 0c66e7c1092a..8d27403888ce 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h @@ -193,19 +193,53 @@ struct kthread_worker *kthread_create_worker_on_node(= unsigned int flags, const char namefmt[], ...); =20 #define kthread_create_worker(flags, namefmt, ...) \ -({ \ - struct kthread_worker *__kw \ - =3D kthread_create_worker_on_node(flags, NUMA_NO_NODE, \ - namefmt, ## __VA_ARGS__); \ - if (!IS_ERR(__kw)) \ - wake_up_process(__kw->task); \ - __kw; \ + kthread_create_worker_on_node(flags, NUMA_NO_NODE, namefmt, ## __VA_ARGS_= _); + +/** + * kthread_run_worker - create and wake a kthread worker. + * @flags: flags modifying the default behavior of the worker + * @namefmt: printf-style name for the thread. + * + * Description: Convenient wrapper for kthread_create_worker() followed by + * wake_up_process(). Returns the kthread_worker or ERR_PTR(-ENOMEM). + */ +#define kthread_run_worker(flags, namefmt, ...) \ +({ \ + struct kthread_worker *__kw \ + =3D kthread_create_worker(flags, namefmt, ## __VA_ARGS__); \ + if (!IS_ERR(__kw)) \ + wake_up_process(__kw->task); \ + __kw; \ }) =20 struct kthread_worker * kthread_create_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[]); =20 +/** + * kthread_run_worker_on_cpu - create and wake a cpu bound kthread worker. + * @cpu: CPU number + * @flags: flags modifying the default behavior of the worker + * @namefmt: printf-style name for the thread. Format is restricted + * to "name.*%u". Code fills in cpu number. + * + * Description: Convenient wrapper for kthread_create_worker_on_cpu() + * followed by wake_up_process(). Returns the kthread_worker or + * ERR_PTR(-ENOMEM). + */ +static inline struct kthread_worker * +kthread_run_worker_on_cpu(int cpu, unsigned int flags, + const char namefmt[]) +{ + struct kthread_worker *kw; + + kw =3D kthread_create_worker_on_cpu(cpu, flags, namefmt); + if (!IS_ERR(kw)) + wake_up_process(kw->task); + + return kw; +} + bool kthread_queue_work(struct kthread_worker *worker, struct kthread_work *work); =20 diff --git a/kernel/kthread.c b/kernel/kthread.c index 34b11dbfc756..379ebe7a217d 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -1030,33 +1030,10 @@ kthread_create_worker_on_node(unsigned int flags, i= nt node, const char namefmt[] worker =3D __kthread_create_worker_on_node(flags, node, namefmt, args); va_end(args); =20 - if (worker) - wake_up_process(worker->task); - return worker; } EXPORT_SYMBOL(kthread_create_worker_on_node); =20 -static __printf(3, 4) struct kthread_worker * -__kthread_create_worker_on_cpu(int cpu, unsigned int flags, - const char namefmt[], ...) -{ - struct kthread_worker *worker; - va_list args; - - va_start(args, namefmt); - worker =3D __kthread_create_worker_on_node(flags, cpu_to_node(cpu), - namefmt, args); - va_end(args); - - if (worker) { - kthread_bind(worker->task, cpu); - wake_up_process(worker->task); - } - - return worker; -} - /** * kthread_create_worker_on_cpu - create a kthread worker and bind it * to a given CPU and the associated NUMA node. @@ -1097,7 +1074,13 @@ struct kthread_worker * kthread_create_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[]) { - return __kthread_create_worker_on_cpu(cpu, flags, namefmt, cpu); + struct kthread_worker *worker; + + worker =3D kthread_create_worker_on_node(flags, cpu_to_node(cpu), namefmt= , cpu); + if (worker) + kthread_bind(worker->task, cpu); + + return worker; } EXPORT_SYMBOL(kthread_create_worker_on_cpu); =20 diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 6ff87a3e000b..e038f4abb872 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -4789,7 +4789,7 @@ static void rcu_spawn_exp_par_gp_kworker(struct rcu_n= ode *rnp) if (rnp->exp_kworker) return; =20 - kworker =3D kthread_create_worker(0, name, rnp_index); + kworker =3D kthread_run_worker(0, name, rnp_index); if (IS_ERR_OR_NULL(kworker)) { pr_err("Failed to create par gp kworker on %d/%d\n", rnp->grplo, rnp->grphi); @@ -4816,7 +4816,7 @@ static void __init rcu_start_exp_gp_kworker(void) const char *name =3D "rcu_exp_gp_kthread_worker"; struct sched_param param =3D { .sched_priority =3D kthread_prio }; =20 - rcu_exp_gp_kworker =3D kthread_create_worker(0, name); + rcu_exp_gp_kworker =3D kthread_run_worker(0, name); if (IS_ERR_OR_NULL(rcu_exp_gp_kworker)) { pr_err("Failed to create %s!\n", name); rcu_exp_gp_kworker =3D NULL; diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 3fbaecfc88c2..79229136c2b2 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -7789,7 +7789,7 @@ static void __init wq_cpu_intensive_thresh_init(void) unsigned long thresh; unsigned long bogo; =20 - pwq_release_worker =3D kthread_create_worker(0, "pool_workqueue_release"); + pwq_release_worker =3D kthread_run_worker(0, "pool_workqueue_release"); BUG_ON(IS_ERR(pwq_release_worker)); =20 /* if the user set it to a specific value, keep it */ diff --git a/net/dsa/tag_ksz.c b/net/dsa/tag_ksz.c index ee7b272ab715..f21f2711921f 100644 --- a/net/dsa/tag_ksz.c +++ b/net/dsa/tag_ksz.c @@ -66,7 +66,7 @@ static int ksz_connect(struct dsa_switch *ds) if (!priv) return -ENOMEM; =20 - xmit_worker =3D kthread_create_worker(0, "dsa%d:%d_xmit", + xmit_worker =3D kthread_run_worker(0, "dsa%d:%d_xmit", ds->dst->index, ds->index); if (IS_ERR(xmit_worker)) { ret =3D PTR_ERR(xmit_worker); diff --git a/net/dsa/tag_ocelot_8021q.c b/net/dsa/tag_ocelot_8021q.c index b059381310fe..8953add48d33 100644 --- a/net/dsa/tag_ocelot_8021q.c +++ b/net/dsa/tag_ocelot_8021q.c @@ -110,7 +110,7 @@ static int ocelot_connect(struct dsa_switch *ds) if (!priv) return -ENOMEM; =20 - priv->xmit_worker =3D kthread_create_worker(0, "felix_xmit"); + priv->xmit_worker =3D kthread_run_worker(0, "felix_xmit"); if (IS_ERR(priv->xmit_worker)) { err =3D PTR_ERR(priv->xmit_worker); kfree(priv); diff --git a/net/dsa/tag_sja1105.c b/net/dsa/tag_sja1105.c index 1aba1d05c27a..d3d7b119babc 100644 --- a/net/dsa/tag_sja1105.c +++ b/net/dsa/tag_sja1105.c @@ -755,7 +755,7 @@ static int sja1105_connect(struct dsa_switch *ds) =20 spin_lock_init(&priv->meta_lock); =20 - xmit_worker =3D kthread_create_worker(0, "dsa%d:%d_xmit", + xmit_worker =3D kthread_run_worker(0, "dsa%d:%d_xmit", ds->dst->index, ds->index); if (IS_ERR(xmit_worker)) { err =3D PTR_ERR(xmit_worker); --=20 2.45.2 From nobody Mon Sep 16 19:06:30 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B95E1534EC; Fri, 26 Jul 2024 21:57:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031078; cv=none; b=ZUqU9yl/z/HKKXTVIVPdZ6qDbeJJnB04PVh1qHpFPm2glRo3j1CbHCqZy6iB7JfR1/PfR2gDUSIdlJNCfwJXxGKSa9UrPx0xJDgEjtuLPF4IIttizSbOSDh9n3oy/BwjnzC7jolXROvG8XU5CGDMEs50UcHEXlE1fP3HTcJ4+a8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722031078; c=relaxed/simple; bh=Yz6bJUlYF+iMHAiEYs34cVgoTt8huaFYwVmLFroPfBE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g2EI3H7nGDSeo/3ng3NHpCd6bJmLa5CpBapHHaEvH3wSJn1jxoD8ELgOTgKtTbfpggDRXXkDVXZvcS/RP9MYmUhr0NJ5Uc6HVimB/X3L2sKd3nzf9pRW/Zebu2VzGFjgRFjaIWWsK9tboW1XAqkMvhO4Fz0txZAYTLyII3OrFpE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FSXgr8gw; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="FSXgr8gw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 92415C4AF0B; Fri, 26 Jul 2024 21:57:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722031078; bh=Yz6bJUlYF+iMHAiEYs34cVgoTt8huaFYwVmLFroPfBE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FSXgr8gw6zdBoVhwLdneQntEUu+abZ/Ach0L65MTN35uk9wogOwhZRMYHMrrSycTe 8bReYUBFBSCMGDCLGsJC3msiEp1UPf3bZyTCXOdn8LewsSAVlW10jJGMoXf2MSFyjd ooyyzp2RbVRoCsIV8aioV2Y6Clqu3KYfkw/VLLSRND9qUsKV67KNsD/cnRSBUd2eNH sOcjXGTvGjvScLH8fRZ5kkorPEcw5EIDkHQOJ44QRciDWxf7N/BTSwMijjpFEzKTmL HXVRWEvtGYwvqZ8Q4oxxOm+5m0/7w6rbNJMejSNP9FruDG91/dwpGj6DqKPsH6k3Yi H447CgOiKGM3g== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , "Paul E. McKenney" , Neeraj Upadhyay , Joel Fernandes , Boqun Feng , Zqiang , rcu@vger.kernel.org, Andrew Morton , Peter Zijlstra , Thomas Gleixner Subject: [RFC PATCH 20/20] rcu: Use kthread preferred affinity for RCU exp kworkers Date: Fri, 26 Jul 2024 23:56:56 +0200 Message-ID: <20240726215701.19459-21-frederic@kernel.org> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240726215701.19459-1-frederic@kernel.org> References: <20240726215701.19459-1-frederic@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that kthreads have an infrastructure to handle preferred affinity against CPU hotplug and housekeeping cpumask, convert RCU exp workers to use it instead of handling all the constraints by itself. Signed-off-by: Frederic Weisbecker Acked-by: Paul E. McKenney --- kernel/rcu/tree.c | 105 +++++++++------------------------------------- 1 file changed, 19 insertions(+), 86 deletions(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index e038f4abb872..f3e40a1dea65 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -4777,6 +4777,22 @@ rcu_boot_init_percpu_data(int cpu) rcu_boot_init_nocb_percpu_data(rdp); } =20 +static void rcu_thread_affine_rnp(struct task_struct *t, struct rcu_node *= rnp) +{ + cpumask_var_t affinity; + int cpu; + + if (!zalloc_cpumask_var(&affinity, GFP_KERNEL)) + return; + + for_each_leaf_node_possible_cpu(rnp, cpu) + cpumask_set_cpu(cpu, affinity); + + kthread_affine_preferred(t, affinity); + + free_cpumask_var(affinity); +} + struct kthread_worker *rcu_exp_gp_kworker; =20 static void rcu_spawn_exp_par_gp_kworker(struct rcu_node *rnp) @@ -4789,7 +4805,7 @@ static void rcu_spawn_exp_par_gp_kworker(struct rcu_n= ode *rnp) if (rnp->exp_kworker) return; =20 - kworker =3D kthread_run_worker(0, name, rnp_index); + kworker =3D kthread_create_worker(0, name, rnp_index); if (IS_ERR_OR_NULL(kworker)) { pr_err("Failed to create par gp kworker on %d/%d\n", rnp->grplo, rnp->grphi); @@ -4799,16 +4815,9 @@ static void rcu_spawn_exp_par_gp_kworker(struct rcu_= node *rnp) =20 if (IS_ENABLED(CONFIG_RCU_EXP_KTHREAD)) sched_setscheduler_nocheck(kworker->task, SCHED_FIFO, ¶m); -} =20 -static struct task_struct *rcu_exp_par_gp_task(struct rcu_node *rnp) -{ - struct kthread_worker *kworker =3D READ_ONCE(rnp->exp_kworker); - - if (!kworker) - return NULL; - - return kworker->task; + rcu_thread_affine_rnp(kworker->task, rnp); + wake_up_process(kworker->task); } =20 static void __init rcu_start_exp_gp_kworker(void) @@ -4893,79 +4902,6 @@ int rcutree_prepare_cpu(unsigned int cpu) return 0; } =20 -static void rcu_thread_affine_rnp(struct task_struct *t, struct rcu_node *= rnp) -{ - cpumask_var_t affinity; - int cpu; - - if (!zalloc_cpumask_var(&affinity, GFP_KERNEL)) - return; - - for_each_leaf_node_possible_cpu(rnp, cpu) - cpumask_set_cpu(cpu, affinity); - - kthread_affine_preferred(t, affinity); - - free_cpumask_var(affinity); -} - -/* - * Update kthreads affinity during CPU-hotplug changes. - * - * Set the per-rcu_node kthread's affinity to cover all CPUs that are - * served by the rcu_node in question. The CPU hotplug lock is still - * held, so the value of rnp->qsmaskinit will be stable. - * - * We don't include outgoingcpu in the affinity set, use -1 if there is - * no outgoing CPU. If there are no CPUs left in the affinity set, - * this function allows the kthread to execute on any CPU. - * - * Any future concurrent calls are serialized via ->kthread_mutex. - */ -static void rcutree_affinity_setting(unsigned int cpu, int outgoingcpu) -{ - cpumask_var_t cm; - unsigned long mask; - struct rcu_data *rdp; - struct rcu_node *rnp; - struct task_struct *task_exp; - - rdp =3D per_cpu_ptr(&rcu_data, cpu); - rnp =3D rdp->mynode; - - task_exp =3D rcu_exp_par_gp_task(rnp); - - /* - * If CPU is the boot one, this task is created later from early - * initcall since kthreadd must be created first. - */ - if (!task_exp) - return; - - if (!zalloc_cpumask_var(&cm, GFP_KERNEL)) - return; - - mutex_lock(&rnp->kthread_mutex); - mask =3D rcu_rnp_online_cpus(rnp); - for_each_leaf_node_possible_cpu(rnp, cpu) - if ((mask & leaf_node_cpu_bit(rnp, cpu)) && - cpu !=3D outgoingcpu) - cpumask_set_cpu(cpu, cm); - cpumask_and(cm, cm, housekeeping_cpumask(HK_TYPE_RCU)); - if (cpumask_empty(cm)) { - cpumask_copy(cm, housekeeping_cpumask(HK_TYPE_RCU)); - if (outgoingcpu >=3D 0) - cpumask_clear_cpu(outgoingcpu, cm); - } - - if (task_exp) - set_cpus_allowed_ptr(task_exp, cm); - - mutex_unlock(&rnp->kthread_mutex); - - free_cpumask_var(cm); -} - /* * Has the specified (known valid) CPU ever been fully online? */ @@ -4994,7 +4930,6 @@ int rcutree_online_cpu(unsigned int cpu) if (rcu_scheduler_active =3D=3D RCU_SCHEDULER_INACTIVE) return 0; /* Too early in boot for scheduler work. */ sync_sched_exp_online_cleanup(cpu); - rcutree_affinity_setting(cpu, -1); =20 // Stop-machine done, so allow nohz_full to disable tick. tick_dep_clear(TICK_DEP_BIT_RCU); @@ -5207,8 +5142,6 @@ int rcutree_offline_cpu(unsigned int cpu) rnp->ffmask &=3D ~rdp->grpmask; raw_spin_unlock_irqrestore_rcu_node(rnp, flags); =20 - rcutree_affinity_setting(cpu, cpu); - // nohz_full CPUs need the tick for stop-machine to work quickly tick_dep_set(TICK_DEP_BIT_RCU); return 0; --=20 2.45.2