Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp1184042imm; Thu, 4 Oct 2018 09:24:52 -0700 (PDT) X-Google-Smtp-Source: ACcGV62+4bxyEABShOBJF7nPglASCYqHHbMqWNSxlgYOoNsbP8A5G3WFwUBOle/Pt2tT+IxTHL8H X-Received: by 2002:a63:e00d:: with SMTP id e13-v6mr6318264pgh.114.1538670292839; Thu, 04 Oct 2018 09:24:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538670292; cv=none; d=google.com; s=arc-20160816; b=bKZGlRfHSpCJv9uX6Um8ZDR+g8fE1DCTkLsYxsmk10JDrPXVriw+UTmZiAObSGp0fB P4OYFmlu+KxhvRVrmAi8rvoDT0IdiK105YfsMkoODeBRKK9EmitxhsJjY9eIwZPljh9f +HfvGd2NF8WOSsu/xc78tpBWl1tgT1v1XVn453gQ4EpHBEtZxFtGUVKp5w4Qg8nHjeWi QCl21/iaBHIJlSbrubhwxkdTOlXN7l9sXRTgqRSiWt670nw+bJ6rZTf8wicEkuLWzMz9 ERFsNEysQPS6npUnBuR2mfAVwabwHaYL4mHukfDyJ1tiERO1UlRLPBQICd4Z886g0uv1 QO/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=qUhJ1P7/qU7CfcLT38sCRlZZ0ZydPMzdCP3GsZJVRpo=; b=m9Y4iF5mlk4oVQXW+nnfAV/G3NcNXF1KAp7aQatBChGR33KOTRmspIvd8qB58RDIBO gjUB27MlH3ykNeQc5llCDe9Z34cSn9RLnLJa7l84Wzh4UCjRuknlXhWcmId6L5ZF6LoT hdO6phTBd/Q30QuqOOVIa3YiV4LttGljmg3njrlyax2ikk+9HH2YzT7cC/Sx04FSe+ct lSYfxl5T2igYrEF9GnW2ssB7H+2xPlXDivluVliT0bYjd8E9kiLJi7CP0LKt+ab0ujta AnCKC1btnJZHLLpg2UbGtKZAvWr6ofD0IIMaje1cyaBfOWuHILvb2q8lpf8gJj4s2hdE O/Fg== 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 h21-v6si5885768plr.98.2018.10.04.09.24.37; Thu, 04 Oct 2018 09:24:52 -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 S1727634AbeJDXS1 (ORCPT + 99 others); Thu, 4 Oct 2018 19:18:27 -0400 Received: from mout.kundenserver.de ([217.72.192.74]:34807 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727470AbeJDXS1 (ORCPT ); Thu, 4 Oct 2018 19:18:27 -0400 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 Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org 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 Content-Transfer-Encoding: 8bit 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= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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) -- 2.19.0