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 X-Spam-Level: X-Spam-Status: No, score=-3.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C4E77C32771 for ; Thu, 9 Jan 2020 12:08:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 939EA2075D for ; Thu, 9 Jan 2020 12:08:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730810AbgAIMH7 (ORCPT ); Thu, 9 Jan 2020 07:07:59 -0500 Received: from Galois.linutronix.de ([193.142.43.55]:54079 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728653AbgAIMH7 (ORCPT ); Thu, 9 Jan 2020 07:07:59 -0500 Received: from [5.158.153.52] (helo=nanos.tec.linutronix.de) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1ipWb1-0000nt-Tc; Thu, 09 Jan 2020 13:07:28 +0100 Received: by nanos.tec.linutronix.de (Postfix, from userid 1000) id 492021060CF; Thu, 9 Jan 2020 13:07:27 +0100 (CET) From: Thomas Gleixner To: Anchal Agarwal Cc: mingo@redhat.com, bp@alien8.de, hpa@zytor.com, x86@kernel.org, boris.ostrovsky@oracle.com, jgross@suse.com, linux-pm@vger.kernel.org, linux-mm@kvack.org, kamatam@amazon.com, sstabellini@kernel.org, konrad.wilk@oracle.co, roger.pau@citrix.com, axboe@kernel.dk, davem@davemloft.net, rjw@rjwysocki.net, len.brown@intel.com, pavel@ucw.cz, peterz@infradead.org, eduval@amazon.com, sblbir@amazon.com, xen-devel@lists.xenproject.org, vkuznets@redhat.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, dwmw@amazon.co.uk, fllinden@amazon.com, anchalag@amazon.com Subject: Re: [RFC PATCH V2 09/11] xen: Clear IRQD_IRQ_STARTED flag during shutdown PIRQs In-Reply-To: <20200108212417.GA22381@dev-dsk-anchalag-2a-9c2d1d96.us-west-2.amazon.com> References: <20200107234420.GA18738@dev-dsk-anchalag-2a-9c2d1d96.us-west-2.amazon.com> <877e22ezv6.fsf@nanos.tec.linutronix.de> <20200108212417.GA22381@dev-dsk-anchalag-2a-9c2d1d96.us-west-2.amazon.com> Date: Thu, 09 Jan 2020 13:07:27 +0100 Message-ID: <874kx4omtc.fsf@nanos.tec.linutronix.de> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Anchal Agarwal writes: > On Wed, Jan 08, 2020 at 04:23:25PM +0100, Thomas Gleixner wrote: >> Anchal Agarwal writes: >> > +void irq_state_clr_started(struct irq_desc *desc) >> > { >> > irqd_clear(&desc->irq_data, IRQD_IRQ_STARTED); >> > } >> > +EXPORT_SYMBOL_GPL(irq_state_clr_started); >> >> This is core internal state and not supposed to be fiddled with by >> drivers. >> >> irq_chip has irq_suspend/resume/pm_shutdown callbacks for a reason. >> > I agree, as its mentioned in the previous patch {[RFC PATCH V2 08/11]} this is > one way of explicitly shutting down legacy devices without introducing too much > code for each of the legacy devices. . for eg. in case of floppy there > is no suspend/freeze handler which should have done the needful. > . > Either we implement them for all the legacy devices that have them missing or > explicitly shutdown pirqs. I have choosen later for simplicity. I understand > that ideally we should enable/disable devices interrupts in suspend/resume > devices but that requires adding code for doing that to few drivers[and I may > not know all of them either] > > Now I discovered during the flow in hibernation_platform_enter under resume > devices that for such devices irq_startup is called which checks for > IRQD_IRQ_STARTED flag and based on that it calls irq_enable or irq_startup. > They are only restarted if the flag is not set which is cleared during shutdown. > shutdown_pirq does not do that. Only masking/unmasking of evtchn does not work > as pirq needs to be restarted. > xen-pirq.enable_irq is called rather than stratup_pirq. On resume if these pirqs > are not restarted in this case ACPI SCI interrupts, I do not see receiving > any interrupts under cat /proc/interrupts even though host keeps generating > S4 ACPI events. > Does that makes sense? No. You still violate all abstraction boundaries. On one hand you use a XEN specific suspend function to shut down interrupts, but then you want the core code to reestablish them on resume. That's just bad hackery which abuses partial knowledge of core internals. The state flag is only one part of the core internal state and just clearing it does not make the rest consistent. It just works by chance and not by design and any change of the core code will break it in colourful ways. So either you can handle it purely on the XEN side without touching any core state or you need to come up with some way of letting the core code know that it should invoke shutdown instead of disable. Something like the completely untested patch below. Thanks, tglx 8<---------------- diff --git a/include/linux/irq.h b/include/linux/irq.h index 7853eb9301f2..50f2057bc339 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -511,6 +511,7 @@ struct irq_chip { * IRQCHIP_EOI_THREADED: Chip requires eoi() on unmask in threaded mode * IRQCHIP_SUPPORTS_LEVEL_MSI Chip can provide two doorbells for Level MSIs * IRQCHIP_SUPPORTS_NMI: Chip can deliver NMIs, only for root irqchips + * IRQCHIP_SHUTDOWN_ON_SUSPEND: Shutdown non wake irqs in the suspend path */ enum { IRQCHIP_SET_TYPE_MASKED = (1 << 0), @@ -522,6 +523,7 @@ enum { IRQCHIP_EOI_THREADED = (1 << 6), IRQCHIP_SUPPORTS_LEVEL_MSI = (1 << 7), IRQCHIP_SUPPORTS_NMI = (1 << 8), + IRQCHIP_SHUTDOWN_ON_SUSPEND = (1 << 9), }; #include diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index b3fa2d87d2f3..0fe355f72a15 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -233,7 +233,7 @@ __irq_startup_managed(struct irq_desc *desc, struct cpumask *aff, bool force) } #endif -static int __irq_startup(struct irq_desc *desc) +int __irq_startup(struct irq_desc *desc) { struct irq_data *d = irq_desc_get_irq_data(desc); int ret = 0; diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h index 3924fbe829d4..11c7c55bda63 100644 --- a/kernel/irq/internals.h +++ b/kernel/irq/internals.h @@ -80,6 +80,7 @@ extern void __enable_irq(struct irq_desc *desc); extern int irq_activate(struct irq_desc *desc); extern int irq_activate_and_startup(struct irq_desc *desc, bool resend); extern int irq_startup(struct irq_desc *desc, bool resend, bool force); +extern int __irq_startup(struct irq_desc *desc); extern void irq_shutdown(struct irq_desc *desc); extern void irq_shutdown_and_deactivate(struct irq_desc *desc); diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c index 8f557fa1f4fe..597f0602510a 100644 --- a/kernel/irq/pm.c +++ b/kernel/irq/pm.c @@ -85,16 +85,22 @@ static bool suspend_device_irq(struct irq_desc *desc) } desc->istate |= IRQS_SUSPENDED; - __disable_irq(desc); - - /* - * Hardware which has no wakeup source configuration facility - * requires that the non wakeup interrupts are masked at the - * chip level. The chip implementation indicates that with - * IRQCHIP_MASK_ON_SUSPEND. - */ - if (irq_desc_get_chip(desc)->flags & IRQCHIP_MASK_ON_SUSPEND) - mask_irq(desc); + + /* Some irq chips (e.g. XEN PIRQ) require a full shutdown on suspend */ + if (irq_desc_get_chip(desc)->flags & IRQCHIP_SHUTDOWN_ON_SUSPEND) { + irq_shutdown(desc); + } else { + __disable_irq(desc); + + /* + * Hardware which has no wakeup source configuration facility + * requires that the non wakeup interrupts are masked at the + * chip level. The chip implementation indicates that with + * IRQCHIP_MASK_ON_SUSPEND. + */ + if (irq_desc_get_chip(desc)->flags & IRQCHIP_MASK_ON_SUSPEND) + mask_irq(desc); + } return true; } @@ -152,7 +158,10 @@ static void resume_irq(struct irq_desc *desc) irq_state_set_masked(desc); resume: desc->istate &= ~IRQS_SUSPENDED; - __enable_irq(desc); + if (irq_desc_get_chip(desc)->flags & IRQCHIP_SHUTDOWN_ON_SUSPEND) + __irq_startup(desc); + else + __enable_irq(desc); } static void resume_irqs(bool want_early) 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 X-Spam-Level: X-Spam-Status: No, score=-3.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5DF83C33CA2 for ; Thu, 9 Jan 2020 12:08:14 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 39CED2077B for ; Thu, 9 Jan 2020 12:08:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 39CED2077B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=linutronix.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ipWbR-0002o3-G2; Thu, 09 Jan 2020 12:07:53 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ipWbQ-0002ny-PW for xen-devel@lists.xenproject.org; Thu, 09 Jan 2020 12:07:52 +0000 X-Inumbo-ID: a8504782-32d8-11ea-a2eb-bc764e2007e4 Received: from Galois.linutronix.de (unknown [2a0a:51c0:0:12e:550::1]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id a8504782-32d8-11ea-a2eb-bc764e2007e4; Thu, 09 Jan 2020 12:07:51 +0000 (UTC) Received: from [5.158.153.52] (helo=nanos.tec.linutronix.de) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1ipWb1-0000nt-Tc; Thu, 09 Jan 2020 13:07:28 +0100 Received: by nanos.tec.linutronix.de (Postfix, from userid 1000) id 492021060CF; Thu, 9 Jan 2020 13:07:27 +0100 (CET) From: Thomas Gleixner To: Anchal Agarwal In-Reply-To: <20200108212417.GA22381@dev-dsk-anchalag-2a-9c2d1d96.us-west-2.amazon.com> References: <20200107234420.GA18738@dev-dsk-anchalag-2a-9c2d1d96.us-west-2.amazon.com> <877e22ezv6.fsf@nanos.tec.linutronix.de> <20200108212417.GA22381@dev-dsk-anchalag-2a-9c2d1d96.us-west-2.amazon.com> Date: Thu, 09 Jan 2020 13:07:27 +0100 Message-ID: <874kx4omtc.fsf@nanos.tec.linutronix.de> MIME-Version: 1.0 Subject: Re: [Xen-devel] [RFC PATCH V2 09/11] xen: Clear IRQD_IRQ_STARTED flag during shutdown PIRQs X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: konrad.wilk@oracle.co, eduval@amazon.com, peterz@infradead.org, x86@kernel.org, linux-mm@kvack.org, axboe@kernel.dk, pavel@ucw.cz, hpa@zytor.com, sstabellini@kernel.org, kamatam@amazon.com, mingo@redhat.com, xen-devel@lists.xenproject.org, sblbir@amazon.com, len.brown@intel.com, linux-pm@vger.kernel.org, anchalag@amazon.com, bp@alien8.de, boris.ostrovsky@oracle.com, jgross@suse.com, netdev@vger.kernel.org, fllinden@amazon.com, rjw@rjwysocki.net, linux-kernel@vger.kernel.org, vkuznets@redhat.com, davem@davemloft.net, dwmw@amazon.co.uk, roger.pau@citrix.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" QW5jaGFsIEFnYXJ3YWwgPGFuY2hhbGFnQGFtYXpvbi5jb20+IHdyaXRlczoKPiBPbiBXZWQsIEph biAwOCwgMjAyMCBhdCAwNDoyMzoyNVBNICswMTAwLCBUaG9tYXMgR2xlaXhuZXIgd3JvdGU6Cj4+ IEFuY2hhbCBBZ2Fyd2FsIDxhbmNoYWxhZ0BhbWF6b24uY29tPiB3cml0ZXM6Cj4+ID4gK3ZvaWQg aXJxX3N0YXRlX2Nscl9zdGFydGVkKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKPj4gPiAgewo+PiA+ ICAJaXJxZF9jbGVhcigmZGVzYy0+aXJxX2RhdGEsIElSUURfSVJRX1NUQVJURUQpOwo+PiA+ICB9 Cj4+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKGlycV9zdGF0ZV9jbHJfc3RhcnRlZCk7Cj4+IAo+PiBU aGlzIGlzIGNvcmUgaW50ZXJuYWwgc3RhdGUgYW5kIG5vdCBzdXBwb3NlZCB0byBiZSBmaWRkbGVk IHdpdGggYnkKPj4gZHJpdmVycy4KPj4gCj4+IGlycV9jaGlwIGhhcyBpcnFfc3VzcGVuZC9yZXN1 bWUvcG1fc2h1dGRvd24gY2FsbGJhY2tzIGZvciBhIHJlYXNvbi4KPj4KPiBJIGFncmVlLCBhcyBp dHMgbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBwYXRjaCB7W1JGQyBQQVRDSCBWMiAwOC8xMV19 IHRoaXMgaXMgCj4gb25lIHdheSBvZiBleHBsaWNpdGx5IHNodXR0aW5nIGRvd24gbGVnYWN5IGRl dmljZXMgd2l0aG91dCBpbnRyb2R1Y2luZyB0b28gbXVjaCAKPiBjb2RlIGZvciBlYWNoIG9mIHRo ZSBsZWdhY3kgZGV2aWNlcy4gLiBmb3IgZWcuIGluIGNhc2Ugb2YgZmxvcHB5IHRoZXJlIAo+IGlz IG5vIHN1c3BlbmQvZnJlZXplIGhhbmRsZXIgd2hpY2ggc2hvdWxkIGhhdmUgZG9uZSB0aGUgbmVl ZGZ1bC4KPiAuCj4gRWl0aGVyIHdlIGltcGxlbWVudCB0aGVtIGZvciBhbGwgdGhlIGxlZ2FjeSBk ZXZpY2VzIHRoYXQgaGF2ZSB0aGVtIG1pc3Npbmcgb3IKPiBleHBsaWNpdGx5IHNodXRkb3duIHBp cnFzLiBJIGhhdmUgY2hvb3NlbiBsYXRlciBmb3Igc2ltcGxpY2l0eS4gSSB1bmRlcnN0YW5kCj4g dGhhdCBpZGVhbGx5IHdlIHNob3VsZCBlbmFibGUvZGlzYWJsZSBkZXZpY2VzIGludGVycnVwdHMg aW4gc3VzcGVuZC9yZXN1bWUgCj4gZGV2aWNlcyBidXQgdGhhdCByZXF1aXJlcyBhZGRpbmcgY29k ZSBmb3IgZG9pbmcgdGhhdCB0byBmZXcgZHJpdmVyc1thbmQgSSBtYXkKPiBub3Qga25vdyBhbGwg b2YgdGhlbSBlaXRoZXJdCj4KPiBOb3cgSSBkaXNjb3ZlcmVkIGR1cmluZyB0aGUgZmxvdyBpbiBo aWJlcm5hdGlvbl9wbGF0Zm9ybV9lbnRlciB1bmRlciByZXN1bWUgCj4gZGV2aWNlcyB0aGF0IGZv ciBzdWNoIGRldmljZXMgaXJxX3N0YXJ0dXAgaXMgY2FsbGVkIHdoaWNoIGNoZWNrcyBmb3IgCj4g SVJRRF9JUlFfU1RBUlRFRCBmbGFnIGFuZCBiYXNlZCBvbiB0aGF0IGl0IGNhbGxzIGlycV9lbmFi bGUgb3IgaXJxX3N0YXJ0dXAuCj4gVGhleSBhcmUgb25seSByZXN0YXJ0ZWQgaWYgdGhlIGZsYWcg aXMgbm90IHNldCB3aGljaCBpcyBjbGVhcmVkIGR1cmluZyBzaHV0ZG93bi4gCj4gc2h1dGRvd25f cGlycSBkb2VzIG5vdCBkbyB0aGF0LiBPbmx5IG1hc2tpbmcvdW5tYXNraW5nIG9mIGV2dGNobiBk b2VzIG5vdCB3b3JrIAo+IGFzIHBpcnEgbmVlZHMgdG8gYmUgcmVzdGFydGVkLgo+IHhlbi1waXJx LmVuYWJsZV9pcnEgaXMgY2FsbGVkIHJhdGhlciB0aGFuIHN0cmF0dXBfcGlycS4gT24gcmVzdW1l IGlmIHRoZXNlIHBpcnFzCj4gYXJlIG5vdCByZXN0YXJ0ZWQgaW4gdGhpcyBjYXNlIEFDUEkgU0NJ IGludGVycnVwdHMsIEkgZG8gbm90IHNlZSByZWNlaXZpbmcgCj4gYW55IGludGVycnVwdHMgdW5k ZXIgY2F0IC9wcm9jL2ludGVycnVwdHMgZXZlbiB0aG91Z2ggaG9zdCBrZWVwcyBnZW5lcmF0aW5n IAo+IFM0IEFDUEkgZXZlbnRzLiAKPiBEb2VzIHRoYXQgbWFrZXMgc2Vuc2U/CgpOby4gWW91IHN0 aWxsIHZpb2xhdGUgYWxsIGFic3RyYWN0aW9uIGJvdW5kYXJpZXMuIE9uIG9uZSBoYW5kIHlvdSB1 c2UgYQpYRU4gc3BlY2lmaWMgc3VzcGVuZCBmdW5jdGlvbiB0byBzaHV0IGRvd24gaW50ZXJydXB0 cywgYnV0IHRoZW4geW91IHdhbnQKdGhlIGNvcmUgY29kZSB0byByZWVzdGFibGlzaCB0aGVtIG9u IHJlc3VtZS4gVGhhdCdzIGp1c3QgYmFkIGhhY2tlcnkgd2hpY2gKYWJ1c2VzIHBhcnRpYWwga25v d2xlZGdlIG9mIGNvcmUgaW50ZXJuYWxzLiBUaGUgc3RhdGUgZmxhZyBpcyBvbmx5IG9uZQpwYXJ0 IG9mIHRoZSBjb3JlIGludGVybmFsIHN0YXRlIGFuZCBqdXN0IGNsZWFyaW5nIGl0IGRvZXMgbm90 IG1ha2UgdGhlCnJlc3QgY29uc2lzdGVudC4gSXQganVzdCB3b3JrcyBieSBjaGFuY2UgYW5kIG5v dCBieSBkZXNpZ24gYW5kIGFueQpjaGFuZ2Ugb2YgdGhlIGNvcmUgY29kZSB3aWxsIGJyZWFrIGl0 IGluIGNvbG91cmZ1bCB3YXlzLgoKU28gZWl0aGVyIHlvdSBjYW4gaGFuZGxlIGl0IHB1cmVseSBv biB0aGUgWEVOIHNpZGUgd2l0aG91dCB0b3VjaGluZyBhbnkKY29yZSBzdGF0ZSBvciB5b3UgbmVl ZCB0byBjb21lIHVwIHdpdGggc29tZSB3YXkgb2YgbGV0dGluZyB0aGUgY29yZSBjb2RlCmtub3cg dGhhdCBpdCBzaG91bGQgaW52b2tlIHNodXRkb3duIGluc3RlYWQgb2YgZGlzYWJsZS4KClNvbWV0 aGluZyBsaWtlIHRoZSBjb21wbGV0ZWx5IHVudGVzdGVkIHBhdGNoIGJlbG93LgoKVGhhbmtzLAoK ICAgICAgIHRnbHgKCjg8LS0tLS0tLS0tLS0tLS0tLQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu dXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IDc4NTNlYjkzMDFmMi4uNTBmMjA1 N2JjMzM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGlu dXgvaXJxLmgKQEAgLTUxMSw2ICs1MTEsNyBAQCBzdHJ1Y3QgaXJxX2NoaXAgewogICogSVJRQ0hJ UF9FT0lfVEhSRUFERUQ6CUNoaXAgcmVxdWlyZXMgZW9pKCkgb24gdW5tYXNrIGluIHRocmVhZGVk IG1vZGUKICAqIElSUUNISVBfU1VQUE9SVFNfTEVWRUxfTVNJCUNoaXAgY2FuIHByb3ZpZGUgdHdv IGRvb3JiZWxscyBmb3IgTGV2ZWwgTVNJcwogICogSVJRQ0hJUF9TVVBQT1JUU19OTUk6CUNoaXAg Y2FuIGRlbGl2ZXIgTk1Jcywgb25seSBmb3Igcm9vdCBpcnFjaGlwcworICogSVJRQ0hJUF9TSFVU RE9XTl9PTl9TVVNQRU5EOglTaHV0ZG93biBub24gd2FrZSBpcnFzIGluIHRoZSBzdXNwZW5kIHBh dGgKICAqLwogZW51bSB7CiAJSVJRQ0hJUF9TRVRfVFlQRV9NQVNLRUQJCT0gKDEgPDwgIDApLApA QCAtNTIyLDYgKzUyMyw3IEBAIGVudW0gewogCUlSUUNISVBfRU9JX1RIUkVBREVECQk9ICgxIDw8 ICA2KSwKIAlJUlFDSElQX1NVUFBPUlRTX0xFVkVMX01TSQk9ICgxIDw8ICA3KSwKIAlJUlFDSElQ X1NVUFBPUlRTX05NSQkJPSAoMSA8PCAgOCksCisJSVJRQ0hJUF9TSFVURE9XTl9PTl9TVVNQRU5E CT0gKDEgPDwgIDkpLAogfTsKIAogI2luY2x1ZGUgPGxpbnV4L2lycWRlc2MuaD4KZGlmZiAtLWdp dCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggYjNmYTJkODdk MmYzLi4wZmUzNTVmNzJhMTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvY2hpcC5jCisrKyBiL2tl cm5lbC9pcnEvY2hpcC5jCkBAIC0yMzMsNyArMjMzLDcgQEAgX19pcnFfc3RhcnR1cF9tYW5hZ2Vk KHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IGNwdW1hc2sgKmFmZiwgYm9vbCBmb3JjZSkK IH0KICNlbmRpZgogCi1zdGF0aWMgaW50IF9faXJxX3N0YXJ0dXAoc3RydWN0IGlycV9kZXNjICpk ZXNjKQoraW50IF9faXJxX3N0YXJ0dXAoc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXN0cnVj dCBpcnFfZGF0YSAqZCA9IGlycV9kZXNjX2dldF9pcnFfZGF0YShkZXNjKTsKIAlpbnQgcmV0ID0g MDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVy bmFscy5oCmluZGV4IDM5MjRmYmU4MjlkNC4uMTFjN2M1NWJkYTYzIDEwMDY0NAotLS0gYS9rZXJu ZWwvaXJxL2ludGVybmFscy5oCisrKyBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKQEAgLTgwLDYg KzgwLDcgQEAgZXh0ZXJuIHZvaWQgX19lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7 CiBleHRlcm4gaW50IGlycV9hY3RpdmF0ZShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogZXh0ZXJu IGludCBpcnFfYWN0aXZhdGVfYW5kX3N0YXJ0dXAoc3RydWN0IGlycV9kZXNjICpkZXNjLCBib29s IHJlc2VuZCk7CiBleHRlcm4gaW50IGlycV9zdGFydHVwKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywg Ym9vbCByZXNlbmQsIGJvb2wgZm9yY2UpOworZXh0ZXJuIGludCBfX2lycV9zdGFydHVwKHN0cnVj dCBpcnFfZGVzYyAqZGVzYyk7CiAKIGV4dGVybiB2b2lkIGlycV9zaHV0ZG93bihzdHJ1Y3QgaXJx X2Rlc2MgKmRlc2MpOwogZXh0ZXJuIHZvaWQgaXJxX3NodXRkb3duX2FuZF9kZWFjdGl2YXRlKHN0 cnVjdCBpcnFfZGVzYyAqZGVzYyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3BtLmMgYi9rZXJu ZWwvaXJxL3BtLmMKaW5kZXggOGY1NTdmYTFmNGZlLi41OTdmMDYwMjUxMGEgMTAwNjQ0Ci0tLSBh L2tlcm5lbC9pcnEvcG0uYworKysgYi9rZXJuZWwvaXJxL3BtLmMKQEAgLTg1LDE2ICs4NSwyMiBA QCBzdGF0aWMgYm9vbCBzdXNwZW5kX2RldmljZV9pcnEoc3RydWN0IGlycV9kZXNjICpkZXNjKQog CX0KIAogCWRlc2MtPmlzdGF0ZSB8PSBJUlFTX1NVU1BFTkRFRDsKLQlfX2Rpc2FibGVfaXJxKGRl c2MpOwotCi0JLyoKLQkgKiBIYXJkd2FyZSB3aGljaCBoYXMgbm8gd2FrZXVwIHNvdXJjZSBjb25m aWd1cmF0aW9uIGZhY2lsaXR5Ci0JICogcmVxdWlyZXMgdGhhdCB0aGUgbm9uIHdha2V1cCBpbnRl cnJ1cHRzIGFyZSBtYXNrZWQgYXQgdGhlCi0JICogY2hpcCBsZXZlbC4gVGhlIGNoaXAgaW1wbGVt ZW50YXRpb24gaW5kaWNhdGVzIHRoYXQgd2l0aAotCSAqIElSUUNISVBfTUFTS19PTl9TVVNQRU5E LgotCSAqLwotCWlmIChpcnFfZGVzY19nZXRfY2hpcChkZXNjKS0+ZmxhZ3MgJiBJUlFDSElQX01B U0tfT05fU1VTUEVORCkKLQkJbWFza19pcnEoZGVzYyk7CisKKwkvKiBTb21lIGlycSBjaGlwcyAo ZS5nLiBYRU4gUElSUSkgcmVxdWlyZSBhIGZ1bGwgc2h1dGRvd24gb24gc3VzcGVuZCAqLworCWlm IChpcnFfZGVzY19nZXRfY2hpcChkZXNjKS0+ZmxhZ3MgJiBJUlFDSElQX1NIVVRET1dOX09OX1NV U1BFTkQpIHsKKwkJaXJxX3NodXRkb3duKGRlc2MpOworCX0gZWxzZSB7CisJCV9fZGlzYWJsZV9p cnEoZGVzYyk7CisKKwkJLyoKKwkJICogSGFyZHdhcmUgd2hpY2ggaGFzIG5vIHdha2V1cCBzb3Vy Y2UgY29uZmlndXJhdGlvbiBmYWNpbGl0eQorCQkgKiByZXF1aXJlcyB0aGF0IHRoZSBub24gd2Fr ZXVwIGludGVycnVwdHMgYXJlIG1hc2tlZCBhdCB0aGUKKwkJICogY2hpcCBsZXZlbC4gVGhlIGNo aXAgaW1wbGVtZW50YXRpb24gaW5kaWNhdGVzIHRoYXQgd2l0aAorCQkgKiBJUlFDSElQX01BU0tf T05fU1VTUEVORC4KKwkJICovCisJCWlmIChpcnFfZGVzY19nZXRfY2hpcChkZXNjKS0+ZmxhZ3Mg JiBJUlFDSElQX01BU0tfT05fU1VTUEVORCkKKwkJCW1hc2tfaXJxKGRlc2MpOworCX0KIAlyZXR1 cm4gdHJ1ZTsKIH0KIApAQCAtMTUyLDcgKzE1OCwxMCBAQCBzdGF0aWMgdm9pZCByZXN1bWVfaXJx KHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIAlpcnFfc3RhdGVfc2V0X21hc2tlZChkZXNjKTsKIHJl c3VtZToKIAlkZXNjLT5pc3RhdGUgJj0gfklSUVNfU1VTUEVOREVEOwotCV9fZW5hYmxlX2lycShk ZXNjKTsKKwlpZiAoaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyktPmZsYWdzICYgSVJRQ0hJUF9TSFVU RE9XTl9PTl9TVVNQRU5EKQorCQlfX2lycV9zdGFydHVwKGRlc2MpOworCWVsc2UKKwkJX19lbmFi bGVfaXJxKGRlc2MpOwogfQogCiBzdGF0aWMgdm9pZCByZXN1bWVfaXJxcyhib29sIHdhbnRfZWFy bHkpCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs