From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-2884130-1516679135-2-16443142982898870913 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.25, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES enro, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='org', MailFrom='org' X-Spam-charsets: plain='utf-8' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: linux-usb-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1516679134; b=Xf9CeNESBJhF9n0lKuWfAlVRpc6SJsf3woPDPP0OK0xGEiC VsXVHwgGbWOhPnhnO0drJmAwV350y4n0FVxBYFPZm7IO/HVfnQuN/DZihxZ84gek KgGpRPq+/Si6Es5gFWuSA/JDo3KFnhpYCBDwc6evDw0t5p61mdFjRxL5UF3aKGF5 /x35AUGvk3Tj+AS89pr91v9h81xILyknwoSxS+zFNcrlSwWNcxKdF8YYaxYPiCBd dDngDhs/NPG0/4yVqXUf7DDX6LOUnHH8gr1sz/VDPFKJ5p1BuV25g36yeSUUODqK d8A0oKZiuNiCmbFJ0+QxoMx9eIhoM5c08HFLTLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=subject:to:cc:references:from:message-id :date:mime-version:in-reply-to:content-type :content-transfer-encoding:sender:list-id; s=arctest; t= 1516679134; bh=SMTcm2n3HBjJSONTpcpGgg0/prEDUnP9oeAvXppX8Ew=; b=d xm6rEIWXwMeY5ioLAdPJ+GDeCMd7S+sDp8h8q+O9V4v+tm35Z56f9HPvIpE95hJ8 YsAiCfwDTSr1gbgudchgVdxZmeivmXaYWNehBK21zFlVVimgmzSEXIR4VwqP0/16 0U8dZ0NTmzjV9qUfeW53nrUoVB/Xclag/mBhIwoOVTKYTNP70dmurKvd3l/O7QfP jGe3cX/Cv+rRUJGa33350vkOKLBt4lngr0JtBiUB99Tz80VinwXqtYk6iPXEv1vd B3GF8lxxsvJn1nQmTwyy9NR9YdoKaNuqUDgOSD82rjYyuMULkD/l7FoNQd2rcXPI d9zvbIF9WwNIYQnhuskbQ== ARC-Authentication-Results: i=1; mx4.messagingengine.com; arc=none (no signatures found); dkim=fail (body has been altered; 1024-bit rsa key sha256) header.d=codeaurora.org header.i=@codeaurora.org header.b=JFeVPac2 x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=default; dkim=fail (body has been altered; 1024-bit rsa key sha256) header.d=codeaurora.org header.i=@codeaurora.org header.b=MugeY/bG x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=default; dmarc=none (p=none,has-list-id=yes,d=none) header.from=codeaurora.org; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=codeaurora.org header.result=pass header_is_org_domain=yes Authentication-Results: mx4.messagingengine.com; arc=none (no signatures found); dkim=fail (body has been altered; 1024-bit rsa key sha256) header.d=codeaurora.org header.i=@codeaurora.org header.b=JFeVPac2 x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=default; dkim=fail (body has been altered; 1024-bit rsa key sha256) header.d=codeaurora.org header.i=@codeaurora.org header.b=MugeY/bG x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=default; dmarc=none (p=none,has-list-id=yes,d=none) header.from=codeaurora.org; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=codeaurora.org header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751255AbeAWDpO (ORCPT ); Mon, 22 Jan 2018 22:45:14 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:39578 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751195AbeAWDpN (ORCPT ); Mon, 22 Jan 2018 22:45:13 -0500 X-Remote-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Remote-Spam-Level: X-Remote-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 27EF5607E4 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=mgautam@codeaurora.org Subject: Re: [PATCH 2/2] usb: dwc3: drd: Fix lock-up on ID change during system suspend/resume To: Roger Quadros , balbi@kernel.org Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org References: <1516626103-1969-1-git-send-email-rogerq@ti.com> <1516626103-1969-3-git-send-email-rogerq@ti.com> From: Manu Gautam Message-ID: <522f639a-466f-ae72-745e-61cbcc6fbfc7@codeaurora.org> Date: Tue, 23 Jan 2018 09:15:08 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: <1516626103-1969-3-git-send-email-rogerq@ti.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Language: en-US Sender: linux-usb-owner@vger.kernel.org X-Mailing-List: linux-usb@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: Hi, On 1/22/2018 6:31 PM, Roger Quadros wrote: > Adding/removing host/gadget controller before .pm_complete() > causes a lock-up. Let's prevent any dual-role state change > between .pm_prepare() and .pm_complete() to fix this. What kind of lock-up are you seeing? Some hardware lockup or software deadlock? IMO using a freezable_wq for drd_work should address that? > > Signed-off-by: Roger Quadros > --- > drivers/usb/dwc3/core.c | 31 +++++++++++++++++++++++++++++++ > drivers/usb/dwc3/core.h | 5 +++++ > drivers/usb/dwc3/drd.c | 10 ++++++---- > 3 files changed, 42 insertions(+), 4 deletions(-) > > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c > index 42379cc..85388dd 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -1414,6 +1414,33 @@ static int dwc3_runtime_idle(struct device *dev) > #endif /* CONFIG_PM */ > > #ifdef CONFIG_PM_SLEEP > +static int dwc3_prepare(struct device *dev) > +{ > + struct dwc3 *dwc = dev_get_drvdata(dev); > + unsigned long flags; > + > + if (dwc->dr_mode == USB_DR_MODE_OTG) { > + spin_lock_irqsave(&dwc->lock, flags); > + dwc->dr_keep_role = true; > + spin_unlock_irqrestore(&dwc->lock, flags); > + } > + > + return 0; > +} > + > +static void dwc3_complete(struct device *dev) > +{ > + struct dwc3 *dwc = dev_get_drvdata(dev); > + unsigned long flags; > + > + if (dwc->dr_mode == USB_DR_MODE_OTG) { > + spin_lock_irqsave(&dwc->lock, flags); > + dwc->dr_keep_role = false; > + spin_unlock_irqrestore(&dwc->lock, flags); > + dwc3_drd_update(dwc); > + } > +} > + > static int dwc3_suspend(struct device *dev) > { > struct dwc3 *dwc = dev_get_drvdata(dev); > @@ -1451,6 +1478,10 @@ static const struct dev_pm_ops dwc3_dev_pm_ops = { > SET_SYSTEM_SLEEP_PM_OPS(dwc3_suspend, dwc3_resume) > SET_RUNTIME_PM_OPS(dwc3_runtime_suspend, dwc3_runtime_resume, > dwc3_runtime_idle) > +#ifdef CONFIG_PM_SLEEP > + .prepare = dwc3_prepare, > + .complete = dwc3_complete, > +#endif > }; > > #ifdef CONFIG_OF > diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h > index 4a4a4c9..f5eb474 100644 > --- a/drivers/usb/dwc3/core.h > +++ b/drivers/usb/dwc3/core.h > @@ -786,6 +786,7 @@ struct dwc3_scratchpad_array { > * @dr_mode: requested mode of operation > * @current_dr_role: current role of operation when in dual-role mode > * @desired_dr_role: desired role of operation when in dual-role mode > + * @dr_keep_role: keep the current dual-role irrespective of ID changes > * @edev: extcon handle > * @edev_nb: extcon notifier > * @hsphy_mode: UTMI phy mode, one of following: > @@ -901,6 +902,7 @@ struct dwc3 { > enum usb_dr_mode dr_mode; > u32 current_dr_role; > u32 desired_dr_role; > + bool dr_keep_role; > struct extcon_dev *edev; > struct notifier_block edev_nb; > enum usb_phy_interface hsphy_mode; > @@ -1227,11 +1229,14 @@ static inline int dwc3_send_gadget_generic_command(struct dwc3 *dwc, > #if IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE) > int dwc3_drd_init(struct dwc3 *dwc); > void dwc3_drd_exit(struct dwc3 *dwc); > +void dwc3_drd_update(struct dwc3 *dwc); > #else > static inline int dwc3_drd_init(struct dwc3 *dwc) > { return 0; } > static inline void dwc3_drd_exit(struct dwc3 *dwc) > { } > +static inline void dwc3_drd_update(struct dwc3 *dwc); > +{ } > #endif > > /* power management interface */ > diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c > index cc8ab9a..177a8be 100644 > --- a/drivers/usb/dwc3/drd.c > +++ b/drivers/usb/dwc3/drd.c > @@ -13,7 +13,7 @@ > #include "core.h" > #include "gadget.h" > > -static void dwc3_drd_update(struct dwc3 *dwc) > +void dwc3_drd_update(struct dwc3 *dwc) > { > int id; > > @@ -31,9 +31,11 @@ static int dwc3_drd_notifier(struct notifier_block *nb, > { > struct dwc3 *dwc = container_of(nb, struct dwc3, edev_nb); > > - dwc3_set_mode(dwc, event ? > - DWC3_GCTL_PRTCAP_HOST : > - DWC3_GCTL_PRTCAP_DEVICE); > + if (!dwc->dr_keep_role) { > + dwc3_set_mode(dwc, event ? > + DWC3_GCTL_PRTCAP_HOST : > + DWC3_GCTL_PRTCAP_DEVICE); > + } > > return NOTIFY_DONE; > } -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [2/2] usb: dwc3: drd: Fix lock-up on ID change during system suspend/resume From: Manu Gautam Message-Id: <522f639a-466f-ae72-745e-61cbcc6fbfc7@codeaurora.org> Date: Tue, 23 Jan 2018 09:15:08 +0530 To: Roger Quadros , balbi@kernel.org Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org List-ID: SGksCgoKT24gMS8yMi8yMDE4IDY6MzEgUE0sIFJvZ2VyIFF1YWRyb3Mgd3JvdGU6Cj4gQWRkaW5n L3JlbW92aW5nIGhvc3QvZ2FkZ2V0IGNvbnRyb2xsZXIgYmVmb3JlIC5wbV9jb21wbGV0ZSgpCj4g Y2F1c2VzIGEgbG9jay11cC4gTGV0J3MgcHJldmVudCBhbnkgZHVhbC1yb2xlIHN0YXRlIGNoYW5n ZQo+IGJldHdlZW4gLnBtX3ByZXBhcmUoKSBhbmQgLnBtX2NvbXBsZXRlKCkgdG8gZml4IHRoaXMu CgpXaGF0IGtpbmQgb2YgbG9jay11cCBhcmUgeW91IHNlZWluZz8gU29tZSBoYXJkd2FyZSBsb2Nr dXAgb3Igc29mdHdhcmUgZGVhZGxvY2s/CklNTyB1c2luZyBhIGZyZWV6YWJsZV93cSBmb3IgZHJk X3dvcmsgc2hvdWxkIGFkZHJlc3MgdGhhdD8KCgo+Cj4gU2lnbmVkLW9mZi1ieTogUm9nZXIgUXVh ZHJvcyA8cm9nZXJxQHRpLmNvbT4KPiAtLS0KPiAgZHJpdmVycy91c2IvZHdjMy9jb3JlLmMgfCAz MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvdXNiL2R3YzMvY29y ZS5oIHwgIDUgKysrKysKPiAgZHJpdmVycy91c2IvZHdjMy9kcmQuYyAgfCAxMCArKysrKystLS0t Cj4gIDMgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKPgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MzL2NvcmUuYyBiL2RyaXZlcnMvdXNiL2R3YzMv Y29yZS5jCj4gaW5kZXggNDIzNzljYy4uODUzODhkZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3Vz Yi9kd2MzL2NvcmUuYwo+ICsrKyBiL2RyaXZlcnMvdXNiL2R3YzMvY29yZS5jCj4gQEAgLTE0MTQs NiArMTQxNCwzMyBAQCBzdGF0aWMgaW50IGR3YzNfcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2Ug KmRldikKPiAgI2VuZGlmIC8qIENPTkZJR19QTSAqLwo+ICAKPiAgI2lmZGVmIENPTkZJR19QTV9T TEVFUAo+ICtzdGF0aWMgaW50IGR3YzNfcHJlcGFyZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sK PiArCXN0cnVjdCBkd2MzCSpkd2MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXVuc2lnbmVk IGxvbmcJZmxhZ3M7Cj4gKwo+ICsJaWYgKGR3Yy0+ZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcp IHsKPiArCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHdjLT5sb2NrLCBmbGFncyk7Cj4gKwkJZHdjLT5k cl9rZWVwX3JvbGUgPSB0cnVlOwo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3Yy0+bG9j aywgZmxhZ3MpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBkd2MzX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGR3YzMJ KmR3YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJdW5zaWduZWQgbG9uZwlmbGFnczsKPiAr Cj4gKwlpZiAoZHdjLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX09URykgewo+ICsJCXNwaW5fbG9j a19pcnFzYXZlKCZkd2MtPmxvY2ssIGZsYWdzKTsKPiArCQlkd2MtPmRyX2tlZXBfcm9sZSA9IGZh bHNlOwo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3Yy0+bG9jaywgZmxhZ3MpOwo+ICsJ CWR3YzNfZHJkX3VwZGF0ZShkd2MpOwo+ICsJfQo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IGR3YzNf c3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIHsKPiAgCXN0cnVjdCBkd2MzCSpkd2MgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiBAQCAtMTQ1MSw2ICsxNDc4LDEwIEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZGV2X3BtX29wcyBkd2MzX2Rldl9wbV9vcHMgPSB7Cj4gIAlTRVRfU1lTVEVNX1NM RUVQX1BNX09QUyhkd2MzX3N1c3BlbmQsIGR3YzNfcmVzdW1lKQo+ICAJU0VUX1JVTlRJTUVfUE1f T1BTKGR3YzNfcnVudGltZV9zdXNwZW5kLCBkd2MzX3J1bnRpbWVfcmVzdW1lLAo+ICAJCQlkd2Mz X3J1bnRpbWVfaWRsZSkKPiArI2lmZGVmIENPTkZJR19QTV9TTEVFUAo+ICsJLnByZXBhcmUgPSBk d2MzX3ByZXBhcmUsCj4gKwkuY29tcGxldGUgPSBkd2MzX2NvbXBsZXRlLAo+ICsjZW5kaWYKPiAg fTsKPiAgCj4gICNpZmRlZiBDT05GSUdfT0YKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdj My9jb3JlLmggYi9kcml2ZXJzL3VzYi9kd2MzL2NvcmUuaAo+IGluZGV4IDRhNGE0YzkuLmY1ZWI0 NzQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvZHdjMy9jb3JlLmgKPiArKysgYi9kcml2ZXJz L3VzYi9kd2MzL2NvcmUuaAo+IEBAIC03ODYsNiArNzg2LDcgQEAgc3RydWN0IGR3YzNfc2NyYXRj aHBhZF9hcnJheSB7Cj4gICAqIEBkcl9tb2RlOiByZXF1ZXN0ZWQgbW9kZSBvZiBvcGVyYXRpb24K PiAgICogQGN1cnJlbnRfZHJfcm9sZTogY3VycmVudCByb2xlIG9mIG9wZXJhdGlvbiB3aGVuIGlu IGR1YWwtcm9sZSBtb2RlCj4gICAqIEBkZXNpcmVkX2RyX3JvbGU6IGRlc2lyZWQgcm9sZSBvZiBv cGVyYXRpb24gd2hlbiBpbiBkdWFsLXJvbGUgbW9kZQo+ICsgKiBAZHJfa2VlcF9yb2xlOiBrZWVw IHRoZSBjdXJyZW50IGR1YWwtcm9sZSBpcnJlc3BlY3RpdmUgb2YgSUQgY2hhbmdlcwo+ICAgKiBA ZWRldjogZXh0Y29uIGhhbmRsZQo+ICAgKiBAZWRldl9uYjogZXh0Y29uIG5vdGlmaWVyCj4gICAq IEBoc3BoeV9tb2RlOiBVVE1JIHBoeSBtb2RlLCBvbmUgb2YgZm9sbG93aW5nOgo+IEBAIC05MDEs NiArOTAyLDcgQEAgc3RydWN0IGR3YzMgewo+ICAJZW51bSB1c2JfZHJfbW9kZQlkcl9tb2RlOwo+ ICAJdTMyCQkJY3VycmVudF9kcl9yb2xlOwo+ICAJdTMyCQkJZGVzaXJlZF9kcl9yb2xlOwo+ICsJ Ym9vbAkJCWRyX2tlZXBfcm9sZTsKPiAgCXN0cnVjdCBleHRjb25fZGV2CSplZGV2Owo+ICAJc3Ry dWN0IG5vdGlmaWVyX2Jsb2NrCWVkZXZfbmI7Cj4gIAllbnVtIHVzYl9waHlfaW50ZXJmYWNlCWhz cGh5X21vZGU7Cj4gQEAgLTEyMjcsMTEgKzEyMjksMTQgQEAgc3RhdGljIGlubGluZSBpbnQgZHdj M19zZW5kX2dhZGdldF9nZW5lcmljX2NvbW1hbmQoc3RydWN0IGR3YzMgKmR3YywKPiAgI2lmIElT X0VOQUJMRUQoQ09ORklHX1VTQl9EV0MzX0RVQUxfUk9MRSkKPiAgaW50IGR3YzNfZHJkX2luaXQo c3RydWN0IGR3YzMgKmR3Yyk7Cj4gIHZvaWQgZHdjM19kcmRfZXhpdChzdHJ1Y3QgZHdjMyAqZHdj KTsKPiArdm9pZCBkd2MzX2RyZF91cGRhdGUoc3RydWN0IGR3YzMgKmR3Yyk7Cj4gICNlbHNlCj4g IHN0YXRpYyBpbmxpbmUgaW50IGR3YzNfZHJkX2luaXQoc3RydWN0IGR3YzMgKmR3YykKPiAgeyBy ZXR1cm4gMDsgfQo+ICBzdGF0aWMgaW5saW5lIHZvaWQgZHdjM19kcmRfZXhpdChzdHJ1Y3QgZHdj MyAqZHdjKQo+ICB7IH0KPiArc3RhdGljIGlubGluZSB2b2lkIGR3YzNfZHJkX3VwZGF0ZShzdHJ1 Y3QgZHdjMyAqZHdjKTsKPiAreyB9Cj4gICNlbmRpZgo+ICAKPiAgLyogcG93ZXIgbWFuYWdlbWVu dCBpbnRlcmZhY2UgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9kcmQuYyBiL2Ry aXZlcnMvdXNiL2R3YzMvZHJkLmMKPiBpbmRleCBjYzhhYjlhLi4xNzdhOGJlIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvdXNiL2R3YzMvZHJkLmMKPiArKysgYi9kcml2ZXJzL3VzYi9kd2MzL2RyZC5j Cj4gQEAgLTEzLDcgKzEzLDcgQEAKPiAgI2luY2x1ZGUgImNvcmUuaCIKPiAgI2luY2x1ZGUgImdh ZGdldC5oIgo+ICAKPiAtc3RhdGljIHZvaWQgZHdjM19kcmRfdXBkYXRlKHN0cnVjdCBkd2MzICpk d2MpCj4gK3ZvaWQgZHdjM19kcmRfdXBkYXRlKHN0cnVjdCBkd2MzICpkd2MpCj4gIHsKPiAgCWlu dCBpZDsKPiAgCj4gQEAgLTMxLDkgKzMxLDExIEBAIHN0YXRpYyBpbnQgZHdjM19kcmRfbm90aWZp ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKPiAgewo+ICAJc3RydWN0IGR3YzMgKmR3YyA9 IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IGR3YzMsIGVkZXZfbmIpOwo+ICAKPiAtCWR3YzNfc2V0 X21vZGUoZHdjLCBldmVudCA/Cj4gLQkJICAgICAgRFdDM19HQ1RMX1BSVENBUF9IT1NUIDoKPiAt CQkgICAgICBEV0MzX0dDVExfUFJUQ0FQX0RFVklDRSk7Cj4gKwlpZiAoIWR3Yy0+ZHJfa2VlcF9y b2xlKSB7Cj4gKwkJZHdjM19zZXRfbW9kZShkd2MsIGV2ZW50ID8KPiArCQkJICAgICAgRFdDM19H Q1RMX1BSVENBUF9IT1NUIDoKPiArCQkJICAgICAgRFdDM19HQ1RMX1BSVENBUF9ERVZJQ0UpOwo+ ICsJfQo+ICAKPiAgCXJldHVybiBOT1RJRllfRE9ORTsKPiAgfQo=