From patchwork Fri Jun 5 15:01:06 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Mladek X-Patchwork-Id: 481411 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 783FC1402A9 for ; Sat, 6 Jun 2015 01:29:14 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Z0tUo-0003k4-Ft; Fri, 05 Jun 2015 15:25:22 +0000 Received: from casper.infradead.org ([85.118.1.10]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Z0tUb-0002do-QM for linux-mtd@bombadil.infradead.org; Fri, 05 Jun 2015 15:25:09 +0000 Received: from cantor2.suse.de ([195.135.220.15] helo=mx2.suse.de) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Z0t8i-0002SS-Qc for linux-mtd@lists.infradead.org; Fri, 05 Jun 2015 15:02:36 +0000 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 794F6ADD6; Fri, 5 Jun 2015 15:01:57 +0000 (UTC) From: Petr Mladek To: Andrew Morton , Oleg Nesterov , Tejun Heo , Ingo Molnar , Peter Zijlstra Subject: [RFC PATCH 07/18] kthread: Make iterant kthreads freezable by default Date: Fri, 5 Jun 2015 17:01:06 +0200 Message-Id: <1433516477-5153-8-git-send-email-pmladek@suse.cz> X-Mailer: git-send-email 1.8.5.6 In-Reply-To: <1433516477-5153-1-git-send-email-pmladek@suse.cz> References: <1433516477-5153-1-git-send-email-pmladek@suse.cz> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150605_160232_894357_799092E2 X-CRM114-Status: GOOD ( 16.10 ) X-Spam-Score: -6.9 (------) X-Spam-Report: SpamAssassin version 3.4.0 on casper.infradead.org summary: Content analysis details: (-6.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/, high trust [195.135.220.15 listed in list.dnswl.org] -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: linux-nfs@vger.kernel.org, Borislav Petkov , Jiri Kosina , Richard Weinberger , Trond Myklebust , linux-kernel@vger.kernel.org, Steven Rostedt , Michal Hocko , Chris Mason , Petr Mladek , linux-mtd@lists.infradead.org, linux-api@vger.kernel.org, Linus Torvalds , live-patching@vger.kernel.org, Thomas Gleixner , "Paul E. McKenney" , David Woodhouse , Anna Schumaker X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Many kthreads already calls set_freezable() before they enter the main cycle. One of the reasons for creating iterant kthreads is to create a safe point for freezing and make even more kthreads properly freezable. Therefore it would make sense to set all iterant kthreads freezable by default. However some kthreads might be hard to make properly freezable. For example, if they do non-interruptible sleeps. They would need to explicitly clear PF_NOFREEZE flag in the init() call. But it should be avoided whenever possible. Signed-off-by: Petr Mladek --- kernel/kthread.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/kernel/kthread.c b/kernel/kthread.c index 185902d0e293..e34f67cb8ecf 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -412,13 +412,20 @@ struct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data), * * This function defines the work flow of iterant kthreads. It calls * the given callbacks. Also it defines and implements a common - * check point for freezing and stopping. + * check point for freezing, stopping, and signal handling. + * + * IMPORTANT: Iterant kthreads are freezable by default. The functions + * defined in the given struct kthread_iterant still have to explicitly + * call try_to_freeze() after each interruptible sleep. They must avoid + * non-interruptible sleep if freezing is allowed. */ static int kthread_iterant_fn(void *kti_ptr) { struct kthread_iterant *kti = kti_ptr; void *data = kti->data; + set_freezable(); + if (kti->init) kti->init(data);