From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: Re: inconsistent lock state with usbnet/asix usb ethernet and xhci Date: Tue, 27 Feb 2018 06:07:01 -0800 Message-ID: <1519740421.7296.6.camel@gmail.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org To: Marek Szyprowski , netdev@vger.kernel.org, Linux USB Mailing List , LKML , 'Linux Samsung SOC' Cc: Dean Jenkins , Oliver Neukum List-Id: linux-samsung-soc@vger.kernel.org On Tue, 2018-02-27 at 08:26 +0100, Marek Szyprowski wrote: > Hi > > I've noticed that USBnet/ASIX AX88772B USB driver produces deplock kernel > warning ("inconsistent lock state") on Chromebook2 Peach-PIT board. No > special activity is needed to reproduce this issue, it happens almost > on every boot. ASIX USB ethernet is connected to XHCI USB host controller > on that board. Is it a known issue? Frankly I have no idea where to look > to fix it. The same adapter connected to EHCI ports on other boards based > on the same SoC works fine without any warnings. > > Here are some more information from that board: > # lsusb > Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub > Bus 005 Device 002: ID 0b95:772b ASIX Electronics Corp. AX88772B > Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub > Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub > Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub > Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub > Bus 001 Device 002: ID 2232:1056 Silicon Motion > Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub > > # lsusb -t > /:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M > /:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M >     |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=asix, 480M > /:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M > /:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M > /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=exynos-ohci/3p, 12M > /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=exynos-ehci/3p, 480M >     |__ Port 1: Dev 2, If 0, Class=Video, Driver=, 480M >     |__ Port 1: Dev 2, If 1, Class=Video, Driver=, 480M > > > And the log with mentioned warning: > > [   17.768040] ================================ > [   17.772239] WARNING: inconsistent lock state > [   17.776511] 4.16.0-rc3-next-20180227-00007-g876c53a7493c #453 Not tainted > [   17.783329] -------------------------------- > [   17.787580] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. > [   17.793607] swapper/0/0 [HC0[0]:SC1[1]:HE1:SE0] takes: > [   17.798751]  (&syncp->seq#5){?.-.}, at: [<9b22e5f0>] > asix_rx_fixup_internal+0x188/0x288 > [   17.806790] {IN-HARDIRQ-W} state was registered at: > [   17.811677]   tx_complete+0x100/0x208 > [   17.815319]   __usb_hcd_giveback_urb+0x60/0xf0 > [   17.819770]   xhci_giveback_urb_in_irq+0xa8/0x240 > [   17.824469]   xhci_td_cleanup+0xf4/0x16c > [   17.828367]   xhci_irq+0xe74/0x2240 > [   17.831827]   usb_hcd_irq+0x24/0x38 > [   17.835343]   __handle_irq_event_percpu+0x98/0x510 > [   17.840111]   handle_irq_event_percpu+0x1c/0x58 > [   17.844623]   handle_irq_event+0x38/0x5c > [   17.848519]   handle_fasteoi_irq+0xa4/0x138 > [   17.852681]   generic_handle_irq+0x18/0x28 > [   17.856760]   __handle_domain_irq+0x6c/0xe4 > [   17.860941]   gic_handle_irq+0x54/0xa0 > [   17.864666]   __irq_svc+0x70/0xb0 > [   17.867964]   arch_cpu_idle+0x20/0x3c > [   17.871578]   arch_cpu_idle+0x20/0x3c > [   17.875190]   do_idle+0x144/0x218 > [   17.878468]   cpu_startup_entry+0x18/0x1c > [   17.882454]   start_kernel+0x394/0x400 > [   17.886177] irq event stamp: 161912 > [   17.889616] hardirqs last  enabled at (161912): [<7bedfacf>] > __netdev_alloc_skb+0xcc/0x140 > [   17.897893] hardirqs last disabled at (161911): [] > __netdev_alloc_skb+0x94/0x140 > [   17.904903] exynos5-hsi2c 12ca0000.i2c: tx timeout > [   17.906116] softirqs last  enabled at (161904): [<387102ff>] > irq_enter+0x78/0x80 > [   17.906123] softirqs last disabled at (161905): [] > irq_exit+0x134/0x158 > [   17.925722]. > [   17.925722] other info that might help us debug this: > [   17.933435]  Possible unsafe locking scenario: > [   17.933435]. > [   17.940331]        CPU0 > [   17.942488]        ---- > [   17.944894]   lock(&syncp->seq#5); > [   17.948274]   > [   17.950847]     lock(&syncp->seq#5); > [   17.954386]. > [   17.954386]  *** DEADLOCK *** > [   17.954386]. > [   17.962422] no locks held by swapper/0/0. > [   17.966011]. > [   17.966011] stack backtrace: > [   17.971333] CPU: 0 PID: 0 Comm: swapper/0 Not tainted > 4.16.0-rc3-next-20180227-00007-g876c53a7493c #453 > [   17.980312] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) > [   17.986380] [] (unwind_backtrace) from [] > (show_stack+0x10/0x14) > [   17.994128] [] (show_stack) from [] > (dump_stack+0x90/0xc8) > [   18.001339] [] (dump_stack) from [] > (print_usage_bug+0x25c/0x2cc) > [   18.009161] [] (print_usage_bug) from [] > (mark_lock+0x290/0x698) > [   18.014952] exynos5-hsi2c 12ca0000.i2c: tx timeout > [   18.016899] [] (mark_lock) from [] > (__lock_acquire+0x454/0x1850) > [   18.029449] [] (__lock_acquire) from [] > (lock_acquire+0xc8/0x2b8) > [   18.037272] [] (lock_acquire) from [] > (usbnet_skb_return+0x7c/0x1a0) > [   18.045356] [] (usbnet_skb_return) from [] > (asix_rx_fixup_internal+0x188/0x288) > [   18.054420] [] (asix_rx_fixup_internal) from [] > (usbnet_bh+0xf8/0x2e4) > [   18.062694] [] (usbnet_bh) from [] > (tasklet_action+0x8c/0x13c) > [   18.070259] [] (tasklet_action) from [] > (__do_softirq+0xd4/0x6d4) > [   18.078089] [] (__do_softirq) from [] > (irq_exit+0x134/0x158) > [   18.085480] [] (irq_exit) from [] > (__handle_domain_irq+0x70/0xe4) > [   18.093314] [] (__handle_domain_irq) from [] > (gic_handle_irq+0x54/0xa0) > [   18.101670] [] (gic_handle_irq) from [] > (__irq_svc+0x70/0xb0) > [   18.109163] Exception stack(0xc0f01eb8 to 0xc0f01f00) > [   18.114202] 1ea0: 00000001 00000001 > [   18.122397] 1ec0: 00000000 c0f0ba80 eef3a540 eef3a540 ee8d2700 > c0f088b4 00000402 c09d23e0 > [   18.124980] exynos5-hsi2c 12ca0000.i2c: tx timeout > [   18.130611] 1ee0: c0f0ba80 c0f01f4c 00000000 c0f01f08 c017ea54 > c09d92d4 20000013 ffffffff > [   18.135504] cpu cpu0: _set_opp_voltage: failed to set voltage > (1250000 1250000 1250000 mV): -110 > [   18.143690] [] (__irq_svc) from [] > (_raw_spin_unlock_irq+0x28/0x5c) > [   18.152671] cpufreq: __target_index: Failed to change cpu frequency: -110 > [   18.160683] [] (_raw_spin_unlock_irq) from [] > (finish_task_switch+0xb4/0x254) > [   18.160696] [] (finish_task_switch) from [] > (__schedule+0x290/0xb10) > [   18.160704] [] (__schedule) from [] > (schedule_idle+0x2c/0x78) > [   18.160711] [] (schedule_idle) from [] > (cpu_startup_entry+0x18/0x1c) > [   18.200726] [] (cpu_startup_entry) from [] > (start_kernel+0x394/0x400) > > Best regards Please try the attached patch, thanks.  drivers/net/usb/usbnet.c       |    5 +++--  include/linux/u64_stats_sync.h |   22 ++++++++++++++++++++++  2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 8a22ff67b0268a588428c61c6a6211e3c6c2a02a..7f5bda0ec9e8520e6db327b713152afdb250255f 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -315,6 +315,7 @@ static void __usbnet_status_stop_force(struct usbnet *dev) void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb) { struct pcpu_sw_netstats *stats64 = this_cpu_ptr(dev->stats64); + unsigned long flags; int status; if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { @@ -326,10 +327,10 @@ void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb) if (skb->protocol == 0) skb->protocol = eth_type_trans (skb, dev->net); - u64_stats_update_begin(&stats64->syncp); + flags = u64_stats_update_begin_irqsave(&stats64->syncp); stats64->rx_packets++; stats64->rx_bytes += skb->len; - u64_stats_update_end(&stats64->syncp); + u64_stats_update_end_irqrestore(&stats64->syncp, flags); netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", skb->len + sizeof (struct ethhdr), skb->protocol); diff --git a/include/linux/u64_stats_sync.h b/include/linux/u64_stats_sync.h index 5bdbd9f49395f883ca2dc5aa0d7bbde11f379063..07ee0f84a46caa9e2b1c446f96009f63b3b99f50 100644 --- a/include/linux/u64_stats_sync.h +++ b/include/linux/u64_stats_sync.h @@ -90,6 +90,28 @@ static inline void u64_stats_update_end(struct u64_stats_sync *syncp) #endif } +static inline unsigned long +u64_stats_update_begin_irqsave(struct u64_stats_sync *syncp) +{ + unsigned long flags = 0; + +#if BITS_PER_LONG==32 && defined(CONFIG_SMP) + local_irq_save(flags); + write_seqcount_begin(&syncp->seq); +#endif + return flags; +} + +static inline void +u64_stats_update_end_irqrestore(struct u64_stats_sync *syncp, + unsigned long flags) +{ +#if BITS_PER_LONG==32 && defined(CONFIG_SMP) + write_seqcount_end(&syncp->seq); + local_irq_restore(flags); +#endif +} + static inline void u64_stats_update_begin_raw(struct u64_stats_sync *syncp) { #if BITS_PER_LONG==32 && defined(CONFIG_SMP) 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: inconsistent lock state with usbnet/asix usb ethernet and xhci From: Eric Dumazet Message-Id: <1519740421.7296.6.camel@gmail.com> Date: Tue, 27 Feb 2018 06:07:01 -0800 To: Marek Szyprowski , netdev@vger.kernel.org, Linux USB Mailing List , LKML , 'Linux Samsung SOC' Cc: Dean Jenkins , Oliver Neukum List-ID: T24gVHVlLCAyMDE4LTAyLTI3IGF0IDA4OjI2ICswMTAwLCBNYXJlayBTenlwcm93c2tpIHdyb3Rl Ogo+IEhpCj4gCj4gSSd2ZSBub3RpY2VkIHRoYXQgVVNCbmV0L0FTSVggQVg4ODc3MkIgVVNCIGRy aXZlciBwcm9kdWNlcyBkZXBsb2NrIGtlcm5lbAo+IHdhcm5pbmcgKCJpbmNvbnNpc3RlbnQgbG9j ayBzdGF0ZSIpIG9uIENocm9tZWJvb2syIFBlYWNoLVBJVCBib2FyZC4gTm8KPiBzcGVjaWFsIGFj dGl2aXR5IGlzIG5lZWRlZCB0byByZXByb2R1Y2UgdGhpcyBpc3N1ZSwgaXQgaGFwcGVucyBhbG1v c3QKPiBvbiBldmVyeSBib290LiBBU0lYIFVTQiBldGhlcm5ldCBpcyBjb25uZWN0ZWQgdG8gWEhD SSBVU0IgaG9zdCBjb250cm9sbGVyCj4gb24gdGhhdCBib2FyZC4gSXMgaXQgYSBrbm93biBpc3N1 ZT8gRnJhbmtseSBJIGhhdmUgbm8gaWRlYSB3aGVyZSB0byBsb29rCj4gdG8gZml4IGl0LiBUaGUg c2FtZSBhZGFwdGVyIGNvbm5lY3RlZCB0byBFSENJIHBvcnRzIG9uIG90aGVyIGJvYXJkcyBiYXNl ZAo+IG9uIHRoZSBzYW1lIFNvQyB3b3JrcyBmaW5lIHdpdGhvdXQgYW55IHdhcm5pbmdzLgo+IAo+ IEhlcmUgYXJlIHNvbWUgbW9yZSBpbmZvcm1hdGlvbiBmcm9tIHRoYXQgYm9hcmQ6Cj4gIyBsc3Vz Ygo+IEJ1cyAwMDYgRGV2aWNlIDAwMTogSUQgMWQ2YjowMDAzIExpbnV4IEZvdW5kYXRpb24gMy4w IHJvb3QgaHViCj4gQnVzIDAwNSBEZXZpY2UgMDAyOiBJRCAwYjk1Ojc3MmIgQVNJWCBFbGVjdHJv bmljcyBDb3JwLiBBWDg4NzcyQgo+IEJ1cyAwMDUgRGV2aWNlIDAwMTogSUQgMWQ2YjowMDAyIExp bnV4IEZvdW5kYXRpb24gMi4wIHJvb3QgaHViCj4gQnVzIDAwNCBEZXZpY2UgMDAxOiBJRCAxZDZi OjAwMDMgTGludXggRm91bmRhdGlvbiAzLjAgcm9vdCBodWIKPiBCdXMgMDAzIERldmljZSAwMDE6 IElEIDFkNmI6MDAwMiBMaW51eCBGb3VuZGF0aW9uIDIuMCByb290IGh1Ygo+IEJ1cyAwMDIgRGV2 aWNlIDAwMTogSUQgMWQ2YjowMDAxIExpbnV4IEZvdW5kYXRpb24gMS4xIHJvb3QgaHViCj4gQnVz IDAwMSBEZXZpY2UgMDAyOiBJRCAyMjMyOjEwNTYgU2lsaWNvbiBNb3Rpb24KPiBCdXMgMDAxIERl dmljZSAwMDE6IElEIDFkNmI6MDAwMiBMaW51eCBGb3VuZGF0aW9uIDIuMCByb290IGh1Ygo+IAo+ ICMgbHN1c2IgLXQKPiAvOsKgIEJ1cyAwNi5Qb3J0IDE6IERldiAxLCBDbGFzcz1yb290X2h1Yiwg RHJpdmVyPXhoY2ktaGNkLzFwLCA1MDAwTQo+IC86wqAgQnVzIDA1LlBvcnQgMTogRGV2IDEsIENs YXNzPXJvb3RfaHViLCBEcml2ZXI9eGhjaS1oY2QvMXAsIDQ4ME0KPiAgwqDCoMKgIHxfXyBQb3J0 IDE6IERldiAyLCBJZiAwLCBDbGFzcz1WZW5kb3IgU3BlY2lmaWMgQ2xhc3MsIERyaXZlcj1hc2l4 LCA0ODBNCj4gLzrCoCBCdXMgMDQuUG9ydCAxOiBEZXYgMSwgQ2xhc3M9cm9vdF9odWIsIERyaXZl cj14aGNpLWhjZC8xcCwgNTAwME0KPiAvOsKgIEJ1cyAwMy5Qb3J0IDE6IERldiAxLCBDbGFzcz1y b290X2h1YiwgRHJpdmVyPXhoY2ktaGNkLzFwLCA0ODBNCj4gLzrCoCBCdXMgMDIuUG9ydCAxOiBE ZXYgMSwgQ2xhc3M9cm9vdF9odWIsIERyaXZlcj1leHlub3Mtb2hjaS8zcCwgMTJNCj4gLzrCoCBC dXMgMDEuUG9ydCAxOiBEZXYgMSwgQ2xhc3M9cm9vdF9odWIsIERyaXZlcj1leHlub3MtZWhjaS8z cCwgNDgwTQo+ICDCoMKgwqAgfF9fIFBvcnQgMTogRGV2IDIsIElmIDAsIENsYXNzPVZpZGVvLCBE cml2ZXI9LCA0ODBNCj4gIMKgwqDCoCB8X18gUG9ydCAxOiBEZXYgMiwgSWYgMSwgQ2xhc3M9Vmlk ZW8sIERyaXZlcj0sIDQ4ME0KPiAKPiAKPiBBbmQgdGhlIGxvZyB3aXRoIG1lbnRpb25lZCB3YXJu aW5nOgo+IAo+IFvCoMKgIDE3Ljc2ODA0MF0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KPiBbwqDCoCAxNy43NzIyMzldIFdBUk5JTkc6IGluY29uc2lzdGVudCBsb2NrIHN0YXRlCj4g W8KgwqAgMTcuNzc2NTExXSA0LjE2LjAtcmMzLW5leHQtMjAxODAyMjctMDAwMDctZzg3NmM1M2E3 NDkzYyAjNDUzIE5vdCB0YWludGVkCj4gW8KgwqAgMTcuNzgzMzI5XSAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQo+IFvCoMKgIDE3Ljc4NzU4MF0gaW5jb25zaXN0ZW50IHtJTi1IQVJE SVJRLVd9IC0+IHtIQVJESVJRLU9OLVd9IHVzYWdlLgo+IFvCoMKgIDE3Ljc5MzYwN10gc3dhcHBl ci8wLzAgW0hDMFswXTpTQzFbMV06SEUxOlNFMF0gdGFrZXM6Cj4gW8KgwqAgMTcuNzk4NzUxXcKg ICgmc3luY3AtPnNlcSM1KXs/Li0ufSwgYXQ6IFs8OWIyMmU1ZjA+XSAKPiBhc2l4X3J4X2ZpeHVw X2ludGVybmFsKzB4MTg4LzB4Mjg4Cj4gW8KgwqAgMTcuODA2NzkwXSB7SU4tSEFSRElSUS1XfSBz dGF0ZSB3YXMgcmVnaXN0ZXJlZCBhdDoKPiBbwqDCoCAxNy44MTE2NzddwqDCoCB0eF9jb21wbGV0 ZSsweDEwMC8weDIwOAo+IFvCoMKgIDE3LjgxNTMxOV3CoMKgIF9fdXNiX2hjZF9naXZlYmFja191 cmIrMHg2MC8weGYwCj4gW8KgwqAgMTcuODE5NzcwXcKgwqAgeGhjaV9naXZlYmFja191cmJfaW5f aXJxKzB4YTgvMHgyNDAKPiBbwqDCoCAxNy44MjQ0NjldwqDCoCB4aGNpX3RkX2NsZWFudXArMHhm NC8weDE2Ywo+IFvCoMKgIDE3LjgyODM2N13CoMKgIHhoY2lfaXJxKzB4ZTc0LzB4MjI0MAo+IFvC oMKgIDE3LjgzMTgyN13CoMKgIHVzYl9oY2RfaXJxKzB4MjQvMHgzOAo+IFvCoMKgIDE3LjgzNTM0 M13CoMKgIF9faGFuZGxlX2lycV9ldmVudF9wZXJjcHUrMHg5OC8weDUxMAo+IFvCoMKgIDE3Ljg0 MDExMV3CoMKgIGhhbmRsZV9pcnFfZXZlbnRfcGVyY3B1KzB4MWMvMHg1OAo+IFvCoMKgIDE3Ljg0 NDYyM13CoMKgIGhhbmRsZV9pcnFfZXZlbnQrMHgzOC8weDVjCj4gW8KgwqAgMTcuODQ4NTE5XcKg wqAgaGFuZGxlX2Zhc3Rlb2lfaXJxKzB4YTQvMHgxMzgKPiBbwqDCoCAxNy44NTI2ODFdwqDCoCBn ZW5lcmljX2hhbmRsZV9pcnErMHgxOC8weDI4Cj4gW8KgwqAgMTcuODU2NzYwXcKgwqAgX19oYW5k bGVfZG9tYWluX2lycSsweDZjLzB4ZTQKPiBbwqDCoCAxNy44NjA5NDFdwqDCoCBnaWNfaGFuZGxl X2lycSsweDU0LzB4YTAKPiBbwqDCoCAxNy44NjQ2NjZdwqDCoCBfX2lycV9zdmMrMHg3MC8weGIw Cj4gW8KgwqAgMTcuODY3OTY0XcKgwqAgYXJjaF9jcHVfaWRsZSsweDIwLzB4M2MKPiBbwqDCoCAx Ny44NzE1NzhdwqDCoCBhcmNoX2NwdV9pZGxlKzB4MjAvMHgzYwo+IFvCoMKgIDE3Ljg3NTE5MF3C oMKgIGRvX2lkbGUrMHgxNDQvMHgyMTgKPiBbwqDCoCAxNy44Nzg0NjhdwqDCoCBjcHVfc3RhcnR1 cF9lbnRyeSsweDE4LzB4MWMKPiBbwqDCoCAxNy44ODI0NTRdwqDCoCBzdGFydF9rZXJuZWwrMHgz OTQvMHg0MDAKPiBbwqDCoCAxNy44ODYxNzddIGlycSBldmVudCBzdGFtcDogMTYxOTEyCj4gW8Kg wqAgMTcuODg5NjE2XSBoYXJkaXJxcyBsYXN0wqAgZW5hYmxlZCBhdCAoMTYxOTEyKTogWzw3YmVk ZmFjZj5dIAo+IF9fbmV0ZGV2X2FsbG9jX3NrYisweGNjLzB4MTQwCj4gW8KgwqAgMTcuODk3ODkz XSBoYXJkaXJxcyBsYXN0IGRpc2FibGVkIGF0ICgxNjE5MTEpOiBbPGQ1ODI2MWQwPl0gCj4gX19u ZXRkZXZfYWxsb2Nfc2tiKzB4OTQvMHgxNDAKPiBbwqDCoCAxNy45MDQ5MDNdIGV4eW5vczUtaHNp MmMgMTJjYTAwMDAuaTJjOiB0eCB0aW1lb3V0Cj4gW8KgwqAgMTcuOTA2MTE2XSBzb2Z0aXJxcyBs YXN0wqAgZW5hYmxlZCBhdCAoMTYxOTA0KTogWzwzODcxMDJmZj5dIAo+IGlycV9lbnRlcisweDc4 LzB4ODAKPiBbwqDCoCAxNy45MDYxMjNdIHNvZnRpcnFzIGxhc3QgZGlzYWJsZWQgYXQgKDE2MTkw NSk6IFs8Y2Y0YzYyOGU+XSAKPiBpcnFfZXhpdCsweDEzNC8weDE1OAo+IFvCoMKgIDE3LjkyNTcy Ml0uCj4gW8KgwqAgMTcuOTI1NzIyXSBvdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1 ZyB0aGlzOgo+IFvCoMKgIDE3LjkzMzQzNV3CoCBQb3NzaWJsZSB1bnNhZmUgbG9ja2luZyBzY2Vu YXJpbzoKPiBbwqDCoCAxNy45MzM0MzVdLgo+IFvCoMKgIDE3Ljk0MDMzMV3CoMKgwqDCoMKgwqDC oCBDUFUwCj4gW8KgwqAgMTcuOTQyNDg4XcKgwqDCoMKgwqDCoMKgIC0tLS0KPiBbwqDCoCAxNy45 NDQ4OTRdwqDCoCBsb2NrKCZzeW5jcC0+c2VxIzUpOwo+IFvCoMKgIDE3Ljk0ODI3NF3CoMKgIDxJ bnRlcnJ1cHQ+Cj4gW8KgwqAgMTcuOTUwODQ3XcKgwqDCoMKgIGxvY2soJnN5bmNwLT5zZXEjNSk7 Cj4gW8KgwqAgMTcuOTU0Mzg2XS4KPiBbwqDCoCAxNy45NTQzODZdwqAgKioqIERFQURMT0NLICoq Kgo+IFvCoMKgIDE3Ljk1NDM4Nl0uCj4gW8KgwqAgMTcuOTYyNDIyXSBubyBsb2NrcyBoZWxkIGJ5 IHN3YXBwZXIvMC8wLgo+IFvCoMKgIDE3Ljk2NjAxMV0uCj4gW8KgwqAgMTcuOTY2MDExXSBzdGFj ayBiYWNrdHJhY2U6Cj4gW8KgwqAgMTcuOTcxMzMzXSBDUFU6IDAgUElEOiAwIENvbW06IHN3YXBw ZXIvMCBOb3QgdGFpbnRlZCAKPiA0LjE2LjAtcmMzLW5leHQtMjAxODAyMjctMDAwMDctZzg3NmM1 M2E3NDkzYyAjNDUzCj4gW8KgwqAgMTcuOTgwMzEyXSBIYXJkd2FyZSBuYW1lOiBTQU1TVU5HIEVY WU5PUyAoRmxhdHRlbmVkIERldmljZSBUcmVlKQo+IFvCoMKgIDE3Ljk4NjM4MF0gWzxjMDExMTU0 OD5dICh1bndpbmRfYmFja3RyYWNlKSBmcm9tIFs8YzAxMGRiZDg+XSAKPiAoc2hvd19zdGFjaysw eDEwLzB4MTQpCj4gW8KgwqAgMTcuOTk0MTI4XSBbPGMwMTBkYmQ4Pl0gKHNob3dfc3RhY2spIGZy b20gWzxjMDliZDQxOD5dIAo+IChkdW1wX3N0YWNrKzB4OTAvMHhjOCkKPiBbwqDCoCAxOC4wMDEz MzldIFs8YzA5YmQ0MTg+XSAoZHVtcF9zdGFjaykgZnJvbSBbPGMwMTdmZGY4Pl0gCj4gKHByaW50 X3VzYWdlX2J1ZysweDI1Yy8weDJjYykKPiBbwqDCoCAxOC4wMDkxNjFdIFs8YzAxN2ZkZjg+XSAo cHJpbnRfdXNhZ2VfYnVnKSBmcm9tIFs8YzAxN2MxNGM+XSAKPiAobWFya19sb2NrKzB4MjkwLzB4 Njk4KQo+IFvCoMKgIDE4LjAxNDk1Ml0gZXh5bm9zNS1oc2kyYyAxMmNhMDAwMC5pMmM6IHR4IHRp bWVvdXQKPiBbwqDCoCAxOC4wMTY4OTldIFs8YzAxN2MxNGM+XSAobWFya19sb2NrKSBmcm9tIFs8 YzAxN2M5YTg+XSAKPiAoX19sb2NrX2FjcXVpcmUrMHg0NTQvMHgxODUwKQo+IFvCoMKgIDE4LjAy OTQ0OV0gWzxjMDE3YzlhOD5dIChfX2xvY2tfYWNxdWlyZSkgZnJvbSBbPGMwMTdlNmUwPl0gCj4g KGxvY2tfYWNxdWlyZSsweGM4LzB4MmI4KQo+IFvCoMKgIDE4LjAzNzI3Ml0gWzxjMDE3ZTZlMD5d IChsb2NrX2FjcXVpcmUpIGZyb20gWzxjMDViZTk4Yz5dIAo+ICh1c2JuZXRfc2tiX3JldHVybisw eDdjLzB4MWEwKQo+IFvCoMKgIDE4LjA0NTM1Nl0gWzxjMDViZTk4Yz5dICh1c2JuZXRfc2tiX3Jl dHVybikgZnJvbSBbPGMwNWIxODVjPl0gCj4gKGFzaXhfcnhfZml4dXBfaW50ZXJuYWwrMHgxODgv MHgyODgpCj4gW8KgwqAgMTguMDU0NDIwXSBbPGMwNWIxODVjPl0gKGFzaXhfcnhfZml4dXBfaW50 ZXJuYWwpIGZyb20gWzxjMDViZmU0MD5dIAo+ICh1c2JuZXRfYmgrMHhmOC8weDJlNCkKPiBbwqDC oCAxOC4wNjI2OTRdIFs8YzA1YmZlNDA+XSAodXNibmV0X2JoKSBmcm9tIFs8YzAxMmQ2YjQ+XSAK PiAodGFza2xldF9hY3Rpb24rMHg4Yy8weDEzYykKPiBbwqDCoCAxOC4wNzAyNTldIFs8YzAxMmQ2 YjQ+XSAodGFza2xldF9hY3Rpb24pIGZyb20gWzxjMDEwMjIxND5dIAo+IChfX2RvX3NvZnRpcnEr MHhkNC8weDZkNCkKPiBbwqDCoCAxOC4wNzgwODldIFs8YzAxMDIyMTQ+XSAoX19kb19zb2Z0aXJx KSBmcm9tIFs8YzAxMmNmMzQ+XSAKPiAoaXJxX2V4aXQrMHgxMzQvMHgxNTgpCj4gW8KgwqAgMTgu MDg1NDgwXSBbPGMwMTJjZjM0Pl0gKGlycV9leGl0KSBmcm9tIFs8YzAxOGM0NDQ+XSAKPiAoX19o YW5kbGVfZG9tYWluX2lycSsweDcwLzB4ZTQpCj4gW8KgwqAgMTguMDkzMzE0XSBbPGMwMThjNDQ0 Pl0gKF9faGFuZGxlX2RvbWFpbl9pcnEpIGZyb20gWzxjMDQ2NDAwYz5dIAo+IChnaWNfaGFuZGxl X2lycSsweDU0LzB4YTApCj4gW8KgwqAgMTguMTAxNjcwXSBbPGMwNDY0MDBjPl0gKGdpY19oYW5k bGVfaXJxKSBmcm9tIFs8YzAxMDE5ZjA+XSAKPiAoX19pcnFfc3ZjKzB4NzAvMHhiMCkKPiBbwqDC oCAxOC4xMDkxNjNdIEV4Y2VwdGlvbiBzdGFjaygweGMwZjAxZWI4IHRvIDB4YzBmMDFmMDApCj4g W8KgwqAgMTguMTE0MjAyXSAxZWEwOiAwMDAwMDAwMSAwMDAwMDAwMQo+IFvCoMKgIDE4LjEyMjM5 N10gMWVjMDogMDAwMDAwMDAgYzBmMGJhODAgZWVmM2E1NDAgZWVmM2E1NDAgZWU4ZDI3MDAgCj4g YzBmMDg4YjQgMDAwMDA0MDIgYzA5ZDIzZTAKPiBbwqDCoCAxOC4xMjQ5ODBdIGV4eW5vczUtaHNp MmMgMTJjYTAwMDAuaTJjOiB0eCB0aW1lb3V0Cj4gW8KgwqAgMTguMTMwNjExXSAxZWUwOiBjMGYw YmE4MCBjMGYwMWY0YyAwMDAwMDAwMCBjMGYwMWYwOCBjMDE3ZWE1NCAKPiBjMDlkOTJkNCAyMDAw MDAxMyBmZmZmZmZmZgo+IFvCoMKgIDE4LjEzNTUwNF0gY3B1IGNwdTA6IF9zZXRfb3BwX3ZvbHRh Z2U6IGZhaWxlZCB0byBzZXQgdm9sdGFnZSAKPiAoMTI1MDAwMCAxMjUwMDAwIDEyNTAwMDAgbVYp OiAtMTEwCj4gW8KgwqAgMTguMTQzNjkwXSBbPGMwMTAxOWYwPl0gKF9faXJxX3N2YykgZnJvbSBb PGMwOWQ5MmQ0Pl0gCj4gKF9yYXdfc3Bpbl91bmxvY2tfaXJxKzB4MjgvMHg1YykKPiBbwqDCoCAx OC4xNTI2NzFdIGNwdWZyZXE6IF9fdGFyZ2V0X2luZGV4OiBGYWlsZWQgdG8gY2hhbmdlIGNwdSBm cmVxdWVuY3k6IC0xMTAKPiBbwqDCoCAxOC4xNjA2ODNdIFs8YzA5ZDkyZDQ+XSAoX3Jhd19zcGlu X3VubG9ja19pcnEpIGZyb20gWzxjMDE1MjY4ND5dIAo+IChmaW5pc2hfdGFza19zd2l0Y2grMHhi NC8weDI1NCkKPiBbwqDCoCAxOC4xNjA2OTZdIFs8YzAxNTI2ODQ+XSAoZmluaXNoX3Rhc2tfc3dp dGNoKSBmcm9tIFs8YzA5ZDIzZTA+XSAKPiAoX19zY2hlZHVsZSsweDI5MC8weGIxMCkKPiBbwqDC oCAxOC4xNjA3MDRdIFs8YzA5ZDIzZTA+XSAoX19zY2hlZHVsZSkgZnJvbSBbPGMwOWQzMTM0Pl0g Cj4gKHNjaGVkdWxlX2lkbGUrMHgyYy8weDc4KQo+IFvCoMKgIDE4LjE2MDcxMV0gWzxjMDlkMzEz ND5dIChzY2hlZHVsZV9pZGxlKSBmcm9tIFs8YzAxNzAzYTA+XSAKPiAoY3B1X3N0YXJ0dXBfZW50 cnkrMHgxOC8weDFjKQo+IFvCoMKgIDE4LjIwMDcyNl0gWzxjMDE3MDNhMD5dIChjcHVfc3RhcnR1 cF9lbnRyeSkgZnJvbSBbPGMwZTAwYzc0Pl0gCj4gKHN0YXJ0X2tlcm5lbCsweDM5NC8weDQwMCkK PiAKPiBCZXN0IHJlZ2FyZHMKClBsZWFzZSB0cnkgdGhlIGF0dGFjaGVkIHBhdGNoLCB0aGFua3Mu CgrCoGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY8KgwqDCoMKgwqDCoMKgfMKgwqDCoMKgNSArKyst LQrCoGluY2x1ZGUvbGludXgvdTY0X3N0YXRzX3N5bmMuaCB8wqDCoMKgMjIgKysrKysrKysrKysr KysrKysrKysrKwrCoDIgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlv bnMoLSkKLS0tClRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1 bnN1YnNjcmliZSBsaW51eC11c2IiIGluCnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRv bW9Admdlci5rZXJuZWwub3JnCk1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtl cm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Vz Yi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwppbmRleCA4YTIyZmY2N2IwMjY4 YTU4ODQyOGM2MWM2YTYyMTFlM2M2YzJhMDJhLi43ZjViZGEwZWM5ZTg1MjBlNmRiMzI3YjcxMzE1 MmFmZGIyNTAyNTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKKysrIGIv ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCkBAIC0zMTUsNiArMzE1LDcgQEAgc3RhdGljIHZvaWQg X191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KQogdm9pZCB1c2Ju ZXRfc2tiX3JldHVybiAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQog ewogCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0+ c3RhdHM2NCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQJc3RhdHVzOwogCiAJaWYgKHRl c3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgJmRldi0+ZmxhZ3MpKSB7CkBAIC0zMjYsMTAgKzMyNywx MCBAQCB2b2lkIHVzYm5ldF9za2JfcmV0dXJuIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBz a19idWZmICpza2IpCiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gMCkKIAkJc2tiLT5wcm90b2NvbCA9 IGV0aF90eXBlX3RyYW5zIChza2IsIGRldi0+bmV0KTsKIAotCXU2NF9zdGF0c191cGRhdGVfYmVn aW4oJnN0YXRzNjQtPnN5bmNwKTsKKwlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJx c2F2ZSgmc3RhdHM2NC0+c3luY3ApOwogCXN0YXRzNjQtPnJ4X3BhY2tldHMrKzsKIAlzdGF0czY0 LT5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmc3RhdHM2NC0+ c3luY3ApOworCXU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoJnN0YXRzNjQtPnN5bmNw LCBmbGFncyk7CiAKIAluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0+bmV0LCAiPCByeCwg bGVuICV6dSwgdHlwZSAweCV4XG4iLAogCQkgIHNrYi0+bGVuICsgc2l6ZW9mIChzdHJ1Y3QgZXRo aGRyKSwgc2tiLT5wcm90b2NvbCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3U2NF9zdGF0 c19zeW5jLmggYi9pbmNsdWRlL2xpbnV4L3U2NF9zdGF0c19zeW5jLmgKaW5kZXggNWJkYmQ5ZjQ5 Mzk1Zjg4M2NhMmRjNWFhMGQ3YmJkZTExZjM3OTA2My4uMDdlZTBmODRhNDZjYWE5ZTJiMWM0NDZm OTYwMDlmNjNiM2I5OWY1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91NjRfc3RhdHNfc3lu Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvdTY0X3N0YXRzX3N5bmMuaApAQCAtOTAsNiArOTAsMjgg QEAgc3RhdGljIGlubGluZSB2b2lkIHU2NF9zdGF0c191cGRhdGVfZW5kKHN0cnVjdCB1NjRfc3Rh dHNfc3luYyAqc3luY3ApCiAjZW5kaWYKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25n Cit1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoc3RydWN0IHU2NF9zdGF0c19zeW5jICpz eW5jcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworI2lmIEJJVFNfUEVSX0xPTkc9 PTMyICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJd3Jp dGVfc2VxY291bnRfYmVnaW4oJnN5bmNwLT5zZXEpOworI2VuZGlmCisJcmV0dXJuIGZsYWdzOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3U2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUo c3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcCwKKwkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQor eworI2lmIEJJVFNfUEVSX0xPTkc9PTMyICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKwl3cml0ZV9z ZXFjb3VudF9lbmQoJnN5bmNwLT5zZXEpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKyNl bmRpZgorfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9yYXco c3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcCkKIHsKICNpZiBCSVRTX1BFUl9MT05HPT0zMiAm JiBkZWZpbmVkKENPTkZJR19TTVApCg==