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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DFCC8C43219 for ; Wed, 27 Apr 2022 22:54:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238975AbiD0W5G (ORCPT ); Wed, 27 Apr 2022 18:57:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37526 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238132AbiD0W44 (ORCPT ); Wed, 27 Apr 2022 18:56:56 -0400 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E406090CC5; Wed, 27 Apr 2022 15:52:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=/cdg0sKCsuwzrOmixxbC1Q4JQ/fbIS+o0nd/6r3SqdQ=; b=Ms53zbjgbkvE/VbvvERWDhiSlK xnfSZ26duHs4sJGmX9AjyiOpVrZ24qlvncFPTQgx0Ak1/K+qg/q6M3lNqtXBQSywskWJGGXxxZsyH 0ZCt9ADqjTi/3V+XCpSLOfo1kVbAL88rsa3CWloXQYrPcKcjm0fr5wkBOKZGIirx4MPHlXEq/lSP6 Wauj7ki9eqiIN/DWOEVCrOIQ5CDDEHA0P4AiVRkbPc3MLQuGkkZQLCDxyedC8rV+CPmlMqMLZGK7O pj27Q1YpHqsziDeg78TsiM6RPMIm39rOPoY53108P/vAvRYTx1t1bv7hv+1+u3acH1fsI00wIEzlf mvZOITKg==; Received: from [179.113.53.197] (helo=localhost) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1njqVm-00026W-Rl; Thu, 28 Apr 2022 00:51:55 +0200 From: "Guilherme G. Piccoli" To: akpm@linux-foundation.org, bhe@redhat.com, pmladek@suse.com, kexec@lists.infradead.org Cc: linux-kernel@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, coresight@lists.linaro.org, linuxppc-dev@lists.ozlabs.org, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-leds@vger.kernel.org, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linux-pm@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, linux-tegra@vger.kernel.org, linux-um@lists.infradead.org, linux-xtensa@linux-xtensa.org, netdev@vger.kernel.org, openipmi-developer@lists.sourceforge.net, rcu@vger.kernel.org, sparclinux@vger.kernel.org, xen-devel@lists.xenproject.org, x86@kernel.org, kernel-dev@igalia.com, gpiccoli@igalia.com, kernel@gpiccoli.net, halves@canonical.com, fabiomirmar@gmail.com, alejandro.j.jimenez@oracle.com, andriy.shevchenko@linux.intel.com, arnd@arndb.de, bp@alien8.de, corbet@lwn.net, d.hatayama@jp.fujitsu.com, dave.hansen@linux.intel.com, dyoung@redhat.com, feng.tang@intel.com, gregkh@linuxfoundation.org, mikelley@microsoft.com, hidehiro.kawai.ez@hitachi.com, jgross@suse.com, john.ogness@linutronix.de, keescook@chromium.org, luto@kernel.org, mhiramat@kernel.org, mingo@redhat.com, paulmck@kernel.org, peterz@infradead.org, rostedt@goodmis.org, senozhatsky@chromium.org, stern@rowland.harvard.edu, tglx@linutronix.de, vgoyal@redhat.com, vkuznets@redhat.com, will@kernel.org, Benjamin Herrenschmidt , Hari Bathini , Michael Ellerman , Nicholas Piggin , Paul Mackerras Subject: [PATCH 08/30] powerpc/setup: Refactor/untangle panic notifiers Date: Wed, 27 Apr 2022 19:49:02 -0300 Message-Id: <20220427224924.592546-9-gpiccoli@igalia.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220427224924.592546-1-gpiccoli@igalia.com> References: <20220427224924.592546-1-gpiccoli@igalia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org The panic notifiers infrastructure is a bit limited in the scope of the callbacks - basically every kind of functionality is dropped in a list that runs in the same point during the kernel panic path. This is not really on par with the complexities and particularities of architecture / hypervisors' needs, and a refactor is ongoing. As part of this refactor, it was observed that powerpc has 2 notifiers, with mixed goals: one is just a KASLR offset dumper, whereas the other aims to hard-disable IRQs (necessary on panic path), warn firmware of the panic event (fadump) and run low-level platform-specific machinery that might stop kernel execution and never come back. Clearly, the 2nd notifier has opposed goals: disable IRQs / fadump should run earlier while low-level platform actions should run late since it might not even return. Hence, this patch decouples the notifiers splitting them in three: - First one is responsible for hard-disable IRQs and fadump, should run early; - The kernel KASLR offset dumper is really an informative notifier, harmless and may run at any moment in the panic path; - The last notifier should run last, since it aims to perform low-level actions for specific platforms, and might never return. It is also only registered for 2 platforms, pseries and ps3. The patch better documents the notifiers and clears the code too, also removing a useless header. Currently no functionality change should be observed, but after the planned panic refactor we should expect more panic reliability with this patch. Cc: Benjamin Herrenschmidt Cc: Hari Bathini Cc: Michael Ellerman Cc: Nicholas Piggin Cc: Paul Mackerras Signed-off-by: Guilherme G. Piccoli --- We'd like to thanks specially the MiniCloud infrastructure [0] maintainers, that allow us to test PowerPC code in a very complete, functional and FREE environment (there's no need even for adding a credit card, like many "free" clouds require ¬¬ ). [0] https://openpower.ic.unicamp.br/minicloud arch/powerpc/kernel/setup-common.c | 74 ++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 518ae5aa9410..52f96b209a96 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -680,8 +679,25 @@ int check_legacy_ioport(unsigned long base_port) } EXPORT_SYMBOL(check_legacy_ioport); -static int ppc_panic_event(struct notifier_block *this, - unsigned long event, void *ptr) +/* + * Panic notifiers setup + * + * We have 3 notifiers for powerpc, each one from a different "nature": + * + * - ppc_panic_fadump_handler() is a hypervisor notifier, which hard-disables + * IRQs and deal with the Firmware-Assisted dump, when it is configured; + * should run early in the panic path. + * + * - dump_kernel_offset() is an informative notifier, just showing the KASLR + * offset if we have RANDOMIZE_BASE set. + * + * - ppc_panic_platform_handler() is a low-level handler that's registered + * only if the platform wishes to perform final actions in the panic path, + * hence it should run late and might not even return. Currently, only + * pseries and ps3 platforms register callbacks. + */ +static int ppc_panic_fadump_handler(struct notifier_block *this, + unsigned long event, void *ptr) { /* * panic does a local_irq_disable, but we really @@ -691,45 +707,63 @@ static int ppc_panic_event(struct notifier_block *this, /* * If firmware-assisted dump has been registered then trigger - * firmware-assisted dump and let firmware handle everything else. + * its callback and let the firmware handles everything else. */ crash_fadump(NULL, ptr); - if (ppc_md.panic) - ppc_md.panic(ptr); /* May not return */ + return NOTIFY_DONE; } -static struct notifier_block ppc_panic_block = { - .notifier_call = ppc_panic_event, - .priority = INT_MIN /* may not return; must be done last */ -}; - -/* - * Dump out kernel offset information on panic. - */ static int dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p) { pr_emerg("Kernel Offset: 0x%lx from 0x%lx\n", kaslr_offset(), KERNELBASE); - return 0; + return NOTIFY_DONE; } +static int ppc_panic_platform_handler(struct notifier_block *this, + unsigned long event, void *ptr) +{ + /* + * This handler is only registered if we have a panic callback + * on ppc_md, hence NULL check is not needed. + * Also, it may not return, so it runs really late on panic path. + */ + ppc_md.panic(ptr); + + return NOTIFY_DONE; +} + +static struct notifier_block ppc_fadump_block = { + .notifier_call = ppc_panic_fadump_handler, + .priority = INT_MAX, /* run early, to notify the firmware ASAP */ +}; + static struct notifier_block kernel_offset_notifier = { - .notifier_call = dump_kernel_offset + .notifier_call = dump_kernel_offset, +}; + +static struct notifier_block ppc_panic_block = { + .notifier_call = ppc_panic_platform_handler, + .priority = INT_MIN, /* may not return; must be done last */ }; void __init setup_panic(void) { + /* Hard-disables IRQs + deal with FW-assisted dump (fadump) */ + atomic_notifier_chain_register(&panic_notifier_list, + &ppc_fadump_block); + if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && kaslr_offset() > 0) atomic_notifier_chain_register(&panic_notifier_list, &kernel_offset_notifier); - /* PPC64 always does a hard irq disable in its panic handler */ - if (!IS_ENABLED(CONFIG_PPC64) && !ppc_md.panic) - return; - atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block); + /* Low-level platform-specific routines that should run on panic */ + if (ppc_md.panic) + atomic_notifier_chain_register(&panic_notifier_list, + &ppc_panic_block); } #ifdef CONFIG_CHECK_CACHE_COHERENCY -- 2.36.0 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 lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1D5A6C433EF for ; Thu, 28 Apr 2022 01:35:07 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KpdTj603Sz3bqJ for ; Thu, 28 Apr 2022 11:35:05 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=igalia.com header.i=@igalia.com header.a=rsa-sha256 header.s=20170329 header.b=Ms53zbjg; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=igalia.com (client-ip=178.60.130.6; helo=fanzine2.igalia.com; envelope-from=gpiccoli@igalia.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=igalia.com header.i=@igalia.com header.a=rsa-sha256 header.s=20170329 header.b=Ms53zbjg; dkim-atps=neutral Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KpYsh1X8hz2xtQ for ; Thu, 28 Apr 2022 08:52:08 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=/cdg0sKCsuwzrOmixxbC1Q4JQ/fbIS+o0nd/6r3SqdQ=; b=Ms53zbjgbkvE/VbvvERWDhiSlK xnfSZ26duHs4sJGmX9AjyiOpVrZ24qlvncFPTQgx0Ak1/K+qg/q6M3lNqtXBQSywskWJGGXxxZsyH 0ZCt9ADqjTi/3V+XCpSLOfo1kVbAL88rsa3CWloXQYrPcKcjm0fr5wkBOKZGIirx4MPHlXEq/lSP6 Wauj7ki9eqiIN/DWOEVCrOIQ5CDDEHA0P4AiVRkbPc3MLQuGkkZQLCDxyedC8rV+CPmlMqMLZGK7O pj27Q1YpHqsziDeg78TsiM6RPMIm39rOPoY53108P/vAvRYTx1t1bv7hv+1+u3acH1fsI00wIEzlf mvZOITKg==; Received: from [179.113.53.197] (helo=localhost) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1njqVm-00026W-Rl; Thu, 28 Apr 2022 00:51:55 +0200 From: "Guilherme G. Piccoli" To: akpm@linux-foundation.org, bhe@redhat.com, pmladek@suse.com, kexec@lists.infradead.org Subject: [PATCH 08/30] powerpc/setup: Refactor/untangle panic notifiers Date: Wed, 27 Apr 2022 19:49:02 -0300 Message-Id: <20220427224924.592546-9-gpiccoli@igalia.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220427224924.592546-1-gpiccoli@igalia.com> References: <20220427224924.592546-1-gpiccoli@igalia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Mailman-Approved-At: Thu, 28 Apr 2022 11:34:03 +1000 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-hyperv@vger.kernel.org, halves@canonical.com, gregkh@linuxfoundation.org, peterz@infradead.org, alejandro.j.jimenez@oracle.com, linux-remoteproc@vger.kernel.org, feng.tang@intel.com, linux-mips@vger.kernel.org, hidehiro.kawai.ez@hitachi.com, Paul Mackerras , sparclinux@vger.kernel.org, will@kernel.org, tglx@linutronix.de, linux-leds@vger.kernel.org, linux-s390@vger.kernel.org, mikelley@microsoft.com, john.ogness@linutronix.de, corbet@lwn.net, paulmck@kernel.org, fabiomirmar@gmail.com, x86@kernel.org, mingo@redhat.com, bcm-kernel-feedback-list@broadcom.com, Hari Bathini , xen-devel@lists.xenproject.org, dyoung@redhat.com, vgoyal@redhat.com, linux-xtensa@linux-xtensa.org, dave.hansen@linux.intel.com, keescook@chromium.org, arnd@arndb.de, linux-pm@vger.kernel.org, coresight@lists.linaro.org, linux-um@lists.infradead.org, rostedt@goodmis.org, rcu@vger.kernel.org, bp@alien8.de, Nicholas Piggin , luto@kernel.org, linux-tegra@vger.kernel.org, openipmi-developer@lists.sourceforge.net, andriy.shevchenko@linux.intel.com, senozhatsky@chromium.org, linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org, jgross@suse.com, linux-parisc@vger.kernel.org, netdev@vger.kernel.org, kernel@gpiccoli.net, linux-kernel@vger.kernel.org, stern@rowland.harvard.edu, gpiccoli@igalia.com, d.hatayama@jp.fujitsu.com, mhiramat@kernel.org, kernel-dev@igalia.com, linux-alpha@vger.kernel.org, vkuznets@redhat.com, linuxppc-dev@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" The panic notifiers infrastructure is a bit limited in the scope of the callbacks - basically every kind of functionality is dropped in a list that runs in the same point during the kernel panic path. This is not really on par with the complexities and particularities of architecture / hypervisors' needs, and a refactor is ongoing. As part of this refactor, it was observed that powerpc has 2 notifiers, with mixed goals: one is just a KASLR offset dumper, whereas the other aims to hard-disable IRQs (necessary on panic path), warn firmware of the panic event (fadump) and run low-level platform-specific machinery that might stop kernel execution and never come back. Clearly, the 2nd notifier has opposed goals: disable IRQs / fadump should run earlier while low-level platform actions should run late since it might not even return. Hence, this patch decouples the notifiers splitting them in three: - First one is responsible for hard-disable IRQs and fadump, should run early; - The kernel KASLR offset dumper is really an informative notifier, harmless and may run at any moment in the panic path; - The last notifier should run last, since it aims to perform low-level actions for specific platforms, and might never return. It is also only registered for 2 platforms, pseries and ps3. The patch better documents the notifiers and clears the code too, also removing a useless header. Currently no functionality change should be observed, but after the planned panic refactor we should expect more panic reliability with this patch. Cc: Benjamin Herrenschmidt Cc: Hari Bathini Cc: Michael Ellerman Cc: Nicholas Piggin Cc: Paul Mackerras Signed-off-by: Guilherme G. Piccoli --- We'd like to thanks specially the MiniCloud infrastructure [0] maintainers, that allow us to test PowerPC code in a very complete, functional and FREE environment (there's no need even for adding a credit card, like many "free" clouds require ¬¬ ). [0] https://openpower.ic.unicamp.br/minicloud arch/powerpc/kernel/setup-common.c | 74 ++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 518ae5aa9410..52f96b209a96 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -680,8 +679,25 @@ int check_legacy_ioport(unsigned long base_port) } EXPORT_SYMBOL(check_legacy_ioport); -static int ppc_panic_event(struct notifier_block *this, - unsigned long event, void *ptr) +/* + * Panic notifiers setup + * + * We have 3 notifiers for powerpc, each one from a different "nature": + * + * - ppc_panic_fadump_handler() is a hypervisor notifier, which hard-disables + * IRQs and deal with the Firmware-Assisted dump, when it is configured; + * should run early in the panic path. + * + * - dump_kernel_offset() is an informative notifier, just showing the KASLR + * offset if we have RANDOMIZE_BASE set. + * + * - ppc_panic_platform_handler() is a low-level handler that's registered + * only if the platform wishes to perform final actions in the panic path, + * hence it should run late and might not even return. Currently, only + * pseries and ps3 platforms register callbacks. + */ +static int ppc_panic_fadump_handler(struct notifier_block *this, + unsigned long event, void *ptr) { /* * panic does a local_irq_disable, but we really @@ -691,45 +707,63 @@ static int ppc_panic_event(struct notifier_block *this, /* * If firmware-assisted dump has been registered then trigger - * firmware-assisted dump and let firmware handle everything else. + * its callback and let the firmware handles everything else. */ crash_fadump(NULL, ptr); - if (ppc_md.panic) - ppc_md.panic(ptr); /* May not return */ + return NOTIFY_DONE; } -static struct notifier_block ppc_panic_block = { - .notifier_call = ppc_panic_event, - .priority = INT_MIN /* may not return; must be done last */ -}; - -/* - * Dump out kernel offset information on panic. - */ static int dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p) { pr_emerg("Kernel Offset: 0x%lx from 0x%lx\n", kaslr_offset(), KERNELBASE); - return 0; + return NOTIFY_DONE; } +static int ppc_panic_platform_handler(struct notifier_block *this, + unsigned long event, void *ptr) +{ + /* + * This handler is only registered if we have a panic callback + * on ppc_md, hence NULL check is not needed. + * Also, it may not return, so it runs really late on panic path. + */ + ppc_md.panic(ptr); + + return NOTIFY_DONE; +} + +static struct notifier_block ppc_fadump_block = { + .notifier_call = ppc_panic_fadump_handler, + .priority = INT_MAX, /* run early, to notify the firmware ASAP */ +}; + static struct notifier_block kernel_offset_notifier = { - .notifier_call = dump_kernel_offset + .notifier_call = dump_kernel_offset, +}; + +static struct notifier_block ppc_panic_block = { + .notifier_call = ppc_panic_platform_handler, + .priority = INT_MIN, /* may not return; must be done last */ }; void __init setup_panic(void) { + /* Hard-disables IRQs + deal with FW-assisted dump (fadump) */ + atomic_notifier_chain_register(&panic_notifier_list, + &ppc_fadump_block); + if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && kaslr_offset() > 0) atomic_notifier_chain_register(&panic_notifier_list, &kernel_offset_notifier); - /* PPC64 always does a hard irq disable in its panic handler */ - if (!IS_ENABLED(CONFIG_PPC64) && !ppc_md.panic) - return; - atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block); + /* Low-level platform-specific routines that should run on panic */ + if (ppc_md.panic) + atomic_notifier_chain_register(&panic_notifier_list, + &ppc_panic_block); } #ifdef CONFIG_CHECK_CACHE_COHERENCY -- 2.36.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Guilherme G. Piccoli Date: Wed, 27 Apr 2022 19:49:02 -0300 Subject: [PATCH 08/30] powerpc/setup: Refactor/untangle panic notifiers In-Reply-To: <20220427224924.592546-1-gpiccoli@igalia.com> References: <20220427224924.592546-1-gpiccoli@igalia.com> Message-ID: <20220427224924.592546-9-gpiccoli@igalia.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kexec@lists.infradead.org The panic notifiers infrastructure is a bit limited in the scope of the callbacks - basically every kind of functionality is dropped in a list that runs in the same point during the kernel panic path. This is not really on par with the complexities and particularities of architecture / hypervisors' needs, and a refactor is ongoing. As part of this refactor, it was observed that powerpc has 2 notifiers, with mixed goals: one is just a KASLR offset dumper, whereas the other aims to hard-disable IRQs (necessary on panic path), warn firmware of the panic event (fadump) and run low-level platform-specific machinery that might stop kernel execution and never come back. Clearly, the 2nd notifier has opposed goals: disable IRQs / fadump should run earlier while low-level platform actions should run late since it might not even return. Hence, this patch decouples the notifiers splitting them in three: - First one is responsible for hard-disable IRQs and fadump, should run early; - The kernel KASLR offset dumper is really an informative notifier, harmless and may run at any moment in the panic path; - The last notifier should run last, since it aims to perform low-level actions for specific platforms, and might never return. It is also only registered for 2 platforms, pseries and ps3. The patch better documents the notifiers and clears the code too, also removing a useless header. Currently no functionality change should be observed, but after the planned panic refactor we should expect more panic reliability with this patch. Cc: Benjamin Herrenschmidt Cc: Hari Bathini Cc: Michael Ellerman Cc: Nicholas Piggin Cc: Paul Mackerras Signed-off-by: Guilherme G. Piccoli --- We'd like to thanks specially the MiniCloud infrastructure [0] maintainers, that allow us to test PowerPC code in a very complete, functional and FREE environment (there's no need even for adding a credit card, like many "free" clouds require ?? ). [0] https://openpower.ic.unicamp.br/minicloud arch/powerpc/kernel/setup-common.c | 74 ++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 518ae5aa9410..52f96b209a96 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -680,8 +679,25 @@ int check_legacy_ioport(unsigned long base_port) } EXPORT_SYMBOL(check_legacy_ioport); -static int ppc_panic_event(struct notifier_block *this, - unsigned long event, void *ptr) +/* + * Panic notifiers setup + * + * We have 3 notifiers for powerpc, each one from a different "nature": + * + * - ppc_panic_fadump_handler() is a hypervisor notifier, which hard-disables + * IRQs and deal with the Firmware-Assisted dump, when it is configured; + * should run early in the panic path. + * + * - dump_kernel_offset() is an informative notifier, just showing the KASLR + * offset if we have RANDOMIZE_BASE set. + * + * - ppc_panic_platform_handler() is a low-level handler that's registered + * only if the platform wishes to perform final actions in the panic path, + * hence it should run late and might not even return. Currently, only + * pseries and ps3 platforms register callbacks. + */ +static int ppc_panic_fadump_handler(struct notifier_block *this, + unsigned long event, void *ptr) { /* * panic does a local_irq_disable, but we really @@ -691,45 +707,63 @@ static int ppc_panic_event(struct notifier_block *this, /* * If firmware-assisted dump has been registered then trigger - * firmware-assisted dump and let firmware handle everything else. + * its callback and let the firmware handles everything else. */ crash_fadump(NULL, ptr); - if (ppc_md.panic) - ppc_md.panic(ptr); /* May not return */ + return NOTIFY_DONE; } -static struct notifier_block ppc_panic_block = { - .notifier_call = ppc_panic_event, - .priority = INT_MIN /* may not return; must be done last */ -}; - -/* - * Dump out kernel offset information on panic. - */ static int dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p) { pr_emerg("Kernel Offset: 0x%lx from 0x%lx\n", kaslr_offset(), KERNELBASE); - return 0; + return NOTIFY_DONE; } +static int ppc_panic_platform_handler(struct notifier_block *this, + unsigned long event, void *ptr) +{ + /* + * This handler is only registered if we have a panic callback + * on ppc_md, hence NULL check is not needed. + * Also, it may not return, so it runs really late on panic path. + */ + ppc_md.panic(ptr); + + return NOTIFY_DONE; +} + +static struct notifier_block ppc_fadump_block = { + .notifier_call = ppc_panic_fadump_handler, + .priority = INT_MAX, /* run early, to notify the firmware ASAP */ +}; + static struct notifier_block kernel_offset_notifier = { - .notifier_call = dump_kernel_offset + .notifier_call = dump_kernel_offset, +}; + +static struct notifier_block ppc_panic_block = { + .notifier_call = ppc_panic_platform_handler, + .priority = INT_MIN, /* may not return; must be done last */ }; void __init setup_panic(void) { + /* Hard-disables IRQs + deal with FW-assisted dump (fadump) */ + atomic_notifier_chain_register(&panic_notifier_list, + &ppc_fadump_block); + if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && kaslr_offset() > 0) atomic_notifier_chain_register(&panic_notifier_list, &kernel_offset_notifier); - /* PPC64 always does a hard irq disable in its panic handler */ - if (!IS_ENABLED(CONFIG_PPC64) && !ppc_md.panic) - return; - atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block); + /* Low-level platform-specific routines that should run on panic */ + if (ppc_md.panic) + atomic_notifier_chain_register(&panic_notifier_list, + &ppc_panic_block); } #ifdef CONFIG_CHECK_CACHE_COHERENCY -- 2.36.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: "Guilherme G. Piccoli" Subject: [PATCH 08/30] powerpc/setup: Refactor/untangle panic notifiers Date: Wed, 27 Apr 2022 19:49:02 -0300 Message-Id: <20220427224924.592546-9-gpiccoli@igalia.com> In-Reply-To: <20220427224924.592546-1-gpiccoli@igalia.com> References: <20220427224924.592546-1-gpiccoli@igalia.com> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-um" Errors-To: linux-um-bounces+geert=linux-m68k.org@lists.infradead.org To: akpm@linux-foundation.org, bhe@redhat.com, pmladek@suse.com, kexec@lists.infradead.org Cc: linux-kernel@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, coresight@lists.linaro.org, linuxppc-dev@lists.ozlabs.org, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-leds@vger.kernel.org, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linux-pm@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, linux-tegra@vger.kernel.org, linux-um@lists.infradead.org, linux-xtensa@linux-xtensa.org, netdev@vger.kernel.org, openipmi-developer@lists.sourceforge.net, rcu@vger.kernel.org, sparclinux@vger.kernel.org, xen-devel@lists.xenproject.org, x86@kernel.org, kernel-dev@igalia.com, gpiccoli@igalia.com, kernel@gpiccoli.net, halves@canonical.com, fabiomirmar@gmail.com, alejandro.j.jimenez@oracle.com, andriy.shevchenko@linux.intel.com, arnd@arndb.de, bp@alien8.de, corbet@lwn.net, d.hatayama@jp.fujitsu.com, dave.hansen@linux.intel.com, dyoung@redhat.com, feng.tang@intel.com, gregkh@linuxfoundation.org, mikelley@microsoft.com, hidehiro.kawai.ez@hitachi.com, jgross@suse.com, john.ogness@linutronix.de, keescook@chromium.org, luto@kernel.org, mhiramat@kernel.org, mingo@redhat.com, paulmck@kernel.org, peterz@infradead.org, rostedt@goodmis.org, senozhatsky@chromium.org, stern@rowland.harvard.edu, tglx@linutronix.de, vgoyal@redhat.com, vkuznets@redhat.com, will@kernel.org, Benjamin Herrenschmidt , Hari Bathini , Michael Ellerman , Nicholas Piggin , Paul Mackerras VGhlIHBhbmljIG5vdGlmaWVycyBpbmZyYXN0cnVjdHVyZSBpcyBhIGJpdCBsaW1pdGVkIGluIHRo ZSBzY29wZSBvZgp0aGUgY2FsbGJhY2tzIC0gYmFzaWNhbGx5IGV2ZXJ5IGtpbmQgb2YgZnVuY3Rp b25hbGl0eSBpcyBkcm9wcGVkCmluIGEgbGlzdCB0aGF0IHJ1bnMgaW4gdGhlIHNhbWUgcG9pbnQg ZHVyaW5nIHRoZSBrZXJuZWwgcGFuaWMgcGF0aC4KVGhpcyBpcyBub3QgcmVhbGx5IG9uIHBhciB3 aXRoIHRoZSBjb21wbGV4aXRpZXMgYW5kIHBhcnRpY3VsYXJpdGllcwpvZiBhcmNoaXRlY3R1cmUg LyBoeXBlcnZpc29ycycgbmVlZHMsIGFuZCBhIHJlZmFjdG9yIGlzIG9uZ29pbmcuCgpBcyBwYXJ0 IG9mIHRoaXMgcmVmYWN0b3IsIGl0IHdhcyBvYnNlcnZlZCB0aGF0IHBvd2VycGMgaGFzIDIgbm90 aWZpZXJzLAp3aXRoIG1peGVkIGdvYWxzOiBvbmUgaXMganVzdCBhIEtBU0xSIG9mZnNldCBkdW1w ZXIsIHdoZXJlYXMgdGhlIG90aGVyCmFpbXMgdG8gaGFyZC1kaXNhYmxlIElSUXMgKG5lY2Vzc2Fy eSBvbiBwYW5pYyBwYXRoKSwgd2FybiBmaXJtd2FyZSBvZgp0aGUgcGFuaWMgZXZlbnQgKGZhZHVt cCkgYW5kIHJ1biBsb3ctbGV2ZWwgcGxhdGZvcm0tc3BlY2lmaWMgbWFjaGluZXJ5CnRoYXQgbWln aHQgc3RvcCBrZXJuZWwgZXhlY3V0aW9uIGFuZCBuZXZlciBjb21lIGJhY2suCgpDbGVhcmx5LCB0 aGUgMm5kIG5vdGlmaWVyIGhhcyBvcHBvc2VkIGdvYWxzOiBkaXNhYmxlIElSUXMgLyBmYWR1bXAK c2hvdWxkIHJ1biBlYXJsaWVyIHdoaWxlIGxvdy1sZXZlbCBwbGF0Zm9ybSBhY3Rpb25zIHNob3Vs ZApydW4gbGF0ZSBzaW5jZSBpdCBtaWdodCBub3QgZXZlbiByZXR1cm4uIEhlbmNlLCB0aGlzIHBh dGNoIGRlY291cGxlcwp0aGUgbm90aWZpZXJzIHNwbGl0dGluZyB0aGVtIGluIHRocmVlOgoKLSBG aXJzdCBvbmUgaXMgcmVzcG9uc2libGUgZm9yIGhhcmQtZGlzYWJsZSBJUlFzIGFuZCBmYWR1bXAs CnNob3VsZCBydW4gZWFybHk7CgotIFRoZSBrZXJuZWwgS0FTTFIgb2Zmc2V0IGR1bXBlciBpcyBy ZWFsbHkgYW4gaW5mb3JtYXRpdmUgbm90aWZpZXIsCmhhcm1sZXNzIGFuZCBtYXkgcnVuIGF0IGFu eSBtb21lbnQgaW4gdGhlIHBhbmljIHBhdGg7CgotIFRoZSBsYXN0IG5vdGlmaWVyIHNob3VsZCBy dW4gbGFzdCwgc2luY2UgaXQgYWltcyB0byBwZXJmb3JtCmxvdy1sZXZlbCBhY3Rpb25zIGZvciBz cGVjaWZpYyBwbGF0Zm9ybXMsIGFuZCBtaWdodCBuZXZlciByZXR1cm4uCkl0IGlzIGFsc28gb25s eSByZWdpc3RlcmVkIGZvciAyIHBsYXRmb3JtcywgcHNlcmllcyBhbmQgcHMzLgoKVGhlIHBhdGNo IGJldHRlciBkb2N1bWVudHMgdGhlIG5vdGlmaWVycyBhbmQgY2xlYXJzIHRoZSBjb2RlIHRvbywK YWxzbyByZW1vdmluZyBhIHVzZWxlc3MgaGVhZGVyLgoKQ3VycmVudGx5IG5vIGZ1bmN0aW9uYWxp dHkgY2hhbmdlIHNob3VsZCBiZSBvYnNlcnZlZCwgYnV0IGFmdGVyCnRoZSBwbGFubmVkIHBhbmlj IHJlZmFjdG9yIHdlIHNob3VsZCBleHBlY3QgbW9yZSBwYW5pYyByZWxpYWJpbGl0eQp3aXRoIHRo aXMgcGF0Y2guCgpDYzogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hp bmcub3JnPgpDYzogSGFyaSBCYXRoaW5pIDxoYmF0aGluaUBsaW51eC5pYm0uY29tPgpDYzogTWlj aGFlbCBFbGxlcm1hbiA8bXBlQGVsbGVybWFuLmlkLmF1PgpDYzogTmljaG9sYXMgUGlnZ2luIDxu cGlnZ2luQGdtYWlsLmNvbT4KQ2M6IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgpT aWduZWQtb2ZmLWJ5OiBHdWlsaGVybWUgRy4gUGljY29saSA8Z3BpY2NvbGlAaWdhbGlhLmNvbT4K LS0tCgpXZSdkIGxpa2UgdG8gdGhhbmtzIHNwZWNpYWxseSB0aGUgTWluaUNsb3VkIGluZnJhc3Ry dWN0dXJlIFswXSBtYWludGFpbmVycywKdGhhdCBhbGxvdyB1cyB0byB0ZXN0IFBvd2VyUEMgY29k ZSBpbiBhIHZlcnkgY29tcGxldGUsIGZ1bmN0aW9uYWwgYW5kIEZSRUUKZW52aXJvbm1lbnQgKHRo ZXJlJ3Mgbm8gbmVlZCBldmVuIGZvciBhZGRpbmcgYSBjcmVkaXQgY2FyZCwgbGlrZSBtYW55ICJm cmVlIgpjbG91ZHMgcmVxdWlyZSDCrMKsICkuCgpbMF0gaHR0cHM6Ly9vcGVucG93ZXIuaWMudW5p Y2FtcC5ici9taW5pY2xvdWQKCiBhcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jIHwg NzQgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTQgaW5z ZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tl cm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMK aW5kZXggNTE4YWU1YWE5NDEwLi41MmY5NmIyMDlhOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJw Yy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1j b21tb24uYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNp bmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+ Ci0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNp bmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KQEAgLTY4 MCw4ICs2NzksMjUgQEAgaW50IGNoZWNrX2xlZ2FjeV9pb3BvcnQodW5zaWduZWQgbG9uZyBiYXNl X3BvcnQpCiB9CiBFWFBPUlRfU1lNQk9MKGNoZWNrX2xlZ2FjeV9pb3BvcnQpOwogCi1zdGF0aWMg aW50IHBwY19wYW5pY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKKy8q CisgKiBQYW5pYyBub3RpZmllcnMgc2V0dXAKKyAqCisgKiBXZSBoYXZlIDMgbm90aWZpZXJzIGZv ciBwb3dlcnBjLCBlYWNoIG9uZSBmcm9tIGEgZGlmZmVyZW50ICJuYXR1cmUiOgorICoKKyAqIC0g cHBjX3BhbmljX2ZhZHVtcF9oYW5kbGVyKCkgaXMgYSBoeXBlcnZpc29yIG5vdGlmaWVyLCB3aGlj aCBoYXJkLWRpc2FibGVzCisgKiAgIElSUXMgYW5kIGRlYWwgd2l0aCB0aGUgRmlybXdhcmUtQXNz aXN0ZWQgZHVtcCwgd2hlbiBpdCBpcyBjb25maWd1cmVkOworICogICBzaG91bGQgcnVuIGVhcmx5 IGluIHRoZSBwYW5pYyBwYXRoLgorICoKKyAqIC0gZHVtcF9rZXJuZWxfb2Zmc2V0KCkgaXMgYW4g aW5mb3JtYXRpdmUgbm90aWZpZXIsIGp1c3Qgc2hvd2luZyB0aGUgS0FTTFIKKyAqICAgb2Zmc2V0 IGlmIHdlIGhhdmUgUkFORE9NSVpFX0JBU0Ugc2V0LgorICoKKyAqIC0gcHBjX3BhbmljX3BsYXRm b3JtX2hhbmRsZXIoKSBpcyBhIGxvdy1sZXZlbCBoYW5kbGVyIHRoYXQncyByZWdpc3RlcmVkCisg KiAgIG9ubHkgaWYgdGhlIHBsYXRmb3JtIHdpc2hlcyB0byBwZXJmb3JtIGZpbmFsIGFjdGlvbnMg aW4gdGhlIHBhbmljIHBhdGgsCisgKiAgIGhlbmNlIGl0IHNob3VsZCBydW4gbGF0ZSBhbmQgbWln aHQgbm90IGV2ZW4gcmV0dXJuLiBDdXJyZW50bHksIG9ubHkKKyAqICAgcHNlcmllcyBhbmQgcHMz IHBsYXRmb3JtcyByZWdpc3RlciBjYWxsYmFja3MuCisgKi8KK3N0YXRpYyBpbnQgcHBjX3Bhbmlj X2ZhZHVtcF9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJCQkgICAgdW5z aWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewogCS8qCiAJICogcGFuaWMgZG9lcyBhIGxv Y2FsX2lycV9kaXNhYmxlLCBidXQgd2UgcmVhbGx5CkBAIC02OTEsNDUgKzcwNyw2MyBAQCBzdGF0 aWMgaW50IHBwY19wYW5pY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAKIAkv KgogCSAqIElmIGZpcm13YXJlLWFzc2lzdGVkIGR1bXAgaGFzIGJlZW4gcmVnaXN0ZXJlZCB0aGVu IHRyaWdnZXIKLQkgKiBmaXJtd2FyZS1hc3Npc3RlZCBkdW1wIGFuZCBsZXQgZmlybXdhcmUgaGFu ZGxlIGV2ZXJ5dGhpbmcgZWxzZS4KKwkgKiBpdHMgY2FsbGJhY2sgYW5kIGxldCB0aGUgZmlybXdh cmUgaGFuZGxlcyBldmVyeXRoaW5nIGVsc2UuCiAJICovCiAJY3Jhc2hfZmFkdW1wKE5VTEwsIHB0 cik7Ci0JaWYgKHBwY19tZC5wYW5pYykKLQkJcHBjX21kLnBhbmljKHB0cik7ICAvKiBNYXkgbm90 IHJldHVybiAqLworCiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCi1zdGF0aWMgc3RydWN0IG5v dGlmaWVyX2Jsb2NrIHBwY19wYW5pY19ibG9jayA9IHsKLQkubm90aWZpZXJfY2FsbCA9IHBwY19w YW5pY19ldmVudCwKLQkucHJpb3JpdHkgPSBJTlRfTUlOIC8qIG1heSBub3QgcmV0dXJuOyBtdXN0 IGJlIGRvbmUgbGFzdCAqLwotfTsKLQotLyoKLSAqIER1bXAgb3V0IGtlcm5lbCBvZmZzZXQgaW5m b3JtYXRpb24gb24gcGFuaWMuCi0gKi8KIHN0YXRpYyBpbnQgZHVtcF9rZXJuZWxfb2Zmc2V0KHN0 cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyB2LAogCQkJICAgICAgdm9p ZCAqcCkKIHsKIAlwcl9lbWVyZygiS2VybmVsIE9mZnNldDogMHglbHggZnJvbSAweCVseFxuIiwK IAkJIGthc2xyX29mZnNldCgpLCBLRVJORUxCQVNFKTsKIAotCXJldHVybiAwOworCXJldHVybiBO T1RJRllfRE9ORTsKIH0KIAorc3RhdGljIGludCBwcGNfcGFuaWNfcGxhdGZvcm1faGFuZGxlcihz dHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBldmVu dCwgdm9pZCAqcHRyKQoreworCS8qCisJICogVGhpcyBoYW5kbGVyIGlzIG9ubHkgcmVnaXN0ZXJl ZCBpZiB3ZSBoYXZlIGEgcGFuaWMgY2FsbGJhY2sKKwkgKiBvbiBwcGNfbWQsIGhlbmNlIE5VTEwg Y2hlY2sgaXMgbm90IG5lZWRlZC4KKwkgKiBBbHNvLCBpdCBtYXkgbm90IHJldHVybiwgc28gaXQg cnVucyByZWFsbHkgbGF0ZSBvbiBwYW5pYyBwYXRoLgorCSAqLworCXBwY19tZC5wYW5pYyhwdHIp OworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Js b2NrIHBwY19mYWR1bXBfYmxvY2sgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwcGNfcGFuaWNfZmFk dW1wX2hhbmRsZXIsCisJLnByaW9yaXR5ID0gSU5UX01BWCwgLyogcnVuIGVhcmx5LCB0byBub3Rp ZnkgdGhlIGZpcm13YXJlIEFTQVAgKi8KK307CisKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sga2VybmVsX29mZnNldF9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGR1bXBfa2Vy bmVsX29mZnNldAorCS5ub3RpZmllcl9jYWxsID0gZHVtcF9rZXJuZWxfb2Zmc2V0LAorfTsKKwor c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwcGNfcGFuaWNfYmxvY2sgPSB7CisJLm5vdGlm aWVyX2NhbGwgPSBwcGNfcGFuaWNfcGxhdGZvcm1faGFuZGxlciwKKwkucHJpb3JpdHkgPSBJTlRf TUlOLCAvKiBtYXkgbm90IHJldHVybjsgbXVzdCBiZSBkb25lIGxhc3QgKi8KIH07CiAKIHZvaWQg X19pbml0IHNldHVwX3BhbmljKHZvaWQpCiB7CisJLyogSGFyZC1kaXNhYmxlcyBJUlFzICsgZGVh bCB3aXRoIEZXLWFzc2lzdGVkIGR1bXAgKGZhZHVtcCkgKi8KKwlhdG9taWNfbm90aWZpZXJfY2hh aW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJICAgICAgICZwcGNfZmFkdW1w X2Jsb2NrKTsKKwogCWlmIChJU19FTkFCTEVEKENPTkZJR19SQU5ET01JWkVfQkFTRSkgJiYga2Fz bHJfb2Zmc2V0KCkgPiAwKQogCQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmlj X25vdGlmaWVyX2xpc3QsCiAJCQkJCSAgICAgICAma2VybmVsX29mZnNldF9ub3RpZmllcik7CiAK LQkvKiBQUEM2NCBhbHdheXMgZG9lcyBhIGhhcmQgaXJxIGRpc2FibGUgaW4gaXRzIHBhbmljIGhh bmRsZXIgKi8KLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BQQzY0KSAmJiAhcHBjX21kLnBhbmlj KQotCQlyZXR1cm47Ci0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3Rp Zmllcl9saXN0LCAmcHBjX3BhbmljX2Jsb2NrKTsKKwkvKiBMb3ctbGV2ZWwgcGxhdGZvcm0tc3Bl Y2lmaWMgcm91dGluZXMgdGhhdCBzaG91bGQgcnVuIG9uIHBhbmljICovCisJaWYgKHBwY19tZC5w YW5pYykKKwkJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9s aXN0LAorCQkJCQkgICAgICAgJnBwY19wYW5pY19ibG9jayk7CiB9CiAKICNpZmRlZiBDT05GSUdf Q0hFQ0tfQ0FDSEVfQ09IRVJFTkNZCi0tIAoyLjM2LjAKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC11bSBtYWlsaW5nIGxpc3QKbGludXgtdW1A bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LXVtCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Guilherme G. Piccoli" Subject: [PATCH 08/30] powerpc/setup: Refactor/untangle panic notifiers Date: Wed, 27 Apr 2022 19:49:02 -0300 Message-ID: <20220427224924.592546-9-gpiccoli@igalia.com> References: <20220427224924.592546-1-gpiccoli@igalia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Y2aPxjd7XxAVBLO+3tJBWy/W9TU30MxwQ7IQ+ZOEsOE=; b=ctIUAgppSxfA76 vlxt0Zq+HwAhoHu5yFjr/Qe8IlO+eulF6R5eTeI86L5OeXgUxl2rUij4bwLhIvV9aGV73hr9BPuE4 KDP0mALgon9WOS6RJPj3iGLbJXXfg+NOIHfdGPJSnZAEw99S9uXd3HnLKiYsit/sP+/X/0DZgDwvN 9lQlri1HBNwLkGlK1rDit6cKu/O3HCkslGTIVzziR2V7fYg3rlT7WUse9t/be1W1TGlTOYPitv43Q UfETvy09ytgW0TIDbUEOCfkGbq3myImY5NhBRJLw1XW1frzI1JW118XyDvYrC5rPyldofRiNBF0pZ rZhSm8gQP/FzGKdUBWXA==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=/cdg0sKCsuwzrOmixxbC1Q4JQ/fbIS+o0nd/6r3SqdQ=; b=Ms53zbjgbkvE/VbvvERWDhiSlK xnfSZ26duHs4sJGmX9AjyiOpVrZ24qlvncFPTQgx0Ak1/K+qg/q6M3lNqtXBQSywskWJGGXxxZsyH 0ZCt9ADqjTi/3V+XCpSLOfo1kVbAL88rsa3CWloXQYrPcKcjm0fr5wkBOKZGIirx4MPHlXEq/lSP6 Wauj7ki9eqiIN/DWOEVCrOIQ5CDDEHA0P4AiVRkbPc3MLQuGkkZQLCDxyedC8rV+CPmlMqMLZGK7O pj27Q1YpHqsziDeg78TsiM6RPMIm39rOPoY53108P/vAvRYTx1t1bv7hv+1+u3acH1fsI00wIEzlf mvZOITKg==; In-Reply-To: <20220427224924.592546-1-gpiccoli@igalia.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-um" Errors-To: linux-um-bounces+glud-user-mode-linux-devel=m.gmane-mx.org@lists.infradead.org To: akpm@linux-foundation.org, bhe@redhat.com, pmladek@suse.com, kexec@lists.infradead.org Cc: linux-kernel@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, coresight@lists.linaro.org, linuxppc-dev@lists.ozlabs.org, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-leds@vger.kernel.org, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linux-pm@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, linux-tegra@vger.kernel.org, linux-um@lists.infradead.org, linux-xtensa@linux-xtensa.org, netdev@vger.kernel.org, openipmi-developer@lists.sourceforge.net, rcu@vger.kernel.org, sparclinux@vger.kernel.org, xen-devel@lists.xenproject.org, x86@kernel.org, kernel-dev@igalia.com, gpiccoli@igalia.com, kernel@gpiccoli.net, halves@canonical.com, fabiomirmar@gmail.com, alejandro.j.jimenez@oracle.com, andriy.shevchenko@linux.intel.com, arnd@arndb.de, bp@alien8. VGhlIHBhbmljIG5vdGlmaWVycyBpbmZyYXN0cnVjdHVyZSBpcyBhIGJpdCBsaW1pdGVkIGluIHRo ZSBzY29wZSBvZgp0aGUgY2FsbGJhY2tzIC0gYmFzaWNhbGx5IGV2ZXJ5IGtpbmQgb2YgZnVuY3Rp b25hbGl0eSBpcyBkcm9wcGVkCmluIGEgbGlzdCB0aGF0IHJ1bnMgaW4gdGhlIHNhbWUgcG9pbnQg ZHVyaW5nIHRoZSBrZXJuZWwgcGFuaWMgcGF0aC4KVGhpcyBpcyBub3QgcmVhbGx5IG9uIHBhciB3 aXRoIHRoZSBjb21wbGV4aXRpZXMgYW5kIHBhcnRpY3VsYXJpdGllcwpvZiBhcmNoaXRlY3R1cmUg LyBoeXBlcnZpc29ycycgbmVlZHMsIGFuZCBhIHJlZmFjdG9yIGlzIG9uZ29pbmcuCgpBcyBwYXJ0 IG9mIHRoaXMgcmVmYWN0b3IsIGl0IHdhcyBvYnNlcnZlZCB0aGF0IHBvd2VycGMgaGFzIDIgbm90 aWZpZXJzLAp3aXRoIG1peGVkIGdvYWxzOiBvbmUgaXMganVzdCBhIEtBU0xSIG9mZnNldCBkdW1w ZXIsIHdoZXJlYXMgdGhlIG90aGVyCmFpbXMgdG8gaGFyZC1kaXNhYmxlIElSUXMgKG5lY2Vzc2Fy eSBvbiBwYW5pYyBwYXRoKSwgd2FybiBmaXJtd2FyZSBvZgp0aGUgcGFuaWMgZXZlbnQgKGZhZHVt cCkgYW5kIHJ1biBsb3ctbGV2ZWwgcGxhdGZvcm0tc3BlY2lmaWMgbWFjaGluZXJ5CnRoYXQgbWln aHQgc3RvcCBrZXJuZWwgZXhlY3V0aW9uIGFuZCBuZXZlciBjb21lIGJhY2suCgpDbGVhcmx5LCB0 aGUgMm5kIG5vdGlmaWVyIGhhcyBvcHBvc2VkIGdvYWxzOiBkaXNhYmxlIElSUXMgLyBmYWR1bXAK c2hvdWxkIHJ1biBlYXJsaWVyIHdoaWxlIGxvdy1sZXZlbCBwbGF0Zm9ybSBhY3Rpb25zIHNob3Vs ZApydW4gbGF0ZSBzaW5jZSBpdCBtaWdodCBub3QgZXZlbiByZXR1cm4uIEhlbmNlLCB0aGlzIHBh dGNoIGRlY291cGxlcwp0aGUgbm90aWZpZXJzIHNwbGl0dGluZyB0aGVtIGluIHRocmVlOgoKLSBG aXJzdCBvbmUgaXMgcmVzcG9uc2libGUgZm9yIGhhcmQtZGlzYWJsZSBJUlFzIGFuZCBmYWR1bXAs CnNob3VsZCBydW4gZWFybHk7CgotIFRoZSBrZXJuZWwgS0FTTFIgb2Zmc2V0IGR1bXBlciBpcyBy ZWFsbHkgYW4gaW5mb3JtYXRpdmUgbm90aWZpZXIsCmhhcm1sZXNzIGFuZCBtYXkgcnVuIGF0IGFu eSBtb21lbnQgaW4gdGhlIHBhbmljIHBhdGg7CgotIFRoZSBsYXN0IG5vdGlmaWVyIHNob3VsZCBy dW4gbGFzdCwgc2luY2UgaXQgYWltcyB0byBwZXJmb3JtCmxvdy1sZXZlbCBhY3Rpb25zIGZvciBz cGVjaWZpYyBwbGF0Zm9ybXMsIGFuZCBtaWdodCBuZXZlciByZXR1cm4uCkl0IGlzIGFsc28gb25s eSByZWdpc3RlcmVkIGZvciAyIHBsYXRmb3JtcywgcHNlcmllcyBhbmQgcHMzLgoKVGhlIHBhdGNo IGJldHRlciBkb2N1bWVudHMgdGhlIG5vdGlmaWVycyBhbmQgY2xlYXJzIHRoZSBjb2RlIHRvbywK YWxzbyByZW1vdmluZyBhIHVzZWxlc3MgaGVhZGVyLgoKQ3VycmVudGx5IG5vIGZ1bmN0aW9uYWxp dHkgY2hhbmdlIHNob3VsZCBiZSBvYnNlcnZlZCwgYnV0IGFmdGVyCnRoZSBwbGFubmVkIHBhbmlj IHJlZmFjdG9yIHdlIHNob3VsZCBleHBlY3QgbW9yZSBwYW5pYyByZWxpYWJpbGl0eQp3aXRoIHRo aXMgcGF0Y2guCgpDYzogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hp bmcub3JnPgpDYzogSGFyaSBCYXRoaW5pIDxoYmF0aGluaUBsaW51eC5pYm0uY29tPgpDYzogTWlj aGFlbCBFbGxlcm1hbiA8bXBlQGVsbGVybWFuLmlkLmF1PgpDYzogTmljaG9sYXMgUGlnZ2luIDxu cGlnZ2luQGdtYWlsLmNvbT4KQ2M6IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgpT aWduZWQtb2ZmLWJ5OiBHdWlsaGVybWUgRy4gUGljY29saSA8Z3BpY2NvbGlAaWdhbGlhLmNvbT4K LS0tCgpXZSdkIGxpa2UgdG8gdGhhbmtzIHNwZWNpYWxseSB0aGUgTWluaUNsb3VkIGluZnJhc3Ry dWN0dXJlIFswXSBtYWludGFpbmVycywKdGhhdCBhbGxvdyB1cyB0byB0ZXN0IFBvd2VyUEMgY29k ZSBpbiBhIHZlcnkgY29tcGxldGUsIGZ1bmN0aW9uYWwgYW5kIEZSRUUKZW52aXJvbm1lbnQgKHRo ZXJlJ3Mgbm8gbmVlZCBldmVuIGZvciBhZGRpbmcgYSBjcmVkaXQgY2FyZCwgbGlrZSBtYW55ICJm cmVlIgpjbG91ZHMgcmVxdWlyZSDCrMKsICkuCgpbMF0gaHR0cHM6Ly9vcGVucG93ZXIuaWMudW5p Y2FtcC5ici9taW5pY2xvdWQKCiBhcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jIHwg NzQgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTQgaW5z ZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tl cm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMK aW5kZXggNTE4YWU1YWE5NDEwLi41MmY5NmIyMDlhOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJw Yy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1j b21tb24uYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNp bmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+ Ci0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNp bmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KQEAgLTY4 MCw4ICs2NzksMjUgQEAgaW50IGNoZWNrX2xlZ2FjeV9pb3BvcnQodW5zaWduZWQgbG9uZyBiYXNl X3BvcnQpCiB9CiBFWFBPUlRfU1lNQk9MKGNoZWNrX2xlZ2FjeV9pb3BvcnQpOwogCi1zdGF0aWMg aW50IHBwY19wYW5pY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKKy8q CisgKiBQYW5pYyBub3RpZmllcnMgc2V0dXAKKyAqCisgKiBXZSBoYXZlIDMgbm90aWZpZXJzIGZv ciBwb3dlcnBjLCBlYWNoIG9uZSBmcm9tIGEgZGlmZmVyZW50ICJuYXR1cmUiOgorICoKKyAqIC0g cHBjX3BhbmljX2ZhZHVtcF9oYW5kbGVyKCkgaXMgYSBoeXBlcnZpc29yIG5vdGlmaWVyLCB3aGlj aCBoYXJkLWRpc2FibGVzCisgKiAgIElSUXMgYW5kIGRlYWwgd2l0aCB0aGUgRmlybXdhcmUtQXNz aXN0ZWQgZHVtcCwgd2hlbiBpdCBpcyBjb25maWd1cmVkOworICogICBzaG91bGQgcnVuIGVhcmx5 IGluIHRoZSBwYW5pYyBwYXRoLgorICoKKyAqIC0gZHVtcF9rZXJuZWxfb2Zmc2V0KCkgaXMgYW4g aW5mb3JtYXRpdmUgbm90aWZpZXIsIGp1c3Qgc2hvd2luZyB0aGUgS0FTTFIKKyAqICAgb2Zmc2V0 IGlmIHdlIGhhdmUgUkFORE9NSVpFX0JBU0Ugc2V0LgorICoKKyAqIC0gcHBjX3BhbmljX3BsYXRm b3JtX2hhbmRsZXIoKSBpcyBhIGxvdy1sZXZlbCBoYW5kbGVyIHRoYXQncyByZWdpc3RlcmVkCisg KiAgIG9ubHkgaWYgdGhlIHBsYXRmb3JtIHdpc2hlcyB0byBwZXJmb3JtIGZpbmFsIGFjdGlvbnMg aW4gdGhlIHBhbmljIHBhdGgsCisgKiAgIGhlbmNlIGl0IHNob3VsZCBydW4gbGF0ZSBhbmQgbWln aHQgbm90IGV2ZW4gcmV0dXJuLiBDdXJyZW50bHksIG9ubHkKKyAqICAgcHNlcmllcyBhbmQgcHMz IHBsYXRmb3JtcyByZWdpc3RlciBjYWxsYmFja3MuCisgKi8KK3N0YXRpYyBpbnQgcHBjX3Bhbmlj X2ZhZHVtcF9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJCQkgICAgdW5z aWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewogCS8qCiAJICogcGFuaWMgZG9lcyBhIGxv Y2FsX2lycV9kaXNhYmxlLCBidXQgd2UgcmVhbGx5CkBAIC02OTEsNDUgKzcwNyw2MyBAQCBzdGF0 aWMgaW50IHBwY19wYW5pY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAKIAkv KgogCSAqIElmIGZpcm13YXJlLWFzc2lzdGVkIGR1bXAgaGFzIGJlZW4gcmVnaXN0ZXJlZCB0aGVu IHRyaWdnZXIKLQkgKiBmaXJtd2FyZS1hc3Npc3RlZCBkdW1wIGFuZCBsZXQgZmlybXdhcmUgaGFu ZGxlIGV2ZXJ5dGhpbmcgZWxzZS4KKwkgKiBpdHMgY2FsbGJhY2sgYW5kIGxldCB0aGUgZmlybXdh cmUgaGFuZGxlcyBldmVyeXRoaW5nIGVsc2UuCiAJICovCiAJY3Jhc2hfZmFkdW1wKE5VTEwsIHB0 cik7Ci0JaWYgKHBwY19tZC5wYW5pYykKLQkJcHBjX21kLnBhbmljKHB0cik7ICAvKiBNYXkgbm90 IHJldHVybiAqLworCiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCi1zdGF0aWMgc3RydWN0IG5v dGlmaWVyX2Jsb2NrIHBwY19wYW5pY19ibG9jayA9IHsKLQkubm90aWZpZXJfY2FsbCA9IHBwY19w YW5pY19ldmVudCwKLQkucHJpb3JpdHkgPSBJTlRfTUlOIC8qIG1heSBub3QgcmV0dXJuOyBtdXN0 IGJlIGRvbmUgbGFzdCAqLwotfTsKLQotLyoKLSAqIER1bXAgb3V0IGtlcm5lbCBvZmZzZXQgaW5m b3JtYXRpb24gb24gcGFuaWMuCi0gKi8KIHN0YXRpYyBpbnQgZHVtcF9rZXJuZWxfb2Zmc2V0KHN0 cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyB2LAogCQkJICAgICAgdm9p ZCAqcCkKIHsKIAlwcl9lbWVyZygiS2VybmVsIE9mZnNldDogMHglbHggZnJvbSAweCVseFxuIiwK IAkJIGthc2xyX29mZnNldCgpLCBLRVJORUxCQVNFKTsKIAotCXJldHVybiAwOworCXJldHVybiBO T1RJRllfRE9ORTsKIH0KIAorc3RhdGljIGludCBwcGNfcGFuaWNfcGxhdGZvcm1faGFuZGxlcihz dHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBldmVu dCwgdm9pZCAqcHRyKQoreworCS8qCisJICogVGhpcyBoYW5kbGVyIGlzIG9ubHkgcmVnaXN0ZXJl ZCBpZiB3ZSBoYXZlIGEgcGFuaWMgY2FsbGJhY2sKKwkgKiBvbiBwcGNfbWQsIGhlbmNlIE5VTEwg Y2hlY2sgaXMgbm90IG5lZWRlZC4KKwkgKiBBbHNvLCBpdCBtYXkgbm90IHJldHVybiwgc28gaXQg cnVucyByZWFsbHkgbGF0ZSBvbiBwYW5pYyBwYXRoLgorCSAqLworCXBwY19tZC5wYW5pYyhwdHIp OworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Js b2NrIHBwY19mYWR1bXBfYmxvY2sgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwcGNfcGFuaWNfZmFk dW1wX2hhbmRsZXIsCisJLnByaW9yaXR5ID0gSU5UX01BWCwgLyogcnVuIGVhcmx5LCB0byBub3Rp ZnkgdGhlIGZpcm13YXJlIEFTQVAgKi8KK307CisKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sga2VybmVsX29mZnNldF9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGR1bXBfa2Vy bmVsX29mZnNldAorCS5ub3RpZmllcl9jYWxsID0gZHVtcF9rZXJuZWxfb2Zmc2V0LAorfTsKKwor c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwcGNfcGFuaWNfYmxvY2sgPSB7CisJLm5vdGlm aWVyX2NhbGwgPSBwcGNfcGFuaWNfcGxhdGZvcm1faGFuZGxlciwKKwkucHJpb3JpdHkgPSBJTlRf TUlOLCAvKiBtYXkgbm90IHJldHVybjsgbXVzdCBiZSBkb25lIGxhc3QgKi8KIH07CiAKIHZvaWQg X19pbml0IHNldHVwX3BhbmljKHZvaWQpCiB7CisJLyogSGFyZC1kaXNhYmxlcyBJUlFzICsgZGVh bCB3aXRoIEZXLWFzc2lzdGVkIGR1bXAgKGZhZHVtcCkgKi8KKwlhdG9taWNfbm90aWZpZXJfY2hh aW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJICAgICAgICZwcGNfZmFkdW1w X2Jsb2NrKTsKKwogCWlmIChJU19FTkFCTEVEKENPTkZJR19SQU5ET01JWkVfQkFTRSkgJiYga2Fz bHJfb2Zmc2V0KCkgPiAwKQogCQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmlj X25vdGlmaWVyX2xpc3QsCiAJCQkJCSAgICAgICAma2VybmVsX29mZnNldF9ub3RpZmllcik7CiAK LQkvKiBQUEM2NCBhbHdheXMgZG9lcyBhIGhhcmQgaXJxIGRpc2FibGUgaW4gaXRzIHBhbmljIGhh bmRsZXIgKi8KLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BQQzY0KSAmJiAhcHBjX21kLnBhbmlj KQotCQlyZXR1cm47Ci0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3Rp Zmllcl9saXN0LCAmcHBjX3BhbmljX2Jsb2NrKTsKKwkvKiBMb3ctbGV2ZWwgcGxhdGZvcm0tc3Bl Y2lmaWMgcm91dGluZXMgdGhhdCBzaG91bGQgcnVuIG9uIHBhbmljICovCisJaWYgKHBwY19tZC5w YW5pYykKKwkJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9s aXN0LAorCQkJCQkgICAgICAgJnBwY19wYW5pY19ibG9jayk7CiB9CiAKICNpZmRlZiBDT05GSUdf Q0hFQ0tfQ0FDSEVfQ09IRVJFTkNZCi0tIAoyLjM2LjAKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC11bSBtYWlsaW5nIGxpc3QKbGludXgtdW1A bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LXVtCg==