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 19B89C43217 for ; Thu, 28 Apr 2022 16:26:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1349994AbiD1Q3j (ORCPT ); Thu, 28 Apr 2022 12:29:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40592 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236309AbiD1Q3h (ORCPT ); Thu, 28 Apr 2022 12:29:37 -0400 Received: from mail-qt1-x832.google.com (mail-qt1-x832.google.com [IPv6:2607:f8b0:4864:20::832]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCB6313F9C; Thu, 28 Apr 2022 09:26:20 -0700 (PDT) Received: by mail-qt1-x832.google.com with SMTP id o11so3837281qtp.13; Thu, 28 Apr 2022 09:26:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:date:from:to:cc:subject:message-id:reply-to:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=X61ynYOTK5MLCYojT5d+ysrbHRt63RIFwyQAXjqYUNE=; b=RB+bl5iS3eKUU1+cjBBmoZPJ1GgbW8A749d7YnZ5vNC1ZTUNv7WuO8EMH81G6FfKTS ULk5loh6t/tF8m/LAK3UZqNRLeu4MFN0UjekospklQvLFm841ye1F/VzC3oleDitZ9O1 cvCfYdbM5VdBWJyGeksEVUvI/wAmKaB1Xib5pllqvVtHqYCR321S43b6ZumXK649aRhK zYDyDYBYNmM0JL+Vo7iNHObeaqoFD1y1D4cNFPF7xZzMMMNiqfQKAckfc8DPi2gZdtiq 5S67VXHmy+E6AUijmYawjpiuSvLWVR0T3rL6kGpPqkjomB2poiuXMcy1kF9nEqMyvOX9 Yn4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :reply-to:references:mime-version:content-disposition :content-transfer-encoding:in-reply-to; bh=X61ynYOTK5MLCYojT5d+ysrbHRt63RIFwyQAXjqYUNE=; b=WHwb/i+2yQiIenqY4wV4BnOCZTgasJ36Z9xG4wSgovbBc79LFoGGFd4/+uQ9XBE3WL 4Zxpa5r/oVHz5nAskWeaLveIJt/0a964rujMlP+fP9WANTQq9MSPk1AKsfqG9AUBIgH7 NmtS6NSPLA+0QBSDaXo6EV4EEa7XOSvusRUX75r/XV/wJLTB/1btSzuTVVK7UxihtaAj on0B0nLKH75llnu282mLkDlfI9iPIhAFeozDrVOTDQdZZ/io49SRIU3nETyx7/OQmJvy vpfOgp0WY3HzOrOl6aaOM2+QrLtHN9z503av+J66cEo7UP7KZvL3I+2GK6+Sl53PPVC4 /0Xg== X-Gm-Message-State: AOAM532D3mqhAcvl1m90zMtv2fE/17sL8jjAJZ8FPLgqM5We3aSgwOJ3 39XxqWXPgIQLSSym4ly5vQ== X-Google-Smtp-Source: ABdhPJwQWmh1NckrL0EIJZ1oxySS8ak8a2nTI4RkzvZKUWaPk/92sofmAHiS6iQOI6gZ/iWH6wc1qw== X-Received: by 2002:a05:622a:587:b0:2f3:7dd7:d0e0 with SMTP id c7-20020a05622a058700b002f37dd7d0e0mr9703420qtb.438.1651163179631; Thu, 28 Apr 2022 09:26:19 -0700 (PDT) Received: from serve.minyard.net ([47.184.144.75]) by smtp.gmail.com with ESMTPSA id b9-20020a05620a0f8900b0069e84c5352asm169843qkn.47.2022.04.28.09.26.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Apr 2022 09:26:19 -0700 (PDT) Sender: Corey Minyard Received: from minyard.net (unknown [IPv6:2001:470:b8f6:1b:ccae:2ff0:f27f:9218]) by serve.minyard.net (Postfix) with ESMTPSA id 993C41800BB; Thu, 28 Apr 2022 16:26:17 +0000 (UTC) Date: Thu, 28 Apr 2022 11:26:16 -0500 From: Corey Minyard To: "Guilherme G. Piccoli" Cc: akpm@linux-foundation.org, bhe@redhat.com, pmladek@suse.com, kexec@lists.infradead.org, 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, 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, Alex Elder , Alexander Gordeev , Anton Ivanov , Benjamin Herrenschmidt , Bjorn Andersson , Boris Ostrovsky , Chris Zankel , Christian Borntraeger , Dexuan Cui , "H. Peter Anvin" , Haiyang Zhang , Heiko Carstens , Helge Deller , Ivan Kokshaysky , "James E.J. Bottomley" , James Morse , Johannes Berg , "K. Y. Srinivasan" , Mathieu Poirier , Matt Turner , Mauro Carvalho Chehab , Max Filippov , Michael Ellerman , Paul Mackerras , Pavel Machek , Richard Henderson , Richard Weinberger , Robert Richter , Stefano Stabellini , Stephen Hemminger , Sven Schnelle , Tony Luck , Vasily Gorbik , Wei Liu Subject: Re: [PATCH 21/30] panic: Introduce the panic pre-reboot notifier list Message-ID: <20220428162616.GE442787@minyard.net> Reply-To: minyard@acm.org References: <20220427224924.592546-1-gpiccoli@igalia.com> <20220427224924.592546-22-gpiccoli@igalia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220427224924.592546-22-gpiccoli@igalia.com> Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org On Wed, Apr 27, 2022 at 07:49:15PM -0300, Guilherme G. Piccoli wrote: > This patch renames the panic_notifier_list to panic_pre_reboot_list; > the idea is that a subsequent patch will refactor the panic path > in order to better split the notifiers, running some of them very > early, some of them not so early [but still before kmsg_dump()] and > finally, the rest should execute late, after kdump. The latter ones > are now in the panic pre-reboot list - the name comes from the idea > that these notifiers execute before panic() attempts rebooting the > machine (if that option is set). > > We also took the opportunity to clean-up useless header inclusions, > improve some notifier block declarations (e.g. in ibmasm/heartbeat.c) > and more important, change some priorities - we hereby set 2 notifiers > to run late in the list [iss_panic_event() and the IPMI panic_event()] > due to the risks they offer (may not return, for example). > Proper documentation is going to be provided in a subsequent patch, > that effectively refactors the panic path. For the IPMI portion: Acked-by: Corey Minyard Note that the IPMI panic_event() should always return, but it may take some time, especially if the IPMI controller is no longer functional. So the risk of a long delay is there and it makes sense to move it very late. -corey > > Cc: Alex Elder > Cc: Alexander Gordeev > Cc: Anton Ivanov > Cc: Benjamin Herrenschmidt > Cc: Bjorn Andersson > Cc: Boris Ostrovsky > Cc: Chris Zankel > Cc: Christian Borntraeger > Cc: Corey Minyard > Cc: Dexuan Cui > Cc: "H. Peter Anvin" > Cc: Haiyang Zhang > Cc: Heiko Carstens > Cc: Helge Deller > Cc: Ivan Kokshaysky > Cc: "James E.J. Bottomley" > Cc: James Morse > Cc: Johannes Berg > Cc: Juergen Gross > Cc: "K. Y. Srinivasan" > Cc: Mathieu Poirier > Cc: Matt Turner > Cc: Mauro Carvalho Chehab > Cc: Max Filippov > Cc: Michael Ellerman > Cc: Paul Mackerras > Cc: Pavel Machek > Cc: Richard Henderson > Cc: Richard Weinberger > Cc: Robert Richter > Cc: Stefano Stabellini > Cc: Stephen Hemminger > Cc: Sven Schnelle > Cc: Tony Luck > Cc: Vasily Gorbik > Cc: Wei Liu > Signed-off-by: Guilherme G. Piccoli > --- > > Notice that, with this name change, out-of-tree code that relies in the global > exported "panic_notifier_list" will fail to build. We could easily keep the > retro-compatibility by making the old symbol to still exist and point to the > pre_reboot list (or even, keep the old naming). > > But our design choice was to allow the breakage, making users rethink their > notifiers, adding them in the list that fits best. If that wasn't a good > decision, we're open to change it, of course. > Thanks in advance for the review! > > arch/alpha/kernel/setup.c | 4 ++-- > arch/parisc/kernel/pdc_chassis.c | 3 +-- > arch/powerpc/kernel/setup-common.c | 2 +- > arch/s390/kernel/ipl.c | 4 ++-- > arch/um/drivers/mconsole_kern.c | 2 +- > arch/um/kernel/um_arch.c | 2 +- > arch/x86/xen/enlighten.c | 2 +- > arch/xtensa/platforms/iss/setup.c | 4 ++-- > drivers/char/ipmi/ipmi_msghandler.c | 12 +++++++----- > drivers/edac/altera_edac.c | 3 +-- > drivers/hv/vmbus_drv.c | 4 ++-- > drivers/leds/trigger/ledtrig-panic.c | 3 +-- > drivers/misc/ibmasm/heartbeat.c | 16 +++++++++------- > drivers/net/ipa/ipa_smp2p.c | 5 ++--- > drivers/parisc/power.c | 4 ++-- > drivers/remoteproc/remoteproc_core.c | 6 ++++-- > drivers/s390/char/con3215.c | 2 +- > drivers/s390/char/con3270.c | 2 +- > drivers/s390/char/sclp_con.c | 2 +- > drivers/s390/char/sclp_vt220.c | 2 +- > drivers/staging/olpc_dcon/olpc_dcon.c | 6 ++++-- > drivers/video/fbdev/hyperv_fb.c | 4 ++-- > include/linux/panic_notifier.h | 2 +- > kernel/panic.c | 9 ++++----- > 24 files changed, 54 insertions(+), 51 deletions(-) > > diff --git a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c > index d88bdf852753..8ace0d7113b6 100644 > --- a/arch/alpha/kernel/setup.c > +++ b/arch/alpha/kernel/setup.c > @@ -472,8 +472,8 @@ setup_arch(char **cmdline_p) > } > > /* Register a call for panic conditions. */ > - atomic_notifier_chain_register(&panic_notifier_list, > - &alpha_panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &alpha_panic_block); > > #ifndef alpha_using_srm > /* Assume that we've booted from SRM if we haven't booted from MILO. > diff --git a/arch/parisc/kernel/pdc_chassis.c b/arch/parisc/kernel/pdc_chassis.c > index da154406d368..0fd8d87fb4f9 100644 > --- a/arch/parisc/kernel/pdc_chassis.c > +++ b/arch/parisc/kernel/pdc_chassis.c > @@ -22,7 +22,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -135,7 +134,7 @@ void __init parisc_pdc_chassis_init(void) > PDC_CHASSIS_VER); > > /* initialize panic notifier chain */ > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &pdc_chassis_panic_block); > > /* initialize reboot notifier chain */ > diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c > index d04b8bf8dbc7..3518bebc10ad 100644 > --- a/arch/powerpc/kernel/setup-common.c > +++ b/arch/powerpc/kernel/setup-common.c > @@ -762,7 +762,7 @@ void __init setup_panic(void) > > /* Low-level platform-specific routines that should run on panic */ > if (ppc_md.panic) > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &ppc_panic_block); > } > > diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c > index 1cc85b8ff42e..4a88c5bb6e15 100644 > --- a/arch/s390/kernel/ipl.c > +++ b/arch/s390/kernel/ipl.c > @@ -2034,7 +2034,7 @@ static int on_panic_notify(struct notifier_block *self, > unsigned long event, void *data) > { > do_panic(); > - return NOTIFY_OK; > + return NOTIFY_DONE; > } > > static struct notifier_block on_panic_nb = { > @@ -2069,7 +2069,7 @@ void __init setup_ipl(void) > /* We have no info to copy */ > break; > } > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > } > > void s390_reset_system(void) > diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c > index 2ea0421bcc3f..21c13b4e24a3 100644 > --- a/arch/um/drivers/mconsole_kern.c > +++ b/arch/um/drivers/mconsole_kern.c > @@ -855,7 +855,7 @@ static struct notifier_block panic_exit_notifier = { > > static int add_notifier(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &panic_exit_notifier); > return 0; > } > diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c > index 4485b1a7c8e4..fc6e443299da 100644 > --- a/arch/um/kernel/um_arch.c > +++ b/arch/um/kernel/um_arch.c > @@ -257,7 +257,7 @@ static struct notifier_block panic_exit_notifier = { > > void uml_finishsetup(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &panic_exit_notifier); > > uml_postsetup(); > diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c > index 30c6e986a6cd..d4f4de239a21 100644 > --- a/arch/x86/xen/enlighten.c > +++ b/arch/x86/xen/enlighten.c > @@ -290,7 +290,7 @@ static struct notifier_block xen_panic_block = { > > int xen_panic_handler_init(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &xen_panic_block); > return 0; > } > > diff --git a/arch/xtensa/platforms/iss/setup.c b/arch/xtensa/platforms/iss/setup.c > index d3433e1bb94e..eeeeb6cff6bd 100644 > --- a/arch/xtensa/platforms/iss/setup.c > +++ b/arch/xtensa/platforms/iss/setup.c > @@ -13,7 +13,6 @@ > */ > #include > #include > -#include > #include > #include > #include > @@ -53,6 +52,7 @@ iss_panic_event(struct notifier_block *this, unsigned long event, void *ptr) > > static struct notifier_block iss_panic_block = { > .notifier_call = iss_panic_event, > + .priority = INT_MIN, /* run as late as possible, may not return */ > }; > > void __init platform_setup(char **p_cmdline) > @@ -81,5 +81,5 @@ void __init platform_setup(char **p_cmdline) > } > } > > - atomic_notifier_chain_register(&panic_notifier_list, &iss_panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &iss_panic_block); > } > diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c > index c59265146e9c..6c4770949c01 100644 > --- a/drivers/char/ipmi/ipmi_msghandler.c > +++ b/drivers/char/ipmi/ipmi_msghandler.c > @@ -25,7 +25,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -5375,10 +5374,13 @@ static int ipmi_register_driver(void) > return rv; > } > > +/* > + * we should execute this panic callback late, since it involves > + * a complex call-chain and panic() runs in atomic context. > + */ > static struct notifier_block panic_block = { > .notifier_call = panic_event, > - .next = NULL, > - .priority = 200 /* priority: INT_MAX >= x >= 0 */ > + .priority = INT_MIN + 1, > }; > > static int ipmi_init_msghandler(void) > @@ -5406,7 +5408,7 @@ static int ipmi_init_msghandler(void) > timer_setup(&ipmi_timer, ipmi_timeout, 0); > mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES); > > - atomic_notifier_chain_register(&panic_notifier_list, &panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &panic_block); > > initialized = true; > > @@ -5438,7 +5440,7 @@ static void __exit cleanup_ipmi(void) > if (initialized) { > destroy_workqueue(remove_work_wq); > > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &panic_block); > > /* > diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c > index e7e8e624a436..4890e9cba6fb 100644 > --- a/drivers/edac/altera_edac.c > +++ b/drivers/edac/altera_edac.c > @@ -16,7 +16,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -2163,7 +2162,7 @@ static int altr_edac_a10_probe(struct platform_device *pdev) > int dberror, err_addr; > > edac->panic_notifier.notifier_call = s10_edac_dberr_handler; > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &edac->panic_notifier); > > /* Printout a message if uncorrectable error previously. */ > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index 901b97034308..3717c323aa36 100644 > --- a/drivers/hv/vmbus_drv.c > +++ b/drivers/hv/vmbus_drv.c > @@ -1622,7 +1622,7 @@ static int vmbus_bus_init(void) > * Always register the vmbus unload panic notifier because we > * need to shut the VMbus channel connection on panic. > */ > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &hyperv_panic_vmbus_unload_block); > > vmbus_request_offers(); > @@ -2851,7 +2851,7 @@ static void __exit vmbus_exit(void) > * The vmbus panic notifier is always registered, hence we should > * also unconditionally unregister it here as well. > */ > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &hyperv_panic_vmbus_unload_block); > > free_page((unsigned long)hv_panic_page); > diff --git a/drivers/leds/trigger/ledtrig-panic.c b/drivers/leds/trigger/ledtrig-panic.c > index 64abf2e91608..34fd5170723f 100644 > --- a/drivers/leds/trigger/ledtrig-panic.c > +++ b/drivers/leds/trigger/ledtrig-panic.c > @@ -7,7 +7,6 @@ > > #include > #include > -#include > #include > #include > #include "../leds.h" > @@ -64,7 +63,7 @@ static long led_panic_blink(int state) > > static int __init ledtrig_panic_init(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &led_trigger_panic_nb); > > led_trigger_register_simple("panic", &trigger); > diff --git a/drivers/misc/ibmasm/heartbeat.c b/drivers/misc/ibmasm/heartbeat.c > index 59c9a0d95659..d6acae88b722 100644 > --- a/drivers/misc/ibmasm/heartbeat.c > +++ b/drivers/misc/ibmasm/heartbeat.c > @@ -8,7 +8,6 @@ > * Author: Max Asböck > */ > > -#include > #include > #include "ibmasm.h" > #include "dot_command.h" > @@ -24,7 +23,7 @@ static int suspend_heartbeats = 0; > * In the case of a panic the interrupt handler continues to work and thus > * continues to respond to heartbeats, making the service processor believe > * the OS is still running and thus preventing a reboot. > - * To prevent this from happening a callback is added the panic_notifier_list. > + * To prevent this from happening a callback is added in a panic notifier list. > * Before responding to a heartbeat the driver checks if a panic has happened, > * if yes it suspends heartbeat, causing the service processor to reboot as > * expected. > @@ -32,20 +31,23 @@ static int suspend_heartbeats = 0; > static int panic_happened(struct notifier_block *n, unsigned long val, void *v) > { > suspend_heartbeats = 1; > - return 0; > + return NOTIFY_DONE; > } > > -static struct notifier_block panic_notifier = { panic_happened, NULL, 1 }; > +static struct notifier_block panic_notifier = { > + .notifier_call = panic_happened, > +}; > > void ibmasm_register_panic_notifier(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, &panic_notifier); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &panic_notifier); > } > > void ibmasm_unregister_panic_notifier(void) > { > - atomic_notifier_chain_unregister(&panic_notifier_list, > - &panic_notifier); > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > + &panic_notifier); > } > > > diff --git a/drivers/net/ipa/ipa_smp2p.c b/drivers/net/ipa/ipa_smp2p.c > index 211233612039..92cdf6e0637c 100644 > --- a/drivers/net/ipa/ipa_smp2p.c > +++ b/drivers/net/ipa/ipa_smp2p.c > @@ -7,7 +7,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -138,13 +137,13 @@ static int ipa_smp2p_panic_notifier_register(struct ipa_smp2p *smp2p) > smp2p->panic_notifier.notifier_call = ipa_smp2p_panic_notifier; > smp2p->panic_notifier.priority = INT_MAX; /* Do it early */ > > - return atomic_notifier_chain_register(&panic_notifier_list, > + return atomic_notifier_chain_register(&panic_pre_reboot_list, > &smp2p->panic_notifier); > } > > static void ipa_smp2p_panic_notifier_unregister(struct ipa_smp2p *smp2p) > { > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &smp2p->panic_notifier); > } > > diff --git a/drivers/parisc/power.c b/drivers/parisc/power.c > index 8512884de2cf..5bb0868f5f08 100644 > --- a/drivers/parisc/power.c > +++ b/drivers/parisc/power.c > @@ -233,7 +233,7 @@ static int __init power_init(void) > } > > /* Register a call for panic conditions. */ > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &parisc_panic_block); > > return 0; > @@ -243,7 +243,7 @@ static void __exit power_exit(void) > { > kthread_stop(power_task); > > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &parisc_panic_block); > > pdc_soft_power_button(0); > diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c > index c510125769b9..24799ff239e6 100644 > --- a/drivers/remoteproc/remoteproc_core.c > +++ b/drivers/remoteproc/remoteproc_core.c > @@ -2795,12 +2795,14 @@ static int rproc_panic_handler(struct notifier_block *nb, unsigned long event, > static void __init rproc_init_panic(void) > { > rproc_panic_nb.notifier_call = rproc_panic_handler; > - atomic_notifier_chain_register(&panic_notifier_list, &rproc_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &rproc_panic_nb); > } > > static void __exit rproc_exit_panic(void) > { > - atomic_notifier_chain_unregister(&panic_notifier_list, &rproc_panic_nb); > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > + &rproc_panic_nb); > } > > static int __init remoteproc_init(void) > diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c > index 192198bd3dc4..07379dd3f1f3 100644 > --- a/drivers/s390/char/con3215.c > +++ b/drivers/s390/char/con3215.c > @@ -867,7 +867,7 @@ static int __init con3215_init(void) > raw3215[0] = NULL; > return -ENODEV; > } > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&con3215); > return 0; > diff --git a/drivers/s390/char/con3270.c b/drivers/s390/char/con3270.c > index 476202f3d8a0..e79bf3e7bde3 100644 > --- a/drivers/s390/char/con3270.c > +++ b/drivers/s390/char/con3270.c > @@ -645,7 +645,7 @@ con3270_init(void) > condev->cline->len = 0; > con3270_create_status(condev); > condev->input = alloc_string(&condev->freemem, 80); > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&con3270); > return 0; > diff --git a/drivers/s390/char/sclp_con.c b/drivers/s390/char/sclp_con.c > index e5d947c763ea..7ca9d4c45d60 100644 > --- a/drivers/s390/char/sclp_con.c > +++ b/drivers/s390/char/sclp_con.c > @@ -288,7 +288,7 @@ sclp_console_init(void) > timer_setup(&sclp_con_timer, sclp_console_timeout, 0); > > /* enable printk-access to this driver */ > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&sclp_console); > return 0; > diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c > index a32f34a1c6d2..97cf9e290c28 100644 > --- a/drivers/s390/char/sclp_vt220.c > +++ b/drivers/s390/char/sclp_vt220.c > @@ -838,7 +838,7 @@ sclp_vt220_con_init(void) > if (rc) > return rc; > /* Attach linux console */ > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&sclp_vt220_console); > return 0; > diff --git a/drivers/staging/olpc_dcon/olpc_dcon.c b/drivers/staging/olpc_dcon/olpc_dcon.c > index 7284cb4ac395..cb50471f2246 100644 > --- a/drivers/staging/olpc_dcon/olpc_dcon.c > +++ b/drivers/staging/olpc_dcon/olpc_dcon.c > @@ -653,7 +653,8 @@ static int dcon_probe(struct i2c_client *client, const struct i2c_device_id *id) > } > > register_reboot_notifier(&dcon->reboot_nb); > - atomic_notifier_chain_register(&panic_notifier_list, &dcon_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &dcon_panic_nb); > > return 0; > > @@ -676,7 +677,8 @@ static int dcon_remove(struct i2c_client *client) > struct dcon_priv *dcon = i2c_get_clientdata(client); > > unregister_reboot_notifier(&dcon->reboot_nb); > - atomic_notifier_chain_unregister(&panic_notifier_list, &dcon_panic_nb); > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > + &dcon_panic_nb); > > free_irq(DCON_IRQ, dcon); > > diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c > index f3494b868a64..ec21e63592be 100644 > --- a/drivers/video/fbdev/hyperv_fb.c > +++ b/drivers/video/fbdev/hyperv_fb.c > @@ -1253,7 +1253,7 @@ static int hvfb_probe(struct hv_device *hdev, > */ > par->hvfb_panic_nb.notifier_call = hvfb_on_panic; > par->hvfb_panic_nb.priority = INT_MIN + 10, > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &par->hvfb_panic_nb); > > return 0; > @@ -1276,7 +1276,7 @@ static int hvfb_remove(struct hv_device *hdev) > struct fb_info *info = hv_get_drvdata(hdev); > struct hvfb_par *par = info->par; > > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &par->hvfb_panic_nb); > > par->update = false; > diff --git a/include/linux/panic_notifier.h b/include/linux/panic_notifier.h > index 7364a346bcb0..7912aacbc0e5 100644 > --- a/include/linux/panic_notifier.h > +++ b/include/linux/panic_notifier.h > @@ -5,9 +5,9 @@ > #include > #include > > -extern struct atomic_notifier_head panic_notifier_list; > extern struct atomic_notifier_head panic_hypervisor_list; > extern struct atomic_notifier_head panic_info_list; > +extern struct atomic_notifier_head panic_pre_reboot_list; > > extern bool crash_kexec_post_notifiers; > > diff --git a/kernel/panic.c b/kernel/panic.c > index 73ca1bc44e30..a9d43b98b05b 100644 > --- a/kernel/panic.c > +++ b/kernel/panic.c > @@ -69,16 +69,15 @@ EXPORT_SYMBOL_GPL(panic_timeout); > #define PANIC_PRINT_ALL_CPU_BT 0x00000040 > unsigned long panic_print; > > -ATOMIC_NOTIFIER_HEAD(panic_notifier_list); > - > -EXPORT_SYMBOL(panic_notifier_list); > - > ATOMIC_NOTIFIER_HEAD(panic_hypervisor_list); > EXPORT_SYMBOL(panic_hypervisor_list); > > ATOMIC_NOTIFIER_HEAD(panic_info_list); > EXPORT_SYMBOL(panic_info_list); > > +ATOMIC_NOTIFIER_HEAD(panic_pre_reboot_list); > +EXPORT_SYMBOL(panic_pre_reboot_list); > + > static long no_blink(int state) > { > return 0; > @@ -295,7 +294,7 @@ void panic(const char *fmt, ...) > */ > atomic_notifier_call_chain(&panic_hypervisor_list, PANIC_NOTIFIER, buf); > atomic_notifier_call_chain(&panic_info_list, PANIC_NOTIFIER, buf); > - atomic_notifier_call_chain(&panic_notifier_list, PANIC_NOTIFIER, buf); > + atomic_notifier_call_chain(&panic_pre_reboot_list, PANIC_NOTIFIER, buf); > > panic_print_sys_info(false); > > -- > 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 8EED1C433F5 for ; Fri, 29 Apr 2022 00:43:34 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KqDHm63KVz3c7P for ; Fri, 29 Apr 2022 10:43:32 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=RB+bl5iS; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::833; helo=mail-qt1-x833.google.com; envelope-from=tcminyard@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=RB+bl5iS; dkim-atps=neutral Received: from mail-qt1-x833.google.com (mail-qt1-x833.google.com [IPv6:2607:f8b0:4864:20::833]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4Kq1G86mjLz3bZp for ; Fri, 29 Apr 2022 02:26:23 +1000 (AEST) Received: by mail-qt1-x833.google.com with SMTP id y3so3858608qtn.8 for ; Thu, 28 Apr 2022 09:26:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:date:from:to:cc:subject:message-id:reply-to:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=X61ynYOTK5MLCYojT5d+ysrbHRt63RIFwyQAXjqYUNE=; b=RB+bl5iS3eKUU1+cjBBmoZPJ1GgbW8A749d7YnZ5vNC1ZTUNv7WuO8EMH81G6FfKTS ULk5loh6t/tF8m/LAK3UZqNRLeu4MFN0UjekospklQvLFm841ye1F/VzC3oleDitZ9O1 cvCfYdbM5VdBWJyGeksEVUvI/wAmKaB1Xib5pllqvVtHqYCR321S43b6ZumXK649aRhK zYDyDYBYNmM0JL+Vo7iNHObeaqoFD1y1D4cNFPF7xZzMMMNiqfQKAckfc8DPi2gZdtiq 5S67VXHmy+E6AUijmYawjpiuSvLWVR0T3rL6kGpPqkjomB2poiuXMcy1kF9nEqMyvOX9 Yn4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :reply-to:references:mime-version:content-disposition :content-transfer-encoding:in-reply-to; bh=X61ynYOTK5MLCYojT5d+ysrbHRt63RIFwyQAXjqYUNE=; b=1o0qN07zzAfgSHwzyhjd6c20dtajjcjwWX121RN/U6crZimO/KqVyJZ4rUJQkPVp7l T3JMTQuCBVjLsrJT6OUnx90zxdbJ8nUmAWp1C1bJQAaltXHbACmEePH4HgsHM3pWNVL2 ZfrlseYeLcThpkfx4a8YMIZShN+fzNTqPgUcIO1brFc9DbM4NYUv5kTQoZyWhQXXmXzl pXBCyK0LynuGqHUaHMIeeDl8yT9v1eLR9cNJWoLjifJdARDiq2F1LX7vI+olR8hLKD84 EKZ6elOG9Rn/QX4OUpZfB7lCXpEwPg4auL5thp6VfL7mtU9PDj7xd2kLRR1ZXAjZ128E VL0Q== X-Gm-Message-State: AOAM531QUS2eFtafJ9jQg3aSxY4G2OW0yMs4OI9Pef2TQZGhAYNoRhbu cK9zPrtzzUHO6SUIQ0n4wA== X-Google-Smtp-Source: ABdhPJwQWmh1NckrL0EIJZ1oxySS8ak8a2nTI4RkzvZKUWaPk/92sofmAHiS6iQOI6gZ/iWH6wc1qw== X-Received: by 2002:a05:622a:587:b0:2f3:7dd7:d0e0 with SMTP id c7-20020a05622a058700b002f37dd7d0e0mr9703420qtb.438.1651163179631; Thu, 28 Apr 2022 09:26:19 -0700 (PDT) Received: from serve.minyard.net ([47.184.144.75]) by smtp.gmail.com with ESMTPSA id b9-20020a05620a0f8900b0069e84c5352asm169843qkn.47.2022.04.28.09.26.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Apr 2022 09:26:19 -0700 (PDT) Received: from minyard.net (unknown [IPv6:2001:470:b8f6:1b:ccae:2ff0:f27f:9218]) by serve.minyard.net (Postfix) with ESMTPSA id 993C41800BB; Thu, 28 Apr 2022 16:26:17 +0000 (UTC) Date: Thu, 28 Apr 2022 11:26:16 -0500 From: Corey Minyard To: "Guilherme G. Piccoli" Subject: Re: [PATCH 21/30] panic: Introduce the panic pre-reboot notifier list Message-ID: <20220428162616.GE442787@minyard.net> References: <20220427224924.592546-1-gpiccoli@igalia.com> <20220427224924.592546-22-gpiccoli@igalia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220427224924.592546-22-gpiccoli@igalia.com> X-Mailman-Approved-At: Fri, 29 Apr 2022 10:42:18 +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: , Reply-To: minyard@acm.org Cc: Paul Mackerras , Pavel Machek , Alexander Gordeev , "K. Y. Srinivasan" , Wei Liu , stern@rowland.harvard.edu, xen-devel@lists.xenproject.org, Matt Turner , Christian Borntraeger , pmladek@suse.com, linux-pm@vger.kernel.org, linux-um@lists.infradead.org, luto@kernel.org, tglx@linutronix.de, Richard Henderson , Alex Elder , gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, senozhatsky@chromium.org, d.hatayama@jp.fujitsu.com, Bjorn Andersson , mhiramat@kernel.org, akpm@linux-foundation.org, linux-hyperv@vger.kernel.org, dave.hansen@linux.intel.com, "James E.J. Bottomley" , Max Filippov , linux-s390@vger.kernel.org, Stefano Stabellini , Stephen Hemminger , Vasily Gorbik , Helge Deller , vgoyal@redhat.com, Sven Schnelle , linux-xtensa@linux-xtensa.org, john.ogness@linutronix.de, coresight@lists.linaro.org, hidehiro.kawai.ez@hitachi.com, Boris Ostrovsky , linux-arm-kernel@lists.infradead.org, Chris Zankel , Tony Luck , Mathieu Poirier , James Morse , kernel-dev@igalia.com, fabiomirmar@gmail.com, halves@canonical.com, alejandro.j.jimenez@oracle.com, feng.tang@intel.com, will@kernel.org, bhe@redhat.com, corbet@lwn.net, Dexuan Cui , bcm-kernel-feedback-list@broadcom.com, Robert Richter , keescook@chromium.org, arnd@arndb.de, Haiyang Zhang , rostedt@goodmis.org, rcu@vger.kernel.org, bp@alien8.de, openipmi-developer@lists.sourceforge.net, Mauro Carvalho Chehab , linux-parisc@vger.kernel.org, linux-alpha@vger.kernel.org, peterz@infradead.org, linux-remoteproc@vger.kernel.org, mikelley@microsoft.com, "H. Peter Anvin" , sparclinux@vger.kernel.org, linux-leds@vger.kernel.org, Anton Ivanov , Richard Weinberger , x86@kernel.org, mingo@redhat.com, dyoung@redhat.com, paulmck@kernel.org, Heiko Carstens , linux-tegra@vger.kernel.org, andriy.shevchenko@linux.intel.com, Johannes Berg , linux-edac@vger.kernel.org, jgross@suse.com, netdev@vger.kernel.org, kernel@gpiccoli.net, kexec@lists.infradead.org, linux-mips@vger.kernel.org, Ivan Kokshaysky , vkuznets@redhat.com, linuxppc-dev@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" On Wed, Apr 27, 2022 at 07:49:15PM -0300, Guilherme G. Piccoli wrote: > This patch renames the panic_notifier_list to panic_pre_reboot_list; > the idea is that a subsequent patch will refactor the panic path > in order to better split the notifiers, running some of them very > early, some of them not so early [but still before kmsg_dump()] and > finally, the rest should execute late, after kdump. The latter ones > are now in the panic pre-reboot list - the name comes from the idea > that these notifiers execute before panic() attempts rebooting the > machine (if that option is set). > > We also took the opportunity to clean-up useless header inclusions, > improve some notifier block declarations (e.g. in ibmasm/heartbeat.c) > and more important, change some priorities - we hereby set 2 notifiers > to run late in the list [iss_panic_event() and the IPMI panic_event()] > due to the risks they offer (may not return, for example). > Proper documentation is going to be provided in a subsequent patch, > that effectively refactors the panic path. For the IPMI portion: Acked-by: Corey Minyard Note that the IPMI panic_event() should always return, but it may take some time, especially if the IPMI controller is no longer functional. So the risk of a long delay is there and it makes sense to move it very late. -corey > > Cc: Alex Elder > Cc: Alexander Gordeev > Cc: Anton Ivanov > Cc: Benjamin Herrenschmidt > Cc: Bjorn Andersson > Cc: Boris Ostrovsky > Cc: Chris Zankel > Cc: Christian Borntraeger > Cc: Corey Minyard > Cc: Dexuan Cui > Cc: "H. Peter Anvin" > Cc: Haiyang Zhang > Cc: Heiko Carstens > Cc: Helge Deller > Cc: Ivan Kokshaysky > Cc: "James E.J. Bottomley" > Cc: James Morse > Cc: Johannes Berg > Cc: Juergen Gross > Cc: "K. Y. Srinivasan" > Cc: Mathieu Poirier > Cc: Matt Turner > Cc: Mauro Carvalho Chehab > Cc: Max Filippov > Cc: Michael Ellerman > Cc: Paul Mackerras > Cc: Pavel Machek > Cc: Richard Henderson > Cc: Richard Weinberger > Cc: Robert Richter > Cc: Stefano Stabellini > Cc: Stephen Hemminger > Cc: Sven Schnelle > Cc: Tony Luck > Cc: Vasily Gorbik > Cc: Wei Liu > Signed-off-by: Guilherme G. Piccoli > --- > > Notice that, with this name change, out-of-tree code that relies in the global > exported "panic_notifier_list" will fail to build. We could easily keep the > retro-compatibility by making the old symbol to still exist and point to the > pre_reboot list (or even, keep the old naming). > > But our design choice was to allow the breakage, making users rethink their > notifiers, adding them in the list that fits best. If that wasn't a good > decision, we're open to change it, of course. > Thanks in advance for the review! > > arch/alpha/kernel/setup.c | 4 ++-- > arch/parisc/kernel/pdc_chassis.c | 3 +-- > arch/powerpc/kernel/setup-common.c | 2 +- > arch/s390/kernel/ipl.c | 4 ++-- > arch/um/drivers/mconsole_kern.c | 2 +- > arch/um/kernel/um_arch.c | 2 +- > arch/x86/xen/enlighten.c | 2 +- > arch/xtensa/platforms/iss/setup.c | 4 ++-- > drivers/char/ipmi/ipmi_msghandler.c | 12 +++++++----- > drivers/edac/altera_edac.c | 3 +-- > drivers/hv/vmbus_drv.c | 4 ++-- > drivers/leds/trigger/ledtrig-panic.c | 3 +-- > drivers/misc/ibmasm/heartbeat.c | 16 +++++++++------- > drivers/net/ipa/ipa_smp2p.c | 5 ++--- > drivers/parisc/power.c | 4 ++-- > drivers/remoteproc/remoteproc_core.c | 6 ++++-- > drivers/s390/char/con3215.c | 2 +- > drivers/s390/char/con3270.c | 2 +- > drivers/s390/char/sclp_con.c | 2 +- > drivers/s390/char/sclp_vt220.c | 2 +- > drivers/staging/olpc_dcon/olpc_dcon.c | 6 ++++-- > drivers/video/fbdev/hyperv_fb.c | 4 ++-- > include/linux/panic_notifier.h | 2 +- > kernel/panic.c | 9 ++++----- > 24 files changed, 54 insertions(+), 51 deletions(-) > > diff --git a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c > index d88bdf852753..8ace0d7113b6 100644 > --- a/arch/alpha/kernel/setup.c > +++ b/arch/alpha/kernel/setup.c > @@ -472,8 +472,8 @@ setup_arch(char **cmdline_p) > } > > /* Register a call for panic conditions. */ > - atomic_notifier_chain_register(&panic_notifier_list, > - &alpha_panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &alpha_panic_block); > > #ifndef alpha_using_srm > /* Assume that we've booted from SRM if we haven't booted from MILO. > diff --git a/arch/parisc/kernel/pdc_chassis.c b/arch/parisc/kernel/pdc_chassis.c > index da154406d368..0fd8d87fb4f9 100644 > --- a/arch/parisc/kernel/pdc_chassis.c > +++ b/arch/parisc/kernel/pdc_chassis.c > @@ -22,7 +22,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -135,7 +134,7 @@ void __init parisc_pdc_chassis_init(void) > PDC_CHASSIS_VER); > > /* initialize panic notifier chain */ > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &pdc_chassis_panic_block); > > /* initialize reboot notifier chain */ > diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c > index d04b8bf8dbc7..3518bebc10ad 100644 > --- a/arch/powerpc/kernel/setup-common.c > +++ b/arch/powerpc/kernel/setup-common.c > @@ -762,7 +762,7 @@ void __init setup_panic(void) > > /* Low-level platform-specific routines that should run on panic */ > if (ppc_md.panic) > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &ppc_panic_block); > } > > diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c > index 1cc85b8ff42e..4a88c5bb6e15 100644 > --- a/arch/s390/kernel/ipl.c > +++ b/arch/s390/kernel/ipl.c > @@ -2034,7 +2034,7 @@ static int on_panic_notify(struct notifier_block *self, > unsigned long event, void *data) > { > do_panic(); > - return NOTIFY_OK; > + return NOTIFY_DONE; > } > > static struct notifier_block on_panic_nb = { > @@ -2069,7 +2069,7 @@ void __init setup_ipl(void) > /* We have no info to copy */ > break; > } > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > } > > void s390_reset_system(void) > diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c > index 2ea0421bcc3f..21c13b4e24a3 100644 > --- a/arch/um/drivers/mconsole_kern.c > +++ b/arch/um/drivers/mconsole_kern.c > @@ -855,7 +855,7 @@ static struct notifier_block panic_exit_notifier = { > > static int add_notifier(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &panic_exit_notifier); > return 0; > } > diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c > index 4485b1a7c8e4..fc6e443299da 100644 > --- a/arch/um/kernel/um_arch.c > +++ b/arch/um/kernel/um_arch.c > @@ -257,7 +257,7 @@ static struct notifier_block panic_exit_notifier = { > > void uml_finishsetup(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &panic_exit_notifier); > > uml_postsetup(); > diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c > index 30c6e986a6cd..d4f4de239a21 100644 > --- a/arch/x86/xen/enlighten.c > +++ b/arch/x86/xen/enlighten.c > @@ -290,7 +290,7 @@ static struct notifier_block xen_panic_block = { > > int xen_panic_handler_init(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &xen_panic_block); > return 0; > } > > diff --git a/arch/xtensa/platforms/iss/setup.c b/arch/xtensa/platforms/iss/setup.c > index d3433e1bb94e..eeeeb6cff6bd 100644 > --- a/arch/xtensa/platforms/iss/setup.c > +++ b/arch/xtensa/platforms/iss/setup.c > @@ -13,7 +13,6 @@ > */ > #include > #include > -#include > #include > #include > #include > @@ -53,6 +52,7 @@ iss_panic_event(struct notifier_block *this, unsigned long event, void *ptr) > > static struct notifier_block iss_panic_block = { > .notifier_call = iss_panic_event, > + .priority = INT_MIN, /* run as late as possible, may not return */ > }; > > void __init platform_setup(char **p_cmdline) > @@ -81,5 +81,5 @@ void __init platform_setup(char **p_cmdline) > } > } > > - atomic_notifier_chain_register(&panic_notifier_list, &iss_panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &iss_panic_block); > } > diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c > index c59265146e9c..6c4770949c01 100644 > --- a/drivers/char/ipmi/ipmi_msghandler.c > +++ b/drivers/char/ipmi/ipmi_msghandler.c > @@ -25,7 +25,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -5375,10 +5374,13 @@ static int ipmi_register_driver(void) > return rv; > } > > +/* > + * we should execute this panic callback late, since it involves > + * a complex call-chain and panic() runs in atomic context. > + */ > static struct notifier_block panic_block = { > .notifier_call = panic_event, > - .next = NULL, > - .priority = 200 /* priority: INT_MAX >= x >= 0 */ > + .priority = INT_MIN + 1, > }; > > static int ipmi_init_msghandler(void) > @@ -5406,7 +5408,7 @@ static int ipmi_init_msghandler(void) > timer_setup(&ipmi_timer, ipmi_timeout, 0); > mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES); > > - atomic_notifier_chain_register(&panic_notifier_list, &panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &panic_block); > > initialized = true; > > @@ -5438,7 +5440,7 @@ static void __exit cleanup_ipmi(void) > if (initialized) { > destroy_workqueue(remove_work_wq); > > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &panic_block); > > /* > diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c > index e7e8e624a436..4890e9cba6fb 100644 > --- a/drivers/edac/altera_edac.c > +++ b/drivers/edac/altera_edac.c > @@ -16,7 +16,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -2163,7 +2162,7 @@ static int altr_edac_a10_probe(struct platform_device *pdev) > int dberror, err_addr; > > edac->panic_notifier.notifier_call = s10_edac_dberr_handler; > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &edac->panic_notifier); > > /* Printout a message if uncorrectable error previously. */ > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index 901b97034308..3717c323aa36 100644 > --- a/drivers/hv/vmbus_drv.c > +++ b/drivers/hv/vmbus_drv.c > @@ -1622,7 +1622,7 @@ static int vmbus_bus_init(void) > * Always register the vmbus unload panic notifier because we > * need to shut the VMbus channel connection on panic. > */ > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &hyperv_panic_vmbus_unload_block); > > vmbus_request_offers(); > @@ -2851,7 +2851,7 @@ static void __exit vmbus_exit(void) > * The vmbus panic notifier is always registered, hence we should > * also unconditionally unregister it here as well. > */ > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &hyperv_panic_vmbus_unload_block); > > free_page((unsigned long)hv_panic_page); > diff --git a/drivers/leds/trigger/ledtrig-panic.c b/drivers/leds/trigger/ledtrig-panic.c > index 64abf2e91608..34fd5170723f 100644 > --- a/drivers/leds/trigger/ledtrig-panic.c > +++ b/drivers/leds/trigger/ledtrig-panic.c > @@ -7,7 +7,6 @@ > > #include > #include > -#include > #include > #include > #include "../leds.h" > @@ -64,7 +63,7 @@ static long led_panic_blink(int state) > > static int __init ledtrig_panic_init(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &led_trigger_panic_nb); > > led_trigger_register_simple("panic", &trigger); > diff --git a/drivers/misc/ibmasm/heartbeat.c b/drivers/misc/ibmasm/heartbeat.c > index 59c9a0d95659..d6acae88b722 100644 > --- a/drivers/misc/ibmasm/heartbeat.c > +++ b/drivers/misc/ibmasm/heartbeat.c > @@ -8,7 +8,6 @@ > * Author: Max Asböck > */ > > -#include > #include > #include "ibmasm.h" > #include "dot_command.h" > @@ -24,7 +23,7 @@ static int suspend_heartbeats = 0; > * In the case of a panic the interrupt handler continues to work and thus > * continues to respond to heartbeats, making the service processor believe > * the OS is still running and thus preventing a reboot. > - * To prevent this from happening a callback is added the panic_notifier_list. > + * To prevent this from happening a callback is added in a panic notifier list. > * Before responding to a heartbeat the driver checks if a panic has happened, > * if yes it suspends heartbeat, causing the service processor to reboot as > * expected. > @@ -32,20 +31,23 @@ static int suspend_heartbeats = 0; > static int panic_happened(struct notifier_block *n, unsigned long val, void *v) > { > suspend_heartbeats = 1; > - return 0; > + return NOTIFY_DONE; > } > > -static struct notifier_block panic_notifier = { panic_happened, NULL, 1 }; > +static struct notifier_block panic_notifier = { > + .notifier_call = panic_happened, > +}; > > void ibmasm_register_panic_notifier(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, &panic_notifier); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &panic_notifier); > } > > void ibmasm_unregister_panic_notifier(void) > { > - atomic_notifier_chain_unregister(&panic_notifier_list, > - &panic_notifier); > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > + &panic_notifier); > } > > > diff --git a/drivers/net/ipa/ipa_smp2p.c b/drivers/net/ipa/ipa_smp2p.c > index 211233612039..92cdf6e0637c 100644 > --- a/drivers/net/ipa/ipa_smp2p.c > +++ b/drivers/net/ipa/ipa_smp2p.c > @@ -7,7 +7,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -138,13 +137,13 @@ static int ipa_smp2p_panic_notifier_register(struct ipa_smp2p *smp2p) > smp2p->panic_notifier.notifier_call = ipa_smp2p_panic_notifier; > smp2p->panic_notifier.priority = INT_MAX; /* Do it early */ > > - return atomic_notifier_chain_register(&panic_notifier_list, > + return atomic_notifier_chain_register(&panic_pre_reboot_list, > &smp2p->panic_notifier); > } > > static void ipa_smp2p_panic_notifier_unregister(struct ipa_smp2p *smp2p) > { > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &smp2p->panic_notifier); > } > > diff --git a/drivers/parisc/power.c b/drivers/parisc/power.c > index 8512884de2cf..5bb0868f5f08 100644 > --- a/drivers/parisc/power.c > +++ b/drivers/parisc/power.c > @@ -233,7 +233,7 @@ static int __init power_init(void) > } > > /* Register a call for panic conditions. */ > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &parisc_panic_block); > > return 0; > @@ -243,7 +243,7 @@ static void __exit power_exit(void) > { > kthread_stop(power_task); > > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &parisc_panic_block); > > pdc_soft_power_button(0); > diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c > index c510125769b9..24799ff239e6 100644 > --- a/drivers/remoteproc/remoteproc_core.c > +++ b/drivers/remoteproc/remoteproc_core.c > @@ -2795,12 +2795,14 @@ static int rproc_panic_handler(struct notifier_block *nb, unsigned long event, > static void __init rproc_init_panic(void) > { > rproc_panic_nb.notifier_call = rproc_panic_handler; > - atomic_notifier_chain_register(&panic_notifier_list, &rproc_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &rproc_panic_nb); > } > > static void __exit rproc_exit_panic(void) > { > - atomic_notifier_chain_unregister(&panic_notifier_list, &rproc_panic_nb); > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > + &rproc_panic_nb); > } > > static int __init remoteproc_init(void) > diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c > index 192198bd3dc4..07379dd3f1f3 100644 > --- a/drivers/s390/char/con3215.c > +++ b/drivers/s390/char/con3215.c > @@ -867,7 +867,7 @@ static int __init con3215_init(void) > raw3215[0] = NULL; > return -ENODEV; > } > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&con3215); > return 0; > diff --git a/drivers/s390/char/con3270.c b/drivers/s390/char/con3270.c > index 476202f3d8a0..e79bf3e7bde3 100644 > --- a/drivers/s390/char/con3270.c > +++ b/drivers/s390/char/con3270.c > @@ -645,7 +645,7 @@ con3270_init(void) > condev->cline->len = 0; > con3270_create_status(condev); > condev->input = alloc_string(&condev->freemem, 80); > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&con3270); > return 0; > diff --git a/drivers/s390/char/sclp_con.c b/drivers/s390/char/sclp_con.c > index e5d947c763ea..7ca9d4c45d60 100644 > --- a/drivers/s390/char/sclp_con.c > +++ b/drivers/s390/char/sclp_con.c > @@ -288,7 +288,7 @@ sclp_console_init(void) > timer_setup(&sclp_con_timer, sclp_console_timeout, 0); > > /* enable printk-access to this driver */ > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&sclp_console); > return 0; > diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c > index a32f34a1c6d2..97cf9e290c28 100644 > --- a/drivers/s390/char/sclp_vt220.c > +++ b/drivers/s390/char/sclp_vt220.c > @@ -838,7 +838,7 @@ sclp_vt220_con_init(void) > if (rc) > return rc; > /* Attach linux console */ > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&sclp_vt220_console); > return 0; > diff --git a/drivers/staging/olpc_dcon/olpc_dcon.c b/drivers/staging/olpc_dcon/olpc_dcon.c > index 7284cb4ac395..cb50471f2246 100644 > --- a/drivers/staging/olpc_dcon/olpc_dcon.c > +++ b/drivers/staging/olpc_dcon/olpc_dcon.c > @@ -653,7 +653,8 @@ static int dcon_probe(struct i2c_client *client, const struct i2c_device_id *id) > } > > register_reboot_notifier(&dcon->reboot_nb); > - atomic_notifier_chain_register(&panic_notifier_list, &dcon_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &dcon_panic_nb); > > return 0; > > @@ -676,7 +677,8 @@ static int dcon_remove(struct i2c_client *client) > struct dcon_priv *dcon = i2c_get_clientdata(client); > > unregister_reboot_notifier(&dcon->reboot_nb); > - atomic_notifier_chain_unregister(&panic_notifier_list, &dcon_panic_nb); > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > + &dcon_panic_nb); > > free_irq(DCON_IRQ, dcon); > > diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c > index f3494b868a64..ec21e63592be 100644 > --- a/drivers/video/fbdev/hyperv_fb.c > +++ b/drivers/video/fbdev/hyperv_fb.c > @@ -1253,7 +1253,7 @@ static int hvfb_probe(struct hv_device *hdev, > */ > par->hvfb_panic_nb.notifier_call = hvfb_on_panic; > par->hvfb_panic_nb.priority = INT_MIN + 10, > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &par->hvfb_panic_nb); > > return 0; > @@ -1276,7 +1276,7 @@ static int hvfb_remove(struct hv_device *hdev) > struct fb_info *info = hv_get_drvdata(hdev); > struct hvfb_par *par = info->par; > > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &par->hvfb_panic_nb); > > par->update = false; > diff --git a/include/linux/panic_notifier.h b/include/linux/panic_notifier.h > index 7364a346bcb0..7912aacbc0e5 100644 > --- a/include/linux/panic_notifier.h > +++ b/include/linux/panic_notifier.h > @@ -5,9 +5,9 @@ > #include > #include > > -extern struct atomic_notifier_head panic_notifier_list; > extern struct atomic_notifier_head panic_hypervisor_list; > extern struct atomic_notifier_head panic_info_list; > +extern struct atomic_notifier_head panic_pre_reboot_list; > > extern bool crash_kexec_post_notifiers; > > diff --git a/kernel/panic.c b/kernel/panic.c > index 73ca1bc44e30..a9d43b98b05b 100644 > --- a/kernel/panic.c > +++ b/kernel/panic.c > @@ -69,16 +69,15 @@ EXPORT_SYMBOL_GPL(panic_timeout); > #define PANIC_PRINT_ALL_CPU_BT 0x00000040 > unsigned long panic_print; > > -ATOMIC_NOTIFIER_HEAD(panic_notifier_list); > - > -EXPORT_SYMBOL(panic_notifier_list); > - > ATOMIC_NOTIFIER_HEAD(panic_hypervisor_list); > EXPORT_SYMBOL(panic_hypervisor_list); > > ATOMIC_NOTIFIER_HEAD(panic_info_list); > EXPORT_SYMBOL(panic_info_list); > > +ATOMIC_NOTIFIER_HEAD(panic_pre_reboot_list); > +EXPORT_SYMBOL(panic_pre_reboot_list); > + > static long no_blink(int state) > { > return 0; > @@ -295,7 +294,7 @@ void panic(const char *fmt, ...) > */ > atomic_notifier_call_chain(&panic_hypervisor_list, PANIC_NOTIFIER, buf); > atomic_notifier_call_chain(&panic_info_list, PANIC_NOTIFIER, buf); > - atomic_notifier_call_chain(&panic_notifier_list, PANIC_NOTIFIER, buf); > + atomic_notifier_call_chain(&panic_pre_reboot_list, PANIC_NOTIFIER, buf); > > panic_print_sys_info(false); > > -- > 2.36.0 > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Corey Minyard Date: Thu, 28 Apr 2022 11:26:16 -0500 Subject: [PATCH 21/30] panic: Introduce the panic pre-reboot notifier list In-Reply-To: <20220427224924.592546-22-gpiccoli@igalia.com> References: <20220427224924.592546-1-gpiccoli@igalia.com> <20220427224924.592546-22-gpiccoli@igalia.com> Message-ID: <20220428162616.GE442787@minyard.net> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kexec@lists.infradead.org On Wed, Apr 27, 2022 at 07:49:15PM -0300, Guilherme G. Piccoli wrote: > This patch renames the panic_notifier_list to panic_pre_reboot_list; > the idea is that a subsequent patch will refactor the panic path > in order to better split the notifiers, running some of them very > early, some of them not so early [but still before kmsg_dump()] and > finally, the rest should execute late, after kdump. The latter ones > are now in the panic pre-reboot list - the name comes from the idea > that these notifiers execute before panic() attempts rebooting the > machine (if that option is set). > > We also took the opportunity to clean-up useless header inclusions, > improve some notifier block declarations (e.g. in ibmasm/heartbeat.c) > and more important, change some priorities - we hereby set 2 notifiers > to run late in the list [iss_panic_event() and the IPMI panic_event()] > due to the risks they offer (may not return, for example). > Proper documentation is going to be provided in a subsequent patch, > that effectively refactors the panic path. For the IPMI portion: Acked-by: Corey Minyard Note that the IPMI panic_event() should always return, but it may take some time, especially if the IPMI controller is no longer functional. So the risk of a long delay is there and it makes sense to move it very late. -corey > > Cc: Alex Elder > Cc: Alexander Gordeev > Cc: Anton Ivanov > Cc: Benjamin Herrenschmidt > Cc: Bjorn Andersson > Cc: Boris Ostrovsky > Cc: Chris Zankel > Cc: Christian Borntraeger > Cc: Corey Minyard > Cc: Dexuan Cui > Cc: "H. Peter Anvin" > Cc: Haiyang Zhang > Cc: Heiko Carstens > Cc: Helge Deller > Cc: Ivan Kokshaysky > Cc: "James E.J. Bottomley" > Cc: James Morse > Cc: Johannes Berg > Cc: Juergen Gross > Cc: "K. Y. Srinivasan" > Cc: Mathieu Poirier > Cc: Matt Turner > Cc: Mauro Carvalho Chehab > Cc: Max Filippov > Cc: Michael Ellerman > Cc: Paul Mackerras > Cc: Pavel Machek > Cc: Richard Henderson > Cc: Richard Weinberger > Cc: Robert Richter > Cc: Stefano Stabellini > Cc: Stephen Hemminger > Cc: Sven Schnelle > Cc: Tony Luck > Cc: Vasily Gorbik > Cc: Wei Liu > Signed-off-by: Guilherme G. Piccoli > --- > > Notice that, with this name change, out-of-tree code that relies in the global > exported "panic_notifier_list" will fail to build. We could easily keep the > retro-compatibility by making the old symbol to still exist and point to the > pre_reboot list (or even, keep the old naming). > > But our design choice was to allow the breakage, making users rethink their > notifiers, adding them in the list that fits best. If that wasn't a good > decision, we're open to change it, of course. > Thanks in advance for the review! > > arch/alpha/kernel/setup.c | 4 ++-- > arch/parisc/kernel/pdc_chassis.c | 3 +-- > arch/powerpc/kernel/setup-common.c | 2 +- > arch/s390/kernel/ipl.c | 4 ++-- > arch/um/drivers/mconsole_kern.c | 2 +- > arch/um/kernel/um_arch.c | 2 +- > arch/x86/xen/enlighten.c | 2 +- > arch/xtensa/platforms/iss/setup.c | 4 ++-- > drivers/char/ipmi/ipmi_msghandler.c | 12 +++++++----- > drivers/edac/altera_edac.c | 3 +-- > drivers/hv/vmbus_drv.c | 4 ++-- > drivers/leds/trigger/ledtrig-panic.c | 3 +-- > drivers/misc/ibmasm/heartbeat.c | 16 +++++++++------- > drivers/net/ipa/ipa_smp2p.c | 5 ++--- > drivers/parisc/power.c | 4 ++-- > drivers/remoteproc/remoteproc_core.c | 6 ++++-- > drivers/s390/char/con3215.c | 2 +- > drivers/s390/char/con3270.c | 2 +- > drivers/s390/char/sclp_con.c | 2 +- > drivers/s390/char/sclp_vt220.c | 2 +- > drivers/staging/olpc_dcon/olpc_dcon.c | 6 ++++-- > drivers/video/fbdev/hyperv_fb.c | 4 ++-- > include/linux/panic_notifier.h | 2 +- > kernel/panic.c | 9 ++++----- > 24 files changed, 54 insertions(+), 51 deletions(-) > > diff --git a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c > index d88bdf852753..8ace0d7113b6 100644 > --- a/arch/alpha/kernel/setup.c > +++ b/arch/alpha/kernel/setup.c > @@ -472,8 +472,8 @@ setup_arch(char **cmdline_p) > } > > /* Register a call for panic conditions. */ > - atomic_notifier_chain_register(&panic_notifier_list, > - &alpha_panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &alpha_panic_block); > > #ifndef alpha_using_srm > /* Assume that we've booted from SRM if we haven't booted from MILO. > diff --git a/arch/parisc/kernel/pdc_chassis.c b/arch/parisc/kernel/pdc_chassis.c > index da154406d368..0fd8d87fb4f9 100644 > --- a/arch/parisc/kernel/pdc_chassis.c > +++ b/arch/parisc/kernel/pdc_chassis.c > @@ -22,7 +22,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -135,7 +134,7 @@ void __init parisc_pdc_chassis_init(void) > PDC_CHASSIS_VER); > > /* initialize panic notifier chain */ > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &pdc_chassis_panic_block); > > /* initialize reboot notifier chain */ > diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c > index d04b8bf8dbc7..3518bebc10ad 100644 > --- a/arch/powerpc/kernel/setup-common.c > +++ b/arch/powerpc/kernel/setup-common.c > @@ -762,7 +762,7 @@ void __init setup_panic(void) > > /* Low-level platform-specific routines that should run on panic */ > if (ppc_md.panic) > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &ppc_panic_block); > } > > diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c > index 1cc85b8ff42e..4a88c5bb6e15 100644 > --- a/arch/s390/kernel/ipl.c > +++ b/arch/s390/kernel/ipl.c > @@ -2034,7 +2034,7 @@ static int on_panic_notify(struct notifier_block *self, > unsigned long event, void *data) > { > do_panic(); > - return NOTIFY_OK; > + return NOTIFY_DONE; > } > > static struct notifier_block on_panic_nb = { > @@ -2069,7 +2069,7 @@ void __init setup_ipl(void) > /* We have no info to copy */ > break; > } > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > } > > void s390_reset_system(void) > diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c > index 2ea0421bcc3f..21c13b4e24a3 100644 > --- a/arch/um/drivers/mconsole_kern.c > +++ b/arch/um/drivers/mconsole_kern.c > @@ -855,7 +855,7 @@ static struct notifier_block panic_exit_notifier = { > > static int add_notifier(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &panic_exit_notifier); > return 0; > } > diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c > index 4485b1a7c8e4..fc6e443299da 100644 > --- a/arch/um/kernel/um_arch.c > +++ b/arch/um/kernel/um_arch.c > @@ -257,7 +257,7 @@ static struct notifier_block panic_exit_notifier = { > > void uml_finishsetup(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &panic_exit_notifier); > > uml_postsetup(); > diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c > index 30c6e986a6cd..d4f4de239a21 100644 > --- a/arch/x86/xen/enlighten.c > +++ b/arch/x86/xen/enlighten.c > @@ -290,7 +290,7 @@ static struct notifier_block xen_panic_block = { > > int xen_panic_handler_init(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &xen_panic_block); > return 0; > } > > diff --git a/arch/xtensa/platforms/iss/setup.c b/arch/xtensa/platforms/iss/setup.c > index d3433e1bb94e..eeeeb6cff6bd 100644 > --- a/arch/xtensa/platforms/iss/setup.c > +++ b/arch/xtensa/platforms/iss/setup.c > @@ -13,7 +13,6 @@ > */ > #include > #include > -#include > #include > #include > #include > @@ -53,6 +52,7 @@ iss_panic_event(struct notifier_block *this, unsigned long event, void *ptr) > > static struct notifier_block iss_panic_block = { > .notifier_call = iss_panic_event, > + .priority = INT_MIN, /* run as late as possible, may not return */ > }; > > void __init platform_setup(char **p_cmdline) > @@ -81,5 +81,5 @@ void __init platform_setup(char **p_cmdline) > } > } > > - atomic_notifier_chain_register(&panic_notifier_list, &iss_panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &iss_panic_block); > } > diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c > index c59265146e9c..6c4770949c01 100644 > --- a/drivers/char/ipmi/ipmi_msghandler.c > +++ b/drivers/char/ipmi/ipmi_msghandler.c > @@ -25,7 +25,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -5375,10 +5374,13 @@ static int ipmi_register_driver(void) > return rv; > } > > +/* > + * we should execute this panic callback late, since it involves > + * a complex call-chain and panic() runs in atomic context. > + */ > static struct notifier_block panic_block = { > .notifier_call = panic_event, > - .next = NULL, > - .priority = 200 /* priority: INT_MAX >= x >= 0 */ > + .priority = INT_MIN + 1, > }; > > static int ipmi_init_msghandler(void) > @@ -5406,7 +5408,7 @@ static int ipmi_init_msghandler(void) > timer_setup(&ipmi_timer, ipmi_timeout, 0); > mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES); > > - atomic_notifier_chain_register(&panic_notifier_list, &panic_block); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &panic_block); > > initialized = true; > > @@ -5438,7 +5440,7 @@ static void __exit cleanup_ipmi(void) > if (initialized) { > destroy_workqueue(remove_work_wq); > > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &panic_block); > > /* > diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c > index e7e8e624a436..4890e9cba6fb 100644 > --- a/drivers/edac/altera_edac.c > +++ b/drivers/edac/altera_edac.c > @@ -16,7 +16,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -2163,7 +2162,7 @@ static int altr_edac_a10_probe(struct platform_device *pdev) > int dberror, err_addr; > > edac->panic_notifier.notifier_call = s10_edac_dberr_handler; > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &edac->panic_notifier); > > /* Printout a message if uncorrectable error previously. */ > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index 901b97034308..3717c323aa36 100644 > --- a/drivers/hv/vmbus_drv.c > +++ b/drivers/hv/vmbus_drv.c > @@ -1622,7 +1622,7 @@ static int vmbus_bus_init(void) > * Always register the vmbus unload panic notifier because we > * need to shut the VMbus channel connection on panic. > */ > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &hyperv_panic_vmbus_unload_block); > > vmbus_request_offers(); > @@ -2851,7 +2851,7 @@ static void __exit vmbus_exit(void) > * The vmbus panic notifier is always registered, hence we should > * also unconditionally unregister it here as well. > */ > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &hyperv_panic_vmbus_unload_block); > > free_page((unsigned long)hv_panic_page); > diff --git a/drivers/leds/trigger/ledtrig-panic.c b/drivers/leds/trigger/ledtrig-panic.c > index 64abf2e91608..34fd5170723f 100644 > --- a/drivers/leds/trigger/ledtrig-panic.c > +++ b/drivers/leds/trigger/ledtrig-panic.c > @@ -7,7 +7,6 @@ > > #include > #include > -#include > #include > #include > #include "../leds.h" > @@ -64,7 +63,7 @@ static long led_panic_blink(int state) > > static int __init ledtrig_panic_init(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &led_trigger_panic_nb); > > led_trigger_register_simple("panic", &trigger); > diff --git a/drivers/misc/ibmasm/heartbeat.c b/drivers/misc/ibmasm/heartbeat.c > index 59c9a0d95659..d6acae88b722 100644 > --- a/drivers/misc/ibmasm/heartbeat.c > +++ b/drivers/misc/ibmasm/heartbeat.c > @@ -8,7 +8,6 @@ > * Author: Max Asb?ck > */ > > -#include > #include > #include "ibmasm.h" > #include "dot_command.h" > @@ -24,7 +23,7 @@ static int suspend_heartbeats = 0; > * In the case of a panic the interrupt handler continues to work and thus > * continues to respond to heartbeats, making the service processor believe > * the OS is still running and thus preventing a reboot. > - * To prevent this from happening a callback is added the panic_notifier_list. > + * To prevent this from happening a callback is added in a panic notifier list. > * Before responding to a heartbeat the driver checks if a panic has happened, > * if yes it suspends heartbeat, causing the service processor to reboot as > * expected. > @@ -32,20 +31,23 @@ static int suspend_heartbeats = 0; > static int panic_happened(struct notifier_block *n, unsigned long val, void *v) > { > suspend_heartbeats = 1; > - return 0; > + return NOTIFY_DONE; > } > > -static struct notifier_block panic_notifier = { panic_happened, NULL, 1 }; > +static struct notifier_block panic_notifier = { > + .notifier_call = panic_happened, > +}; > > void ibmasm_register_panic_notifier(void) > { > - atomic_notifier_chain_register(&panic_notifier_list, &panic_notifier); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &panic_notifier); > } > > void ibmasm_unregister_panic_notifier(void) > { > - atomic_notifier_chain_unregister(&panic_notifier_list, > - &panic_notifier); > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > + &panic_notifier); > } > > > diff --git a/drivers/net/ipa/ipa_smp2p.c b/drivers/net/ipa/ipa_smp2p.c > index 211233612039..92cdf6e0637c 100644 > --- a/drivers/net/ipa/ipa_smp2p.c > +++ b/drivers/net/ipa/ipa_smp2p.c > @@ -7,7 +7,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -138,13 +137,13 @@ static int ipa_smp2p_panic_notifier_register(struct ipa_smp2p *smp2p) > smp2p->panic_notifier.notifier_call = ipa_smp2p_panic_notifier; > smp2p->panic_notifier.priority = INT_MAX; /* Do it early */ > > - return atomic_notifier_chain_register(&panic_notifier_list, > + return atomic_notifier_chain_register(&panic_pre_reboot_list, > &smp2p->panic_notifier); > } > > static void ipa_smp2p_panic_notifier_unregister(struct ipa_smp2p *smp2p) > { > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &smp2p->panic_notifier); > } > > diff --git a/drivers/parisc/power.c b/drivers/parisc/power.c > index 8512884de2cf..5bb0868f5f08 100644 > --- a/drivers/parisc/power.c > +++ b/drivers/parisc/power.c > @@ -233,7 +233,7 @@ static int __init power_init(void) > } > > /* Register a call for panic conditions. */ > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &parisc_panic_block); > > return 0; > @@ -243,7 +243,7 @@ static void __exit power_exit(void) > { > kthread_stop(power_task); > > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &parisc_panic_block); > > pdc_soft_power_button(0); > diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c > index c510125769b9..24799ff239e6 100644 > --- a/drivers/remoteproc/remoteproc_core.c > +++ b/drivers/remoteproc/remoteproc_core.c > @@ -2795,12 +2795,14 @@ static int rproc_panic_handler(struct notifier_block *nb, unsigned long event, > static void __init rproc_init_panic(void) > { > rproc_panic_nb.notifier_call = rproc_panic_handler; > - atomic_notifier_chain_register(&panic_notifier_list, &rproc_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &rproc_panic_nb); > } > > static void __exit rproc_exit_panic(void) > { > - atomic_notifier_chain_unregister(&panic_notifier_list, &rproc_panic_nb); > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > + &rproc_panic_nb); > } > > static int __init remoteproc_init(void) > diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c > index 192198bd3dc4..07379dd3f1f3 100644 > --- a/drivers/s390/char/con3215.c > +++ b/drivers/s390/char/con3215.c > @@ -867,7 +867,7 @@ static int __init con3215_init(void) > raw3215[0] = NULL; > return -ENODEV; > } > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&con3215); > return 0; > diff --git a/drivers/s390/char/con3270.c b/drivers/s390/char/con3270.c > index 476202f3d8a0..e79bf3e7bde3 100644 > --- a/drivers/s390/char/con3270.c > +++ b/drivers/s390/char/con3270.c > @@ -645,7 +645,7 @@ con3270_init(void) > condev->cline->len = 0; > con3270_create_status(condev); > condev->input = alloc_string(&condev->freemem, 80); > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&con3270); > return 0; > diff --git a/drivers/s390/char/sclp_con.c b/drivers/s390/char/sclp_con.c > index e5d947c763ea..7ca9d4c45d60 100644 > --- a/drivers/s390/char/sclp_con.c > +++ b/drivers/s390/char/sclp_con.c > @@ -288,7 +288,7 @@ sclp_console_init(void) > timer_setup(&sclp_con_timer, sclp_console_timeout, 0); > > /* enable printk-access to this driver */ > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&sclp_console); > return 0; > diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c > index a32f34a1c6d2..97cf9e290c28 100644 > --- a/drivers/s390/char/sclp_vt220.c > +++ b/drivers/s390/char/sclp_vt220.c > @@ -838,7 +838,7 @@ sclp_vt220_con_init(void) > if (rc) > return rc; > /* Attach linux console */ > - atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, &on_panic_nb); > register_reboot_notifier(&on_reboot_nb); > register_console(&sclp_vt220_console); > return 0; > diff --git a/drivers/staging/olpc_dcon/olpc_dcon.c b/drivers/staging/olpc_dcon/olpc_dcon.c > index 7284cb4ac395..cb50471f2246 100644 > --- a/drivers/staging/olpc_dcon/olpc_dcon.c > +++ b/drivers/staging/olpc_dcon/olpc_dcon.c > @@ -653,7 +653,8 @@ static int dcon_probe(struct i2c_client *client, const struct i2c_device_id *id) > } > > register_reboot_notifier(&dcon->reboot_nb); > - atomic_notifier_chain_register(&panic_notifier_list, &dcon_panic_nb); > + atomic_notifier_chain_register(&panic_pre_reboot_list, > + &dcon_panic_nb); > > return 0; > > @@ -676,7 +677,8 @@ static int dcon_remove(struct i2c_client *client) > struct dcon_priv *dcon = i2c_get_clientdata(client); > > unregister_reboot_notifier(&dcon->reboot_nb); > - atomic_notifier_chain_unregister(&panic_notifier_list, &dcon_panic_nb); > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > + &dcon_panic_nb); > > free_irq(DCON_IRQ, dcon); > > diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c > index f3494b868a64..ec21e63592be 100644 > --- a/drivers/video/fbdev/hyperv_fb.c > +++ b/drivers/video/fbdev/hyperv_fb.c > @@ -1253,7 +1253,7 @@ static int hvfb_probe(struct hv_device *hdev, > */ > par->hvfb_panic_nb.notifier_call = hvfb_on_panic; > par->hvfb_panic_nb.priority = INT_MIN + 10, > - atomic_notifier_chain_register(&panic_notifier_list, > + atomic_notifier_chain_register(&panic_pre_reboot_list, > &par->hvfb_panic_nb); > > return 0; > @@ -1276,7 +1276,7 @@ static int hvfb_remove(struct hv_device *hdev) > struct fb_info *info = hv_get_drvdata(hdev); > struct hvfb_par *par = info->par; > > - atomic_notifier_chain_unregister(&panic_notifier_list, > + atomic_notifier_chain_unregister(&panic_pre_reboot_list, > &par->hvfb_panic_nb); > > par->update = false; > diff --git a/include/linux/panic_notifier.h b/include/linux/panic_notifier.h > index 7364a346bcb0..7912aacbc0e5 100644 > --- a/include/linux/panic_notifier.h > +++ b/include/linux/panic_notifier.h > @@ -5,9 +5,9 @@ > #include > #include > > -extern struct atomic_notifier_head panic_notifier_list; > extern struct atomic_notifier_head panic_hypervisor_list; > extern struct atomic_notifier_head panic_info_list; > +extern struct atomic_notifier_head panic_pre_reboot_list; > > extern bool crash_kexec_post_notifiers; > > diff --git a/kernel/panic.c b/kernel/panic.c > index 73ca1bc44e30..a9d43b98b05b 100644 > --- a/kernel/panic.c > +++ b/kernel/panic.c > @@ -69,16 +69,15 @@ EXPORT_SYMBOL_GPL(panic_timeout); > #define PANIC_PRINT_ALL_CPU_BT 0x00000040 > unsigned long panic_print; > > -ATOMIC_NOTIFIER_HEAD(panic_notifier_list); > - > -EXPORT_SYMBOL(panic_notifier_list); > - > ATOMIC_NOTIFIER_HEAD(panic_hypervisor_list); > EXPORT_SYMBOL(panic_hypervisor_list); > > ATOMIC_NOTIFIER_HEAD(panic_info_list); > EXPORT_SYMBOL(panic_info_list); > > +ATOMIC_NOTIFIER_HEAD(panic_pre_reboot_list); > +EXPORT_SYMBOL(panic_pre_reboot_list); > + > static long no_blink(int state) > { > return 0; > @@ -295,7 +294,7 @@ void panic(const char *fmt, ...) > */ > atomic_notifier_call_chain(&panic_hypervisor_list, PANIC_NOTIFIER, buf); > atomic_notifier_call_chain(&panic_info_list, PANIC_NOTIFIER, buf); > - atomic_notifier_call_chain(&panic_notifier_list, PANIC_NOTIFIER, buf); > + atomic_notifier_call_chain(&panic_pre_reboot_list, PANIC_NOTIFIER, buf); > > panic_print_sys_info(false); > > -- > 2.36.0 > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 28 Apr 2022 11:26:16 -0500 From: Corey Minyard Subject: Re: [PATCH 21/30] panic: Introduce the panic pre-reboot notifier list Message-ID: <20220428162616.GE442787@minyard.net> References: <20220427224924.592546-1-gpiccoli@igalia.com> <20220427224924.592546-22-gpiccoli@igalia.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220427224924.592546-22-gpiccoli@igalia.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: minyard@acm.org 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: "Guilherme G. Piccoli" Cc: akpm@linux-foundation.org, bhe@redhat.com, pmladek@suse.com, kexec@lists.infradead.org, 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, 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, Alex Elder , Alexander Gordeev , Anton Ivanov , Benjamin Herrenschmidt , Bjorn Andersson , Boris Ostrovsky , Chris Zankel , Christian Borntraeger , Dexuan Cui , "H. Peter Anvin" , Haiyang Zhang , Heiko Carstens , Helge Deller , Ivan Kokshaysky , "James E.J. Bottomley" , James Morse , Johannes Berg , "K. Y. Srinivasan" , Mathieu Poirier , Matt Turner , Mauro Carvalho Chehab , Max Filippov , Michael Ellerman , Paul Mackerras , Pavel Machek , Richard Henderson , Richard Weinberger , Robert Richter , Stefano Stabellini , Stephen Hemminger , Sven Schnelle , Tony Luck , Vasily Gorbik , Wei Liu T24gV2VkLCBBcHIgMjcsIDIwMjIgYXQgMDc6NDk6MTVQTSAtMDMwMCwgR3VpbGhlcm1lIEcuIFBp Y2NvbGkgd3JvdGU6Cj4gVGhpcyBwYXRjaCByZW5hbWVzIHRoZSBwYW5pY19ub3RpZmllcl9saXN0 IHRvIHBhbmljX3ByZV9yZWJvb3RfbGlzdDsKPiB0aGUgaWRlYSBpcyB0aGF0IGEgc3Vic2VxdWVu dCBwYXRjaCB3aWxsIHJlZmFjdG9yIHRoZSBwYW5pYyBwYXRoCj4gaW4gb3JkZXIgdG8gYmV0dGVy IHNwbGl0IHRoZSBub3RpZmllcnMsIHJ1bm5pbmcgc29tZSBvZiB0aGVtIHZlcnkKPiBlYXJseSwg c29tZSBvZiB0aGVtIG5vdCBzbyBlYXJseSBbYnV0IHN0aWxsIGJlZm9yZSBrbXNnX2R1bXAoKV0g YW5kCj4gZmluYWxseSwgdGhlIHJlc3Qgc2hvdWxkIGV4ZWN1dGUgbGF0ZSwgYWZ0ZXIga2R1bXAu IFRoZSBsYXR0ZXIgb25lcwo+IGFyZSBub3cgaW4gdGhlIHBhbmljIHByZS1yZWJvb3QgbGlzdCAt IHRoZSBuYW1lIGNvbWVzIGZyb20gdGhlIGlkZWEKPiB0aGF0IHRoZXNlIG5vdGlmaWVycyBleGVj dXRlIGJlZm9yZSBwYW5pYygpIGF0dGVtcHRzIHJlYm9vdGluZyB0aGUKPiBtYWNoaW5lIChpZiB0 aGF0IG9wdGlvbiBpcyBzZXQpLgo+IAo+IFdlIGFsc28gdG9vayB0aGUgb3Bwb3J0dW5pdHkgdG8g Y2xlYW4tdXAgdXNlbGVzcyBoZWFkZXIgaW5jbHVzaW9ucywKPiBpbXByb3ZlIHNvbWUgbm90aWZp ZXIgYmxvY2sgZGVjbGFyYXRpb25zIChlLmcuIGluIGlibWFzbS9oZWFydGJlYXQuYykKPiBhbmQg bW9yZSBpbXBvcnRhbnQsIGNoYW5nZSBzb21lIHByaW9yaXRpZXMgLSB3ZSBoZXJlYnkgc2V0IDIg bm90aWZpZXJzCj4gdG8gcnVuIGxhdGUgaW4gdGhlIGxpc3QgW2lzc19wYW5pY19ldmVudCgpIGFu ZCB0aGUgSVBNSSBwYW5pY19ldmVudCgpXQo+IGR1ZSB0byB0aGUgcmlza3MgdGhleSBvZmZlciAo bWF5IG5vdCByZXR1cm4sIGZvciBleGFtcGxlKS4KPiBQcm9wZXIgZG9jdW1lbnRhdGlvbiBpcyBn b2luZyB0byBiZSBwcm92aWRlZCBpbiBhIHN1YnNlcXVlbnQgcGF0Y2gsCj4gdGhhdCBlZmZlY3Rp dmVseSByZWZhY3RvcnMgdGhlIHBhbmljIHBhdGguCgpGb3IgdGhlIElQTUkgcG9ydGlvbjoKCkFj a2VkLWJ5OiBDb3JleSBNaW55YXJkIDxjbWlueWFyZEBtdmlzdGEuY29tPgoKTm90ZSB0aGF0IHRo ZSBJUE1JIHBhbmljX2V2ZW50KCkgc2hvdWxkIGFsd2F5cyByZXR1cm4sIGJ1dCBpdCBtYXkgdGFr ZQpzb21lIHRpbWUsIGVzcGVjaWFsbHkgaWYgdGhlIElQTUkgY29udHJvbGxlciBpcyBubyBsb25n ZXIgZnVuY3Rpb25hbC4KU28gdGhlIHJpc2sgb2YgYSBsb25nIGRlbGF5IGlzIHRoZXJlIGFuZCBp dCBtYWtlcyBzZW5zZSB0byBtb3ZlIGl0IHZlcnkKbGF0ZS4KCi1jb3JleQoKPiAKPiBDYzogQWxl eCBFbGRlciA8ZWxkZXJAa2VybmVsLm9yZz4KPiBDYzogQWxleGFuZGVyIEdvcmRlZXYgPGFnb3Jk ZWV2QGxpbnV4LmlibS5jb20+Cj4gQ2M6IEFudG9uIEl2YW5vdiA8YW50b24uaXZhbm92QGNhbWJy aWRnZWdyZXlzLmNvbT4KPiBDYzogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwu Y3Jhc2hpbmcub3JnPgo+IENjOiBCam9ybiBBbmRlcnNzb24gPGJqb3JuLmFuZGVyc3NvbkBsaW5h cm8ub3JnPgo+IENjOiBCb3JpcyBPc3Ryb3Zza3kgPGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29t Pgo+IENjOiBDaHJpcyBaYW5rZWwgPGNocmlzQHphbmtlbC5uZXQ+Cj4gQ2M6IENocmlzdGlhbiBC b3JudHJhZWdlciA8Ym9ybnRyYWVnZXJAbGludXguaWJtLmNvbT4KPiBDYzogQ29yZXkgTWlueWFy ZCA8bWlueWFyZEBhY20ub3JnPgo+IENjOiBEZXh1YW4gQ3VpIDxkZWN1aUBtaWNyb3NvZnQuY29t Pgo+IENjOiAiSC4gUGV0ZXIgQW52aW4iIDxocGFAenl0b3IuY29tPgo+IENjOiBIYWl5YW5nIFpo YW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgo+IENjOiBIZWlrbyBDYXJzdGVucyA8aGNhQGxp bnV4LmlibS5jb20+Cj4gQ2M6IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KPiBDYzogSXZh biBLb2tzaGF5c2t5IDxpbmtAanVyYXNzaWMucGFyay5tc3UucnU+Cj4gQ2M6ICJKYW1lcyBFLkou IEJvdHRvbWxleSIgPEphbWVzLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20+Cj4gQ2M6 IEphbWVzIE1vcnNlIDxqYW1lcy5tb3JzZUBhcm0uY29tPgo+IENjOiBKb2hhbm5lcyBCZXJnIDxq b2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0Pgo+IENjOiBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NAc3Vz ZS5jb20+Cj4gQ2M6ICJLLiBZLiBTcmluaXZhc2FuIiA8a3lzQG1pY3Jvc29mdC5jb20+Cj4gQ2M6 IE1hdGhpZXUgUG9pcmllciA8bWF0aGlldS5wb2lyaWVyQGxpbmFyby5vcmc+Cj4gQ2M6IE1hdHQg VHVybmVyIDxtYXR0c3Q4OEBnbWFpbC5jb20+Cj4gQ2M6IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8 bWNoZWhhYkBrZXJuZWwub3JnPgo+IENjOiBNYXggRmlsaXBwb3YgPGpjbXZia2JjQGdtYWlsLmNv bT4KPiBDYzogTWljaGFlbCBFbGxlcm1hbiA8bXBlQGVsbGVybWFuLmlkLmF1Pgo+IENjOiBQYXVs IE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KPiBDYzogUGF2ZWwgTWFjaGVrIDxwYXZlbEB1 Y3cuY3o+Cj4gQ2M6IFJpY2hhcmQgSGVuZGVyc29uIDxydGhAdHdpZGRsZS5uZXQ+Cj4gQ2M6IFJp Y2hhcmQgV2VpbmJlcmdlciA8cmljaGFyZEBub2QuYXQ+Cj4gQ2M6IFJvYmVydCBSaWNodGVyIDxy cmljQGtlcm5lbC5vcmc+Cj4gQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2Vy bmVsLm9yZz4KPiBDYzogU3RlcGhlbiBIZW1taW5nZXIgPHN0aGVtbWluQG1pY3Jvc29mdC5jb20+ Cj4gQ2M6IFN2ZW4gU2NobmVsbGUgPHN2ZW5zQGxpbnV4LmlibS5jb20+Cj4gQ2M6IFRvbnkgTHVj ayA8dG9ueS5sdWNrQGludGVsLmNvbT4KPiBDYzogVmFzaWx5IEdvcmJpayA8Z29yQGxpbnV4Lmli bS5jb20+Cj4gQ2M6IFdlaSBMaXUgPHdlaS5saXVAa2VybmVsLm9yZz4KPiBTaWduZWQtb2ZmLWJ5 OiBHdWlsaGVybWUgRy4gUGljY29saSA8Z3BpY2NvbGlAaWdhbGlhLmNvbT4KPiAtLS0KPiAKPiBO b3RpY2UgdGhhdCwgd2l0aCB0aGlzIG5hbWUgY2hhbmdlLCBvdXQtb2YtdHJlZSBjb2RlIHRoYXQg cmVsaWVzIGluIHRoZSBnbG9iYWwKPiBleHBvcnRlZCAicGFuaWNfbm90aWZpZXJfbGlzdCIgd2ls bCBmYWlsIHRvIGJ1aWxkLiBXZSBjb3VsZCBlYXNpbHkga2VlcCB0aGUKPiByZXRyby1jb21wYXRp YmlsaXR5IGJ5IG1ha2luZyB0aGUgb2xkIHN5bWJvbCB0byBzdGlsbCBleGlzdCBhbmQgcG9pbnQg dG8gdGhlCj4gcHJlX3JlYm9vdCBsaXN0IChvciBldmVuLCBrZWVwIHRoZSBvbGQgbmFtaW5nKS4K PiAKPiBCdXQgb3VyIGRlc2lnbiBjaG9pY2Ugd2FzIHRvIGFsbG93IHRoZSBicmVha2FnZSwgbWFr aW5nIHVzZXJzIHJldGhpbmsgdGhlaXIKPiBub3RpZmllcnMsIGFkZGluZyB0aGVtIGluIHRoZSBs aXN0IHRoYXQgZml0cyBiZXN0LiBJZiB0aGF0IHdhc24ndCBhIGdvb2QKPiBkZWNpc2lvbiwgd2Un cmUgb3BlbiB0byBjaGFuZ2UgaXQsIG9mIGNvdXJzZS4KPiBUaGFua3MgaW4gYWR2YW5jZSBmb3Ig dGhlIHJldmlldyEKPiAKPiAgYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYyAgICAgICAgICAgICB8 ICA0ICsrLS0KPiAgYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jaGFzc2lzLmMgICAgICB8ICAzICst LQo+ICBhcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jICAgIHwgIDIgKy0KPiAgYXJj aC9zMzkwL2tlcm5lbC9pcGwuYyAgICAgICAgICAgICAgICB8ICA0ICsrLS0KPiAgYXJjaC91bS9k cml2ZXJzL21jb25zb2xlX2tlcm4uYyAgICAgICB8ICAyICstCj4gIGFyY2gvdW0va2VybmVsL3Vt X2FyY2guYyAgICAgICAgICAgICAgfCAgMiArLQo+ICBhcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMg ICAgICAgICAgICAgIHwgIDIgKy0KPiAgYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zZXR1cC5j ICAgICB8ICA0ICsrLS0KPiAgZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMgICB8 IDEyICsrKysrKystLS0tLQo+ICBkcml2ZXJzL2VkYWMvYWx0ZXJhX2VkYWMuYyAgICAgICAgICAg IHwgIDMgKy0tCj4gIGRyaXZlcnMvaHYvdm1idXNfZHJ2LmMgICAgICAgICAgICAgICAgfCAgNCAr Ky0tCj4gIGRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctcGFuaWMuYyAgfCAgMyArLS0KPiAg ZHJpdmVycy9taXNjL2libWFzbS9oZWFydGJlYXQuYyAgICAgICB8IDE2ICsrKysrKysrKy0tLS0t LS0KPiAgZHJpdmVycy9uZXQvaXBhL2lwYV9zbXAycC5jICAgICAgICAgICB8ICA1ICsrLS0tCj4g IGRyaXZlcnMvcGFyaXNjL3Bvd2VyLmMgICAgICAgICAgICAgICAgfCAgNCArKy0tCj4gIGRyaXZl cnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYyAgfCAgNiArKysrLS0KPiAgZHJpdmVycy9z MzkwL2NoYXIvY29uMzIxNS5jICAgICAgICAgICB8ICAyICstCj4gIGRyaXZlcnMvczM5MC9jaGFy L2NvbjMyNzAuYyAgICAgICAgICAgfCAgMiArLQo+ICBkcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Nv bi5jICAgICAgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jICAg ICAgICB8ICAyICstCj4gIGRyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMgfCAg NiArKysrLS0KPiAgZHJpdmVycy92aWRlby9mYmRldi9oeXBlcnZfZmIuYyAgICAgICB8ICA0ICsr LS0KPiAgaW5jbHVkZS9saW51eC9wYW5pY19ub3RpZmllci5oICAgICAgICB8ICAyICstCj4gIGtl cm5lbC9wYW5pYy5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgOSArKysrLS0tLS0KPiAgMjQg ZmlsZXMgY2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRpb25zKC0pCj4gCj4gZGlm ZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9z ZXR1cC5jCj4gaW5kZXggZDg4YmRmODUyNzUzLi44YWNlMGQ3MTEzYjYgMTAwNjQ0Cj4gLS0tIGEv YXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYwo+ICsrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NldHVw LmMKPiBAQCAtNDcyLDggKzQ3Miw4IEBAIHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKPiAg CX0KPiAgCj4gIAkvKiBSZWdpc3RlciBhIGNhbGwgZm9yIHBhbmljIGNvbmRpdGlvbnMuICovCj4g LQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCj4g LQkJCSZhbHBoYV9wYW5pY19ibG9jayk7Cj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0 ZXIoJnBhbmljX3ByZV9yZWJvb3RfbGlzdCwKPiArCQkJCQkmYWxwaGFfcGFuaWNfYmxvY2spOwo+ ICAKPiAgI2lmbmRlZiBhbHBoYV91c2luZ19zcm0KPiAgCS8qIEFzc3VtZSB0aGF0IHdlJ3ZlIGJv b3RlZCBmcm9tIFNSTSBpZiB3ZSBoYXZlbid0IGJvb3RlZCBmcm9tIE1JTE8uCj4gZGlmZiAtLWdp dCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY2hhc3Npcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVs L3BkY19jaGFzc2lzLmMKPiBpbmRleCBkYTE1NDQwNmQzNjguLjBmZDhkODdmYjRmOSAxMDA2NDQK PiAtLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NoYXNzaXMuYwo+ICsrKyBiL2FyY2gvcGFy aXNjL2tlcm5lbC9wZGNfY2hhc3Npcy5jCj4gQEAgLTIyLDcgKzIyLDYgQEAKPiAgI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgo+ICAjaW5jbHVkZSA8bGludXgvcGFuaWNfbm90aWZpZXIuaD4KPiAg I2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgo+IC0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4K PiAgI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+ Cj4gICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgo+IEBAIC0xMzUsNyArMTM0LDcgQEAgdm9p ZCBfX2luaXQgcGFyaXNjX3BkY19jaGFzc2lzX2luaXQodm9pZCkKPiAgCQkJCVBEQ19DSEFTU0lT X1ZFUik7Cj4gIAo+ICAJCS8qIGluaXRpYWxpemUgcGFuaWMgbm90aWZpZXIgY2hhaW4gKi8KPiAt CQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCj4g KwkJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3Qs Cj4gIAkJCQkmcGRjX2NoYXNzaXNfcGFuaWNfYmxvY2spOwo+ICAKPiAgCQkvKiBpbml0aWFsaXpl IHJlYm9vdCBub3RpZmllciBjaGFpbiAqLwo+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2Vy bmVsL3NldHVwLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwo+ IGluZGV4IGQwNGI4YmY4ZGJjNy4uMzUxOGJlYmMxMGFkIDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93 ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKPiArKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Nl dHVwLWNvbW1vbi5jCj4gQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lkIF9faW5pdCBzZXR1cF9wYW5p Yyh2b2lkKQo+ICAKPiAgCS8qIExvdy1sZXZlbCBwbGF0Zm9ybS1zcGVjaWZpYyByb3V0aW5lcyB0 aGF0IHNob3VsZCBydW4gb24gcGFuaWMgKi8KPiAgCWlmIChwcGNfbWQucGFuaWMpCj4gLQkJYXRv bWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAo+ICsJCWF0 b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LAo+ICAJ CQkJCSAgICAgICAmcHBjX3BhbmljX2Jsb2NrKTsKPiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvYXJj aC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKPiBpbmRleCAxY2M4 NWI4ZmY0MmUuLjRhODhjNWJiNmUxNSAxMDA2NDQKPiAtLS0gYS9hcmNoL3MzOTAva2VybmVsL2lw bC5jCj4gKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwo+IEBAIC0yMDM0LDcgKzIwMzQsNyBA QCBzdGF0aWMgaW50IG9uX3BhbmljX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYs Cj4gIAkJCSAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCj4gIHsKPiAgCWRvX3Bh bmljKCk7Cj4gLQlyZXR1cm4gTk9USUZZX09LOwo+ICsJcmV0dXJuIE5PVElGWV9ET05FOwo+ICB9 Cj4gIAo+ICBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG9uX3BhbmljX25iID0gewo+IEBA IC0yMDY5LDcgKzIwNjksNyBAQCB2b2lkIF9faW5pdCBzZXR1cF9pcGwodm9pZCkKPiAgCQkvKiBX ZSBoYXZlIG5vIGluZm8gdG8gY29weSAqLwo+ICAJCWJyZWFrOwo+ICAJfQo+IC0JYXRvbWljX25v dGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmb25fcGFuaWNfbmIp Owo+ICsJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xp c3QsICZvbl9wYW5pY19uYik7Cj4gIH0KPiAgCj4gIHZvaWQgczM5MF9yZXNldF9zeXN0ZW0odm9p ZCkKPiBkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYyBiL2FyY2gv dW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKPiBpbmRleCAyZWEwNDIxYmNjM2YuLjIxYzEzYjRl MjRhMyAxMDA2NDQKPiAtLS0gYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCj4gKysr IGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYwo+IEBAIC04NTUsNyArODU1LDcgQEAg c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5pY19leGl0X25vdGlmaWVyID0gewo+ICAK PiAgc3RhdGljIGludCBhZGRfbm90aWZpZXIodm9pZCkKPiAgewo+IC0JYXRvbWljX25vdGlmaWVy X2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAo+ICsJYXRvbWljX25vdGlmaWVy X2NoYWluX3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3QsCj4gIAkJCSZwYW5pY19leGl0 X25vdGlmaWVyKTsKPiAgCXJldHVybiAwOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2FyY2gvdW0va2Vy bmVsL3VtX2FyY2guYyBiL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYwo+IGluZGV4IDQ0ODViMWE3 YzhlNC4uZmM2ZTQ0MzI5OWRhIDEwMDY0NAo+IC0tLSBhL2FyY2gvdW0va2VybmVsL3VtX2FyY2gu Ywo+ICsrKyBiL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYwo+IEBAIC0yNTcsNyArMjU3LDcgQEAg c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5pY19leGl0X25vdGlmaWVyID0gewo+ICAK PiAgdm9pZCB1bWxfZmluaXNoc2V0dXAodm9pZCkKPiAgewo+IC0JYXRvbWljX25vdGlmaWVyX2No YWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAo+ICsJYXRvbWljX25vdGlmaWVyX2No YWluX3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3QsCj4gIAkJCQkgICAgICAgJnBhbmlj X2V4aXRfbm90aWZpZXIpOwo+ICAKPiAgCXVtbF9wb3N0c2V0dXAoKTsKPiBkaWZmIC0tZ2l0IGEv YXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCj4gaW5k ZXggMzBjNmU5ODZhNmNkLi5kNGY0ZGUyMzlhMjEgMTAwNjQ0Cj4gLS0tIGEvYXJjaC94ODYveGVu L2VubGlnaHRlbi5jCj4gKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCj4gQEAgLTI5MCw3 ICsyOTAsNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHhlbl9wYW5pY19ibG9jayA9 IHsKPiAgCj4gIGludCB4ZW5fcGFuaWNfaGFuZGxlcl9pbml0KHZvaWQpCj4gIHsKPiAtCWF0b21p Y19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnhlbl9wYW5p Y19ibG9jayk7Cj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX3ByZV9y ZWJvb3RfbGlzdCwgJnhlbl9wYW5pY19ibG9jayk7Cj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiBk aWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zZXR1cC5jIGIvYXJjaC94dGVu c2EvcGxhdGZvcm1zL2lzcy9zZXR1cC5jCj4gaW5kZXggZDM0MzNlMWJiOTRlLi5lZWVlYjZjZmY2 YmQgMTAwNjQ0Cj4gLS0tIGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zZXR1cC5jCj4gKysr IGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zZXR1cC5jCj4gQEAgLTEzLDcgKzEzLDYgQEAK PiAgICovCj4gICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9w YW5pY19ub3RpZmllci5oPgo+ICAjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+Cj4gICNpbmNsdWRl IDxsaW51eC9zdHJpbmcuaD4KPiBAQCAtNTMsNiArNTIsNyBAQCBpc3NfcGFuaWNfZXZlbnQoc3Ry dWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIp Cj4gIAo+ICBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGlzc19wYW5pY19ibG9jayA9IHsK PiAgCS5ub3RpZmllcl9jYWxsID0gaXNzX3BhbmljX2V2ZW50LAo+ICsJLnByaW9yaXR5ID0gSU5U X01JTiwgLyogcnVuIGFzIGxhdGUgYXMgcG9zc2libGUsIG1heSBub3QgcmV0dXJuICovCj4gIH07 Cj4gIAo+ICB2b2lkIF9faW5pdCBwbGF0Zm9ybV9zZXR1cChjaGFyICoqcF9jbWRsaW5lKQo+IEBA IC04MSw1ICs4MSw1IEBAIHZvaWQgX19pbml0IHBsYXRmb3JtX3NldHVwKGNoYXIgKipwX2NtZGxp bmUpCj4gIAkJfQo+ICAJfQo+ICAKPiAtCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3Rlcigm cGFuaWNfbm90aWZpZXJfbGlzdCwgJmlzc19wYW5pY19ibG9jayk7Cj4gKwlhdG9taWNfbm90aWZp ZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX3ByZV9yZWJvb3RfbGlzdCwgJmlzc19wYW5pY19ibG9j ayk7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVy LmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwo+IGluZGV4IGM1OTI2NTE0 NmU5Yy4uNmM0NzcwOTQ5YzAxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlf bXNnaGFuZGxlci5jCj4gKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMK PiBAQCAtMjUsNyArMjUsNiBAQAo+ICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAjaW5jbHVk ZSA8bGludXgvaXBtaS5oPgo+ICAjaW5jbHVkZSA8bGludXgvaXBtaV9zbWkuaD4KPiAtI2luY2x1 ZGUgPGxpbnV4L25vdGlmaWVyLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4gICNpbmNs dWRlIDxsaW51eC9wcm9jX2ZzLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgo+IEBA IC01Mzc1LDEwICs1Mzc0LDEzIEBAIHN0YXRpYyBpbnQgaXBtaV9yZWdpc3Rlcl9kcml2ZXIodm9p ZCkKPiAgCXJldHVybiBydjsKPiAgfQo+ICAKPiArLyoKPiArICogd2Ugc2hvdWxkIGV4ZWN1dGUg dGhpcyBwYW5pYyBjYWxsYmFjayBsYXRlLCBzaW5jZSBpdCBpbnZvbHZlcwo+ICsgKiBhIGNvbXBs ZXggY2FsbC1jaGFpbiBhbmQgcGFuaWMoKSBydW5zIGluIGF0b21pYyBjb250ZXh0Lgo+ICsgKi8K PiAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5pY19ibG9jayA9IHsKPiAgCS5ub3Rp Zmllcl9jYWxsCT0gcGFuaWNfZXZlbnQsCj4gLQkubmV4dAkJPSBOVUxMLAo+IC0JLnByaW9yaXR5 CT0gMjAwCS8qIHByaW9yaXR5OiBJTlRfTUFYID49IHggPj0gMCAqLwo+ICsJLnByaW9yaXR5CT0g SU5UX01JTiArIDEsCj4gIH07Cj4gIAo+ICBzdGF0aWMgaW50IGlwbWlfaW5pdF9tc2doYW5kbGVy KHZvaWQpCj4gQEAgLTU0MDYsNyArNTQwOCw3IEBAIHN0YXRpYyBpbnQgaXBtaV9pbml0X21zZ2hh bmRsZXIodm9pZCkKPiAgCXRpbWVyX3NldHVwKCZpcG1pX3RpbWVyLCBpcG1pX3RpbWVvdXQsIDAp Owo+ICAJbW9kX3RpbWVyKCZpcG1pX3RpbWVyLCBqaWZmaWVzICsgSVBNSV9USU1FT1VUX0pJRkZJ RVMpOwo+ICAKPiAtCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZp ZXJfbGlzdCwgJnBhbmljX2Jsb2NrKTsKPiArCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3Rl cigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LCAmcGFuaWNfYmxvY2spOwo+ICAKPiAgCWluaXRpYWxp emVkID0gdHJ1ZTsKPiAgCj4gQEAgLTU0MzgsNyArNTQ0MCw3IEBAIHN0YXRpYyB2b2lkIF9fZXhp dCBjbGVhbnVwX2lwbWkodm9pZCkKPiAgCWlmIChpbml0aWFsaXplZCkgewo+ICAJCWRlc3Ryb3lf d29ya3F1ZXVlKHJlbW92ZV93b3JrX3dxKTsKPiAgCj4gLQkJYXRvbWljX25vdGlmaWVyX2NoYWlu X3VucmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCj4gKwkJYXRvbWljX25vdGlmaWVyX2No YWluX3VucmVnaXN0ZXIoJnBhbmljX3ByZV9yZWJvb3RfbGlzdCwKPiAgCQkJCQkJICZwYW5pY19i bG9jayk7Cj4gIAo+ICAJCS8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbHRlcmFfZWRh Yy5jIGIvZHJpdmVycy9lZGFjL2FsdGVyYV9lZGFjLmMKPiBpbmRleCBlN2U4ZTYyNGE0MzYuLjQ4 OTBlOWNiYTZmYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2VkYWMvYWx0ZXJhX2VkYWMuYwo+ICsr KyBiL2RyaXZlcnMvZWRhYy9hbHRlcmFfZWRhYy5jCj4gQEAgLTE2LDcgKzE2LDYgQEAKPiAgI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICAjaW5jbHVkZSA8bGludXgvbWZkL2FsdGVyYS1zeXNt Z3IuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KPiAtI2luY2x1ZGUgPGxpbnV4 L25vdGlmaWVyLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cj4gICNpbmNsdWRl IDxsaW51eC9vZl9pcnEuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gQEAg LTIxNjMsNyArMjE2Miw3IEBAIHN0YXRpYyBpbnQgYWx0cl9lZGFjX2ExMF9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJCWludCBkYmVycm9yLCBlcnJfYWRkcjsKPiAgCj4g IAkJZWRhYy0+cGFuaWNfbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IHMxMF9lZGFjX2RiZXJyX2hh bmRsZXI7Cj4gLQkJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmll cl9saXN0LAo+ICsJCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfcHJlX3Jl Ym9vdF9saXN0LAo+ICAJCQkJCSAgICAgICAmZWRhYy0+cGFuaWNfbm90aWZpZXIpOwo+ICAKPiAg CQkvKiBQcmludG91dCBhIG1lc3NhZ2UgaWYgdW5jb3JyZWN0YWJsZSBlcnJvciBwcmV2aW91c2x5 LiAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jIGIvZHJpdmVycy9odi92 bWJ1c19kcnYuYwo+IGluZGV4IDkwMWI5NzAzNDMwOC4uMzcxN2MzMjNhYTM2IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvaHYvdm1idXNfZHJ2LmMKPiArKysgYi9kcml2ZXJzL2h2L3ZtYnVzX2Rydi5j Cj4gQEAgLTE2MjIsNyArMTYyMiw3IEBAIHN0YXRpYyBpbnQgdm1idXNfYnVzX2luaXQodm9pZCkK PiAgCSAqIEFsd2F5cyByZWdpc3RlciB0aGUgdm1idXMgdW5sb2FkIHBhbmljIG5vdGlmaWVyIGJl Y2F1c2Ugd2UKPiAgCSAqIG5lZWQgdG8gc2h1dCB0aGUgVk1idXMgY2hhbm5lbCBjb25uZWN0aW9u IG9uIHBhbmljLgo+ICAJICovCj4gLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBh bmljX25vdGlmaWVyX2xpc3QsCj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBh bmljX3ByZV9yZWJvb3RfbGlzdCwKPiAgCQkJICAgICAgICZoeXBlcnZfcGFuaWNfdm1idXNfdW5s b2FkX2Jsb2NrKTsKPiAgCj4gIAl2bWJ1c19yZXF1ZXN0X29mZmVycygpOwo+IEBAIC0yODUxLDcg KzI4NTEsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgdm1idXNfZXhpdCh2b2lkKQo+ICAJICogVGhl IHZtYnVzIHBhbmljIG5vdGlmaWVyIGlzIGFsd2F5cyByZWdpc3RlcmVkLCBoZW5jZSB3ZSBzaG91 bGQKPiAgCSAqIGFsc28gdW5jb25kaXRpb25hbGx5IHVucmVnaXN0ZXIgaXQgaGVyZSBhcyB3ZWxs Lgo+ICAJICovCj4gLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmcGFuaWNfbm90 aWZpZXJfbGlzdCwKPiArCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19w cmVfcmVib290X2xpc3QsCj4gIAkJCQkJJmh5cGVydl9wYW5pY192bWJ1c191bmxvYWRfYmxvY2sp Owo+ICAKPiAgCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylodl9wYW5pY19wYWdlKTsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1wYW5pYy5jIGIvZHJpdmVycy9s ZWRzL3RyaWdnZXIvbGVkdHJpZy1wYW5pYy5jCj4gaW5kZXggNjRhYmYyZTkxNjA4Li4zNGZkNTE3 MDcyM2YgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1wYW5pYy5j Cj4gKysrIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1wYW5pYy5jCj4gQEAgLTcsNyAr Nyw2IEBACj4gIAo+ICAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gICNpbmNsdWRlIDxsaW51 eC9pbml0Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgo+ICAjaW5jbHVkZSA8bGlu dXgvcGFuaWNfbm90aWZpZXIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KPiAgI2luY2x1 ZGUgIi4uL2xlZHMuaCIKPiBAQCAtNjQsNyArNjMsNyBAQCBzdGF0aWMgbG9uZyBsZWRfcGFuaWNf YmxpbmsoaW50IHN0YXRlKQo+ICAKPiAgc3RhdGljIGludCBfX2luaXQgbGVkdHJpZ19wYW5pY19p bml0KHZvaWQpCj4gIHsKPiAtCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNf bm90aWZpZXJfbGlzdCwKPiArCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNf cHJlX3JlYm9vdF9saXN0LAo+ICAJCQkJICAgICAgICZsZWRfdHJpZ2dlcl9wYW5pY19uYik7Cj4g IAo+ICAJbGVkX3RyaWdnZXJfcmVnaXN0ZXJfc2ltcGxlKCJwYW5pYyIsICZ0cmlnZ2VyKTsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9oZWFydGJlYXQuYyBiL2RyaXZlcnMvbWlz Yy9pYm1hc20vaGVhcnRiZWF0LmMKPiBpbmRleCA1OWM5YTBkOTU2NTkuLmQ2YWNhZTg4YjcyMiAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2hlYXJ0YmVhdC5jCj4gKysrIGIvZHJp dmVycy9taXNjL2libWFzbS9oZWFydGJlYXQuYwo+IEBAIC04LDcgKzgsNiBAQAo+ICAgKiBBdXRo b3I6IE1heCBBc2LDtmNrIDxhbWF4QHVzLmlibS5jb20+Cj4gICAqLwo+ICAKPiAtI2luY2x1ZGUg PGxpbnV4L25vdGlmaWVyLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wYW5pY19ub3RpZmllci5oPgo+ ICAjaW5jbHVkZSAiaWJtYXNtLmgiCj4gICNpbmNsdWRlICJkb3RfY29tbWFuZC5oIgo+IEBAIC0y NCw3ICsyMyw3IEBAIHN0YXRpYyBpbnQgc3VzcGVuZF9oZWFydGJlYXRzID0gMDsKPiAgICogSW4g dGhlIGNhc2Ugb2YgYSBwYW5pYyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgY29udGludWVzIHRvIHdv cmsgYW5kIHRodXMKPiAgICogY29udGludWVzIHRvIHJlc3BvbmQgdG8gaGVhcnRiZWF0cywgbWFr aW5nIHRoZSBzZXJ2aWNlIHByb2Nlc3NvciBiZWxpZXZlCj4gICAqIHRoZSBPUyBpcyBzdGlsbCBy dW5uaW5nIGFuZCB0aHVzIHByZXZlbnRpbmcgYSByZWJvb3QuCj4gLSAqIFRvIHByZXZlbnQgdGhp cyBmcm9tIGhhcHBlbmluZyBhIGNhbGxiYWNrIGlzIGFkZGVkIHRoZSBwYW5pY19ub3RpZmllcl9s aXN0Lgo+ICsgKiBUbyBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYSBjYWxsYmFjayBpcyBh ZGRlZCBpbiBhIHBhbmljIG5vdGlmaWVyIGxpc3QuCj4gICAqIEJlZm9yZSByZXNwb25kaW5nIHRv IGEgaGVhcnRiZWF0IHRoZSBkcml2ZXIgY2hlY2tzIGlmIGEgcGFuaWMgaGFzIGhhcHBlbmVkLAo+ ICAgKiBpZiB5ZXMgaXQgc3VzcGVuZHMgaGVhcnRiZWF0LCBjYXVzaW5nIHRoZSBzZXJ2aWNlIHBy b2Nlc3NvciB0byByZWJvb3QgYXMKPiAgICogZXhwZWN0ZWQuCj4gQEAgLTMyLDIwICszMSwyMyBA QCBzdGF0aWMgaW50IHN1c3BlbmRfaGVhcnRiZWF0cyA9IDA7Cj4gIHN0YXRpYyBpbnQgcGFuaWNf aGFwcGVuZWQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLCB1bnNpZ25lZCBsb25nIHZhbCwgdm9p ZCAqdikKPiAgewo+ICAJc3VzcGVuZF9oZWFydGJlYXRzID0gMTsKPiAtCXJldHVybiAwOwo+ICsJ cmV0dXJuIE5PVElGWV9ET05FOwo+ICB9Cj4gIAo+IC1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Js b2NrIHBhbmljX25vdGlmaWVyID0geyBwYW5pY19oYXBwZW5lZCwgTlVMTCwgMSB9Owo+ICtzdGF0 aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhbmljX25vdGlmaWVyID0gewo+ICsJLm5vdGlmaWVy X2NhbGwgPSBwYW5pY19oYXBwZW5lZCwKPiArfTsKPiAgCj4gIHZvaWQgaWJtYXNtX3JlZ2lzdGVy X3BhbmljX25vdGlmaWVyKHZvaWQpCj4gIHsKPiAtCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdp c3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljX25vdGlmaWVyKTsKPiArCWF0b21pY19u b3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LAo+ICsJCQkJCSZw YW5pY19ub3RpZmllcik7Cj4gIH0KPiAgCj4gIHZvaWQgaWJtYXNtX3VucmVnaXN0ZXJfcGFuaWNf bm90aWZpZXIodm9pZCkKPiAgewo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIo JnBhbmljX25vdGlmaWVyX2xpc3QsCj4gLQkJCSZwYW5pY19ub3RpZmllcik7Cj4gKwlhdG9taWNf bm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LAo+ICsJCQkJ CSZwYW5pY19ub3RpZmllcik7Cj4gIH0KPiAgCj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9pcGEvaXBhX3NtcDJwLmMgYi9kcml2ZXJzL25ldC9pcGEvaXBhX3NtcDJwLmMKPiBpbmRleCAy MTEyMzM2MTIwMzkuLjkyY2RmNmUwNjM3YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL25ldC9pcGEv aXBhX3NtcDJwLmMKPiArKysgYi9kcml2ZXJzL25ldC9pcGEvaXBhX3NtcDJwLmMKPiBAQCAtNyw3 ICs3LDYgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9k ZXZpY2UuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+IC0jaW5jbHVkZSA8bGlu dXgvbm90aWZpZXIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3BhbmljX25vdGlmaWVyLmg+Cj4gICNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9zb2MvcWNvbS9z bWVtLmg+Cj4gQEAgLTEzOCwxMyArMTM3LDEzIEBAIHN0YXRpYyBpbnQgaXBhX3NtcDJwX3Bhbmlj X25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCBpcGFfc21wMnAgKnNtcDJwKQo+ICAJc21wMnAtPnBh bmljX25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBpcGFfc21wMnBfcGFuaWNfbm90aWZpZXI7Cj4g IAlzbXAycC0+cGFuaWNfbm90aWZpZXIucHJpb3JpdHkgPSBJTlRfTUFYOwkvKiBEbyBpdCBlYXJs eSAqLwo+ICAKPiAtCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmlj X25vdGlmaWVyX2xpc3QsCj4gKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVy KCZwYW5pY19wcmVfcmVib290X2xpc3QsCj4gIAkJCQkJICAgICAgJnNtcDJwLT5wYW5pY19ub3Rp Zmllcik7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGlwYV9zbXAycF9wYW5pY19ub3RpZmllcl91 bnJlZ2lzdGVyKHN0cnVjdCBpcGFfc21wMnAgKnNtcDJwKQo+ICB7Cj4gLQlhdG9taWNfbm90aWZp ZXJfY2hhaW5fdW5yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKPiArCWF0b21pY19ub3Rp Zmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3QsCj4gIAkJCQkJICZz bXAycC0+cGFuaWNfbm90aWZpZXIpOwo+ICB9Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Bh cmlzYy9wb3dlci5jIGIvZHJpdmVycy9wYXJpc2MvcG93ZXIuYwo+IGluZGV4IDg1MTI4ODRkZTJj Zi4uNWJiMDg2OGY1ZjA4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGFyaXNjL3Bvd2VyLmMKPiAr KysgYi9kcml2ZXJzL3BhcmlzYy9wb3dlci5jCj4gQEAgLTIzMyw3ICsyMzMsNyBAQCBzdGF0aWMg aW50IF9faW5pdCBwb3dlcl9pbml0KHZvaWQpCj4gIAl9Cj4gIAo+ICAJLyogUmVnaXN0ZXIgYSBj YWxsIGZvciBwYW5pYyBjb25kaXRpb25zLiAqLwo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3Jl Z2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAo+ICsJYXRvbWljX25vdGlmaWVyX2NoYWluX3Jl Z2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3QsCj4gIAkJCSZwYXJpc2NfcGFuaWNfYmxvY2sp Owo+ICAKPiAgCXJldHVybiAwOwo+IEBAIC0yNDMsNyArMjQzLDcgQEAgc3RhdGljIHZvaWQgX19l eGl0IHBvd2VyX2V4aXQodm9pZCkKPiAgewo+ICAJa3RocmVhZF9zdG9wKHBvd2VyX3Rhc2spOwo+ ICAKPiAtCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9s aXN0LAo+ICsJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX3ByZV9yZWJv b3RfbGlzdCwKPiAgCQkJJnBhcmlzY19wYW5pY19ibG9jayk7Cj4gIAo+ICAJcGRjX3NvZnRfcG93 ZXJfYnV0dG9uKDApOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJv Y19jb3JlLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmMKPiBpbmRleCBj NTEwMTI1NzY5YjkuLjI0Nzk5ZmYyMzllNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3JlbW90ZXBy b2MvcmVtb3RlcHJvY19jb3JlLmMKPiArKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJv Y19jb3JlLmMKPiBAQCAtMjc5NSwxMiArMjc5NSwxNCBAQCBzdGF0aWMgaW50IHJwcm9jX3Bhbmlj X2hhbmRsZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwK PiAgc3RhdGljIHZvaWQgX19pbml0IHJwcm9jX2luaXRfcGFuaWModm9pZCkKPiAgewo+ICAJcnBy b2NfcGFuaWNfbmIubm90aWZpZXJfY2FsbCA9IHJwcm9jX3BhbmljX2hhbmRsZXI7Cj4gLQlhdG9t aWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZycHJvY19w YW5pY19uYik7Cj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX3ByZV9y ZWJvb3RfbGlzdCwKPiArCQkJCSAgICAgICAmcnByb2NfcGFuaWNfbmIpOwo+ICB9Cj4gIAo+ICBz dGF0aWMgdm9pZCBfX2V4aXQgcnByb2NfZXhpdF9wYW5pYyh2b2lkKQo+ICB7Cj4gLQlhdG9taWNf bm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnJwcm9jX3Bh bmljX25iKTsKPiArCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19wcmVf cmVib290X2xpc3QsCj4gKwkJCQkJICZycHJvY19wYW5pY19uYik7Cj4gIH0KPiAgCj4gIHN0YXRp YyBpbnQgX19pbml0IHJlbW90ZXByb2NfaW5pdCh2b2lkKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3MzOTAvY2hhci9jb24zMjE1LmMgYi9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMKPiBpbmRl eCAxOTIxOThiZDNkYzQuLjA3Mzc5ZGQzZjFmMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3MzOTAv Y2hhci9jb24zMjE1LmMKPiArKysgYi9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMKPiBAQCAt ODY3LDcgKzg2Nyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbjMyMTVfaW5pdCh2b2lkKQo+ICAJ CXJhdzMyMTVbMF0gPSBOVUxMOwo+ICAJCXJldHVybiAtRU5PREVWOwo+ICAJfQo+IC0JYXRvbWlj X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmb25fcGFuaWNf bmIpOwo+ICsJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290 X2xpc3QsICZvbl9wYW5pY19uYik7Cj4gIAlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJm9uX3Jl Ym9vdF9uYik7Cj4gIAlyZWdpc3Rlcl9jb25zb2xlKCZjb24zMjE1KTsKPiAgCXJldHVybiAwOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMgYi9kcml2ZXJzL3MzOTAv Y2hhci9jb24zMjcwLmMKPiBpbmRleCA0NzYyMDJmM2Q4YTAuLmU3OWJmM2U3YmRlMyAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMKPiArKysgYi9kcml2ZXJzL3MzOTAv Y2hhci9jb24zMjcwLmMKPiBAQCAtNjQ1LDcgKzY0NSw3IEBAIGNvbjMyNzBfaW5pdCh2b2lkKQo+ ICAJY29uZGV2LT5jbGluZS0+bGVuID0gMDsKPiAgCWNvbjMyNzBfY3JlYXRlX3N0YXR1cyhjb25k ZXYpOwo+ICAJY29uZGV2LT5pbnB1dCA9IGFsbG9jX3N0cmluZygmY29uZGV2LT5mcmVlbWVtLCA4 MCk7Cj4gLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xp c3QsICZvbl9wYW5pY19uYik7Cj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBh bmljX3ByZV9yZWJvb3RfbGlzdCwgJm9uX3BhbmljX25iKTsKPiAgCXJlZ2lzdGVyX3JlYm9vdF9u b3RpZmllcigmb25fcmVib290X25iKTsKPiAgCXJlZ2lzdGVyX2NvbnNvbGUoJmNvbjMyNzApOwo+ ICAJcmV0dXJuIDA7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY29uLmMg Yi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Nvbi5jCj4gaW5kZXggZTVkOTQ3Yzc2M2VhLi43Y2E5 ZDRjNDVkNjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jb24uYwo+ICsr KyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY29uLmMKPiBAQCAtMjg4LDcgKzI4OCw3IEBAIHNj bHBfY29uc29sZV9pbml0KHZvaWQpCj4gIAl0aW1lcl9zZXR1cCgmc2NscF9jb25fdGltZXIsIHNj bHBfY29uc29sZV90aW1lb3V0LCAwKTsKPiAgCj4gIAkvKiBlbmFibGUgcHJpbnRrLWFjY2VzcyB0 byB0aGlzIGRyaXZlciAqLwo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5p Y19ub3RpZmllcl9saXN0LCAmb25fcGFuaWNfbmIpOwo+ICsJYXRvbWljX25vdGlmaWVyX2NoYWlu X3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3QsICZvbl9wYW5pY19uYik7Cj4gIAlyZWdp c3Rlcl9yZWJvb3Rfbm90aWZpZXIoJm9uX3JlYm9vdF9uYik7Cj4gIAlyZWdpc3Rlcl9jb25zb2xl KCZzY2xwX2NvbnNvbGUpOwo+ICAJcmV0dXJuIDA7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5 MC9jaGFyL3NjbHBfdnQyMjAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYwo+IGlu ZGV4IGEzMmYzNGExYzZkMi4uOTdjZjllMjkwYzI4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvczM5 MC9jaGFyL3NjbHBfdnQyMjAuYwo+ICsrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAu Ywo+IEBAIC04MzgsNyArODM4LDcgQEAgc2NscF92dDIyMF9jb25faW5pdCh2b2lkKQo+ICAJaWYg KHJjKQo+ICAJCXJldHVybiByYzsKPiAgCS8qIEF0dGFjaCBsaW51eCBjb25zb2xlICovCj4gLQlh dG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZvbl9w YW5pY19uYik7Cj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX3ByZV9y ZWJvb3RfbGlzdCwgJm9uX3BhbmljX25iKTsKPiAgCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigm b25fcmVib290X25iKTsKPiAgCXJlZ2lzdGVyX2NvbnNvbGUoJnNjbHBfdnQyMjBfY29uc29sZSk7 Cj4gIAlyZXR1cm4gMDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9v bHBjX2Rjb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMKPiBpbmRl eCA3Mjg0Y2I0YWMzOTUuLmNiNTA0NzFmMjI0NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3N0YWdp bmcvb2xwY19kY29uL29scGNfZGNvbi5jCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNv bi9vbHBjX2Rjb24uYwo+IEBAIC02NTMsNyArNjUzLDggQEAgc3RhdGljIGludCBkY29uX3Byb2Jl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpp ZCkKPiAgCX0KPiAgCj4gIAlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmRjb24tPnJlYm9vdF9u Yik7Cj4gLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xp c3QsICZkY29uX3BhbmljX25iKTsKPiArCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3Rlcigm cGFuaWNfcHJlX3JlYm9vdF9saXN0LAo+ICsJCQkJICAgICAgICZkY29uX3BhbmljX25iKTsKPiAg Cj4gIAlyZXR1cm4gMDsKPiAgCj4gQEAgLTY3Niw3ICs2NzcsOCBAQCBzdGF0aWMgaW50IGRjb25f cmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4gIAlzdHJ1Y3QgZGNvbl9wcml2ICpk Y29uID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gIAo+ICAJdW5yZWdpc3Rlcl9yZWJv b3Rfbm90aWZpZXIoJmRjb24tPnJlYm9vdF9uYik7Cj4gLQlhdG9taWNfbm90aWZpZXJfY2hhaW5f dW5yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJmRjb25fcGFuaWNfbmIpOwo+ICsJYXRv bWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX3ByZV9yZWJvb3RfbGlzdCwKPiAr CQkJCQkgJmRjb25fcGFuaWNfbmIpOwo+ICAKPiAgCWZyZWVfaXJxKERDT05fSVJRLCBkY29uKTsK PiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvaHlwZXJ2X2ZiLmMgYi9kcml2 ZXJzL3ZpZGVvL2ZiZGV2L2h5cGVydl9mYi5jCj4gaW5kZXggZjM0OTRiODY4YTY0Li5lYzIxZTYz NTkyYmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9oeXBlcnZfZmIuYwo+ICsr KyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvaHlwZXJ2X2ZiLmMKPiBAQCAtMTI1Myw3ICsxMjUzLDcg QEAgc3RhdGljIGludCBodmZiX3Byb2JlKHN0cnVjdCBodl9kZXZpY2UgKmhkZXYsCj4gIAkgKi8K PiAgCXBhci0+aHZmYl9wYW5pY19uYi5ub3RpZmllcl9jYWxsID0gaHZmYl9vbl9wYW5pYzsKPiAg CXBhci0+aHZmYl9wYW5pY19uYi5wcmlvcml0eSA9IElOVF9NSU4gKyAxMCwKPiAtCWF0b21pY19u b3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKPiArCWF0b21pY19u b3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LAo+ICAJCQkJICAg ICAgICZwYXItPmh2ZmJfcGFuaWNfbmIpOwo+ICAKPiAgCXJldHVybiAwOwo+IEBAIC0xMjc2LDcg KzEyNzYsNyBAQCBzdGF0aWMgaW50IGh2ZmJfcmVtb3ZlKHN0cnVjdCBodl9kZXZpY2UgKmhkZXYp Cj4gIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGh2X2dldF9kcnZkYXRhKGhkZXYpOwo+ICAJc3Ry dWN0IGh2ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Cj4gIAo+IC0JYXRvbWljX25vdGlmaWVyX2No YWluX3VucmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCj4gKwlhdG9taWNfbm90aWZpZXJf Y2hhaW5fdW5yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LAo+ICAJCQkJCSAmcGFyLT5o dmZiX3BhbmljX25iKTsKPiAgCj4gIAlwYXItPnVwZGF0ZSA9IGZhbHNlOwo+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2xpbnV4L3BhbmljX25vdGlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L3BhbmljX25v dGlmaWVyLmgKPiBpbmRleCA3MzY0YTM0NmJjYjAuLjc5MTJhYWNiYzBlNSAxMDA2NDQKPiAtLS0g YS9pbmNsdWRlL2xpbnV4L3BhbmljX25vdGlmaWVyLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3Bh bmljX25vdGlmaWVyLmgKPiBAQCAtNSw5ICs1LDkgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L25vdGlm aWVyLmg+Cj4gICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICAKPiAtZXh0ZXJuIHN0cnVjdCBh dG9taWNfbm90aWZpZXJfaGVhZCBwYW5pY19ub3RpZmllcl9saXN0Owo+ICBleHRlcm4gc3RydWN0 IGF0b21pY19ub3RpZmllcl9oZWFkIHBhbmljX2h5cGVydmlzb3JfbGlzdDsKPiAgZXh0ZXJuIHN0 cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBwYW5pY19pbmZvX2xpc3Q7Cj4gK2V4dGVybiBzdHJ1 Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgcGFuaWNfcHJlX3JlYm9vdF9saXN0Owo+ICAKPiAgZXh0 ZXJuIGJvb2wgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnM7Cj4gIAo+IGRpZmYgLS1naXQgYS9r ZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCj4gaW5kZXggNzNjYTFiYzQ0ZTMwLi5hOWQ0 M2I5OGIwNWIgMTAwNjQ0Cj4gLS0tIGEva2VybmVsL3BhbmljLmMKPiArKysgYi9rZXJuZWwvcGFu aWMuYwo+IEBAIC02OSwxNiArNjksMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGFuaWNfdGltZW91 dCk7Cj4gICNkZWZpbmUgUEFOSUNfUFJJTlRfQUxMX0NQVV9CVAkJMHgwMDAwMDA0MAo+ICB1bnNp Z25lZCBsb25nIHBhbmljX3ByaW50Owo+ICAKPiAtQVRPTUlDX05PVElGSUVSX0hFQUQocGFuaWNf bm90aWZpZXJfbGlzdCk7Cj4gLQo+IC1FWFBPUlRfU1lNQk9MKHBhbmljX25vdGlmaWVyX2xpc3Qp Owo+IC0KPiAgQVRPTUlDX05PVElGSUVSX0hFQUQocGFuaWNfaHlwZXJ2aXNvcl9saXN0KTsKPiAg RVhQT1JUX1NZTUJPTChwYW5pY19oeXBlcnZpc29yX2xpc3QpOwo+ICAKPiAgQVRPTUlDX05PVElG SUVSX0hFQUQocGFuaWNfaW5mb19saXN0KTsKPiAgRVhQT1JUX1NZTUJPTChwYW5pY19pbmZvX2xp c3QpOwo+ICAKPiArQVRPTUlDX05PVElGSUVSX0hFQUQocGFuaWNfcHJlX3JlYm9vdF9saXN0KTsK PiArRVhQT1JUX1NZTUJPTChwYW5pY19wcmVfcmVib290X2xpc3QpOwo+ICsKPiAgc3RhdGljIGxv bmcgbm9fYmxpbmsoaW50IHN0YXRlKQo+ICB7Cj4gIAlyZXR1cm4gMDsKPiBAQCAtMjk1LDcgKzI5 NCw3IEBAIHZvaWQgcGFuaWMoY29uc3QgY2hhciAqZm10LCAuLi4pCj4gIAkgKi8KPiAgCWF0b21p Y19ub3RpZmllcl9jYWxsX2NoYWluKCZwYW5pY19oeXBlcnZpc29yX2xpc3QsIFBBTklDX05PVElG SUVSLCBidWYpOwo+ICAJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnBhbmljX2luZm9fbGlz dCwgUEFOSUNfTk9USUZJRVIsIGJ1Zik7Cj4gLQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigm cGFuaWNfbm90aWZpZXJfbGlzdCwgUEFOSUNfTk9USUZJRVIsIGJ1Zik7Cj4gKwlhdG9taWNfbm90 aWZpZXJfY2FsbF9jaGFpbigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LCBQQU5JQ19OT1RJRklFUiwg YnVmKTsKPiAgCj4gIAlwYW5pY19wcmludF9zeXNfaW5mbyhmYWxzZSk7Cj4gIAo+IC0tIAo+IDIu MzYuMAo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtdW0gbWFpbGluZyBsaXN0CmxpbnV4LXVtQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC11bQo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: Corey Minyard Subject: Re: [PATCH 21/30] panic: Introduce the panic pre-reboot notifier list Date: Thu, 28 Apr 2022 11:26:16 -0500 Message-ID: <20220428162616.GE442787@minyard.net> References: <20220427224924.592546-1-gpiccoli@igalia.com> <20220427224924.592546-22-gpiccoli@igalia.com> Reply-To: minyard-HInyCGIudOg@public.gmane.org Mime-Version: 1.0 Content-Transfer-Encoding: base64 Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:date:from:to:cc:subject:message-id:reply-to:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=X61ynYOTK5MLCYojT5d+ysrbHRt63RIFwyQAXjqYUNE=; b=RB+bl5iS3eKUU1+cjBBmoZPJ1GgbW8A749d7YnZ5vNC1ZTUNv7WuO8EMH81G6FfKTS ULk5loh6t/tF8m/LAK3UZqNRLeu4MFN0UjekospklQvLFm841ye1F/VzC3oleDitZ9O1 cvCfYdbM5VdBWJyGeksEVUvI/wAmKaB1Xib5pllqvVtHqYCR321S43b6ZumXK649aRhK zYDyDYBYNmM0JL+Vo7iNHObeaqoFD1y1D4cNFPF7xZzMMMNiqfQKAckfc8DPi2gZdtiq 5S67VXHmy+E6AUijmYawjpiuSvLWVR0T3rL6kGpPqkjomB2poiuXMcy1kF9nEqMyvOX9 Yn4g== Sender: Corey Minyard Content-Disposition: inline In-Reply-To: <20220427224924.592546-22-gpiccoli-wEGTBA9jqPzQT0dZR+AlfA@public.gmane.org> List-ID: Content-Type: text/plain; charset="macroman" To: "Guilherme G. Piccoli" Cc: akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org, bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, pmladek-IBi9RG/b67k@public.gmane.org, kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, bcm-kernel-feedback-list-dY08KVG/lbpWk0Htik3J/w@public.gmane.org, coresight-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, linux-alpha-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-edac-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-hyperv-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-leds-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-mips-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-parisc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-remoteproc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-s390-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-um-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-xtensa-PjhNF2WwrV/0Sa2dR60CXw@public.gmane.org, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, openipmi-developer-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org, rcu-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, sparclinux-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, xen-devel-GuqFBffKawtpuQazS67q72D2FQJk+8+b@public.gmane.org, x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, kernel-dev-wEGTBA9jqPzQT0dZR+AlfA@public.gmane.org, k T24gV2VkLCBBcHIgMjcsIDIwMjIgYXQgMDc6NDk6MTVQTSAtMDMwMCwgR3VpbGhlcm1lIEcuIFBp Y2NvbGkgd3JvdGU6Cj4gVGhpcyBwYXRjaCByZW5hbWVzIHRoZSBwYW5pY19ub3RpZmllcl9saXN0 IHRvIHBhbmljX3ByZV9yZWJvb3RfbGlzdDsKPiB0aGUgaWRlYSBpcyB0aGF0IGEgc3Vic2VxdWVu dCBwYXRjaCB3aWxsIHJlZmFjdG9yIHRoZSBwYW5pYyBwYXRoCj4gaW4gb3JkZXIgdG8gYmV0dGVy IHNwbGl0IHRoZSBub3RpZmllcnMsIHJ1bm5pbmcgc29tZSBvZiB0aGVtIHZlcnkKPiBlYXJseSwg c29tZSBvZiB0aGVtIG5vdCBzbyBlYXJseSBbYnV0IHN0aWxsIGJlZm9yZSBrbXNnX2R1bXAoKV0g YW5kCj4gZmluYWxseSwgdGhlIHJlc3Qgc2hvdWxkIGV4ZWN1dGUgbGF0ZSwgYWZ0ZXIga2R1bXAu IFRoZSBsYXR0ZXIgb25lcwo+IGFyZSBub3cgaW4gdGhlIHBhbmljIHByZS1yZWJvb3QgbGlzdCAt IHRoZSBuYW1lIGNvbWVzIGZyb20gdGhlIGlkZWEKPiB0aGF0IHRoZXNlIG5vdGlmaWVycyBleGVj dXRlIGJlZm9yZSBwYW5pYygpIGF0dGVtcHRzIHJlYm9vdGluZyB0aGUKPiBtYWNoaW5lIChpZiB0 aGF0IG9wdGlvbiBpcyBzZXQpLgo+IAo+IFdlIGFsc28gdG9vayB0aGUgb3Bwb3J0dW5pdHkgdG8g Y2xlYW4tdXAgdXNlbGVzcyBoZWFkZXIgaW5jbHVzaW9ucywKPiBpbXByb3ZlIHNvbWUgbm90aWZp ZXIgYmxvY2sgZGVjbGFyYXRpb25zIChlLmcuIGluIGlibWFzbS9oZWFydGJlYXQuYykKPiBhbmQg bW9yZSBpbXBvcnRhbnQsIGNoYW5nZSBzb21lIHByaW9yaXRpZXMgLSB3ZSBoZXJlYnkgc2V0IDIg bm90aWZpZXJzCj4gdG8gcnVuIGxhdGUgaW4gdGhlIGxpc3QgW2lzc19wYW5pY19ldmVudCgpIGFu ZCB0aGUgSVBNSSBwYW5pY19ldmVudCgpXQo+IGR1ZSB0byB0aGUgcmlza3MgdGhleSBvZmZlciAo bWF5IG5vdCByZXR1cm4sIGZvciBleGFtcGxlKS4KPiBQcm9wZXIgZG9jdW1lbnRhdGlvbiBpcyBn b2luZyB0byBiZSBwcm92aWRlZCBpbiBhIHN1YnNlcXVlbnQgcGF0Y2gsCj4gdGhhdCBlZmZlY3Rp dmVseSByZWZhY3RvcnMgdGhlIHBhbmljIHBhdGguCgpGb3IgdGhlIElQTUkgcG9ydGlvbjoKCkFj a2VkLWJ5OiBDb3JleSBNaW55YXJkIDxjbWlueWFyZC1JZ2Y0UE9ZVFlDRFFUMGRaUitBbGZBQHB1 YmxpYy5nbWFuZS5vcmc+CgpOb3RlIHRoYXQgdGhlIElQTUkgcGFuaWNfZXZlbnQoKSBzaG91bGQg YWx3YXlzIHJldHVybiwgYnV0IGl0IG1heSB0YWtlCnNvbWUgdGltZSwgZXNwZWNpYWxseSBpZiB0 aGUgSVBNSSBjb250cm9sbGVyIGlzIG5vIGxvbmdlciBmdW5jdGlvbmFsLgpTbyB0aGUgcmlzayBv ZiBhIGxvbmcgZGVsYXkgaXMgdGhlcmUgYW5kIGl0IG1ha2VzIHNlbnNlIHRvIG1vdmUgaXQgdmVy eQpsYXRlLgoKLWNvcmV5Cgo+IAo+IENjOiBBbGV4IEVsZGVyIDxlbGRlci1EZ0VqVCtBaTJ5Z2Ru bSt5Uk9mRTBBQHB1YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6IEFsZXhhbmRlciBHb3JkZWV2IDxhZ29y ZGVldi10RVhtdnRDWlg3QXliUzVFZThyczNBQHB1YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6IEFudG9u IEl2YW5vdiA8YW50b24uaXZhbm92LWVhU2dwNWhOMkVBdHdxRmRJRWd5emRCUFIxbEg0Q1Y4QHB1 YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6IEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmgtWFZtdkhN QVJHQVM4VTJkSk5OOEk3a0IrNkJHa0xxN3JAcHVibGljLmdtYW5lLm9yZz4KPiBDYzogQmpvcm4g QW5kZXJzc29uIDxiam9ybi5hbmRlcnNzb24tUVNFajVGWVFobTRkbm0reVJPZkUwQUBwdWJsaWMu Z21hbmUub3JnPgo+IENjOiBCb3JpcyBPc3Ryb3Zza3kgPGJvcmlzLm9zdHJvdnNreS1RSGNMWnVF R1RzdlFUMGRaUitBbGZBQHB1YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6IENocmlzIFphbmtlbCA8Y2hy aXMtWXZYZXF3U1l6RzJzVG5KTjkrQkdYZ0BwdWJsaWMuZ21hbmUub3JnPgo+IENjOiBDaHJpc3Rp YW4gQm9ybnRyYWVnZXIgPGJvcm50cmFlZ2VyLXRFWG12dENaWDdBeWJTNUVlOHJzM0FAcHVibGlj LmdtYW5lLm9yZz4KPiBDYzogQ29yZXkgTWlueWFyZCA8bWlueWFyZC1ISW55Q0dJdWRPZ0BwdWJs aWMuZ21hbmUub3JnPgo+IENjOiBEZXh1YW4gQ3VpIDxkZWN1aS0wbGk2T3RjeEJGSGJ5M2lWcmta cTJBQHB1YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6ICJILiBQZXRlciBBbnZpbiIgPGhwYS1ZTU5PVVpK QzRod0F2eHRpdU13eDN3QHB1YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6IEhhaXlhbmcgWmhhbmcgPGhh aXlhbmd6LTBsaTZPdGN4QkZIYnkzaVZya1pxMkFAcHVibGljLmdtYW5lLm9yZz4KPiBDYzogSGVp a28gQ2Fyc3RlbnMgPGhjYS10RVhtdnRDWlg3QXliUzVFZThyczNBQHB1YmxpYy5nbWFuZS5vcmc+ Cj4gQ2M6IEhlbGdlIERlbGxlciA8ZGVsbGVyLU1tYjdNWnBIbkZZQHB1YmxpYy5nbWFuZS5vcmc+ Cj4gQ2M6IEl2YW4gS29rc2hheXNreSA8aW5rLWJpSXMvWTB5bVlKTVpMSVZZb2p1UE5QMHJYVEpU aTA5QHB1YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6ICJKYW1lcyBFLkouIEJvdHRvbWxleSIgPEphbWVz LkJvdHRvbWxleS1kOVBoSHVkMUpmakNYcTZrZk1aNTMvZWdZSGVHdzhKa0BwdWJsaWMuZ21hbmUu b3JnPgo+IENjOiBKYW1lcyBNb3JzZSA8amFtZXMubW9yc2UtNXd2N2RnbklnRzhAcHVibGljLmdt YW5lLm9yZz4KPiBDYzogSm9oYW5uZXMgQmVyZyA8am9oYW5uZXMtY2R2dTAwdW4xVmdkSHh6QURk bGs4UUBwdWJsaWMuZ21hbmUub3JnPgo+IENjOiBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3MtSUJpOVJH L2I2N2tAcHVibGljLmdtYW5lLm9yZz4KPiBDYzogIksuIFkuIFNyaW5pdmFzYW4iIDxreXMtMGxp Nk90Y3hCRkhieTNpVnJrWnEyQUBwdWJsaWMuZ21hbmUub3JnPgo+IENjOiBNYXRoaWV1IFBvaXJp ZXIgPG1hdGhpZXUucG9pcmllci1RU0VqNUZZUWhtNGRubSt5Uk9mRTBBQHB1YmxpYy5nbWFuZS5v cmc+Cj4gQ2M6IE1hdHQgVHVybmVyIDxtYXR0c3Q4OC1SZTVKUUVlUXFlOEF2eHRpdU13eDN3QHB1 YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYi1EZ0Vq VCtBaTJ5Z2RubSt5Uk9mRTBBQHB1YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6IE1heCBGaWxpcHBvdiA8 amNtdmJrYmMtUmU1SlFFZVFxZThBdnh0aXVNd3gzd0BwdWJsaWMuZ21hbmUub3JnPgo+IENjOiBN aWNoYWVsIEVsbGVybWFuIDxtcGUtR3N4L09lOEhzRmdnQmMyN3dxREFIZ0BwdWJsaWMuZ21hbmUu b3JnPgo+IENjOiBQYXVsIE1hY2tlcnJhcyA8cGF1bHVzLWVVTlVCSHJvbGZiWXRqdnlXNnlEc2dA cHVibGljLmdtYW5lLm9yZz4KPiBDYzogUGF2ZWwgTWFjaGVrIDxwYXZlbC0rWkk5eFVOaXQ3SUBw dWJsaWMuZ21hbmUub3JnPgo+IENjOiBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoLWhMNDZqUDVCeHE3 UjdzODgwam95YlFAcHVibGljLmdtYW5lLm9yZz4KPiBDYzogUmljaGFyZCBXZWluYmVyZ2VyIDxy aWNoYXJkLS9MM1JhN245ZWtjQHB1YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6IFJvYmVydCBSaWNodGVy IDxycmljLURnRWpUK0FpMnlnZG5tK3lST2ZFMEFAcHVibGljLmdtYW5lLm9yZz4KPiBDYzogU3Rl ZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaS1EZ0VqVCtBaTJ5Z2RubSt5Uk9mRTBBQHB1Ymxp Yy5nbWFuZS5vcmc+Cj4gQ2M6IFN0ZXBoZW4gSGVtbWluZ2VyIDxzdGhlbW1pbi0wbGk2T3RjeEJG SGJ5M2lWcmtacTJBQHB1YmxpYy5nbWFuZS5vcmc+Cj4gQ2M6IFN2ZW4gU2NobmVsbGUgPHN2ZW5z LXRFWG12dENaWDdBeWJTNUVlOHJzM0FAcHVibGljLmdtYW5lLm9yZz4KPiBDYzogVG9ueSBMdWNr IDx0b255Lmx1Y2stcmFsMkpRQ3JodUVBdnh0aXVNd3gzd0BwdWJsaWMuZ21hbmUub3JnPgo+IENj OiBWYXNpbHkgR29yYmlrIDxnb3ItdEVYbXZ0Q1pYN0F5YlM1RWU4cnMzQUBwdWJsaWMuZ21hbmUu b3JnPgo+IENjOiBXZWkgTGl1IDx3ZWkubGl1LURnRWpUK0FpMnlnZG5tK3lST2ZFMEFAcHVibGlj LmdtYW5lLm9yZz4KPiBTaWduZWQtb2ZmLWJ5OiBHdWlsaGVybWUgRy4gUGljY29saSA8Z3BpY2Nv bGktd0VHVEJBOWpxUHpRVDBkWlIrQWxmQUBwdWJsaWMuZ21hbmUub3JnPgo+IC0tLQo+IAo+IE5v dGljZSB0aGF0LCB3aXRoIHRoaXMgbmFtZSBjaGFuZ2UsIG91dC1vZi10cmVlIGNvZGUgdGhhdCBy ZWxpZXMgaW4gdGhlIGdsb2JhbAo+IGV4cG9ydGVkICJwYW5pY19ub3RpZmllcl9saXN0IiB3aWxs IGZhaWwgdG8gYnVpbGQuIFdlIGNvdWxkIGVhc2lseSBrZWVwIHRoZQo+IHJldHJvLWNvbXBhdGli aWxpdHkgYnkgbWFraW5nIHRoZSBvbGQgc3ltYm9sIHRvIHN0aWxsIGV4aXN0IGFuZCBwb2ludCB0 byB0aGUKPiBwcmVfcmVib290IGxpc3QgKG9yIGV2ZW4sIGtlZXAgdGhlIG9sZCBuYW1pbmcpLgo+ IAo+IEJ1dCBvdXIgZGVzaWduIGNob2ljZSB3YXMgdG8gYWxsb3cgdGhlIGJyZWFrYWdlLCBtYWtp bmcgdXNlcnMgcmV0aGluayB0aGVpcgo+IG5vdGlmaWVycywgYWRkaW5nIHRoZW0gaW4gdGhlIGxp c3QgdGhhdCBmaXRzIGJlc3QuIElmIHRoYXQgd2Fzbid0IGEgZ29vZAo+IGRlY2lzaW9uLCB3ZSdy ZSBvcGVuIHRvIGNoYW5nZSBpdCwgb2YgY291cnNlLgo+IFRoYW5rcyBpbiBhZHZhbmNlIGZvciB0 aGUgcmV2aWV3IQo+IAo+ICBhcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jICAgICAgICAgICAgIHwg IDQgKystLQo+ICBhcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NoYXNzaXMuYyAgICAgIHwgIDMgKy0t Cj4gIGFyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgICAgfCAgMiArLQo+ICBhcmNo L3MzOTAva2VybmVsL2lwbC5jICAgICAgICAgICAgICAgIHwgIDQgKystLQo+ICBhcmNoL3VtL2Ry aXZlcnMvbWNvbnNvbGVfa2Vybi5jICAgICAgIHwgIDIgKy0KPiAgYXJjaC91bS9rZXJuZWwvdW1f YXJjaC5jICAgICAgICAgICAgICB8ICAyICstCj4gIGFyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyAg ICAgICAgICAgICAgfCAgMiArLQo+ICBhcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NldHVwLmMg ICAgIHwgIDQgKystLQo+ICBkcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyAgIHwg MTIgKysrKysrKy0tLS0tCj4gIGRyaXZlcnMvZWRhYy9hbHRlcmFfZWRhYy5jICAgICAgICAgICAg fCAgMyArLS0KPiAgZHJpdmVycy9odi92bWJ1c19kcnYuYyAgICAgICAgICAgICAgICB8ICA0ICsr LS0KPiAgZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1wYW5pYy5jICB8ICAzICstLQo+ICBk cml2ZXJzL21pc2MvaWJtYXNtL2hlYXJ0YmVhdC5jICAgICAgIHwgMTYgKysrKysrKysrLS0tLS0t LQo+ICBkcml2ZXJzL25ldC9pcGEvaXBhX3NtcDJwLmMgICAgICAgICAgIHwgIDUgKystLS0KPiAg ZHJpdmVycy9wYXJpc2MvcG93ZXIuYyAgICAgICAgICAgICAgICB8ICA0ICsrLS0KPiAgZHJpdmVy cy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jICB8ICA2ICsrKystLQo+ICBkcml2ZXJzL3Mz OTAvY2hhci9jb24zMjE1LmMgICAgICAgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9zMzkwL2NoYXIv Y29uMzI3MC5jICAgICAgICAgICB8ICAyICstCj4gIGRyaXZlcnMvczM5MC9jaGFyL3NjbHBfY29u LmMgICAgICAgICAgfCAgMiArLQo+ICBkcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMgICAg ICAgIHwgIDIgKy0KPiAgZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uYyB8ICA2 ICsrKystLQo+ICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2h5cGVydl9mYi5jICAgICAgIHwgIDQgKyst LQo+ICBpbmNsdWRlL2xpbnV4L3BhbmljX25vdGlmaWVyLmggICAgICAgIHwgIDIgKy0KPiAga2Vy bmVsL3BhbmljLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA5ICsrKystLS0tLQo+ICAyNCBm aWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspLCA1MSBkZWxldGlvbnMoLSkKPiAKPiBkaWZm IC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYWxwaGEva2VybmVsL3Nl dHVwLmMKPiBpbmRleCBkODhiZGY4NTI3NTMuLjhhY2UwZDcxMTNiNiAxMDA2NDQKPiAtLS0gYS9h cmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCj4gKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAu Ywo+IEBAIC00NzIsOCArNDcyLDggQEAgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQo+ICAJ fQo+ICAKPiAgCS8qIFJlZ2lzdGVyIGEgY2FsbCBmb3IgcGFuaWMgY29uZGl0aW9ucy4gKi8KPiAt CWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKPiAt CQkJJmFscGhhX3BhbmljX2Jsb2NrKTsKPiArCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3Rl cigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LAo+ICsJCQkJCSZhbHBoYV9wYW5pY19ibG9jayk7Cj4g IAo+ICAjaWZuZGVmIGFscGhhX3VzaW5nX3NybQo+ICAJLyogQXNzdW1lIHRoYXQgd2UndmUgYm9v dGVkIGZyb20gU1JNIGlmIHdlIGhhdmVuJ3QgYm9vdGVkIGZyb20gTUlMTy4KPiBkaWZmIC0tZ2l0 IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jaGFzc2lzLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwv cGRjX2NoYXNzaXMuYwo+IGluZGV4IGRhMTU0NDA2ZDM2OC4uMGZkOGQ4N2ZiNGY5IDEwMDY0NAo+ IC0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY2hhc3Npcy5jCj4gKysrIGIvYXJjaC9wYXJp c2Mva2VybmVsL3BkY19jaGFzc2lzLmMKPiBAQCAtMjIsNyArMjIsNiBAQAo+ICAjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wYW5pY19ub3RpZmllci5oPgo+ICAj aW5jbHVkZSA8bGludXgvcmVib290Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgo+ ICAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4K PiAgI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Cj4gQEAgLTEzNSw3ICsxMzQsNyBAQCB2b2lk IF9faW5pdCBwYXJpc2NfcGRjX2NoYXNzaXNfaW5pdCh2b2lkKQo+ICAJCQkJUERDX0NIQVNTSVNf VkVSKTsKPiAgCj4gIAkJLyogaW5pdGlhbGl6ZSBwYW5pYyBub3RpZmllciBjaGFpbiAqLwo+IC0J CWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKPiAr CQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX3ByZV9yZWJvb3RfbGlzdCwK PiAgCQkJCSZwZGNfY2hhc3Npc19wYW5pY19ibG9jayk7Cj4gIAo+ICAJCS8qIGluaXRpYWxpemUg cmVib290IG5vdGlmaWVyIGNoYWluICovCj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJu ZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCj4g aW5kZXggZDA0YjhiZjhkYmM3Li4zNTE4YmViYzEwYWQgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9wb3dl cnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwo+ICsrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0 dXAtY29tbW9uLmMKPiBAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgX19pbml0IHNldHVwX3Bhbmlj KHZvaWQpCj4gIAo+ICAJLyogTG93LWxldmVsIHBsYXRmb3JtLXNwZWNpZmljIHJvdXRpbmVzIHRo YXQgc2hvdWxkIHJ1biBvbiBwYW5pYyAqLwo+ICAJaWYgKHBwY19tZC5wYW5pYykKPiAtCQlhdG9t aWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCj4gKwkJYXRv bWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3QsCj4gIAkJ CQkJICAgICAgICZwcGNfcGFuaWNfYmxvY2spOwo+ICB9Cj4gIAo+IGRpZmYgLS1naXQgYS9hcmNo L3MzOTAva2VybmVsL2lwbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwo+IGluZGV4IDFjYzg1 YjhmZjQyZS4uNGE4OGM1YmI2ZTE1IDEwMDY0NAo+IC0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBs LmMKPiArKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCj4gQEAgLTIwMzQsNyArMjAzNCw3IEBA IHN0YXRpYyBpbnQgb25fcGFuaWNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwK PiAgCQkJICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkKPiAgewo+ICAJZG9fcGFu aWMoKTsKPiAtCXJldHVybiBOT1RJRllfT0s7Cj4gKwlyZXR1cm4gTk9USUZZX0RPTkU7Cj4gIH0K PiAgCj4gIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb25fcGFuaWNfbmIgPSB7Cj4gQEAg LTIwNjksNyArMjA2OSw3IEBAIHZvaWQgX19pbml0IHNldHVwX2lwbCh2b2lkKQo+ICAJCS8qIFdl IGhhdmUgbm8gaW5mbyB0byBjb3B5ICovCj4gIAkJYnJlYWs7Cj4gIAl9Cj4gLQlhdG9taWNfbm90 aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZvbl9wYW5pY19uYik7 Cj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX3ByZV9yZWJvb3RfbGlz dCwgJm9uX3BhbmljX25iKTsKPiAgfQo+ICAKPiAgdm9pZCBzMzkwX3Jlc2V0X3N5c3RlbSh2b2lk KQo+IGRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jIGIvYXJjaC91 bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYwo+IGluZGV4IDJlYTA0MjFiY2MzZi4uMjFjMTNiNGUy NGEzIDEwMDY0NAo+IC0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKPiArKysg Yi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCj4gQEAgLTg1NSw3ICs4NTUsNyBAQCBz dGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhbmljX2V4aXRfbm90aWZpZXIgPSB7Cj4gIAo+ ICBzdGF0aWMgaW50IGFkZF9ub3RpZmllcih2b2lkKQo+ICB7Cj4gLQlhdG9taWNfbm90aWZpZXJf Y2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCj4gKwlhdG9taWNfbm90aWZpZXJf Y2hhaW5fcmVnaXN0ZXIoJnBhbmljX3ByZV9yZWJvb3RfbGlzdCwKPiAgCQkJJnBhbmljX2V4aXRf bm90aWZpZXIpOwo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJu ZWwvdW1fYXJjaC5jIGIvYXJjaC91bS9rZXJuZWwvdW1fYXJjaC5jCj4gaW5kZXggNDQ4NWIxYTdj OGU0Li5mYzZlNDQzMjk5ZGEgMTAwNjQ0Cj4gLS0tIGEvYXJjaC91bS9rZXJuZWwvdW1fYXJjaC5j Cj4gKysrIGIvYXJjaC91bS9rZXJuZWwvdW1fYXJjaC5jCj4gQEAgLTI1Nyw3ICsyNTcsNyBAQCBz dGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhbmljX2V4aXRfbm90aWZpZXIgPSB7Cj4gIAo+ ICB2b2lkIHVtbF9maW5pc2hzZXR1cCh2b2lkKQo+ICB7Cj4gLQlhdG9taWNfbm90aWZpZXJfY2hh aW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCj4gKwlhdG9taWNfbm90aWZpZXJfY2hh aW5fcmVnaXN0ZXIoJnBhbmljX3ByZV9yZWJvb3RfbGlzdCwKPiAgCQkJCSAgICAgICAmcGFuaWNf ZXhpdF9ub3RpZmllcik7Cj4gIAo+ICAJdW1sX3Bvc3RzZXR1cCgpOwo+IGRpZmYgLS1naXQgYS9h cmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKPiBpbmRl eCAzMGM2ZTk4NmE2Y2QuLmQ0ZjRkZTIzOWEyMSAxMDA2NDQKPiAtLS0gYS9hcmNoL3g4Ni94ZW4v ZW5saWdodGVuLmMKPiArKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKPiBAQCAtMjkwLDcg KzI5MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgeGVuX3BhbmljX2Jsb2NrID0g ewo+ICAKPiAgaW50IHhlbl9wYW5pY19oYW5kbGVyX2luaXQodm9pZCkKPiAgewo+IC0JYXRvbWlj X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmeGVuX3Bhbmlj X2Jsb2NrKTsKPiArCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfcHJlX3Jl Ym9vdF9saXN0LCAmeGVuX3BhbmljX2Jsb2NrKTsKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IGRp ZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NldHVwLmMgYi9hcmNoL3h0ZW5z YS9wbGF0Zm9ybXMvaXNzL3NldHVwLmMKPiBpbmRleCBkMzQzM2UxYmI5NGUuLmVlZWViNmNmZjZi ZCAxMDA2NDQKPiAtLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NldHVwLmMKPiArKysg Yi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NldHVwLmMKPiBAQCAtMTMsNyArMTMsNiBAQAo+ ICAgKi8KPiAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2tlcm5l bC5oPgo+IC0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3Bh bmljX25vdGlmaWVyLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4KPiAgI2luY2x1ZGUg PGxpbnV4L3N0cmluZy5oPgo+IEBAIC01Myw2ICs1Miw3IEBAIGlzc19wYW5pY19ldmVudChzdHJ1 Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikK PiAgCj4gIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaXNzX3BhbmljX2Jsb2NrID0gewo+ ICAJLm5vdGlmaWVyX2NhbGwgPSBpc3NfcGFuaWNfZXZlbnQsCj4gKwkucHJpb3JpdHkgPSBJTlRf TUlOLCAvKiBydW4gYXMgbGF0ZSBhcyBwb3NzaWJsZSwgbWF5IG5vdCByZXR1cm4gKi8KPiAgfTsK PiAgCj4gIHZvaWQgX19pbml0IHBsYXRmb3JtX3NldHVwKGNoYXIgKipwX2NtZGxpbmUpCj4gQEAg LTgxLDUgKzgxLDUgQEAgdm9pZCBfX2luaXQgcGxhdGZvcm1fc2V0dXAoY2hhciAqKnBfY21kbGlu ZSkKPiAgCQl9Cj4gIAl9Cj4gIAo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZw YW5pY19ub3RpZmllcl9saXN0LCAmaXNzX3BhbmljX2Jsb2NrKTsKPiArCWF0b21pY19ub3RpZmll cl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LCAmaXNzX3BhbmljX2Jsb2Nr KTsKPiAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIu YyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCj4gaW5kZXggYzU5MjY1MTQ2 ZTljLi42YzQ3NzA5NDljMDEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9t c2doYW5kbGVyLmMKPiArKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwo+ IEBAIC0yNSw3ICsyNSw2IEBACj4gICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gICNpbmNsdWRl IDxsaW51eC9pcG1pLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9pcG1pX3NtaS5oPgo+IC0jaW5jbHVk ZSA8bGludXgvbm90aWZpZXIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KPiAgI2luY2x1 ZGUgPGxpbnV4L3Byb2NfZnMuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+Cj4gQEAg LTUzNzUsMTAgKzUzNzQsMTMgQEAgc3RhdGljIGludCBpcG1pX3JlZ2lzdGVyX2RyaXZlcih2b2lk KQo+ICAJcmV0dXJuIHJ2Owo+ICB9Cj4gIAo+ICsvKgo+ICsgKiB3ZSBzaG91bGQgZXhlY3V0ZSB0 aGlzIHBhbmljIGNhbGxiYWNrIGxhdGUsIHNpbmNlIGl0IGludm9sdmVzCj4gKyAqIGEgY29tcGxl eCBjYWxsLWNoYWluIGFuZCBwYW5pYygpIHJ1bnMgaW4gYXRvbWljIGNvbnRleHQuCj4gKyAqLwo+ ICBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhbmljX2Jsb2NrID0gewo+ICAJLm5vdGlm aWVyX2NhbGwJPSBwYW5pY19ldmVudCwKPiAtCS5uZXh0CQk9IE5VTEwsCj4gLQkucHJpb3JpdHkJ PSAyMDAJLyogcHJpb3JpdHk6IElOVF9NQVggPj0geCA+PSAwICovCj4gKwkucHJpb3JpdHkJPSBJ TlRfTUlOICsgMSwKPiAgfTsKPiAgCj4gIHN0YXRpYyBpbnQgaXBtaV9pbml0X21zZ2hhbmRsZXIo dm9pZCkKPiBAQCAtNTQwNiw3ICs1NDA4LDcgQEAgc3RhdGljIGludCBpcG1pX2luaXRfbXNnaGFu ZGxlcih2b2lkKQo+ICAJdGltZXJfc2V0dXAoJmlwbWlfdGltZXIsIGlwbWlfdGltZW91dCwgMCk7 Cj4gIAltb2RfdGltZXIoJmlwbWlfdGltZXIsIGppZmZpZXMgKyBJUE1JX1RJTUVPVVRfSklGRklF Uyk7Cj4gIAo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmll cl9saXN0LCAmcGFuaWNfYmxvY2spOwo+ICsJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVy KCZwYW5pY19wcmVfcmVib290X2xpc3QsICZwYW5pY19ibG9jayk7Cj4gIAo+ICAJaW5pdGlhbGl6 ZWQgPSB0cnVlOwo+ICAKPiBAQCAtNTQzOCw3ICs1NDQwLDcgQEAgc3RhdGljIHZvaWQgX19leGl0 IGNsZWFudXBfaXBtaSh2b2lkKQo+ICAJaWYgKGluaXRpYWxpemVkKSB7Cj4gIAkJZGVzdHJveV93 b3JrcXVldWUocmVtb3ZlX3dvcmtfd3EpOwo+ICAKPiAtCQlhdG9taWNfbm90aWZpZXJfY2hhaW5f dW5yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKPiArCQlhdG9taWNfbm90aWZpZXJfY2hh aW5fdW5yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LAo+ICAJCQkJCQkgJnBhbmljX2Js b2NrKTsKPiAgCj4gIAkJLyoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FsdGVyYV9lZGFj LmMgYi9kcml2ZXJzL2VkYWMvYWx0ZXJhX2VkYWMuYwo+IGluZGV4IGU3ZThlNjI0YTQzNi4uNDg5 MGU5Y2JhNmZiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZWRhYy9hbHRlcmFfZWRhYy5jCj4gKysr IGIvZHJpdmVycy9lZGFjL2FsdGVyYV9lZGFjLmMKPiBAQCAtMTYsNyArMTYsNiBAQAo+ICAjaW5j bHVkZSA8bGludXgva2VybmVsLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9tZmQvYWx0ZXJhLXN5c21n ci5oPgo+ICAjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgo+IC0jaW5jbHVkZSA8bGludXgv bm90aWZpZXIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KPiAgI2luY2x1ZGUg PGxpbnV4L29mX2lycS5oPgo+ICAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KPiBAQCAt MjE2Myw3ICsyMTYyLDcgQEAgc3RhdGljIGludCBhbHRyX2VkYWNfYTEwX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAkJaW50IGRiZXJyb3IsIGVycl9hZGRyOwo+ICAKPiAg CQllZGFjLT5wYW5pY19ub3RpZmllci5ub3RpZmllcl9jYWxsID0gczEwX2VkYWNfZGJlcnJfaGFu ZGxlcjsKPiAtCQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVy X2xpc3QsCj4gKwkJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVi b290X2xpc3QsCj4gIAkJCQkJICAgICAgICZlZGFjLT5wYW5pY19ub3RpZmllcik7Cj4gIAo+ICAJ CS8qIFByaW50b3V0IGEgbWVzc2FnZSBpZiB1bmNvcnJlY3RhYmxlIGVycm9yIHByZXZpb3VzbHku ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvdm1idXNfZHJ2LmMgYi9kcml2ZXJzL2h2L3Zt YnVzX2Rydi5jCj4gaW5kZXggOTAxYjk3MDM0MzA4Li4zNzE3YzMyM2FhMzYgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9odi92bWJ1c19kcnYuYwo+ICsrKyBiL2RyaXZlcnMvaHYvdm1idXNfZHJ2LmMK PiBAQCAtMTYyMiw3ICsxNjIyLDcgQEAgc3RhdGljIGludCB2bWJ1c19idXNfaW5pdCh2b2lkKQo+ ICAJICogQWx3YXlzIHJlZ2lzdGVyIHRoZSB2bWJ1cyB1bmxvYWQgcGFuaWMgbm90aWZpZXIgYmVj YXVzZSB3ZQo+ICAJICogbmVlZCB0byBzaHV0IHRoZSBWTWJ1cyBjaGFubmVsIGNvbm5lY3Rpb24g b24gcGFuaWMuCj4gIAkgKi8KPiAtCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFu aWNfbm90aWZpZXJfbGlzdCwKPiArCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFu aWNfcHJlX3JlYm9vdF9saXN0LAo+ICAJCQkgICAgICAgJmh5cGVydl9wYW5pY192bWJ1c191bmxv YWRfYmxvY2spOwo+ICAKPiAgCXZtYnVzX3JlcXVlc3Rfb2ZmZXJzKCk7Cj4gQEAgLTI4NTEsNyAr Mjg1MSw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCB2bWJ1c19leGl0KHZvaWQpCj4gIAkgKiBUaGUg dm1idXMgcGFuaWMgbm90aWZpZXIgaXMgYWx3YXlzIHJlZ2lzdGVyZWQsIGhlbmNlIHdlIHNob3Vs ZAo+ICAJICogYWxzbyB1bmNvbmRpdGlvbmFsbHkgdW5yZWdpc3RlciBpdCBoZXJlIGFzIHdlbGwu Cj4gIAkgKi8KPiAtCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19ub3Rp Zmllcl9saXN0LAo+ICsJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX3By ZV9yZWJvb3RfbGlzdCwKPiAgCQkJCQkmaHlwZXJ2X3BhbmljX3ZtYnVzX3VubG9hZF9ibG9jayk7 Cj4gIAo+ICAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWh2X3BhbmljX3BhZ2UpOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXBhbmljLmMgYi9kcml2ZXJzL2xl ZHMvdHJpZ2dlci9sZWR0cmlnLXBhbmljLmMKPiBpbmRleCA2NGFiZjJlOTE2MDguLjM0ZmQ1MTcw NzIzZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXBhbmljLmMK PiArKysgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLXBhbmljLmMKPiBAQCAtNyw3ICs3 LDYgQEAKPiAgCj4gICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiAgI2luY2x1ZGUgPGxpbnV4 L2luaXQuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+Cj4gICNpbmNsdWRlIDxsaW51 eC9wYW5pY19ub3RpZmllci5oPgo+ICAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgo+ICAjaW5jbHVk ZSAiLi4vbGVkcy5oIgo+IEBAIC02NCw3ICs2Myw3IEBAIHN0YXRpYyBsb25nIGxlZF9wYW5pY19i bGluayhpbnQgc3RhdGUpCj4gIAo+ICBzdGF0aWMgaW50IF9faW5pdCBsZWR0cmlnX3BhbmljX2lu aXQodm9pZCkKPiAgewo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19u b3RpZmllcl9saXN0LAo+ICsJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19w cmVfcmVib290X2xpc3QsCj4gIAkJCQkgICAgICAgJmxlZF90cmlnZ2VyX3BhbmljX25iKTsKPiAg Cj4gIAlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoInBhbmljIiwgJnRyaWdnZXIpOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL2hlYXJ0YmVhdC5jIGIvZHJpdmVycy9taXNj L2libWFzbS9oZWFydGJlYXQuYwo+IGluZGV4IDU5YzlhMGQ5NTY1OS4uZDZhY2FlODhiNzIyIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaGVhcnRiZWF0LmMKPiArKysgYi9kcml2 ZXJzL21pc2MvaWJtYXNtL2hlYXJ0YmVhdC5jCj4gQEAgLTgsNyArOCw2IEBACj4gICAqIEF1dGhv cjogTWF4IEFzYsO2Y2sgPGFtYXgtci9KdzYrcm1mN0hRVDBkWlIrQWxmQUBwdWJsaWMuZ21hbmUu b3JnPgo+ICAgKi8KPiAgCj4gLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgo+ICAjaW5jbHVk ZSA8bGludXgvcGFuaWNfbm90aWZpZXIuaD4KPiAgI2luY2x1ZGUgImlibWFzbS5oIgo+ICAjaW5j bHVkZSAiZG90X2NvbW1hbmQuaCIKPiBAQCAtMjQsNyArMjMsNyBAQCBzdGF0aWMgaW50IHN1c3Bl bmRfaGVhcnRiZWF0cyA9IDA7Cj4gICAqIEluIHRoZSBjYXNlIG9mIGEgcGFuaWMgdGhlIGludGVy cnVwdCBoYW5kbGVyIGNvbnRpbnVlcyB0byB3b3JrIGFuZCB0aHVzCj4gICAqIGNvbnRpbnVlcyB0 byByZXNwb25kIHRvIGhlYXJ0YmVhdHMsIG1ha2luZyB0aGUgc2VydmljZSBwcm9jZXNzb3IgYmVs aWV2ZQo+ICAgKiB0aGUgT1MgaXMgc3RpbGwgcnVubmluZyBhbmQgdGh1cyBwcmV2ZW50aW5nIGEg cmVib290Lgo+IC0gKiBUbyBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYSBjYWxsYmFjayBp cyBhZGRlZCB0aGUgcGFuaWNfbm90aWZpZXJfbGlzdC4KPiArICogVG8gcHJldmVudCB0aGlzIGZy b20gaGFwcGVuaW5nIGEgY2FsbGJhY2sgaXMgYWRkZWQgaW4gYSBwYW5pYyBub3RpZmllciBsaXN0 Lgo+ICAgKiBCZWZvcmUgcmVzcG9uZGluZyB0byBhIGhlYXJ0YmVhdCB0aGUgZHJpdmVyIGNoZWNr cyBpZiBhIHBhbmljIGhhcyBoYXBwZW5lZCwKPiAgICogaWYgeWVzIGl0IHN1c3BlbmRzIGhlYXJ0 YmVhdCwgY2F1c2luZyB0aGUgc2VydmljZSBwcm9jZXNzb3IgdG8gcmVib290IGFzCj4gICAqIGV4 cGVjdGVkLgo+IEBAIC0zMiwyMCArMzEsMjMgQEAgc3RhdGljIGludCBzdXNwZW5kX2hlYXJ0YmVh dHMgPSAwOwo+ICBzdGF0aWMgaW50IHBhbmljX2hhcHBlbmVkKHN0cnVjdCBub3RpZmllcl9ibG9j ayAqbiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCj4gIHsKPiAgCXN1c3BlbmRfaGVhcnRi ZWF0cyA9IDE7Cj4gLQlyZXR1cm4gMDsKPiArCXJldHVybiBOT1RJRllfRE9ORTsKPiAgfQo+ICAK PiAtc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5pY19ub3RpZmllciA9IHsgcGFuaWNf aGFwcGVuZWQsIE5VTEwsIDEgfTsKPiArc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5p Y19ub3RpZmllciA9IHsKPiArCS5ub3RpZmllcl9jYWxsID0gcGFuaWNfaGFwcGVuZWQsCj4gK307 Cj4gIAo+ICB2b2lkIGlibWFzbV9yZWdpc3Rlcl9wYW5pY19ub3RpZmllcih2b2lkKQo+ICB7Cj4g LQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZw YW5pY19ub3RpZmllcik7Cj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmlj X3ByZV9yZWJvb3RfbGlzdCwKPiArCQkJCQkmcGFuaWNfbm90aWZpZXIpOwo+ICB9Cj4gIAo+ICB2 b2lkIGlibWFzbV91bnJlZ2lzdGVyX3BhbmljX25vdGlmaWVyKHZvaWQpCj4gIHsKPiAtCWF0b21p Y19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAo+IC0JCQkm cGFuaWNfbm90aWZpZXIpOwo+ICsJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBh bmljX3ByZV9yZWJvb3RfbGlzdCwKPiArCQkJCQkmcGFuaWNfbm90aWZpZXIpOwo+ICB9Cj4gIAo+ ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXBhL2lwYV9zbXAycC5jIGIvZHJpdmVycy9u ZXQvaXBhL2lwYV9zbXAycC5jCj4gaW5kZXggMjExMjMzNjEyMDM5Li45MmNkZjZlMDYzN2MgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9uZXQvaXBhL2lwYV9zbXAycC5jCj4gKysrIGIvZHJpdmVycy9u ZXQvaXBhL2lwYV9zbXAycC5jCj4gQEAgLTcsNyArNyw2IEBACj4gICNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgo+ICAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+Cj4gICNpbmNsdWRlIDxs aW51eC9wYW5pY19ub3RpZmllci5oPgo+ICAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ ICAjaW5jbHVkZSA8bGludXgvc29jL3Fjb20vc21lbS5oPgo+IEBAIC0xMzgsMTMgKzEzNywxMyBA QCBzdGF0aWMgaW50IGlwYV9zbXAycF9wYW5pY19ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3QgaXBh X3NtcDJwICpzbXAycCkKPiAgCXNtcDJwLT5wYW5pY19ub3RpZmllci5ub3RpZmllcl9jYWxsID0g aXBhX3NtcDJwX3BhbmljX25vdGlmaWVyOwo+ICAJc21wMnAtPnBhbmljX25vdGlmaWVyLnByaW9y aXR5ID0gSU5UX01BWDsJLyogRG8gaXQgZWFybHkgKi8KPiAgCj4gLQlyZXR1cm4gYXRvbWljX25v dGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAo+ICsJcmV0dXJuIGF0 b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LAo+ICAJ CQkJCSAgICAgICZzbXAycC0+cGFuaWNfbm90aWZpZXIpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9p ZCBpcGFfc21wMnBfcGFuaWNfbm90aWZpZXJfdW5yZWdpc3RlcihzdHJ1Y3QgaXBhX3NtcDJwICpz bXAycCkKPiAgewo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX25v dGlmaWVyX2xpc3QsCj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmcGFuaWNf cHJlX3JlYm9vdF9saXN0LAo+ICAJCQkJCSAmc21wMnAtPnBhbmljX25vdGlmaWVyKTsKPiAgfQo+ ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvcG93ZXIuYyBiL2RyaXZlcnMvcGFyaXNj L3Bvd2VyLmMKPiBpbmRleCA4NTEyODg0ZGUyY2YuLjViYjA4NjhmNWYwOCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL3BhcmlzYy9wb3dlci5jCj4gKysrIGIvZHJpdmVycy9wYXJpc2MvcG93ZXIuYwo+ IEBAIC0yMzMsNyArMjMzLDcgQEAgc3RhdGljIGludCBfX2luaXQgcG93ZXJfaW5pdCh2b2lkKQo+ ICAJfQo+ICAKPiAgCS8qIFJlZ2lzdGVyIGEgY2FsbCBmb3IgcGFuaWMgY29uZGl0aW9ucy4gKi8K PiAtCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwK PiArCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0 LAo+ICAJCQkmcGFyaXNjX3BhbmljX2Jsb2NrKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiBAQCAtMjQz LDcgKzI0Myw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBwb3dlcl9leGl0KHZvaWQpCj4gIHsKPiAg CWt0aHJlYWRfc3RvcChwb3dlcl90YXNrKTsKPiAgCj4gLQlhdG9taWNfbm90aWZpZXJfY2hhaW5f dW5yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKPiArCWF0b21pY19ub3RpZmllcl9jaGFp bl91bnJlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3QsCj4gIAkJCSZwYXJpc2NfcGFuaWNf YmxvY2spOwo+ICAKPiAgCXBkY19zb2Z0X3Bvd2VyX2J1dHRvbigwKTsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jIGIvZHJpdmVycy9yZW1vdGVwcm9j L3JlbW90ZXByb2NfY29yZS5jCj4gaW5kZXggYzUxMDEyNTc2OWI5Li4yNDc5OWZmMjM5ZTYgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jCj4gKysrIGIv ZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jCj4gQEAgLTI3OTUsMTIgKzI3OTUs MTQgQEAgc3RhdGljIGludCBycHJvY19wYW5pY19oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9j ayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCj4gIHN0YXRpYyB2b2lkIF9faW5pdCBycHJvY19p bml0X3BhbmljKHZvaWQpCj4gIHsKPiAgCXJwcm9jX3BhbmljX25iLm5vdGlmaWVyX2NhbGwgPSBy cHJvY19wYW5pY19oYW5kbGVyOwo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZw YW5pY19ub3RpZmllcl9saXN0LCAmcnByb2NfcGFuaWNfbmIpOwo+ICsJYXRvbWljX25vdGlmaWVy X2NoYWluX3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3QsCj4gKwkJCQkgICAgICAgJnJw cm9jX3BhbmljX25iKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgX19leGl0IHJwcm9jX2V4aXRf cGFuaWModm9pZCkKPiAgewo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBh bmljX25vdGlmaWVyX2xpc3QsICZycHJvY19wYW5pY19uYik7Cj4gKwlhdG9taWNfbm90aWZpZXJf Y2hhaW5fdW5yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LAo+ICsJCQkJCSAmcnByb2Nf cGFuaWNfbmIpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IF9faW5pdCByZW1vdGVwcm9jX2luaXQo dm9pZCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jIGIvZHJpdmVy cy9zMzkwL2NoYXIvY29uMzIxNS5jCj4gaW5kZXggMTkyMTk4YmQzZGM0Li4wNzM3OWRkM2YxZjMg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jCj4gKysrIGIvZHJpdmVy cy9zMzkwL2NoYXIvY29uMzIxNS5jCj4gQEAgLTg2Nyw3ICs4NjcsNyBAQCBzdGF0aWMgaW50IF9f aW5pdCBjb24zMjE1X2luaXQodm9pZCkKPiAgCQlyYXczMjE1WzBdID0gTlVMTDsKPiAgCQlyZXR1 cm4gLUVOT0RFVjsKPiAgCX0KPiAtCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFu aWNfbm90aWZpZXJfbGlzdCwgJm9uX3BhbmljX25iKTsKPiArCWF0b21pY19ub3RpZmllcl9jaGFp bl9yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9saXN0LCAmb25fcGFuaWNfbmIpOwo+ICAJcmVn aXN0ZXJfcmVib290X25vdGlmaWVyKCZvbl9yZWJvb3RfbmIpOwo+ICAJcmVnaXN0ZXJfY29uc29s ZSgmY29uMzIxNSk7Cj4gIAlyZXR1cm4gMDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2No YXIvY29uMzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jCj4gaW5kZXggNDc2MjAy ZjNkOGEwLi5lNzliZjNlN2JkZTMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvY29u MzI3MC5jCj4gKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jCj4gQEAgLTY0NSw3ICs2 NDUsNyBAQCBjb24zMjcwX2luaXQodm9pZCkKPiAgCWNvbmRldi0+Y2xpbmUtPmxlbiA9IDA7Cj4g IAljb24zMjcwX2NyZWF0ZV9zdGF0dXMoY29uZGV2KTsKPiAgCWNvbmRldi0+aW5wdXQgPSBhbGxv Y19zdHJpbmcoJmNvbmRldi0+ZnJlZW1lbSwgODApOwo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWlu X3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmb25fcGFuaWNfbmIpOwo+ICsJYXRvbWlj X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3QsICZvbl9wYW5p Y19uYik7Cj4gIAlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJm9uX3JlYm9vdF9uYik7Cj4gIAly ZWdpc3Rlcl9jb25zb2xlKCZjb24zMjcwKTsKPiAgCXJldHVybiAwOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3MzOTAvY2hhci9zY2xwX2Nvbi5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jb24u Ywo+IGluZGV4IGU1ZDk0N2M3NjNlYS4uN2NhOWQ0YzQ1ZDYwIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvczM5MC9jaGFyL3NjbHBfY29uLmMKPiArKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Nv bi5jCj4gQEAgLTI4OCw3ICsyODgsNyBAQCBzY2xwX2NvbnNvbGVfaW5pdCh2b2lkKQo+ICAJdGlt ZXJfc2V0dXAoJnNjbHBfY29uX3RpbWVyLCBzY2xwX2NvbnNvbGVfdGltZW91dCwgMCk7Cj4gIAo+ ICAJLyogZW5hYmxlIHByaW50ay1hY2Nlc3MgdG8gdGhpcyBkcml2ZXIgKi8KPiAtCWF0b21pY19u b3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJm9uX3BhbmljX25i KTsKPiArCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfcHJlX3JlYm9vdF9s aXN0LCAmb25fcGFuaWNfbmIpOwo+ICAJcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZvbl9yZWJv b3RfbmIpOwo+ICAJcmVnaXN0ZXJfY29uc29sZSgmc2NscF9jb25zb2xlKTsKPiAgCXJldHVybiAw Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMgYi9kcml2ZXJz L3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKPiBpbmRleCBhMzJmMzRhMWM2ZDIuLjk3Y2Y5ZTI5MGMy OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKPiArKysgYi9k cml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKPiBAQCAtODM4LDcgKzgzOCw3IEBAIHNjbHBf dnQyMjBfY29uX2luaXQodm9pZCkKPiAgCWlmIChyYykKPiAgCQlyZXR1cm4gcmM7Cj4gIAkvKiBB dHRhY2ggbGludXggY29uc29sZSAqLwo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVy KCZwYW5pY19ub3RpZmllcl9saXN0LCAmb25fcGFuaWNfbmIpOwo+ICsJYXRvbWljX25vdGlmaWVy X2NoYWluX3JlZ2lzdGVyKCZwYW5pY19wcmVfcmVib290X2xpc3QsICZvbl9wYW5pY19uYik7Cj4g IAlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJm9uX3JlYm9vdF9uYik7Cj4gIAlyZWdpc3Rlcl9j b25zb2xlKCZzY2xwX3Z0MjIwX2NvbnNvbGUpOwo+ICAJcmV0dXJuIDA7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMgYi9kcml2ZXJzL3N0YWdpbmcv b2xwY19kY29uL29scGNfZGNvbi5jCj4gaW5kZXggNzI4NGNiNGFjMzk1Li5jYjUwNDcxZjIyNDYg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uYwo+ICsr KyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMKPiBAQCAtNjUzLDcgKzY1 Myw4IEBAIHN0YXRpYyBpbnQgZGNvbl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBj b25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCj4gIAl9Cj4gIAo+ICAJcmVnaXN0ZXJfcmVi b290X25vdGlmaWVyKCZkY29uLT5yZWJvb3RfbmIpOwo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWlu X3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmZGNvbl9wYW5pY19uYik7Cj4gKwlhdG9t aWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX3ByZV9yZWJvb3RfbGlzdCwKPiArCQkJ CSAgICAgICAmZGNvbl9wYW5pY19uYik7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIAo+IEBAIC02NzYs NyArNjc3LDggQEAgc3RhdGljIGludCBkY29uX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50KQo+ICAJc3RydWN0IGRjb25fcHJpdiAqZGNvbiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGll bnQpOwo+ICAKPiAgCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZkY29uLT5yZWJvb3RfbmIp Owo+IC0JYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xp c3QsICZkY29uX3BhbmljX25iKTsKPiArCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVy KCZwYW5pY19wcmVfcmVib290X2xpc3QsCj4gKwkJCQkJICZkY29uX3BhbmljX25iKTsKPiAgCj4g IAlmcmVlX2lycShEQ09OX0lSUSwgZGNvbik7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Zp ZGVvL2ZiZGV2L2h5cGVydl9mYi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9oeXBlcnZfZmIuYwo+ IGluZGV4IGYzNDk0Yjg2OGE2NC4uZWMyMWU2MzU5MmJlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv dmlkZW8vZmJkZXYvaHlwZXJ2X2ZiLmMKPiArKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2h5cGVy dl9mYi5jCj4gQEAgLTEyNTMsNyArMTI1Myw3IEBAIHN0YXRpYyBpbnQgaHZmYl9wcm9iZShzdHJ1 Y3QgaHZfZGV2aWNlICpoZGV2LAo+ICAJICovCj4gIAlwYXItPmh2ZmJfcGFuaWNfbmIubm90aWZp ZXJfY2FsbCA9IGh2ZmJfb25fcGFuaWM7Cj4gIAlwYXItPmh2ZmJfcGFuaWNfbmIucHJpb3JpdHkg PSBJTlRfTUlOICsgMTAsCj4gLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmlj X25vdGlmaWVyX2xpc3QsCj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmlj X3ByZV9yZWJvb3RfbGlzdCwKPiAgCQkJCSAgICAgICAmcGFyLT5odmZiX3BhbmljX25iKTsKPiAg Cj4gIAlyZXR1cm4gMDsKPiBAQCAtMTI3Niw3ICsxMjc2LDcgQEAgc3RhdGljIGludCBodmZiX3Jl bW92ZShzdHJ1Y3QgaHZfZGV2aWNlICpoZGV2KQo+ICAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBo dl9nZXRfZHJ2ZGF0YShoZGV2KTsKPiAgCXN0cnVjdCBodmZiX3BhciAqcGFyID0gaW5mby0+cGFy Owo+ICAKPiAtCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19ub3RpZmll cl9saXN0LAo+ICsJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX3ByZV9y ZWJvb3RfbGlzdCwKPiAgCQkJCQkgJnBhci0+aHZmYl9wYW5pY19uYik7Cj4gIAo+ICAJcGFyLT51 cGRhdGUgPSBmYWxzZTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYW5pY19ub3RpZmll ci5oIGIvaW5jbHVkZS9saW51eC9wYW5pY19ub3RpZmllci5oCj4gaW5kZXggNzM2NGEzNDZiY2Iw Li43OTEyYWFjYmMwZTUgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9wYW5pY19ub3RpZmll ci5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9wYW5pY19ub3RpZmllci5oCj4gQEAgLTUsOSArNSw5 IEBACj4gICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgo+ICAjaW5jbHVkZSA8bGludXgvdHlw ZXMuaD4KPiAgCj4gLWV4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgcGFuaWNfbm90 aWZpZXJfbGlzdDsKPiAgZXh0ZXJuIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBwYW5pY19o eXBlcnZpc29yX2xpc3Q7Cj4gIGV4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgcGFu aWNfaW5mb19saXN0Owo+ICtleHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIHBhbmlj X3ByZV9yZWJvb3RfbGlzdDsKPiAgCj4gIGV4dGVybiBib29sIGNyYXNoX2tleGVjX3Bvc3Rfbm90 aWZpZXJzOwo+ICAKPiBkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMu Ywo+IGluZGV4IDczY2ExYmM0NGUzMC4uYTlkNDNiOThiMDViIDEwMDY0NAo+IC0tLSBhL2tlcm5l bC9wYW5pYy5jCj4gKysrIGIva2VybmVsL3BhbmljLmMKPiBAQCAtNjksMTYgKzY5LDE1IEBAIEVY UE9SVF9TWU1CT0xfR1BMKHBhbmljX3RpbWVvdXQpOwo+ICAjZGVmaW5lIFBBTklDX1BSSU5UX0FM TF9DUFVfQlQJCTB4MDAwMDAwNDAKPiAgdW5zaWduZWQgbG9uZyBwYW5pY19wcmludDsKPiAgCj4g LUFUT01JQ19OT1RJRklFUl9IRUFEKHBhbmljX25vdGlmaWVyX2xpc3QpOwo+IC0KPiAtRVhQT1JU X1NZTUJPTChwYW5pY19ub3RpZmllcl9saXN0KTsKPiAtCj4gIEFUT01JQ19OT1RJRklFUl9IRUFE KHBhbmljX2h5cGVydmlzb3JfbGlzdCk7Cj4gIEVYUE9SVF9TWU1CT0wocGFuaWNfaHlwZXJ2aXNv cl9saXN0KTsKPiAgCj4gIEFUT01JQ19OT1RJRklFUl9IRUFEKHBhbmljX2luZm9fbGlzdCk7Cj4g IEVYUE9SVF9TWU1CT0wocGFuaWNfaW5mb19saXN0KTsKPiAgCj4gK0FUT01JQ19OT1RJRklFUl9I RUFEKHBhbmljX3ByZV9yZWJvb3RfbGlzdCk7Cj4gK0VYUE9SVF9TWU1CT0wocGFuaWNfcHJlX3Jl Ym9vdF9saXN0KTsKPiArCj4gIHN0YXRpYyBsb25nIG5vX2JsaW5rKGludCBzdGF0ZSkKPiAgewo+ ICAJcmV0dXJuIDA7Cj4gQEAgLTI5NSw3ICsyOTQsNyBAQCB2b2lkIHBhbmljKGNvbnN0IGNoYXIg KmZtdCwgLi4uKQo+ICAJICovCj4gIAlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmcGFuaWNf aHlwZXJ2aXNvcl9saXN0LCBQQU5JQ19OT1RJRklFUiwgYnVmKTsKPiAgCWF0b21pY19ub3RpZmll cl9jYWxsX2NoYWluKCZwYW5pY19pbmZvX2xpc3QsIFBBTklDX05PVElGSUVSLCBidWYpOwo+IC0J YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnBhbmljX25vdGlmaWVyX2xpc3QsIFBBTklDX05P VElGSUVSLCBidWYpOwo+ICsJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnBhbmljX3ByZV9y ZWJvb3RfbGlzdCwgUEFOSUNfTk9USUZJRVIsIGJ1Zik7Cj4gIAo+ICAJcGFuaWNfcHJpbnRfc3lz X2luZm8oZmFsc2UpOwo+ICAKPiAtLSAKPiAyLjM2LjAKPiAK