From patchwork Thu Oct 4 16:23:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Cavallari X-Patchwork-Id: 10626409 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2FFF4174A for ; Thu, 4 Oct 2018 16:24:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1C629291BF for ; Thu, 4 Oct 2018 16:24:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 10788293A0; Thu, 4 Oct 2018 16:24:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 97833291BF for ; Thu, 4 Oct 2018 16:24:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=nELaNJABXoiyUrUGZNqdsG2f0a1BvT420dTZASVg3us=; b=j5qfpMqdu90qCH wTQ2EhGG29mtgj62gPolQwKSJBFs9zZhrtca4/ur5bHiAdc+HTyis2ufHGS1g6A3mi7NKfv+Unmji pGHEKO0f0X+yJi8t3Qvfp8rfyztpgiBGJevijSFj11NKDOsdddb6ByRX7+tRr9MflxBmJPbRbp2vo IIPGTq7Xol8YH03+ewQQEQSXO4pMfbGB32ZP6EaEJYnSWsMp16kTInwd1XVqyE1C5ZZLUTu0BxLVf Ds9RA5CNo2m7qTdayJq1/oCePqIMdasNq+vxb8e3pSQoqsFivZD4d66yZMATnULuNz9GvP1nJZT1O 34sDd3JDwXHl7CS5IsvA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1g86QR-0004tK-Fn; Thu, 04 Oct 2018 16:24:31 +0000 Received: from mout.kundenserver.de ([217.72.192.74]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1g86Q6-0004X3-0u for linux-arm-kernel@lists.infradead.org; Thu, 04 Oct 2018 16:24:27 +0000 Received: from evilbit.green-communications.fr ([92.154.77.116]) by mrelayeu.kundenserver.de (mreue106 [212.227.15.184]) with ESMTPSA (Nemesis) id 1MjSsm-1fRqaN1qeo-00kxz7; Thu, 04 Oct 2018 18:23:57 +0200 Received: from evilbit.green-communications.fr ([92.154.77.116]) by mrelayeu.kundenserver.de (mreue106 [212.227.15.184]) with ESMTPSA (Nemesis) id 1MjSsm-1fRqaN1qeo-00kxz7; Thu, 04 Oct 2018 18:23:57 +0200 From: Nicolas Cavallari To: Andrew Morton , Russell King Subject: [RFC 1/2] reboot: Make restart_handler_list a blocking notifier chain. Date: Thu, 4 Oct 2018 18:23:38 +0200 Message-Id: <20181004162339.19493-2-nicolas.cavallari@green-communications.fr> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181004162339.19493-1-nicolas.cavallari@green-communications.fr> References: <20181004162339.19493-1-nicolas.cavallari@green-communications.fr> MIME-Version: 1.0 X-Provags-ID: V03:K1:nCzxF+ZBR69lODzj8Sb8zf4e+pgpLEDOAGIoMHli4slgeMLR+Xi PvwOQSlOzD9XXW2NL82jHgXalJtxnj/XMwdCbKqfR7uo5Q+nCimn7ik4OdtXJSDqCaAwt1F 5x972HBT0FOh0WI8ZjBLinx1kyPbOwqKjDlwNt2opHCjj9QwgvXm+YFnIR3ejd6GYsHXsoK tstnm+qz5Qjy1qHnvwyZQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:5z/exxThLzE=:DzJjP45pwgFwCHCxM+bclZ s2GWeFz8TP1HRABlU82jIIufWjUR7afhZUXeZ5Lq2qEt5LK5/aZpr64QNCzRl36PlptDeMwi0 W0NdMhKUqlxYwytZ+IiFE73JQoQrJc8OtE9ffO3R2bxqNt/wXCIqRGD1HwHp1OKbUV1su8Ub6 jTWGhXnEjWOub2CyHhO+9uUK7my4vsM9cvaCAYs5rSzlAFv1NMIMYinE1CCPA2ZrzhCStpWkV LpxPbxzjQa6qD17HOuD/37OBB5vh91RG54AKvb7O5yhbCLJU0RTKdoVLnEdOt4aW/xLLlv1q4 9eWayN93bTQ+1pmqP5AqoRwS0QS8PpxUNvxdW4ymffaa7EK5lVHnT3muYct/ZWH3wj3H0adoj SeKVZ8GpKHO9z2qp0hcMwlLk2FoH5ioX4iIfUcXPz7MBdVwsEKMEP9bno07da0Kfc9UNha0ar /IuWodhbmI8YaY4CqV/2lPOXzcNBNa99s009rw/lR7DUBhRWD4qA10GLtUkK3MBSGFgKUOqg7 GMJUVvyhaV18kv3DJAqgpaFhavNHo/enQ6wKd1o5CLbOevV2L2mozjHTBmkqPXAkSMJSCtjFj LFaNLm/AGQ8L7ILQOMQUjo+R9CdWgRa/fMSpTSki8uqvi/vPkGNaeZJY9MO6h0qdG/pV9Ydr6 +NwPrTNx+UiHF0nOgBEWyVJeclU/VTadCX0M8bSR9Q9+bEJAuPCPF8HozSZaM4tberwU= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181004_092410_386642_C09EA9B7 X-CRM114-Status: GOOD ( 12.14 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Many users of restart_handlers are sleeping in their callbacks. Some are doing infinite loops or calling driver code that may sleep or perform operation on slow busses, like i2c. This is not allowed in an atomic notifier chain, which is what restart_handler_list currently is, so use a blocking notifier chain instead. Signed-off-by: Nicolas Cavallari --- kernel/reboot.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/kernel/reboot.c b/kernel/reboot.c index 8fb44dec9ad7..f0ba0008dbde 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -135,7 +135,7 @@ EXPORT_SYMBOL(devm_register_reboot_notifier); * Notifier list for kernel code which wants to be called * to restart the system. */ -static ATOMIC_NOTIFIER_HEAD(restart_handler_list); +static BLOCKING_NOTIFIER_HEAD(restart_handler_list); /** * register_restart_handler - Register function to be called to reset @@ -172,12 +172,12 @@ static ATOMIC_NOTIFIER_HEAD(restart_handler_list); * hardware is expected to register with low priority to ensure that * it only runs if no other means to restart the system is available. * - * Currently always returns zero, as atomic_notifier_chain_register() + * Currently always returns zero, as blocking_notifier_chain_register() * always returns zero. */ int register_restart_handler(struct notifier_block *nb) { - return atomic_notifier_chain_register(&restart_handler_list, nb); + return blocking_notifier_chain_register(&restart_handler_list, nb); } EXPORT_SYMBOL(register_restart_handler); @@ -192,7 +192,7 @@ EXPORT_SYMBOL(register_restart_handler); */ int unregister_restart_handler(struct notifier_block *nb) { - return atomic_notifier_chain_unregister(&restart_handler_list, nb); + return blocking_notifier_chain_unregister(&restart_handler_list, nb); } EXPORT_SYMBOL(unregister_restart_handler); @@ -209,7 +209,7 @@ EXPORT_SYMBOL(unregister_restart_handler); */ void do_kernel_restart(char *cmd) { - atomic_notifier_call_chain(&restart_handler_list, reboot_mode, cmd); + blocking_notifier_call_chain(&restart_handler_list, reboot_mode, cmd); } void migrate_to_reboot_cpu(void)