From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 077F6C19F2A for ; Thu, 4 Aug 2022 12:35:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5D4BB8E0002; Thu, 4 Aug 2022 08:35:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 584588E0001; Thu, 4 Aug 2022 08:35:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 473E08E0002; Thu, 4 Aug 2022 08:35:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 352F78E0001 for ; Thu, 4 Aug 2022 08:35:40 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id EAC0D1203EC for ; Thu, 4 Aug 2022 12:35:39 +0000 (UTC) X-FDA: 79761856398.15.3E3146A Received: from r3-11.sinamail.sina.com.cn (r3-11.sinamail.sina.com.cn [202.108.3.11]) by imf22.hostedemail.com (Postfix) with SMTP id B646BC004B for ; Thu, 4 Aug 2022 12:35:34 +0000 (UTC) Received: from unknown (HELO localhost.localdomain)([114.249.59.48]) by sina.com (172.16.97.27) with ESMTP id 62EBBD0000013777; Thu, 4 Aug 2022 20:35:13 +0800 (CST) X-Sender: hdanton@sina.com X-Auth-ID: hdanton@sina.com X-SMAIL-MID: 0192349283986 From: Hillf Danton To: Lai Jiangshan Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, Petr Mladek , Peter Zijlstra Subject: [RFC PATCH 2/8] workqueue: Make create_worker() safe against prematurely wakeups Date: Thu, 4 Aug 2022 20:35:20 +0800 Message-Id: <20220804123520.1660-1-hdanton@sina.com> In-Reply-To: <20220804084135.92425-3-jiangshanlai@gmail.com> References: <20220804084135.92425-1-jiangshanlai@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1659616539; a=rsa-sha256; cv=none; b=w7rUQgnrZ9k0SHGYtQdlU7QVsNVQ3rzj3cSo5RArFSaNsKFMjktA2UmIhNrpr8bq51bbnb Bgrd8gFqRrU8/MMG9TS2Z9NWPftVmy/z5sc5HXvxRkc69s/3K+p+m3xGbIwzXFg8l6E3Hx zcyTp/T5vDOlBI+uijTXU6jEoX6sjxI= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf22.hostedemail.com: domain of hdanton@sina.com designates 202.108.3.11 as permitted sender) smtp.mailfrom=hdanton@sina.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1659616539; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wQI0V5s2+dLr1looNyKH4X+GCT94KuKFaIjccn0La48=; b=nvmIg0lCEfM6UgCKS4i+yF+zxuap9cIlJYEJm4C5kx/qDevex/AdDgIDpzbwnF70seHlYx N1TB65A87esicarxpcLzu94eN43DQzOGp9sqvcNxdnmLMrtkb17pdsOAHMfEawMrGcY+Ao e9kAJQ3taSCAW4wyzu0Y+DnM2Zw/14Q= X-Rspam-User: X-Stat-Signature: 6rhehx15cx4i57qw1wdxbm88368dfn15 X-Rspamd-Queue-Id: B646BC004B Authentication-Results: imf22.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf22.hostedemail.com: domain of hdanton@sina.com designates 202.108.3.11 as permitted sender) smtp.mailfrom=hdanton@sina.com X-Rspamd-Server: rspam02 X-HE-Tag: 1659616534-970680 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000049, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Thu, 4 Aug 2022 16:41:29 +0800 Lai Jiangshan wrote: > > @@ -1942,6 +1943,7 @@ static struct worker *create_worker(struct worker_pool *pool) > goto fail; > > worker->id = id; > + worker->pool = pool; > > if (pool->cpu >= 0) > snprintf(id_buf, sizeof(id_buf), "%d:%d%s", pool->cpu, id, > @@ -1949,6 +1951,7 @@ static struct worker *create_worker(struct worker_pool *pool) > else > snprintf(id_buf, sizeof(id_buf), "u%d:%d", pool->id, id); > > + reinit_completion(&pool->created); > worker->task = kthread_create_on_node(worker_thread, worker, pool->node, > "kworker/%s", id_buf); > if (IS_ERR(worker->task)) > @@ -1957,15 +1960,9 @@ static struct worker *create_worker(struct worker_pool *pool) > set_user_nice(worker->task, pool->attrs->nice); > kthread_bind_mask(worker->task, pool->attrs->cpumask); > > - /* successful, attach the worker to the pool */ > - worker_attach_to_pool(worker, pool); > - > /* start the newly created worker */ > - raw_spin_lock_irq(&pool->lock); > - worker->pool->nr_workers++; > - worker_enter_idle(worker); > wake_up_process(worker->task); > - raw_spin_unlock_irq(&pool->lock); > + wait_for_completion(&pool->created); > > return worker; cpu0 cpu1 cpu2 === === === complete reinit_completion wait_for_completion Any chance for race above?