Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp4459721ybi; Fri, 19 Jul 2019 23:23:09 -0700 (PDT) X-Google-Smtp-Source: APXvYqzcvVJyMoB6JNLJJMOxUfMhC6l0kPG/fWZ5HPgDJTjkEMc+d1T8IeC4BQtR+Ei6PHfRnMMi X-Received: by 2002:a17:902:4201:: with SMTP id g1mr61589451pld.300.1563603789838; Fri, 19 Jul 2019 23:23:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563603789; cv=none; d=google.com; s=arc-20160816; b=kcwzYLPKOjt0RhR8Sodr3AhZ+8V3o4ez2JrWCtoZ7FyN73N+hW+DKuBREs8EbdA+TL cadU4iKokhzuu/CxmBnuUSmDX7KHj55FsakymdhlXb7AmVGSNv7ZPqSw8G2Ak1UsLsfO uermbaxFMhKMUZQG/Gcnapz76NLwnC4vpJO/g/oWVO4kR4nYMIlyzrigv/zXTo2CfcPr lQMYR75FTcQajTaLnOxaZkToF47j4l42FhfTe5EQIZxRnYxywJGyFmdMik0n6dtK5OYL LYNFvfY05MFk3rOUk+hA6iPFhSW1XKf3UQ6MTKlPrLeh3bFu1gTqYR0CCUNDiwn+s1wF JeMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:subject:cc:to :from:date:user-agent:message-id; bh=DmtNIr5wdtA7+DNArOJNHA6vBbUbDfDYeG5coJCOKto=; b=pZ/flvol/g/krtv4euVylpEESY0PcCA44EiW+/O26M3687WcS7rl7OAktip32Wg304 pO/r3wctWnC0696ppEGA18pJ1tzgZnRDa8tA5vuLcCD8Cxgb3LIY4yOUhnyWR7Odn7Tm ZKG0vHnveuE3px9koVMsaKNJvPtmvg+9wD3MpSGVqVW+dtPwRGzx4q6S+GPinP0k4kpn /5fRaCOtITdNA1jMnNUcHV9urIoJj7KOrRISvultkzMpJEYt0RAJvJQ8nDC1gJShg6+a XRbjBs6bVQIGHM8OiRaeCFvNHbUafLOrn3+W2dxzSuOWWXLtUI+rV8PRlNFqY+08xNvm bOpA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n63si3778501pjb.36.2019.07.19.23.22.54; Fri, 19 Jul 2019 23:23:09 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389233AbfGSVvC (ORCPT + 99 others); Fri, 19 Jul 2019 17:51:02 -0400 Received: from mail.kernel.org ([198.145.29.99]:50880 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388695AbfGSVt6 (ORCPT ); Fri, 19 Jul 2019 17:49:58 -0400 Received: from gandalf.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 269F72187F; Fri, 19 Jul 2019 21:49:57 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.92) (envelope-from ) id 1hoalI-0007zH-97; Fri, 19 Jul 2019 17:49:56 -0400 Message-Id: <20190719214956.170195069@goodmis.org> User-Agent: quilt/0.65 Date: Fri, 19 Jul 2019 17:49:32 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-rt-users Cc: Thomas Gleixner , Carsten Emde , Sebastian Andrzej Siewior , John Kacur , Paul Gortmaker , Julia Cartwright , Daniel Wagner , tom.zanussi@linux.intel.com Subject: [PATCH RT 01/16] kthread: add a global worker thread. References: <20190719214931.700049248@goodmis.org> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.19.59-rt24-rc1 stable review patch. If anyone has any objections, please let me know. ------------------ From: Sebastian Andrzej Siewior [ Upstream commit 0532e87d9d44795221aa921ba7024bde689cc894 ] Add kthread_schedule_work() which uses a global kthread for all its jobs. Split the cgroup include to avoid recussive includes from interrupt.h. Fixup everything that fails to build (and did not include all header). Signed-off-by: Sebastian Andrzej Siewior Signed-off-by: Steven Rostedt (VMware) --- drivers/block/loop.c | 2 +- drivers/spi/spi-rockchip.c | 1 + include/linux/kthread-cgroup.h | 17 +++++++++++++++++ include/linux/kthread.h | 17 +++++++---------- init/main.c | 1 + kernel/kthread.c | 14 ++++++++++++++ 6 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 include/linux/kthread-cgroup.h diff --git a/drivers/block/loop.c b/drivers/block/loop.c index f1e63eb7cbca..aa76c816dbb4 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -70,7 +70,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c index fdcf3076681b..b56619418cea 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -22,6 +22,7 @@ #include #include #include +#include #define DRIVER_NAME "rockchip-spi" diff --git a/include/linux/kthread-cgroup.h b/include/linux/kthread-cgroup.h new file mode 100644 index 000000000000..53d34bca9d72 --- /dev/null +++ b/include/linux/kthread-cgroup.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_KTHREAD_CGROUP_H +#define _LINUX_KTHREAD_CGROUP_H +#include +#include + +#ifdef CONFIG_BLK_CGROUP +void kthread_associate_blkcg(struct cgroup_subsys_state *css); +struct cgroup_subsys_state *kthread_blkcg(void); +#else +static inline void kthread_associate_blkcg(struct cgroup_subsys_state *css) { } +static inline struct cgroup_subsys_state *kthread_blkcg(void) +{ + return NULL; +} +#endif +#endif diff --git a/include/linux/kthread.h b/include/linux/kthread.h index ad292898f7f2..7cf56eb54103 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h @@ -4,7 +4,6 @@ /* Simple interface for creating and stopping kernel threads without mess. */ #include #include -#include __printf(4, 5) struct task_struct *kthread_create_on_node(int (*threadfn)(void *data), @@ -106,7 +105,7 @@ struct kthread_delayed_work { }; #define KTHREAD_WORKER_INIT(worker) { \ - .lock = __SPIN_LOCK_UNLOCKED((worker).lock), \ + .lock = __RAW_SPIN_LOCK_UNLOCKED((worker).lock), \ .work_list = LIST_HEAD_INIT((worker).work_list), \ .delayed_work_list = LIST_HEAD_INIT((worker).delayed_work_list),\ } @@ -198,14 +197,12 @@ bool kthread_cancel_delayed_work_sync(struct kthread_delayed_work *work); void kthread_destroy_worker(struct kthread_worker *worker); -#ifdef CONFIG_BLK_CGROUP -void kthread_associate_blkcg(struct cgroup_subsys_state *css); -struct cgroup_subsys_state *kthread_blkcg(void); -#else -static inline void kthread_associate_blkcg(struct cgroup_subsys_state *css) { } -static inline struct cgroup_subsys_state *kthread_blkcg(void) +extern struct kthread_worker kthread_global_worker; +void kthread_init_global_worker(void); + +static inline bool kthread_schedule_work(struct kthread_work *work) { - return NULL; + return kthread_queue_work(&kthread_global_worker, work); } -#endif + #endif /* _LINUX_KTHREAD_H */ diff --git a/init/main.c b/init/main.c index 4a7471606e53..b0e95351c22c 100644 --- a/init/main.c +++ b/init/main.c @@ -1130,6 +1130,7 @@ static noinline void __init kernel_init_freeable(void) smp_prepare_cpus(setup_max_cpus); workqueue_init(); + kthread_init_global_worker(); init_mm_internals(); diff --git a/kernel/kthread.c b/kernel/kthread.c index 5641b55783a6..9db017761a1f 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -20,6 +20,7 @@ #include #include #include +#include #include static DEFINE_SPINLOCK(kthread_create_lock); @@ -1180,6 +1181,19 @@ void kthread_destroy_worker(struct kthread_worker *worker) } EXPORT_SYMBOL(kthread_destroy_worker); +DEFINE_KTHREAD_WORKER(kthread_global_worker); +EXPORT_SYMBOL(kthread_global_worker); + +__init void kthread_init_global_worker(void) +{ + kthread_global_worker.task = kthread_create(kthread_worker_fn, + &kthread_global_worker, + "kswork"); + if (WARN_ON(IS_ERR(kthread_global_worker.task))) + return; + wake_up_process(kthread_global_worker.task); +} + #ifdef CONFIG_BLK_CGROUP /** * kthread_associate_blkcg - associate blkcg to current kthread -- 2.20.1