From owner-freebsd-stable@FreeBSD.ORG Fri Feb 3 15:15:48 2012 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5F7C11065673 for ; Fri, 3 Feb 2012 15:15:48 +0000 (UTC) (envelope-from Kashyap.Desai@lsi.com) Received: from na3sys009aog122.obsmtp.com (na3sys009aog122.obsmtp.com [74.125.149.147]) by mx1.freebsd.org (Postfix) with ESMTP id 4AE908FC0C for ; Fri, 3 Feb 2012 15:15:47 +0000 (UTC) Received: from paledge01.lsi.com ([192.19.193.42]) (using TLSv1) by na3sys009aob122.postini.com ([74.125.148.12]) with SMTP ID DSNKTyv6ItfxTo/5xY0mbOTwZGByrQxcSIok@postini.com; Fri, 03 Feb 2012 07:15:47 PST Received: from PALHUB01.lsi.com (128.94.213.114) by PALEDGE01.lsi.com (192.19.193.42) with Microsoft SMTP Server (TLS) id 8.3.213.0; Fri, 3 Feb 2012 10:20:14 -0500 Received: from inbexch01.lsi.com (135.36.98.37) by PALHUB01.lsi.com (128.94.213.114) with Microsoft SMTP Server (TLS) id 8.3.213.0; Fri, 3 Feb 2012 10:15:45 -0500 Received: from inbmail01.lsi.com ([135.36.98.64]) by inbexch01.lsi.com ([135.36.98.37]) with mapi; Fri, 3 Feb 2012 20:45:41 +0530 From: "Desai, Kashyap" To: Johan Hendriks Date: Fri, 3 Feb 2012 20:45:40 +0530 Thread-Topic: LSI supported mps(4) driver in stable/9 and stable/8 Thread-Index: AczihjVWOTzLu7vISfui3on6s3EGowAAEz7w Message-ID: References: <20120202191105.GA55719@nargothrond.kdm.org> <4F2BF270.70303@gmail.com> <4F2BF93F.4060407@gmail.com> In-Reply-To: <4F2BF93F.4060407@gmail.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: acceptlanguage: en-US Content-Type: multipart/mixed; boundary="_002_B2FD678A64EAAD45B089B123FDFC3ED729A3414E2Einbmail01lsic_" MIME-Version: 1.0 Cc: freebsd-stable Subject: RE: LSI supported mps(4) driver in stable/9 and stable/8 X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Feb 2012 15:15:48 -0000 --_002_B2FD678A64EAAD45B089B123FDFC3ED729A3414E2Einbmail01lsic_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Try attached patch.! (This patch is not taken against upstream code, so you= may see some hunk fail.) ~ Kashyap > -----Original Message----- > From: Johan Hendriks [mailto:joh.hendriks@gmail.com] > Sent: Friday, February 03, 2012 8:42 PM > To: Desai, Kashyap > Cc: freebsd-stable > Subject: Re: LSI supported mps(4) driver in stable/9 and stable/8 > > Desai, Kashyap schreef: > > Hi Johan, > > > > I have already figure out this issue in our lab. > > > > I also have fix for this issue. (Just don't want to create regression, > that is why I have not posted outside) > > Since you have seen similar issue, It is worth to try my patch. > > > > My machine is not getting IP right now. I will send you patch once my > machine is in network ? > > > > ~ Kashyap > > > > > >> -----Original Message----- > >> From: owner-freebsd-stable@freebsd.org [mailto:owner-freebsd- > >> stable@freebsd.org] On Behalf Of Johan Hendriks > >> Sent: Friday, February 03, 2012 8:13 PM > >> To: Kenneth D. Merry > >> Cc: freebsd-stable > >> Subject: Re: LSI supported mps(4) driver in stable/9 and stable/8 > >> > >> Kenneth D. Merry schreef: > >>> Hi folks, > >>> > >>> The LSI-supported version of the mps(4) driver that supports their > 6Gb > >> SAS > >>> HBAs as well as WarpDrive controllers, is now in stable/9 and > >> stable/8. > >>> Please test it out and let me and Kashyap (CCed) know if you run > into > >>> any problems. > >>> > >>> In addition to supporting WarpDrive, the driver also supports > >> Integrated > >>> RAID. > >>> > >>> Thanks to LSI for doing the work on this driver! > >>> > >>> Note that the CAM infrastructure changes that went into FreeBSD/head > >> along > >>> with this driver have not gone into either stable/9 or stable/8. > Only > >> the > >>> driver itself has been merged. > >>> > >>> The CAM infrastructure changes depend on some other da(4) driver > >> changes > >>> that will need to get merged before they can go back. If that merge > >>> happens, it will probably only be into stable/9. > >>> > >>> A couple of notes about issues with this driver: > >>> > >>> - Unlike the previous mps(4) driver, it probes sequentially. If > you > >> have > >>> a lot of drives in your system, it will take a while to probe > them > >> all. > >>> - You may see warning messages like this: > >>> > >>> _mapping_add_new_device: failed to add the device with handle 0x0019 > >> to persiste > >>> nt table because there is no free space available > >>> _mapping_add_new_device: failed to add the device with handle 0x001a > >> to persiste > >>> nt table because there is no free space available > >>> > >>> - The driver is not endian safe. (It assumes a little endian > >> machine.) > >>> This is not new, the previous version of the driver had the > same > >> issue. > >>> The LSI folks know about these issues. The driver has passed their > >> testing > >>> process. > >>> > >>> Many thanks to LSI for going through the effort to support FreeBSD. > >>> > >>> Ken > >> Hello Ken. > >> > >> Just updated our 16 bay server. did a csup today. > >> did try some commands, it looked like the drives got husseled. > >> > >> But after giving the command camcontrol rescan all it does not give > back > >> the prompt. > >> Also top shows me the following. > >> 1589 root 1 20 0 16384K 1376K cbwait 3 0:00 0.00% > >> camcontrol > >> > >> # on another console things works > >> filer01# camcontrol devlist > >> at scbus0 target 8 lun 0 > (pass0,da0) > >> at scbus0 target 9 lun 0 > (pass1,da1) > >> at scbus0 target 10 lun 0 > (pass2,da2) > >> at scbus0 target 11 lun 0 > (pass3,da3) > >> at scbus0 target 12 lun 0 > (pass4,da4) > >> at scbus0 target 13 lun 0 > (pass5,da5) > >> at scbus0 target 16 lun 0 > >> (probe16,ses0,pass6) > >> at scbus0 target 17 lun 0 > (pass7,da6) > >> at scbus0 target 18 lun 0 > (pass8,da7) > >> at scbus0 target 19 lun 0 > (pass9,da8) > >> at scbus0 target 20 lun 0 > >> (pass10,da9) > >> at scbus0 target 21 lun 0 > >> (pass11,da10) > >> at scbus0 target 22 lun 0 > >> (pass12,da11) > >> at scbus0 target 23 lun 0 > >> (pass13,da12) > >> at scbus0 target 24 lun 0 > >> (pass14,da13) > >> at scbus0 target 27 lun 0 > >> (pass15,da14) > >> at scbus0 target 28 lun 0 > >> (pass16,da15) > >> at scbus1 target 0 lun 0 > >> (ada0,pass17) > >> at scbus3 target 0 lun 0 > (pass18,cd0) > >> > >> The controller is a LSI 9211-8i with IT firmware. > >> > >> here is the dmesg > >> Copyright (c) 1992-2012 The FreeBSD Project. > >> Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, > 1994 > >> The Regents of the University of California. All rights > >> reserved. > >> FreeBSD is a registered trademark of The FreeBSD Foundation. > >> FreeBSD 9.0-STABLE #0: Fri Feb 3 10:27:18 CET 2012 > >> root@filer01.neuteboom.local:/usr/obj/usr/src/sys/KRNL amd64 > >> CPU: Intel(R) Xeon(R) CPU E31220 @ 3.10GHz (3093.04-MHz K8-class CPU) > >> Origin =3D "GenuineIntel" Id =3D 0x206a7 Family =3D 6 Model =3D= 2a > >> Stepping =3D 7 > >> > >> > Features=3D0xbfebfbff >> ,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE> > >> > >> > Features2=3D0x15bae3ff >> SE3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,TSCDLT,XSAVE,AVX> > >> AMD Features=3D0x28100800 > >> AMD Features2=3D0x1 > >> TSC: P-state invariant, performance statistics > >> real memory =3D 17179869184 (16384 MB) > >> avail memory =3D 16493441024 (15729 MB) > >> Event timer "LAPIC" quality 600 > >> ACPI APIC Table: > >> FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs > >> FreeBSD/SMP: 1 package(s) x 4 core(s) > >> cpu0 (BSP): APIC ID: 0 > >> cpu1 (AP): APIC ID: 2 > >> cpu2 (AP): APIC ID: 4 > >> cpu3 (AP): APIC ID: 6 > >> ioapic0 irqs 0-23 on motherboard > >> kbd1 at kbdmux0 > >> acpi0: on motherboard > >> acpi0: Power Button (fixed) > >> Timecounter "ACPI-fast" frequency 3579545 Hz quality 900 > >> acpi_timer0:<24-bit timer at 3.579545MHz> port 0x408-0x40b on acpi0 > >> cpu0: on acpi0 > >> cpu1: on acpi0 > >> cpu2: on acpi0 > >> cpu3: on acpi0 > >> pcib0: port 0xcf8-0xcff on acpi0 > >> pci0: on pcib0 > >> pcib1: irq 19 at device 6.0 on pci0 > >> pci1: on pcib1 > >> mps0: port 0xe000-0xe0ff mem 0xfb600000-0xfb603fff irq > 19 > >> at device 0.0 on pci1 > >> mps0: Firmware: 11.00.00.00, Driver: 11.255.03.00-fbsd > >> mps0: IOCCapabilities: > >> > 1285c >> c> > >> em0: port 0xf020-0xf03f > mem > >> 0xfb800000-0xfb81ffff,0xfb824000-0xfb824fff irq 20 at device 25.0 on > >> pci0 > >> em0: Using an MSI interrupt > >> em0: Ethernet address: 00:25:90:57:20:bd > >> ehci0: mem 0xfb823000-0xfb8233ff > irq > >> 16 at device 26.0 on pci0 > >> usbus0: EHCI version 1.0 > >> usbus0: on ehci0 > >> pcib2: irq 17 at device 28.0 on pci0 > >> pci2: on pcib2 > >> pcib3: irq 17 at device 28.4 on pci0 > >> pci3: on pcib3 > >> em1: port 0xd000-0xd01f > mem > >> 0xfb700000-0xfb71ffff,0xfb720000-0xfb723fff irq 16 at device 0.0 on > pci3 > >> em1: Using MSIX interrupts with 3 vectors > >> em1: Ethernet address: 00:25:90:57:20:bc > >> ehci1: mem 0xfb822000-0xfb8223ff > irq > >> 23 at device 29.0 on pci0 > >> usbus1: EHCI version 1.0 > >> usbus1: on ehci1 > >> pcib4: at device 30.0 on pci0 > >> pci4: on pcib4 > >> vgapci0: mem > >> 0xf9000000-0xf9ffffff,0xfb000000-0xfb003fff,0xfa800000-0xfaffffff irq > 23 > >> at device 3.0 on pci4 > >> isab0: at device 31.0 on pci0 > >> isa0: on isab0 > >> ahci0: port > >> 0xf070-0xf077,0xf060-0xf063,0xf050-0xf057,0xf040-0xf043,0xf000-0xf01f > >> mem 0xfb821000-0xfb8217ff irq 19 at device 31.2 on pci0 > >> ahci0: AHCI v1.30 with 6 6Gbps ports, Port Multiplier not supported > >> ahcich0: at channel 0 on ahci0 > >> ahcich1: at channel 1 on ahci0 > >> ahcich2: at channel 2 on ahci0 > >> ahcich3: at channel 3 on ahci0 > >> ahcich4: at channel 4 on ahci0 > >> ahcich5: at channel 5 on ahci0 > >> pci0: at device 31.3 (no driver attached) > >> acpi_button0: on acpi0 > >> hpet0: iomem 0xfed00000-0xfed003ff on > acpi0 > >> ahcich0: at channel 0 on ahci0 > >> ahcich1: at channel 1 on ahci0 > >> ahcich2: at channel 2 on ahci0 > >> ahcich3: at channel 3 on ahci0 > >> ahcich4: at channel 4 on ahci0 > >> ahcich5: at channel 5 on ahci0 > >> pci0: at device 31.3 (no driver attached) > >> acpi_button0: on acpi0 > >> hpet0: iomem 0xfed00000-0xfed003ff on > acpi0 > >> Timecounter "HPET" frequency 14318180 Hz quality 950 > >> Event timer "HPET" frequency 14318180 Hz quality 550 > >> Event timer "HPET1" frequency 14318180 Hz quality 440 > >> Event timer "HPET2" frequency 14318180 Hz quality 440 > >> Event timer "HPET3" frequency 14318180 Hz quality 440 > >> Event timer "HPET4" frequency 14318180 Hz quality 440 > >> attimer0: port 0x40-0x43 irq 0 on acpi0 > >> Timecounter "i8254" frequency 1193182 Hz quality 0 > >> Event timer "i8254" frequency 1193182 Hz quality 100 > >> atrtc0: port 0x70-0x71 irq 8 on acpi0 > >> Event timer "RTC" frequency 32768 Hz quality 0 > >> atkbdc0: port 0x60,0x64 irq 1 on acpi0 > >> atkbd0: irq 1 on atkbdc0 > >> kbd0 at atkbd0 > >> atkbd0: [GIANT-LOCKED] > >> uart0:<16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on > acpi0 > >> uart1:<16550 or compatible> port 0x2f8-0x2ff irq 3 on acpi0 > >> uart2:<16550 or compatible> port 0x3e8-0x3ef irq 10 on acpi0 > >> orm0: at iomem 0xc0000-0xc7fff,0xc8000-0xcdfff on > isa0 > >> sc0: at flags 0x100 on isa0 > >> sc0: VGA<16 virtual consoles, flags=3D0x300> > >> vga0: at port 0x3c0-0x3df iomem 0xa0000-0xbffff on > >> isa0 > >> ppc0: cannot reserve I/O port range > >> est0: on cpu0 > >> p4tcc0: on cpu0 > >> est1: on cpu1 > >> p4tcc1: on cpu1 > >> est2: on cpu2 > >> p4tcc2: on cpu2 > >> est3: on cpu3 > >> p4tcc3: on cpu3 > >> ZFS filesystem version 5 > >> ZFS storage pool version 28 > >> Timecounters tick every 1.000 msec > >> usbus0: 480Mbps High Speed USB v2.0 > >> usbus1: 480Mbps High Speed USB v2.0 > >> ugen0.1: at usbus0 > >> uhub0: on > usbus0 > >> ugen1.1: at usbus1 > >> uhub1: on > usbus1 > >> da0 at mps0 bus 0 scbus0 target 8 lun 0 > >> da0: Fixed Direct Access SCSI-6 device > >> da0: 300.000MB/s transfers > >> da0: Command Queueing enabled > >> da0: 76319MB (156301488 512 byte sectors: 255H 63S/T 9729C) > >> da1 at mps0 bus 0 scbus0 target 9 lun 0 > >> da1: Fixed Direct Access SCSI-6 device > >> da1: 300.000MB/s transfers > >> da1: Command Queueing enabled > >> da1: 76319MB (156301488 512 byte sectors: 255H 63S/T 9729C) > >> da2 at mps0 bus 0 scbus0 target 10 lun 0 > >> da2: Fixed Direct Access SCSI-6 device > >> da2: 300.000MB/s transfers > >> da2: Command Queueing enabled > >> da2: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) > >> da3 at mps0 bus 0 scbus0 target 11 lun 0 > >> da3: Fixed Direct Access SCSI-6 device > >> da3: 300.000MB/s transfers > >> da3: Command Queueing enabled > >> da3: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) > >> da4 at mps0 bus 0 scbus0 target 12 lun 0 > >> da4: Fixed Direct Access SCSI-6 device > >> da4: 300.000MB/s transfers > >> da4: Command Queueing enabled > >> da4: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) > >> da5 at mps0 bus 0 scbus0 target 13 lun 0 > >> da5: Fixed Direct Access SCSI-6 device > >> da5: 150.000MB/s transfers > >> da5: Command Queueing enabled > >> da5: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) > >> da8 at mps0 bus 0 scbus0 target 19 lun 0 > >> da8: Fixed Direct Access SCSI-6 device > >> da8: 300.000MB/s transfers > >> da8: Command Queueing enabled > >> da8: 76319MB (156301488 512 byte sectors: 255H 63S/T 9729C) > >> da9 at mps0 bus 0 scbus0 target 20 lun 0 > >> da9: Fixed Direct Access SCSI-6 device > >> da9: 300.000MB/s transfers > >> da9: Command Queueing enabled > >> da9: 76319MB (156301488 512 byte sectors: 255H 63S/T 9729C) > >> da11 at mps0 bus 0 scbus0 target 22 lun 0 > >> da11: Fixed Direct Access SCSI-6 device > >> da11: 150.000MB/s transfers > >> da11: Command Queueing enabled > >> da11: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) > >> da12 at mps0 bus 0 scbus0 target 23 lun 0 > >> da12: Fixed Direct Access SCSI-6 device > >> da12: 150.000MB/s transfers > >> da12: Command Queueing enabled > >> da12: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) > >> da13 at mps0 bus 0 scbus0 target 24 lun 0 > >> da13: Fixed Direct Access SCSI-6 device > >> da13: 150.000MB/s transfers > >> da13: Command Queueing enabled > >> da13: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) > >> da14 at mps0 bus 0 scbus0 target 27 lun 0 > >> da14: Fixed Direct Access SCSI-6 device > >> da14: 300.000MB/s transfers > >> da14: Command Queueing enabled > >> da14: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) > >> da15 at mps0 bus 0 scbus0 target 28 lun 0 > >> da15: Fixed Direct Access SCSI-6 device > >> da15: 150.000MB/s transfers > >> da15: Command Queueing enabled > >> da15: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) > >> ses0 at mps0 bus 0 scbus0 target 16 lun 0 > >> ses0: Fixed Enclosure Services SCSI-5 device > >> ses0: 600.000MB/s transfers > >> ses0: Command Queueing enabled > >> ses0: SCSI-3 SES Device > >> ada0 at ahcich0 bus 0 scbus1 target 0 lun 0 > >> ada0: ATA-7 SATA 1.x device > >> ada0: 150.000MB/s transfers (SATA 1.x, UDMA5, PIO 8192bytes) > >> ada0: 76319MB (156301488 512 byte sectors: 16H 63S/T 16383C) > >> ada0: Previously was known as ad4 > >> cd0 at ahcich2 bus 0 scbus3 target 0 lun 0 > >> SMP: AP CPU #3 Launched! > >> cd0: Removable CD-ROM SCSI-0 device > >> cd0: 150.000MB/s transfers (SATA 1.x, UDMA5, ATAPI 12bytes, PIO > >> 8192bytes) > >> cd0: Attempt to query device size failed: NOT READY, Medium not > present > >> - tray closed > >> SMP: AP CPU #2 Launched! > >> SMP: AP CPU #1 Launched! > >> da6 at mps0 bus 0 scbus0 target 17 lun 0 > >> da6: Fixed Direct Access SCSI-6 device > >> da6: 150.000MB/s transfers > >> da6: Command Queueing enabled > >> da6: 76319MB (156301488 512 byte sectors: 255H 63S/T 9729C) > >> da7 at mps0 bus 0 scbus0 target 18 lun 0 > >> da7: Fixed Direct Access SCSI-6 device > >> da7: 150.000MB/s transfers > >> da7: Command Queueing enabled > >> da7: 76319MB (156301488 512 byte sectors: 255H 63S/T 9729C) > >> da10 at mps0 bus 0 scbus0 target 21 lun 0 > >> da10: Fixed Direct Access SCSI-6 device > >> da10: 300.000MB/s transfers > >> da10: Command Queueing enabled > >> da10: 238475MB (488397168 512 byte sectors: 255H 63S/T 30401C) > >> GEOM: da15s1: geometry does not match label (16h,63s !=3D 255h,63s). > >> uhub1: 2 ports with 2 removable, self powered > >> uhub0: 2 ports with 2 removable, self powered > >> Root mount waiting for: usbus1 usbus0 > >> ugen0.2: at usbus0 > >> uhub2: 2> > >> on usbus0 > >> ugen1.2: at usbus1 > >> uhub3: 2> > >> on usbus1 > >> Root mount waiting for: usbus1 usbus0 > >> uhub3: 6 ports with 6 removable, self powered > >> uhub2: 6 ports with 6 removable, self powered > >> ugen0.3: at usbus0 > >> ums0: >> rev 1.10/0.01, addr 3> on usbus0 > >> ums0: 3 buttons and [Z] coordinates ID=3D0 > >> ukbd0: 0/0, > >> rev 1.10/0.01, addr 3> on usbus0 > >> kbd2 at ukbd0 > >> Trying to mount root from ufs:/dev/ada0p2 [rw]... > >> em0: link state changed to UP > >> > >> thanks for your work. > >> > >> regards > >> Johan > >> > >> > >> > >> > >> _______________________________________________ > >> freebsd-stable@freebsd.org mailing list > >> http://lists.freebsd.org/mailman/listinfo/freebsd-stable > >> To unsubscribe, send any mail to "freebsd-stable- > >> unsubscribe@freebsd.org" > > Ok i will try the patch, no hurry, i am back at the office on monday... > regards > Johan --_002_B2FD678A64EAAD45B089B123FDFC3ED729A3414E2Einbmail01lsic_ Content-Type: application/octet-stream; name="rescan_upstream.patch" Content-Description: rescan_upstream.patch Content-Disposition: attachment; filename="rescan_upstream.patch"; size=31155; creation-date="Fri, 03 Feb 2012 15:14:34 GMT"; modification-date="Sat, 04 Feb 2012 00:19:15 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtYXVycCBGUkVFQlNELVNBUzItMTIuMDAuMDAuMDEvbXBzbHNpLXNvdXJjZS0xMi4wMC4w MC4wMS9zeXMvZGV2L21wcy9tcHMuYyBGUkVFQlNELVNBUzItMTIuMjU1LjAwLjAyL21wc2xzaS1z b3VyY2UtMTIuMjU1LjAwLjAyL3N5cy9kZXYvbXBzL21wcy5jCi0tLSBGUkVFQlNELVNBUzItMTIu MDAuMDAuMDEvbXBzbHNpLXNvdXJjZS0xMi4wMC4wMC4wMS9zeXMvZGV2L21wcy9tcHMuYwkyMDEy LTAxLTMwIDIwOjQ5OjA5LjAwMDAwMDAwMCArMDUzMAorKysgRlJFRUJTRC1TQVMyLTEyLjI1NS4w MC4wMi9tcHNsc2ktc291cmNlLTEyLjI1NS4wMC4wMi9zeXMvZGV2L21wcy9tcHMuYwkyMDEyLTAx LTE3IDA0OjMyOjE1LjAwMDAwMDAwMCArMDUzMApAQCAtNTI5LDcgKzUyOSw3IEBAIG1wc19lbnF1 ZXVlX3JlcXVlc3Qoc3RydWN0IG1wc19zb2Z0YyAqc2MKIAltcHNfZHByaW50KHNjLCBNUFNfVFJB Q0UsICIlcyBTTUlEICV1IGNtICVwIGNjYiAlcFxuIiwgX19mdW5jX18sCiAJICAgIGNtLT5jbV9k ZXNjLkRlZmF1bHQuU01JRCwgY20sIGNtLT5jbV9jY2IpOwogCi0JaWYgKHNjLT5tcHNfZmxhZ3Mg JiBNUFNfRkxBR1NfQVRUQUNIX0RPTkUpCisJaWYgKHNjLT5tcHNfZmxhZ3MgJiBNUFNfRkxBR1Nf QVRUQUNIX0RPTkUgJiYgIShzYy0+bXBzX2ZsYWdzICYgTVBTX0ZMQUdTX1NIVVRET1dOKSkKIAkJ bXR4X2Fzc2VydCgmc2MtPm1wc19tdHgsIE1BX09XTkVEKTsKIAogCWlmICgrK3NjLT5pb19jbWRz X2FjdGl2ZSA+IHNjLT5pb19jbWRzX2hpZ2h3YXRlcikKQEAgLTEzNDIsNiArMTM0Miw4IEBAIG1w c19mcmVlKHN0cnVjdCBtcHNfc29mdGMgKnNjKQogCSAgICAoKGVycm9yID0gbXBzX2RldGFjaF9z YXMoc2MpKSAhPSAwKSkKIAkJcmV0dXJuIChlcnJvcik7CiAKKwltcHNfZGV0YWNoX3VzZXIoc2Mp OworCiAJLyogUHV0IHRoZSBJT0MgYmFjayBpbiB0aGUgUkVBRFkgc3RhdGUuICovCiAJbXBzX2xv Y2soc2MpOwogCWlmICgoZXJyb3IgPSBtcHNfdHJhbnNpdGlvbl9yZWFkeShzYykpICE9IDApIHsK QEAgLTIxNDksNyArMjE1MSw3IEBAIG1wc193YWl0X2NvbW1hbmQoc3RydWN0IG1wc19zb2Z0YyAq c2MsIHMKIAllcnJvciA9IG1wc19tYXBfY29tbWFuZChzYywgY20pOwogCWlmICgoZXJyb3IgIT0g MCkgJiYgKGVycm9yICE9IEVJTlBST0dSRVNTKSkKIAkJcmV0dXJuIChlcnJvcik7Ci0JZXJyb3Ig PSBtc2xlZXAoY20sICZzYy0+bXBzX210eCwgMCwgIm1wc3dhaXQiLCB0aW1lb3V0KTsKKwllcnJv ciA9IG1zbGVlcChjbSwgJnNjLT5tcHNfbXR4LCAwLCAibXBzd2FpdCIsIHRpbWVvdXQqaHopOwog CWlmIChlcnJvciA9PSBFV09VTERCTE9DSykKIAkJZXJyb3IgPSBFVElNRURPVVQ7CiAJcmV0dXJu IChlcnJvcik7CmRpZmYgLWF1cnAgRlJFRUJTRC1TQVMyLTEyLjAwLjAwLjAxL21wc2xzaS1zb3Vy Y2UtMTIuMDAuMDAuMDEvc3lzL2Rldi9tcHMvbXBzX3Nhcy5jIEZSRUVCU0QtU0FTMi0xMi4yNTUu MDAuMDIvbXBzbHNpLXNvdXJjZS0xMi4yNTUuMDAuMDIvc3lzL2Rldi9tcHMvbXBzX3Nhcy5jCi0t LSBGUkVFQlNELVNBUzItMTIuMDAuMDAuMDEvbXBzbHNpLXNvdXJjZS0xMi4wMC4wMC4wMS9zeXMv ZGV2L21wcy9tcHNfc2FzLmMJMjAxMi0wMS0zMCAyMDo0OTowOS4wMDAwMDAwMDAgKzA1MzAKKysr IEZSRUVCU0QtU0FTMi0xMi4yNTUuMDAuMDIvbXBzbHNpLXNvdXJjZS0xMi4yNTUuMDAuMDIvc3lz L2Rldi9tcHMvbXBzX3Nhcy5jCTIwMTItMDEtMTcgMDQ6MzI6MTUuMDAwMDAwMDAwICswNTMwCkBA IC0xMzgsNyArMTM4LDYgQEAgc3RhdGljIHVpbnQ4X3Qgb3BfY29kZV9wcm90WzI1Nl0gPSB7CiAK IE1BTExPQ19ERUZJTkUoTV9NUFNTQVMsICJNUFNTQVMiLCAiTVBTIFNBUyBtZW1vcnkiKTsKIAot c3RhdGljIHN0cnVjdCBtcHNzYXNfdGFyZ2V0ICogbXBzc2FzX2ZpbmRfdGFyZ2V0X2J5X2hhbmRs ZShzdHJ1Y3QgbXBzc2FzX3NvZnRjICosIGludCwgdWludDE2X3QpOwogc3RhdGljIHZvaWQgbXBz c2FzX2Rpc2NvdmVyeV90aW1lb3V0KHZvaWQgKmRhdGEpOwogc3RhdGljIHZvaWQgbXBzc2FzX3Jl bW92ZV9kZXZpY2Uoc3RydWN0IG1wc19zb2Z0YyAqLCBzdHJ1Y3QgbXBzX2NvbW1hbmQgKik7CiBz dGF0aWMgdm9pZCBtcHNzYXNfcmVtb3ZlX2NvbXBsZXRlKHN0cnVjdCBtcHNfc29mdGMgKiwgc3Ry dWN0IG1wc19jb21tYW5kICopOwpAQCAtMTY5LDcgKzE2OCw3IEBAIHN0YXRpYyBpbnQgbXBzc2Fz X3NlbmRfcG9ydGVuYWJsZShzdHJ1Y3QKIHN0YXRpYyB2b2lkIG1wc3Nhc19wb3J0ZW5hYmxlX2Nv bXBsZXRlKHN0cnVjdCBtcHNfc29mdGMgKnNjLAogICAgIHN0cnVjdCBtcHNfY29tbWFuZCAqY20p OwogCi1zdGF0aWMgc3RydWN0IG1wc3Nhc190YXJnZXQgKgorc3RydWN0IG1wc3Nhc190YXJnZXQg KgogbXBzc2FzX2ZpbmRfdGFyZ2V0X2J5X2hhbmRsZShzdHJ1Y3QgbXBzc2FzX3NvZnRjICpzYXNz YywgaW50IHN0YXJ0LCB1aW50MTZfdCBoYW5kbGUpCiB7CiAJc3RydWN0IG1wc3Nhc190YXJnZXQg KnRhcmdldDsKQEAgLTM0MiwyMiArMzQxLDEyMyBAQCBzdGF0aWMgdm9pZCBtcHNzYXNfbG9nX2Nv bW1hbmQoc3RydWN0IG1wCiAJdmFfZW5kKGFwKTsKIH0KIAorCiBzdGF0aWMgdm9pZAotbXBzc2Fz X2xvc3RfdGFyZ2V0KHN0cnVjdCBtcHNfc29mdGMgKnNjLCBzdHJ1Y3QgbXBzc2FzX3RhcmdldCAq dGFyZykKK21wc3Nhc19yZW1vdmVfdm9sdW1lKHN0cnVjdCBtcHNfc29mdGMgKnNjLCBzdHJ1Y3Qg bXBzX2NvbW1hbmQgKnRtKQogewotCXN0cnVjdCBtcHNzYXNfc29mdGMgKnNhc3NjID0gc2MtPnNh c3NjOwotCXBhdGhfaWRfdCBwYXRoaWQgPSBjYW1fc2ltX3BhdGgoc2Fzc2MtPnNpbSk7Ci0Jc3Ry dWN0IGNhbV9wYXRoICpwYXRoOworCU1QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWSAqcmVwbHk7 CisJc3RydWN0IG1wc3Nhc190YXJnZXQgKnRhcmc7CisJdWludDE2X3QgaGFuZGxlOworCisJbXBz X2RwcmludChzYywgTVBTX0lORk8sICIlc1xuIiwgX19mdW5jX18pOworCisJcmVwbHkgPSAoTVBJ Ml9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZICopdG0tPmNtX3JlcGx5OworCWhhbmRsZSA9ICh1aW50 MTZfdCkodWludHB0cl90KXRtLT5jbV9jb21wbGV0ZV9kYXRhOworCXRhcmcgPSB0bS0+Y21fdGFy ZzsKIAotCW1wc19wcmludGYoc2MsICIlcyB0YXJnZXRpZCAldVxuIiwgX19mdW5jX18sIHRhcmct PnRpZCk7Ci0JaWYgKHhwdF9jcmVhdGVfcGF0aCgmcGF0aCwgTlVMTCwgcGF0aGlkLCB0YXJnLT50 aWQsIDApICE9IENBTV9SRVFfQ01QKSB7Ci0JCW1wc19wcmludGYoc2MsICJ1bmFibGUgdG8gY3Jl YXRlIHBhdGggZm9yIGxvc3QgdGFyZ2V0ICVkXG4iLCAKLQkJICAgIHRhcmctPnRpZCk7CisJaWYg KHJlcGx5ID09IE5VTEwpIHsKKwkJLyogWFhYIHJldHJ5IHRoZSByZW1vdmUgYWZ0ZXIgdGhlIGRp YWcgcmVzZXQgY29tcGxldGVzPyAqLworCQltcHNfcHJpbnRmKHNjLCAiJXMgTlVMTCByZXBseSBy ZXNldGluZyBkZXZpY2UgMHglMDR4XG4iLCAKKwkJICAgIF9fZnVuY19fLCBoYW5kbGUpOworCQlt cHNzYXNfZnJlZV90bShzYywgdG0pOwogCQlyZXR1cm47CiAJfQogCi0JeHB0X2FzeW5jKEFDX0xP U1RfREVWSUNFLCBwYXRoLCBOVUxMKTsKLQl4cHRfZnJlZV9wYXRoKHBhdGgpOworCWlmIChyZXBs eS0+SU9DU3RhdHVzICE9IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKKwkJbXBzX3ByaW50Zihz YywgIklPQ1N0YXR1cyA9IDB4JXggd2hpbGUgcmVzZXR0aW5nIGRldmljZSAweCV4XG4iLAorCQkg ICByZXBseS0+SU9DU3RhdHVzLCBoYW5kbGUpOworCQltcHNzYXNfZnJlZV90bShzYywgdG0pOwor CQlyZXR1cm47CisJfQorCisJbXBzX3ByaW50ZihzYywgIlJlc2V0IGFib3J0ZWQgJXUgY29tbWFu ZHNcbiIsIHJlcGx5LT5UZXJtaW5hdGlvbkNvdW50KTsKKwltcHNfZnJlZV9yZXBseShzYywgdG0t PmNtX3JlcGx5X2RhdGEpOworCXRtLT5jbV9yZXBseSA9IE5VTEw7CS8qIEVuc3VyZXMgdGhlIHRo ZSByZXBseSB3b24ndCBnZXQgcmUtZnJlZWQgKi8KKworCW1wc19wcmludGYoc2MsICJjbGVhcmlu ZyB0YXJnZXQgJXUgaGFuZGxlIDB4JTA0eFxuIiwgdGFyZy0+dGlkLCBoYW5kbGUpOworCQorCS8q CisJICogRG9uJ3QgY2xlYXIgdGFyZ2V0IGlmIHJlbW92ZSBmYWlscyBiZWNhdXNlIHRoaW5ncyB3 aWxsIGdldCBjb25mdXNpbmcuCisJICogTGVhdmUgdGhlIGRldm5hbWUgYW5kIHNhc2FkZHIgaW50 YWN0IHNvIHRoYXQgd2Uga25vdyB0byBhdm9pZCByZXVzaW5nCisJICogdGhpcyB0YXJnZXQgaWQg aWYgcG9zc2libGUsIGFuZCBzbyB3ZSBjYW4gYXNzaWduIHRoZSBzYW1lIHRhcmdldCBpZAorCSAq IHRvIHRoaXMgZGV2aWNlIGlmIGl0IGNvbWVzIGJhY2sgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwlp ZiAocmVwbHktPklPQ1N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCXRhcmcg PSB0bS0+Y21fdGFyZzsKKwkJdGFyZy0+aGFuZGxlID0gMHgwOworCQl0YXJnLT5lbmNsX2hhbmRs ZSA9IDB4MDsKKwkJdGFyZy0+ZW5jbF9zbG90ID0gMHgwOworCQl0YXJnLT5leHBfZGV2X2hhbmRs ZSA9IDB4MDsKKwkJdGFyZy0+cGh5X251bSA9IDB4MDsKKwkJdGFyZy0+bGlua3JhdGUgPSAweDA7 CisJCXRhcmctPmRldmluZm8gPSAweDA7CisJCXRhcmctPmZsYWdzID0gMHgwOworCX0KKworCW1w c3Nhc19mcmVlX3RtKHNjLCB0bSk7Cit9CisKKworLyoKKyAqIE5vIE5lZWQgdG8gY2FsbCAiTVBJ Ml9TQVNfT1BfUkVNT1ZFX0RFVklDRSIgRm9yIFZvbHVtZSByZW1vdmFsLgorICogT3RoZXJ3aXNl IFZvbHVtZSBEZWxldGUgaXMgc2FtZSBhcyBCYXJlIERyaXZlIFJlbW92YWwuCisgKi8KK3ZvaWQK K21wc3Nhc19wcmVwYXJlX3ZvbHVtZV9yZW1vdmUoc3RydWN0IG1wc3Nhc19zb2Z0YyAqc2Fzc2Ms IHVpbnQxNl90IGhhbmRsZSkKK3sKKwlNUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVRVUVTVCAqcmVx OworCXN0cnVjdCBtcHNfc29mdGMgKnNjOworCXN0cnVjdCBtcHNfY29tbWFuZCAqY207CisJc3Ry dWN0IG1wc3Nhc190YXJnZXQgKnRhcmcgPSBOVUxMOworCisJbXBzX2RwcmludChzYXNzYy0+c2Ms IE1QU19JTkZPLCAiJXNcbiIsIF9fZnVuY19fKTsKKwlzYyA9IHNhc3NjLT5zYzsKKworI2lmZGVm IFdEX1NVUFBPUlQKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBXRCBjb250cm9sbGVyLCBkZXRlcm1p bmUgaWYgdGhlIGRpc2sgc2hvdWxkIGJlIGV4cG9zZWQKKwkgKiB0byB0aGUgT1Mgb3Igbm90LiAg SWYgZGlzayBzaG91bGQgYmUgZXhwb3NlZCwgcmV0dXJuIGZyb20gdGhpcworCSAqIGZ1bmN0aW9u IHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuCisJICovCisJaWYgKHNjLT5XRF9hdmFpbGFibGUgJiYg KHNjLT5XRF9oaWRlX2V4cG9zZSA9PQorCSAgICBNUFNfV0RfRVhQT1NFX0FMV0FZUykpIHsKKwkJ cmV0dXJuOworCX0KKyNlbmRpZiAvL1dEX1NVUFBPUlQKKworCXRhcmcgPSBtcHNzYXNfZmluZF90 YXJnZXRfYnlfaGFuZGxlKHNhc3NjLCAwLCBoYW5kbGUpOworCWlmICh0YXJnID09IE5VTEwpIHsK KwkJLyogRklYTUU6IHdoYXQgaXMgdGhlIGFjdGlvbj8gKi8KKwkJLyogV2UgZG9uJ3Qga25vdyBh Ym91dCB0aGlzIGRldmljZT8gKi8KKwkJcHJpbnRmKCIlcyAlZCA6IGludmFsaWQgaGFuZGxlIDB4 JXggXG4iLCBfX2Z1bmNfXyxfX0xJTkVfXywgaGFuZGxlKTsKKwkJcmV0dXJuOworCX0KKworCXRh cmctPmZsYWdzIHw9IE1QU1NBU19UQVJHRVRfSU5SRU1PVkFMOworCisJY20gPSBtcHNzYXNfYWxs b2NfdG0oc2MpOworCWlmIChjbSA9PSBOVUxMKSB7CisJCW1wc19wcmludGYoc2MsICIlczogY29t bWFuZCBhbGxvYyBmYWlsdXJlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwltcHNz YXNfcmVzY2FuX3RhcmdldChzYywgdGFyZyk7CisKKwlyZXEgPSAoTVBJMl9TQ1NJX1RBU0tfTUFO QUdFX1JFUVVFU1QgKiljbS0+Y21fcmVxOworCXJlcS0+RGV2SGFuZGxlID0gdGFyZy0+aGFuZGxl OworCXJlcS0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UOworCXJlcS0+ VGFza1R5cGUgPSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9UQVJHRVRfUkVTRVQ7CisKKwkv KiBTQVMgSGFyZCBMaW5rIFJlc2V0IC8gU0FUQSBMaW5rIFJlc2V0ICovCisJcmVxLT5Nc2dGbGFn cyA9IE1QSTJfU0NTSVRBU0tNR01UX01TR0ZMQUdTX0xJTktfUkVTRVQ7CisKKwljbS0+Y21fdGFy ZyA9IHRhcmc7CisJY20tPmNtX2RhdGEgPSBOVUxMOworCWNtLT5jbV9kZXNjLkhpZ2hQcmlvcml0 eS5SZXF1ZXN0RmxhZ3MgPQorCSAgICBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ISUdIX1BSSU9S SVRZOworCWNtLT5jbV9jb21wbGV0ZSA9IG1wc3Nhc19yZW1vdmVfdm9sdW1lOworCWNtLT5jbV9j b21wbGV0ZV9kYXRhID0gKHZvaWQgKikodWludHB0cl90KWhhbmRsZTsKKwltcHNfbWFwX2NvbW1h bmQoc2MsIGNtKTsKIH0KIAogLyoKQEAgLTM3Nyw3ICs0NzcsNyBAQCBtcHNzYXNfcHJlcGFyZV9y ZW1vdmUoc3RydWN0IG1wc3Nhc19zb2Z0CiAJc3RydWN0IG1wc19jb21tYW5kICpjbTsKIAlzdHJ1 Y3QgbXBzc2FzX3RhcmdldCAqdGFyZyA9IE5VTEw7CiAKLQltcHNfZHByaW50KHNhc3NjLT5zYywg TVBTX1RSQUNFLCAiJXNcbiIsIF9fZnVuY19fKTsKKwltcHNfZHByaW50KHNhc3NjLT5zYywgTVBT X0lORk8sICIlc1xuIiwgX19mdW5jX18pOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgV0QgY29u dHJvbGxlciwgZGV0ZXJtaW5lIGlmIHRoZSBkaXNrIHNob3VsZCBiZSBleHBvc2VkCkBAIC0zOTQs NyArNDk0LDcgQEAgbXBzc2FzX3ByZXBhcmVfcmVtb3ZlKHN0cnVjdCBtcHNzYXNfc29mdAogCWlm ICh0YXJnID09IE5VTEwpIHsKIAkJLyogRklYTUU6IHdoYXQgaXMgdGhlIGFjdGlvbj8gKi8KIAkJ LyogV2UgZG9uJ3Qga25vdyBhYm91dCB0aGlzIGRldmljZT8gKi8KLQkJcHJpbnRmKCIlczogaW52 YWxpZCBoYW5kbGUgMHgleCBcbiIsIF9fZnVuY19fLCBoYW5kbGUpOworCQlwcmludGYoIiVzICVk IDogaW52YWxpZCBoYW5kbGUgMHgleCBcbiIsIF9fZnVuY19fLF9fTElORV9fLCBoYW5kbGUpOwog CQlyZXR1cm47CiAJfQogCkBAIC00MDYsNyArNTA2LDcgQEAgbXBzc2FzX3ByZXBhcmVfcmVtb3Zl KHN0cnVjdCBtcHNzYXNfc29mdAogCQlyZXR1cm47CiAJfQogCi0JbXBzc2FzX2xvc3RfdGFyZ2V0 KHNjLCB0YXJnKTsKKwltcHNzYXNfcmVzY2FuX3RhcmdldChzYywgdGFyZyk7CiAKIAlyZXEgPSAo TVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUVVFU1QgKiljbS0+Y21fcmVxOwogCW1lbXNldChyZXEs IDAsIHNpemVvZigqcmVxKSk7CkBAIC00MzQsNyArNTM0LDcgQEAgbXBzc2FzX3JlbW92ZV9kZXZp Y2Uoc3RydWN0IG1wc19zb2Z0YyAqcwogCXN0cnVjdCBtcHNfY29tbWFuZCAqbmV4dF9jbTsKIAl1 aW50MTZfdCBoYW5kbGU7CiAKLQltcHNfZHByaW50KHNjLCBNUFNfVFJBQ0UsICIlc1xuIiwgX19m dW5jX18pOworCW1wc19kcHJpbnQoc2MsIE1QU19JTkZPLCAiJXNcbiIsIF9fZnVuY19fKTsKIAog CXJlcGx5ID0gKE1QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWSAqKXRtLT5jbV9yZXBseTsKIAlo YW5kbGUgPSAodWludDE2X3QpKHVpbnRwdHJfdCl0bS0+Y21fY29tcGxldGVfZGF0YTsKQEAgLTUw NSw3ICs2MDUsNyBAQCBtcHNzYXNfcmVtb3ZlX2NvbXBsZXRlKHN0cnVjdCBtcHNfc29mdGMgCiAJ dWludDE2X3QgaGFuZGxlOwogCXN0cnVjdCBtcHNzYXNfdGFyZ2V0ICp0YXJnOwogCi0JbXBzX2Rw cmludChzYywgTVBTX1RSQUNFLCAiJXNcbiIsIF9fZnVuY19fKTsKKwltcHNfZHByaW50KHNjLCBN UFNfSU5GTywgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXBseSA9IChNUEkyX1NBU19JT1VOSVRf Q09OVFJPTF9SRVBMWSAqKXRtLT5jbV9yZXBseTsKIAloYW5kbGUgPSAodWludDE2X3QpKHVpbnRw dHJfdCl0bS0+Y21fY29tcGxldGVfZGF0YTsKQEAgLTU0OSw2ICs2NDksNyBAQCBtcHNzYXNfcmVt b3ZlX2NvbXBsZXRlKHN0cnVjdCBtcHNfc29mdGMgCiAJCXRhcmctPnBoeV9udW0gPSAweDA7CiAJ CXRhcmctPmxpbmtyYXRlID0gMHgwOwogCQl0YXJnLT5kZXZpbmZvID0gMHgwOworCQl0YXJnLT5m bGFncyA9IDB4MDsKIAl9CiAKIAltcHNzYXNfZnJlZV90bShzYywgdG0pOwpAQCAtNjcwLDcgKzc3 MSw3IEBAIG1wc19kZXRhY2hfc2FzKHN0cnVjdCBtcHNfc29mdGMgKnNjKQogewogCXN0cnVjdCBt cHNzYXNfc29mdGMgKnNhc3NjOwogCi0JbXBzX2RwcmludChzYywgTVBTX1RSQUNFLCAiJXNcbiIs IF9fZnVuY19fKTsKKwltcHNfZHByaW50KHNjLCBNUFNfSU5GTywgIiVzXG4iLCBfX2Z1bmNfXyk7 CiAKIAlpZiAoc2MtPnNhc3NjID09IE5VTEwpCiAJCXJldHVybiAoMCk7CkBAIC03MDYsNiArODA3 LDcgQEAgbXBzX2RldGFjaF9zYXMoc3RydWN0IG1wc19zb2Z0YyAqc2MpCiAJfQogCW1wc191bmxv Y2soc2MpOwogCisJbXBzX2RwcmludChzYywgTVBTX0lORk8sICIlczolZFxuIiwgX19mdW5jX18s X19MSU5FX18pOwogCWlmIChzYXNzYy0+ZGV2cSAhPSBOVUxMKQogCQljYW1fc2ltcV9mcmVlKHNh c3NjLT5kZXZxKTsKIApAQCAtMTQ0MiwxMSArMTU0NCwxMSBAQCBtcHNzYXNfYWN0aW9uX3Njc2lp byhzdHJ1Y3QgbXBzc2FzX3NvZnRjCiAJdWludDE2X3QgZWVkcF9mbGFnczsKIAogCXNjID0gc2Fz c2MtPnNjOwotCW1wc19kcHJpbnQoc2MsIE1QU19UUkFDRSwgIiVzIGNjYiAlcFxuIiwgX19mdW5j X18sIGNjYik7CiAJbXR4X2Fzc2VydCgmc2MtPm1wc19tdHgsIE1BX09XTkVEKTsKIAogCWNzaW8g PSAmY2NiLT5jc2lvOwogCXRhcmcgPSAmc2Fzc2MtPnRhcmdldHNbY3Npby0+Y2NiX2gudGFyZ2V0 X2lkXTsKKwltcHNfZHByaW50KHNjLCBNUFNfVFJBQ0UsICIlcyBjY2IgJXAgdGFyZ2V0IGZsYWcg JXhcbiIsIF9fZnVuY19fLCBjY2IsIHRhcmctPmZsYWdzKTsKIAlpZiAodGFyZy0+aGFuZGxlID09 IDB4MCkgewogCQltcHNfZHByaW50KHNjLCBNUFNfVFJBQ0UsICIlcyBOVUxMIGhhbmRsZSBmb3Ig dGFyZ2V0ICV1XG4iLCAKIAkJICAgIF9fZnVuY19fLCBjc2lvLT5jY2JfaC50YXJnZXRfaWQpOwpA QCAtMTQ1NCw2ICsxNTU2LDEzIEBAIG1wc3Nhc19hY3Rpb25fc2NzaWlvKHN0cnVjdCBtcHNzYXNf c29mdGMKIAkJeHB0X2RvbmUoY2NiKTsKIAkJcmV0dXJuOwogCX0KKwlpZiAodGFyZy0+ZmxhZ3Mg JiBNUFNfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UKSB7CisJCW1wc19kcHJpbnQoc2MsIE1Q U19UUkFDRSwgIiVzIFJhaWQgY29tcG9uZW50IG5vIFNDU0kgSU8gc3VwcG9ydGVkICV1XG4iLCAK KwkJICAgIF9fZnVuY19fLCBjc2lvLT5jY2JfaC50YXJnZXRfaWQpOworCQljc2lvLT5jY2JfaC5z dGF0dXMgPSBDQU1fVElEX0lOVkFMSUQ7CisJCXhwdF9kb25lKGNjYik7CisJCXJldHVybjsKKwl9 CiAJLyoKIAkgKiBJZiBkZXZpbmZvIGlzIDAgdGhpcyB3aWxsIGJlIGEgdm9sdW1lLiAgSW4gdGhh dCBjYXNlIGRvbid0IHRlbGwgQ0FNCiAJICogdGhhdCB0aGUgdm9sdW1lIGhhcyB0aW1lZCBvdXQu ICBXZSB3YW50IHZvbHVtZXMgdG8gYmUgZW51bWVyYXRlZApAQCAtMTY1MSw2ICsxNzYwLDE5OCBA QCBtcHNzYXNfYWN0aW9uX3Njc2lpbyhzdHJ1Y3QgbXBzc2FzX3NvZnRjCiB9CiAKIHN0YXRpYyB2 b2lkCittcHNfcmVzcG9uc2VfY29kZShzdHJ1Y3QgbXBzX3NvZnRjICpzYywgdTggcmVzcG9uc2Vf Y29kZSkKK3sKKyAgICAgICAgY2hhciAqZGVzYzsKKyAKKyAgICAgICAgc3dpdGNoIChyZXNwb25z ZV9jb2RlKSB7CisgICAgICAgIGNhc2UgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX0NPTVBMRVRF OgorICAgICAgICAgICAgICAgIGRlc2MgPSAidGFzayBtYW5hZ2VtZW50IHJlcXVlc3QgY29tcGxl dGVkIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNUEkyX1NDU0lUQVNL TUdNVF9SU1BfSU5WQUxJRF9GUkFNRToKKyAgICAgICAgICAgICAgICBkZXNjID0gImludmFsaWQg ZnJhbWUiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1QSTJfU0NTSVRB U0tNR01UX1JTUF9UTV9OT1RfU1VQUE9SVEVEOgorICAgICAgICAgICAgICAgIGRlc2MgPSAidGFz ayBtYW5hZ2VtZW50IHJlcXVlc3Qgbm90IHN1cHBvcnRlZCI7CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGNhc2UgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX0ZBSUxFRDoKKyAgICAg ICAgICAgICAgICBkZXNjID0gInRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IGZhaWxlZCI7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RN X1NVQ0NFRURFRDoKKyAgICAgICAgICAgICAgICBkZXNjID0gInRhc2sgbWFuYWdlbWVudCByZXF1 ZXN0IHN1Y2NlZWRlZCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVBJ Ml9TQ1NJVEFTS01HTVRfUlNQX1RNX0lOVkFMSURfTFVOOgorICAgICAgICAgICAgICAgIGRlc2Mg PSAiaW52YWxpZCBsdW4iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4 QToKKyAgICAgICAgICAgICAgICBkZXNjID0gIm92ZXJsYXBwZWQgdGFnIGF0dGVtcHRlZCI7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVBJMl9TQ1NJVEFTS01HTVRfUlNQ X0lPX1FVRVVFRF9PTl9JT0M6CisgICAgICAgICAgICAgICAgZGVzYyA9ICJ0YXNrIHF1ZXVlZCwg aG93ZXZlciBub3Qgc2VudCB0byB0YXJnZXQiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGRlc2MgPSAidW5rbm93biI7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwkJbXBzX2RwcmludChzYywgTVBTX0lORk8sICJy ZXNwb25zZV9jb2RlKDB4JTAxeCk6ICVzXG4iLAorICAgICAgICAgICAgICAgIHJlc3BvbnNlX2Nv ZGUsIGRlc2MpOworfQorLyoqCisgKiBtcHNfc2NfZmFpbGVkX2lvX2luZm8gLSB0cmFuc2xhdGVk IG5vbi1zdWNjZXNmdWxsIFNDU0lfSU8gcmVxdWVzdAorICovCitzdGF0aWMgdm9pZAorbXBzX3Nj X2ZhaWxlZF9pb19pbmZvKHN0cnVjdCBtcHNfc29mdGMgKnNjLCBzdHJ1Y3QgY2NiX3Njc2lpbyAq Y3NpbywKKyAgICBNcGkyU0NTSUlPUmVwbHlfdCAqbXBpX3JlcGx5KQoreworCXUzMiByZXNwb25z ZV9pbmZvOworCXU4ICpyZXNwb25zZV9ieXRlczsKKwl1MTYgaW9jX3N0YXR1cyA9IGxlMTZ0b2go bXBpX3JlcGx5LT5JT0NTdGF0dXMpICYKKwkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwl1OCBz Y3NpX3N0YXRlID0gbXBpX3JlcGx5LT5TQ1NJU3RhdGU7CisJdTggc2NzaV9zdGF0dXMgPSBtcGlf cmVwbHktPlNDU0lTdGF0dXM7CisJY2hhciAqZGVzY19pb2Nfc3RhdGUgPSBOVUxMOworCWNoYXIg KmRlc2Nfc2NzaV9zdGF0dXMgPSBOVUxMOworCWNoYXIgKmRlc2Nfc2NzaV9zdGF0ZSA9IHNjLT50 bXBfc3RyaW5nOworCXUzMiBsb2dfaW5mbyA9IGxlMzJ0b2gobXBpX3JlcGx5LT5JT0NMb2dJbmZv KTsKKwkKKwlpZiAobG9nX2luZm8gPT0gMHgzMTE3MDAwMCkKKwkJcmV0dXJuOworCisJc3dpdGNo IChpb2Nfc3RhdHVzKSB7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTOgorCQlkZXNjX2lv Y19zdGF0ZSA9ICJzdWNjZXNzIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19JTlZB TElEX0ZVTkNUSU9OOgorCQlkZXNjX2lvY19zdGF0ZSA9ICJpbnZhbGlkIGZ1bmN0aW9uIjsKKwkJ YnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX1JFQ09WRVJFRF9FUlJPUjoKKwkJZGVz Y19pb2Nfc3RhdGUgPSAic2NzaSByZWNvdmVyZWQgZXJyb3IiOworCQlicmVhazsKKwljYXNlIE1Q STJfSU9DU1RBVFVTX1NDU0lfSU5WQUxJRF9ERVZIQU5ETEU6CisJCWRlc2NfaW9jX3N0YXRlID0g InNjc2kgaW52YWxpZCBkZXYgaGFuZGxlIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX0lPQ1NUQVRV U19TQ1NJX0RFVklDRV9OT1RfVEhFUkU6CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgZGV2aWNl IG5vdCB0aGVyZSI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9EQVRBX09W RVJSVU46CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgZGF0YSBvdmVycnVuIjsKKwkJYnJlYWs7 CisJY2FzZSBNUEkyX0lPQ1NUQVRVU19TQ1NJX0RBVEFfVU5ERVJSVU46CisJCWRlc2NfaW9jX3N0 YXRlID0gInNjc2kgZGF0YSB1bmRlcnJ1biI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFU VVNfU0NTSV9JT19EQVRBX0VSUk9SOgorCQlkZXNjX2lvY19zdGF0ZSA9ICJzY3NpIGlvIGRhdGEg ZXJyb3IiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfUFJPVE9DT0xfRVJS T1I6CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgcHJvdG9jb2wgZXJyb3IiOworCQlicmVhazsK KwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfVEFTS19URVJNSU5BVEVEOgorCQlkZXNjX2lvY19z dGF0ZSA9ICJzY3NpIHRhc2sgdGVybWluYXRlZCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NT VEFUVVNfU0NTSV9SRVNJRFVBTF9NSVNNQVRDSDoKKwkJZGVzY19pb2Nfc3RhdGUgPSAic2NzaSBy ZXNpZHVhbCBtaXNtYXRjaCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9JT0NTVEFUVVNfU0NTSV9U QVNLX01HTVRfRkFJTEVEOgorCQlkZXNjX2lvY19zdGF0ZSA9ICJzY3NpIHRhc2sgbWdtdCBmYWls ZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfSU9DX1RFUk1JTkFURUQ6 CisJCWRlc2NfaW9jX3N0YXRlID0gInNjc2kgaW9jIHRlcm1pbmF0ZWQiOworCQlicmVhazsKKwlj YXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfRVhUX1RFUk1JTkFURUQ6CisJCWRlc2NfaW9jX3N0YXRl ID0gInNjc2kgZXh0IHRlcm1pbmF0ZWQiOworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVT X0VFRFBfR1VBUkRfRVJST1I6CisJCWRlc2NfaW9jX3N0YXRlID0gImVlZHAgZ3VhcmQgZXJyb3Ii OworCQlicmVhazsKKwljYXNlIE1QSTJfSU9DU1RBVFVTX0VFRFBfUkVGX1RBR19FUlJPUjoKKwkJ ZGVzY19pb2Nfc3RhdGUgPSAiZWVkcCByZWYgdGFnIGVycm9yIjsKKwkJYnJlYWs7CisJY2FzZSBN UEkyX0lPQ1NUQVRVU19FRURQX0FQUF9UQUdfRVJST1I6CisJCWRlc2NfaW9jX3N0YXRlID0gImVl ZHAgYXBwIHRhZyBlcnJvciI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRlc2NfaW9jX3N0YXRl ID0gInVua25vd24iOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHNjc2lfc3RhdHVzKSB7CisJ Y2FzZSBNUEkyX1NDU0lfU1RBVFVTX0dPT0Q6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAiZ29vZCI7 CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19DSEVDS19DT05ESVRJT046CisJCWRl c2Nfc2NzaV9zdGF0dXMgPSAiY2hlY2sgY29uZGl0aW9uIjsKKwkJYnJlYWs7CisJY2FzZSBNUEky X1NDU0lfU1RBVFVTX0NPTkRJVElPTl9NRVQ6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAiY29uZGl0 aW9uIG1ldCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19CVVNZOgorCQlkZXNj X3Njc2lfc3RhdHVzID0gImJ1c3kiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSV9TVEFUVVNf SU5URVJNRURJQVRFOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gImludGVybWVkaWF0ZSI7CisJCWJy ZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NUQVRVU19JTlRFUk1FRElBVEVfQ09ORE1FVDoKKwkJZGVz Y19zY3NpX3N0YXR1cyA9ICJpbnRlcm1lZGlhdGUgY29uZG1ldCI7CisJCWJyZWFrOworCWNhc2Ug TVBJMl9TQ1NJX1NUQVRVU19SRVNFUlZBVElPTl9DT05GTElDVDoKKwkJZGVzY19zY3NpX3N0YXR1 cyA9ICJyZXNlcnZhdGlvbiBjb25mbGljdCI7CisJCWJyZWFrOworCWNhc2UgTVBJMl9TQ1NJX1NU QVRVU19DT01NQU5EX1RFUk1JTkFURUQ6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAiY29tbWFuZCB0 ZXJtaW5hdGVkIjsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1NDU0lfU1RBVFVTX1RBU0tfU0VUX0ZV TEw6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAidGFzayBzZXQgZnVsbCI7CisJCWJyZWFrOworCWNh c2UgTVBJMl9TQ1NJX1NUQVRVU19BQ0FfQUNUSVZFOgorCQlkZXNjX3Njc2lfc3RhdHVzID0gImFj YSBhY3RpdmUiOworCQlicmVhazsKKwljYXNlIE1QSTJfU0NTSV9TVEFUVVNfVEFTS19BQk9SVEVE OgorCQlkZXNjX3Njc2lfc3RhdHVzID0gInRhc2sgYWJvcnRlZCI7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCWRlc2Nfc2NzaV9zdGF0dXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKworCWRl c2Nfc2NzaV9zdGF0ZVswXSA9ICdcMCc7CisJaWYgKCFzY3NpX3N0YXRlKQorCQlkZXNjX3Njc2lf c3RhdGUgPSAiICI7CisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfUkVTUE9OU0Vf SU5GT19WQUxJRCkKKwkJc3RyY2F0KGRlc2Nfc2NzaV9zdGF0ZSwgInJlc3BvbnNlIGluZm8gIik7 CisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfVEVSTUlOQVRFRCkKKwkJc3RyY2F0 KGRlc2Nfc2NzaV9zdGF0ZSwgInN0YXRlIHRlcm1pbmF0ZWQgIik7CisJaWYgKHNjc2lfc3RhdGUg JiBNUEkyX1NDU0lfU1RBVEVfTk9fU0NTSV9TVEFUVVMpCisJCXN0cmNhdChkZXNjX3Njc2lfc3Rh dGUsICJubyBzdGF0dXMgIik7CisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfQVVU T1NFTlNFX0ZBSUxFRCkKKwkJc3RyY2F0KGRlc2Nfc2NzaV9zdGF0ZSwgImF1dG9zZW5zZSBmYWls ZWQgIik7CisJaWYgKHNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX1ZBTElE KQorCQlzdHJjYXQoZGVzY19zY3NpX3N0YXRlLCAiYXV0b3NlbnNlIHZhbGlkICIpOworCisJbXBz X2RwcmludChzYywgTVBTX0lORk8sICJcdGhhbmRsZSgweCUwNHgpLCBpb2Nfc3RhdHVzKCVzKSgw eCUwNHgpLCBcbiIsCisJCWxlMTZ0b2gobXBpX3JlcGx5LT5EZXZIYW5kbGUpLAorCSAgICBkZXNj X2lvY19zdGF0ZSwgaW9jX3N0YXR1cyk7CisJLyogV2UgY2FuIGFkZCBtb3JlIGRldGFpbCBhYm91 dCB1bmRlcmZsb3cgZGF0YSBoZXJlCisJICogVE8tRE8KKwkgKiAqLworCW1wc19kcHJpbnQoc2Ms IE1QU19JTkZPLCAiXHRzY3NpX3N0YXR1cyglcykoMHglMDJ4KSwgIgorCSAgICAic2NzaV9zdGF0 ZSglcykoMHglMDJ4KVxuIiwgZGVzY19zY3NpX3N0YXR1cywKKwkgICAgc2NzaV9zdGF0dXMsIGRl c2Nfc2NzaV9zdGF0ZSwgc2NzaV9zdGF0ZSk7CisKKwlpZiAoc2MtPm1wc19kZWJ1ZyAmIE1QU19J TkZPICYmCisJCXNjc2lfc3RhdGUgJiBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX1ZBTElEKSB7 CisJCW1wc19kcHJpbnQoc2MsIE1QU19JTkZPLCAiLT4gU2Vuc2UgQnVmZmVyIERhdGEgOiBTdGFy dCA6XG4iKTsKKwkJc2NzaV9zZW5zZV9wcmludChjc2lvKTsKKwkJbXBzX2RwcmludChzYywgTVBT X0lORk8sICItPiBTZW5zZSBCdWZmZXIgRGF0YSA6IEVuZCA6XG4iKTsKKwl9CisKKwlpZiAoc2Nz aV9zdGF0ZSAmIE1QSTJfU0NTSV9TVEFURV9SRVNQT05TRV9JTkZPX1ZBTElEKSB7CisJCXJlc3Bv bnNlX2luZm8gPSBsZTMydG9oKG1waV9yZXBseS0+UmVzcG9uc2VJbmZvKTsKKwkJcmVzcG9uc2Vf Ynl0ZXMgPSAodTggKikmcmVzcG9uc2VfaW5mbzsKKwkJbXBzX3Jlc3BvbnNlX2NvZGUoc2MscmVz cG9uc2VfYnl0ZXNbMF0pOworCX0KK30KKworc3RhdGljIHZvaWQKIG1wc3Nhc19zY3NpaW9fY29t cGxldGUoc3RydWN0IG1wc19zb2Z0YyAqc2MsIHN0cnVjdCBtcHNfY29tbWFuZCAqY20pCiB7CiAJ TVBJMl9TQ1NJX0lPX1JFUExZICpyZXA7CkBAIC0xOTc2LDYgKzIyNzcsOCBAQCBtcHNzYXNfc2Nz aWlvX2NvbXBsZXRlKHN0cnVjdCBtcHNfc29mdGMgCiAJCWNjYi0+Y2NiX2guc3RhdHVzID0gQ0FN X1JFUV9DTVBfRVJSOwogCQlicmVhazsKIAl9CisJCisJbXBzX3NjX2ZhaWxlZF9pb19pbmZvKHNj LGNzaW8scmVwKTsKIAogCWlmIChzYXNzYy0+ZmxhZ3MgJiBNUFNTQVNfUVVFVUVfRlJPWkVOKSB7 CiAJCWNjYi0+Y2NiX2guc3RhdHVzIHw9IENBTV9SRUxFQVNFX1NJTVE7CkBAIC0yNzU0LDE3ICsz MDU3LDI2IEBAIG1wc3Nhc19zY2FubmVyX3RocmVhZCh2b2lkICphcmcpCiAKIAltcHNfbG9jayhz Yyk7CiAJZm9yICg7OykgeworCQkvKiBTbGVlcCBmb3IgMSBzZWNvbmQgYW5kIGNoZWNrIHRoZSBx dWV1ZSBzdGF0dXMqLwogCQltc2xlZXAoJnNhc3NjLT5jY2Jfc2NhbnEsICZzYy0+bXBzX210eCwg UFJJQklPLAotCQkgICAgICAgIm1wc19zY2FucSIsIDApOworCQkgICAgICAgIm1wc19zY2FucSIs IDEgKiBoeik7CiAJCWlmIChzYXNzYy0+ZmxhZ3MgJiBNUFNTQVNfU0hVVERPV04pIHsKIAkJCW1w c19kcHJpbnQoc2MsIE1QU19UUkFDRSwgIlNjYW5uZXIgc2h1dHRpbmcgZG93blxuIik7CiAJCQli cmVhazsKIAkJfQorbmV4dF93b3JrOgorCQkvLyBHZXQgZmlyc3Qgd29yay4KIAkJY2NiID0gKHVu aW9uIGNjYiAqKVRBSUxRX0ZJUlNUKCZzYXNzYy0+Y2NiX3NjYW5xKTsKIAkJaWYgKGNjYiA9PSBO VUxMKQogCQkJY29udGludWU7CisJCS8vIEdvdCBmaXJzdCB3b3JrLgogCQlUQUlMUV9SRU1PVkUo JnNhc3NjLT5jY2Jfc2NhbnEsICZjY2ItPmNjYl9oLCBzaW1fbGlua3MudHFlKTsKIAkJeHB0X2Fj dGlvbihjY2IpOworCQlpZiAoc2Fzc2MtPmZsYWdzICYgTVBTU0FTX1NIVVRET1dOKSB7CisJCQlt cHNfZHByaW50KHNjLCBNUFNfVFJBQ0UsICJTY2FubmVyIHNodXR0aW5nIGRvd25cbiIpOworCQkJ YnJlYWs7CisJCX0KKwkJZ290byBuZXh0X3dvcms7CiAJfQogCiAJc2Fzc2MtPmZsYWdzICY9IH5N UFNTQVNfU0NBTlRIUkVBRDsKQEAgLTI4MjcsNyArMzEzOSw3IEBAIG1wc3Nhc19jaGVja19lZWRw KHN0cnVjdCBtcHNzYXNfc29mdGMgKnMKIAkJZG8gewogCQkJcmNhcF9idWYgPQogCQkJICAgIG1h bGxvYyhzaXplb2Yoc3RydWN0IHNjc2lfcmVhZF9jYXBhY2l0eV9lZWRwKSwKLQkJCSAgICBNX01Q VDIsIE1fV0FJVE9LIHwgTV9aRVJPKTsKKwkJCSAgICBNX01QVDIsIE1fTk9XQUlUfCBNX1pFUk8p OwogCQkJaWYgKHJjYXBfYnVmID09IE5VTEwpIHsKIAkJCQltcHNfZHByaW50KHNjLCBNUFNfRkFV TFQsICJVbmFibGUgdG8gYWxsb2MgcmVhZCAiCiAJCQkJICAgICJjYXBhY2l0eSBidWZmZXIgZm9y IEVFRFAgc3VwcG9ydC5cbiIpOwpAQCAtMjg2OSw3ICszMTgxLDcgQEAgbXBzc2FzX2NoZWNrX2Vl ZHAoc3RydWN0IG1wc3Nhc19zb2Z0YyAqcwogCQkJCX0KIAkJCQlpZiAoIWZvdW5kX2x1bikgewog CQkJCQlsdW4gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtcHNzYXNfbHVuKSwKLQkJCQkJICAgIE1f TVBUMiwgTV9XQUlUT0sgfCBNX1pFUk8pOworCQkJCQkgICAgTV9NUFQyLCBNX05PV0FJVCB8IE1f WkVSTyk7CiAJCQkJCWlmIChsdW4gPT0gTlVMTCkgewogCQkJCQkJbXBzX2RwcmludChzYywgTVBT X0ZBVUxULAogCQkJCQkJICAgICJVbmFibGUgdG8gYWxsb2MgTFVOIGZvciAiCkBAIC0yOTQzLDYg KzMyNTUsMjAgQEAgbXBzc2FzX3JlYWRfY2FwX2RvbmUoc3RydWN0IGNhbV9wZXJpcGggKgogCiAJ aWYgKGRvbmVfY2NiID09IE5VTEwpCiAJCXJldHVybjsKKwkKKwkvKiBEcml2ZXIgbmVlZCB0byBy ZWxlYXNlIGRldnEsIGl0IFNjc2kgY29tbWFuZCBpcworCSAqIGdlbmVyYXRlZCBieSBkcml2ZXIg aW50ZXJuYWxseS4KKwkgKiBDdXJyZW50bHkgdGhlcmUgaXMgYSBzaW5nbGUgcGxhY2Ugd2hlcmUg ZHJpdmVyCisJICogY2FsbHMgc2NzaSBjb21tYW5kIGludGVybmFsbHkuIEluIGZ1dHVyZSBpZiBk cml2ZXIKKwkgKiBjYWxscyBtb3JlIHNjc2kgY29tbWFuZCBpbnRlcm5hbGx5LCBpdCBuZWVkcyB0 byByZWxlYXNlCisJICogZGV2cSBpbnRlcm5hbGx5LCBzaW5jZSB0aG9zZSBjb21tYW5kIHdpbGwg bm90IGdvIGJhY2sgdG8KKwkgKiBjYW1fcGVyaXBoLgorCSAqLworCWlmICgoZG9uZV9jY2ItPmNj Yl9oLnN0YXR1cyAmIENBTV9ERVZfUUZSWk4pICkgeworICAgICAgICAJZG9uZV9jY2ItPmNjYl9o LnN0YXR1cyAmPSB+Q0FNX0RFVl9RRlJaTjsKKwkJeHB0X3JlbGVhc2VfZGV2cShkb25lX2NjYi0+ Y2NiX2gucGF0aCwKKwkJCSAgICAgICAJLypjb3VudCovIDEsIC8qcnVuX3F1ZXVlKi9UUlVFKTsK Kwl9CiAKIAkvKgogCSAqIEdldCB0aGUgTFVOIElEIGZvciB0aGUgcGF0aCBhbmQgbG9vayBpdCB1 cCBpbiB0aGUgTFVOIGxpc3QgZm9yIHRoZQpkaWZmIC1hdXJwIEZSRUVCU0QtU0FTMi0xMi4wMC4w MC4wMS9tcHNsc2ktc291cmNlLTEyLjAwLjAwLjAxL3N5cy9kZXYvbXBzL21wc19zYXMuaCBGUkVF QlNELVNBUzItMTIuMjU1LjAwLjAyL21wc2xzaS1zb3VyY2UtMTIuMjU1LjAwLjAyL3N5cy9kZXYv bXBzL21wc19zYXMuaAotLS0gRlJFRUJTRC1TQVMyLTEyLjAwLjAwLjAxL21wc2xzaS1zb3VyY2Ut MTIuMDAuMDAuMDEvc3lzL2Rldi9tcHMvbXBzX3Nhcy5oCTIwMTItMDEtMzAgMjA6NDk6MDkuMDAw MDAwMDAwICswNTMwCisrKyBGUkVFQlNELVNBUzItMTIuMjU1LjAwLjAyL21wc2xzaS1zb3VyY2Ut MTIuMjU1LjAwLjAyL3N5cy9kZXYvbXBzL21wc19zYXMuaAkyMDEyLTAxLTE3IDA0OjMyOjE1LjAw MDAwMDAwMCArMDUzMApAQCAtNDksOCArNDksMTEgQEAgc3RydWN0IG1wc3Nhc190YXJnZXQgewog I2RlZmluZSBNUFNTQVNfVEFSR0VUX0lOUkVTRVQJKDEgPDwgMSkKICNkZWZpbmUgTVBTU0FTX1RB UkdFVF9JTkRJQUdSRVNFVCAoMSA8PCAyKQogI2RlZmluZSBNUFNTQVNfVEFSR0VUX0lOUkVNT1ZB TAkoMSA8PCAzKQorI2RlZmluZSBNUFNfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UICgxIDw8 IDQpCisjZGVmaW5lIE1QU19UQVJHRVRfRkxBR1NfVk9MVU1FICAgICAgICAgKDEgPDwgNSkKICNk ZWZpbmUgTVBTU0FTX1RBUkdFVF9JTlJFQ09WRVJZIChNUFNTQVNfVEFSR0VUX0lOQUJPUlQgfCBc CiAgICAgTVBTU0FTX1RBUkdFVF9JTlJFU0VUIHwgTVBTU0FTX1RBUkdFVF9JTkNISVBSRVNFVCkK KwogI2RlZmluZSBNUFNTQVNfVEFSR0VUX0FERCAgICAgICAoMSA8PCAyOSkKICNkZWZpbmUgTVBT U0FTX1RBUkdFVF9SRU1PVkUgICAgKDEgPDwgMzApCiAJdWludDE2X3QJdGlkOwpkaWZmIC1hdXJw IEZSRUVCU0QtU0FTMi0xMi4wMC4wMC4wMS9tcHNsc2ktc291cmNlLTEyLjAwLjAwLjAxL3N5cy9k ZXYvbXBzL21wc19zYXNfbHNpLmMgRlJFRUJTRC1TQVMyLTEyLjI1NS4wMC4wMi9tcHNsc2ktc291 cmNlLTEyLjI1NS4wMC4wMi9zeXMvZGV2L21wcy9tcHNfc2FzX2xzaS5jCi0tLSBGUkVFQlNELVNB UzItMTIuMDAuMDAuMDEvbXBzbHNpLXNvdXJjZS0xMi4wMC4wMC4wMS9zeXMvZGV2L21wcy9tcHNf c2FzX2xzaS5jCTIwMTItMDEtMzAgMjA6NDk6MDkuMDAwMDAwMDAwICswNTMwCisrKyBGUkVFQlNE LVNBUzItMTIuMjU1LjAwLjAyL21wc2xzaS1zb3VyY2UtMTIuMjU1LjAwLjAyL3N5cy9kZXYvbXBz L21wc19zYXNfbHNpLmMJMjAxMi0wMS0xNyAwNDozMjoxNS4wMDAwMDAwMDAgKzA1MzAKQEAgLTEw Nyw3ICsxMDcsNyBAQCBzdHJ1Y3QgX2F0YV9pZGVudGlmeV9kZXZpY2VfZGF0YSB7CiAJdTE2IG1v ZGVsX251bWJlclsyMF07CS8qIDI3LTQ2Ki8KIAl1MTYgcmVzZXJ2ZWQzWzIwOV07CS8qIDQ3LTI1 NSovCiB9OwotCitzdGF0aWMgdTMyIGV2ZW50X2NvdW50Owogc3RhdGljIHZvaWQgbXBzc2FzX2Z3 X3dvcmsoc3RydWN0IG1wc19zb2Z0YyAqc2MsCiAgICAgc3RydWN0IG1wc19md19ldmVudF93b3Jr ICpmd19ldmVudCk7CiBzdGF0aWMgdm9pZCBtcHNzYXNfZndfZXZlbnRfZnJlZShzdHJ1Y3QgbXBz X3NvZnRjICosCkBAIC0xMTksNyArMTE5LDcgQEAgc3RhdGljIGludCBtcHNzYXNfZ2V0X3NhdGFf aWRlbnRpZnkoc3RydQogaW50IG1wc3Nhc19nZXRfc2FzX2FkZHJlc3NfZm9yX3NhdGFfZGlzayhz dHJ1Y3QgbXBzX3NvZnRjICpzYywKICAgICB1NjQgKnNhc19hZGRyZXNzLCB1MTYgaGFuZGxlLCB1 MzIgZGV2aWNlX2luZm8pOwogc3RhdGljIGludCBtcHNzYXNfdm9sdW1lX2FkZChzdHJ1Y3QgbXBz X3NvZnRjICpzYywKLSAgICBNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxlbWVudCk7Cisg ICAgdTE2IGhhbmRsZSk7CiAKIHZvaWQKIG1wc3Nhc19ldnRfaGFuZGxlcihzdHJ1Y3QgbXBzX3Nv ZnRjICpzYywgdWludHB0cl90IGRhdGEsCkBAIC0xOTEsNiArMTkxLDggQEAgbXBzc2FzX2Z3X3dv cmsoc3RydWN0IG1wc19zb2Z0YyAqc2MsIHN0cgogCXN0cnVjdCBtcHNzYXNfc29mdGMgKnNhc3Nj OwogCXNhc3NjID0gc2MtPnNhc3NjOwogCisJbXBzX2RwcmludChzYywgTVBTX0lORk8sICIoJWQp LT4oJXMpIFdvcmtpbmcgb24gIEV2ZW50OiBbJXhdXG4iLAorCQkJZXZlbnRfY291bnQrKyxfX2Z1 bmNfXyxmd19ldmVudC0+ZXZlbnQpOwogCXN3aXRjaCAoZndfZXZlbnQtPmV2ZW50KSB7CiAJY2Fz ZSBNUEkyX0VWRU5UX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVDogCiAJewpAQCAtMjg0LDcgKzI4 Niw3IEBAIG1wc3Nhc19md193b3JrKHN0cnVjdCBtcHNfc29mdGMgKnNjLCBzdHIKIAkJCWNhc2Ug TVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfVk9MVU1FX0NSRUFURUQ6CiAJCQljYXNlIE1QSTJfRVZF TlRfSVJfQ0hBTkdFX1JDX0FEREVEOgogCQkJCWlmICghZm9yZWlnbl9jb25maWcpIHsKLQkJCQkJ aWYgKG1wc3Nhc192b2x1bWVfYWRkKHNjLCBlbGVtZW50KSkgeworCQkJCQlpZiAobXBzc2FzX3Zv bHVtZV9hZGQoc2MsIGxlMTZ0b2goZWxlbWVudC0+Vm9sRGV2SGFuZGxlKSkpewogCQkJCQkJcHJp bnRmKCIlczogZmFpbGVkIHRvIGFkZCBSQUlEICIKIAkJCQkJCSAgICAidm9sdW1lIHdpdGggaGFu ZGxlIDB4JXhcbiIsCiAJCQkJCQkgICAgX19mdW5jX18sIGxlMTZ0b2goZWxlbWVudC0+CkBAIC0z MTksMTIgKzMyMSwxOCBAQCBtcHNzYXNfZndfd29yayhzdHJ1Y3QgbXBzX3NvZnRjICpzYywgc3Ry CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19QRF9D UkVBVEVEOgorCQkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19ISURFOgogCQkJCS8qCiAJ CQkJICogUGh5cyBEaXNrIG9mIGEgdm9sdW1lIGhhcyBiZWVuIGNyZWF0ZWQuICBIaWRlCiAJCQkJ ICogaXQgZnJvbSB0aGUgT1MuCiAJCQkJICovCi0JCQkJbXBzc2FzX3ByZXBhcmVfcmVtb3ZlKHNh c3NjLCBlbGVtZW50LT4KLQkJCQkgICAgUGh5c0Rpc2tEZXZIYW5kbGUpOworCQkJCXRhcmcgPSBt cHNzYXNfZmluZF90YXJnZXRfYnlfaGFuZGxlKHNhc3NjLCAwLCBlbGVtZW50LT5QaHlzRGlza0Rl dkhhbmRsZSk7CisJCQkJaWYgKHRhcmcgPT0gTlVMTCkgCisJCQkJCWJyZWFrOworCisJCQkJdGFy Zy0+ZmxhZ3MgfD0gTVBTX1RBUkdFVF9GTEFHU19SQUlEX0NPTVBPTkVOVDsKKwkJCQltcHNzYXNf cmVzY2FuX3RhcmdldChzYywgdGFyZyk7CisJCQkJCiAJCQkJYnJlYWs7CiAJCQljYXNlIE1QSTJf RVZFTlRfSVJfQ0hBTkdFX1JDX1BEX0RFTEVURUQ6CiAJCQkJLyoKQEAgLTM3OSw2ICszODcsMzUg QEAgbXBzc2FzX2Z3X3dvcmsoc3RydWN0IG1wc19zb2Z0YyAqc2MsIHN0cgogCQkJICAgICJoYW5k bGUgMHgleCIsIGV2ZW50X2RhdGEtPlByZXZpb3VzVmFsdWUsCiAJCQkgICAgZXZlbnRfZGF0YS0+ TmV3VmFsdWUsCiAJCQkgICAgZXZlbnRfZGF0YS0+Vm9sRGV2SGFuZGxlKTsKKwkJCQl1MzIgc3Rh dGU7CisJCQkJc3RydWN0IG1wc3Nhc190YXJnZXQgKnRhcmc7CisJCQkJc3RhdGUgPSBsZTMydG9o KGV2ZW50X2RhdGEtPk5ld1ZhbHVlKTsKKwkJCQlzd2l0Y2ggKHN0YXRlKSB7CisJCQkJY2FzZSBN UEkyX1JBSURfVk9MX1NUQVRFX01JU1NJTkc6CisJCQkJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRF X0ZBSUxFRDoKKwkJCQkJbXBzc2FzX3ByZXBhcmVfdm9sdW1lX3JlbW92ZShzYXNzYywgZXZlbnRf ZGF0YS0+CisJCQkJCQkJVm9sRGV2SGFuZGxlKTsKKwkJCQkJYnJlYWs7CisJCSAKKwkJCQljYXNl IE1QSTJfUkFJRF9WT0xfU1RBVEVfT05MSU5FOgorCQkJCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFU RV9ERUdSQURFRDoKKwkJCQljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfT1BUSU1BTDoKKwkJCQkJ dGFyZyA9IG1wc3Nhc19maW5kX3RhcmdldF9ieV9oYW5kbGUoc2Fzc2MsIDAsIGV2ZW50X2RhdGEt PlZvbERldkhhbmRsZSk7CisJCQkJCWlmICh0YXJnKSB7CisJCQkJCQlwcmludGYoIiVzICVkOiBW b2x1bWUgaGFuZGxlIDB4JXggaXMgYWxyZWFkeSBhZGRlZCBcbiIsCisJCQkJCQkJICAgICAgIAlf X2Z1bmNfXywgX19MSU5FX18gLCBldmVudF9kYXRhLT5Wb2xEZXZIYW5kbGUpOworCQkJCQkJYnJl YWs7CisJCQkJCX0KKwkJCQkJaWYgKG1wc3Nhc192b2x1bWVfYWRkKHNjLCBsZTE2dG9oKGV2ZW50 X2RhdGEtPlZvbERldkhhbmRsZSkpKSB7CisJCQkJCQlwcmludGYoIiVzOiBmYWlsZWQgdG8gYWRk IFJBSUQgIgorCQkJCQkJCSJ2b2x1bWUgd2l0aCBoYW5kbGUgMHgleFxuIiwKKwkJCQkJCQlfX2Z1 bmNfXywgbGUxNnRvaChldmVudF9kYXRhLT4KKwkJCQkJCQlWb2xEZXZIYW5kbGUpKTsKKwkJCQkJ fQorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CiAJCQlicmVh azsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpAQCAtMzg5LDYgKzQyNiw3IEBAIG1wc3Nhc19md193 b3JrKHN0cnVjdCBtcHNfc29mdGMgKnNjLCBzdHIKIAl7CiAJCU1waTJFdmVudERhdGFJclBoeXNp Y2FsRGlza190ICpldmVudF9kYXRhID0KIAkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhOworCQlz dHJ1Y3QgbXBzc2FzX3RhcmdldCAqdGFyZzsKIAogCQkvKgogCQkgKiBJbmZvcm1hdGlvbmFsIG9u bHkuCkBAIC0zOTksNyArNDM3LDcgQEAgbXBzc2FzX2Z3X3dvcmsoc3RydWN0IG1wc19zb2Z0YyAq c2MsIHN0cgogCQkJbXBzX2RwcmludChzYywgTVBTX0lORk8sICIgICBQaHlzIERpc2sgU2V0dGlu Z3MgIgogCQkJICAgICJjaGFuZ2VkIGZyb20gMHgleCB0byAweCV4IGZvciBQaHlzIERpc2sgTnVt YmVyICIKIAkJCSAgICAiJWQgYW5kIGhhbmRsZSAweCV4IGF0IEVuY2xvc3VyZSBoYW5kbGUgMHgl eCwgU2xvdCAiCi0JCQkgICAgIiVkIiwgZXZlbnRfZGF0YS0+UHJldmlvdXNWYWx1ZSwKKwkJCSAg ICAiJWRcbiIsIGV2ZW50X2RhdGEtPlByZXZpb3VzVmFsdWUsCiAJCQkgICAgZXZlbnRfZGF0YS0+ TmV3VmFsdWUsIGV2ZW50X2RhdGEtPlBoeXNEaXNrTnVtLAogCQkJICAgIGV2ZW50X2RhdGEtPlBo eXNEaXNrRGV2SGFuZGxlLAogCQkJICAgIGV2ZW50X2RhdGEtPkVuY2xvc3VyZUhhbmRsZSwgZXZl bnRfZGF0YS0+U2xvdCk7CkBAIC00MDcsNyArNDQ1LDcgQEAgbXBzc2FzX2Z3X3dvcmsoc3RydWN0 IG1wc19zb2Z0YyAqc2MsIHN0cgogCQljYXNlIE1QSTJfRVZFTlRfSVJfUEhZU0RJU0tfUkNfU1RB VFVTX0ZMQUdTX0NIQU5HRUQ6CiAJCQltcHNfZHByaW50KHNjLCBNUFNfSU5GTywgIiAgIFBoeXMg RGlzayBTdGF0dXMgY2hhbmdlZCAiCiAJCQkgICAgImZyb20gMHgleCB0byAweCV4IGZvciBQaHlz IERpc2sgTnVtYmVyICVkIGFuZCAiCi0JCQkgICAgImhhbmRsZSAweCV4IGF0IEVuY2xvc3VyZSBo YW5kbGUgMHgleCwgU2xvdCAlZCIsCisJCQkgICAgImhhbmRsZSAweCV4IGF0IEVuY2xvc3VyZSBo YW5kbGUgMHgleCwgU2xvdCAlZFxuIiwKIAkJCSAgICBldmVudF9kYXRhLT5QcmV2aW91c1ZhbHVl LCBldmVudF9kYXRhLT5OZXdWYWx1ZSwKIAkJCSAgICBldmVudF9kYXRhLT5QaHlzRGlza051bSwK IAkJCSAgICBldmVudF9kYXRhLT5QaHlzRGlza0RldkhhbmRsZSwKQEAgLTQxNiwxMiArNDU0LDM4 IEBAIG1wc3Nhc19md193b3JrKHN0cnVjdCBtcHNfc29mdGMgKnNjLCBzdHIKIAkJY2FzZSBNUEky X0VWRU5UX0lSX1BIWVNESVNLX1JDX1NUQVRFX0NIQU5HRUQ6CiAJCQltcHNfZHByaW50KHNjLCBN UFNfSU5GTywgIiAgIFBoeXMgRGlzayBTdGF0ZSBjaGFuZ2VkICIKIAkJCSAgICAiZnJvbSAweCV4 IHRvIDB4JXggZm9yIFBoeXMgRGlzayBOdW1iZXIgJWQgYW5kICIKLQkJCSAgICAiaGFuZGxlIDB4 JXggYXQgRW5jbG9zdXJlIGhhbmRsZSAweCV4LCBTbG90ICVkIiwKKwkJCSAgICAiaGFuZGxlIDB4 JXggYXQgRW5jbG9zdXJlIGhhbmRsZSAweCV4LCBTbG90ICVkXG4iLAogCQkJICAgIGV2ZW50X2Rh dGEtPlByZXZpb3VzVmFsdWUsIGV2ZW50X2RhdGEtPk5ld1ZhbHVlLAogCQkJICAgIGV2ZW50X2Rh dGEtPlBoeXNEaXNrTnVtLAogCQkJICAgIGV2ZW50X2RhdGEtPlBoeXNEaXNrRGV2SGFuZGxlLAog CQkJICAgIGV2ZW50X2RhdGEtPkVuY2xvc3VyZUhhbmRsZSwgZXZlbnRfZGF0YS0+U2xvdCk7Ci0J CQlicmVhazsKKwkJCXN3aXRjaCAoZXZlbnRfZGF0YS0+TmV3VmFsdWUpIHsKKwkJCQljYXNlIE1Q STJfUkFJRF9QRF9TVEFURV9PTkxJTkU6CisJCQkJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfREVH UkFERUQ6CisJCQkJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfUkVCVUlMRElORzoKKwkJCQljYXNl IE1QSTJfUkFJRF9QRF9TVEFURV9PUFRJTUFMOgorCQkJCWNhc2UgTVBJMl9SQUlEX1BEX1NUQVRF X0hPVF9TUEFSRToKKwkJCQkJdGFyZyA9IG1wc3Nhc19maW5kX3RhcmdldF9ieV9oYW5kbGUoc2Fz c2MsIDAsIAorCQkJCQkJCWV2ZW50X2RhdGEtPlBoeXNEaXNrRGV2SGFuZGxlKTsKKwkJCQkJaWYg KHRhcmcpIHsKKwkJCQkJCXRhcmctPmZsYWdzIHw9IE1QU19UQVJHRVRfRkxBR1NfUkFJRF9DT01Q T05FTlQ7CisJCQkJCQlwcmludGYoIiVzICVkOiBGb3VuZCBUYXJnZXQgZm9yIGhhbmRsZSAweCV4 LiAgXG4iLAorCQkJCQkJX19mdW5jX18sIF9fTElORV9fICwgZXZlbnRfZGF0YS0+UGh5c0Rpc2tE ZXZIYW5kbGUpOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJY2FzZSBNUEkyX1JBSURfUERfU1RB VEVfT0ZGTElORToKKwkJCQljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9OT1RfQ09ORklHVVJFRDoK KwkJCQljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9OT1RfQ09NUEFUSUJMRToKKwkJCQlkZWZhdWx0 OgorCQkJCQl0YXJnID0gbXBzc2FzX2ZpbmRfdGFyZ2V0X2J5X2hhbmRsZShzYXNzYywgMCwgCisJ CQkJCQkJZXZlbnRfZGF0YS0+UGh5c0Rpc2tEZXZIYW5kbGUpOworCQkJCQlpZiAodGFyZykgewor CQkJCQkJdGFyZy0+ZmxhZ3MgfD0gfk1QU19UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQ7CisJ CQkJCQlwcmludGYoIiVzICVkOiBGb3VuZCBUYXJnZXQgZm9yIGhhbmRsZSAweCV4LiAgXG4iLAor CQkJCQkJX19mdW5jX18sIF9fTElORV9fICwgZXZlbnRfZGF0YS0+UGh5c0Rpc2tEZXZIYW5kbGUp OworCQkJCQl9CisJCQkJYnJlYWs7CisJCQl9CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpA QCAtNDk0LDYgKzU1OCw3IEBAIG1wc3Nhc19md193b3JrKHN0cnVjdCBtcHNfc29mdGMgKnNjLCBz dHIKIAkJYnJlYWs7CiAKIAl9CisJbXBzX2RwcmludChzYywgTVBTX0lORk8sICIoJWQpLT4oJXMp IEV2ZW50IEZyZWU6IFsleF1cbiIsZXZlbnRfY291bnQsX19mdW5jX18sIGZ3X2V2ZW50LT5ldmVu dCk7CiAJbXBzc2FzX2Z3X2V2ZW50X2ZyZWUoc2MsIGZ3X2V2ZW50KTsKIH0KIApAQCAtNTg0LDcg KzY0OSw3IEBAIG1wc3Nhc19hZGRfZGV2aWNlKHN0cnVjdCBtcHNfc29mdGMgKnNjLCAKIAkJZXJy b3IgPSBFTlhJTzsKIAkJZ290byBvdXQ7CiAJfQotCW1wc192cHJpbnRmKHNjLCAiU0FTIEFkZHJl c3MgZnJvbSBTQVMgZGV2aWNlIHBhZ2UwID0gJWp4XG4iLAorCW1wc19kcHJpbnQoc2MsIE1QU19J TkZPLCAiU0FTIEFkZHJlc3MgZnJvbSBTQVMgZGV2aWNlIHBhZ2UwID0gJWp4XG4iLAogCSAgICBz YXNfYWRkcmVzcyk7CiAJdGFyZyA9ICZzYXNzYy0+dGFyZ2V0c1tpZF07CiAJdGFyZy0+ZGV2aW5m byA9IGRldmljZV9pbmZvOwpAQCAtNjA1LDEyICs2NzAsMTIgQEAgbXBzc2FzX2FkZF9kZXZpY2Uo c3RydWN0IG1wc19zb2Z0YyAqc2MsIAogCVRBSUxRX0lOSVQoJnRhcmctPnRpbWVkb3V0X2NvbW1h bmRzKTsKIAlTTElTVF9JTklUKCZ0YXJnLT5sdW5zKTsKIAltcHNfZGVzY3JpYmVfZGV2aW5mbyh0 YXJnLT5kZXZpbmZvLCBkZXZzdHJpbmcsIDgwKTsKLQltcHNfdnByaW50ZihzYywgIkZvdW5kIGRl dmljZSA8JXM+IDwlcz4gPDB4JTA0eD4gPCVkLyVkPlxuIiwgZGV2c3RyaW5nLAorCW1wc19kcHJp bnQoc2MsIE1QU19JTkZPLCAiRm91bmQgZGV2aWNlIDwlcz4gPCVzPiA8MHglMDR4PiA8JWQvJWQ+ XG4iLCBkZXZzdHJpbmcsCiAJICAgIG1wc19kZXNjcmliZV90YWJsZShtcHNfbGlua3JhdGVfbmFt ZXMsIHRhcmctPmxpbmtyYXRlKSwKIAkgICAgdGFyZy0+aGFuZGxlLCB0YXJnLT5lbmNsX2hhbmRs ZSwgdGFyZy0+ZW5jbF9zbG90KTsKIAlpZiAoKHNhc3NjLT5mbGFncyAmIE1QU1NBU19JTl9TVEFS VFVQKSA9PSAwKQogCQltcHNzYXNfcmVzY2FuX3RhcmdldChzYywgdGFyZyk7Ci0JbXBzX3Zwcmlu dGYoc2MsICJUYXJnZXQgaWQgMHgleCBhZGRlZFxuIiwgdGFyZy0+dGlkKTsKKwltcHNfZHByaW50 KHNjLCBNUFNfSU5GTywgIlRhcmdldCBpZCAweCV4IGFkZGVkXG4iLCB0YXJnLT50aWQpOwogb3V0 OgogCW1wc3Nhc19zdGFydHVwX2RlY3JlbWVudChzYXNzYyk7CiAJcmV0dXJuIChlcnJvcik7CkBA IC03NTEsMTIgKzgxNiwxMSBAQCBvdXQ6CiB9CiAKIHN0YXRpYyBpbnQKLW1wc3Nhc192b2x1bWVf YWRkKHN0cnVjdCBtcHNfc29mdGMgKnNjLCBNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxl bWVudCkKK21wc3Nhc192b2x1bWVfYWRkKHN0cnVjdCBtcHNfc29mdGMgKnNjLCB1MTYgaGFuZGxl KQogewogCXN0cnVjdCBtcHNzYXNfc29mdGMgKnNhc3NjOwogCXN0cnVjdCBtcHNzYXNfdGFyZ2V0 ICp0YXJnOwogCXU2NCB3d2lkOwotCXUxNiBoYW5kbGUgPSBsZTE2dG9oKGVsZW1lbnQtPlZvbERl dkhhbmRsZSk7CiAJdW5zaWduZWQgaW50IGlkOwogCWludCBlcnJvciA9IDA7CiAKQEAgLTg1NSw3 ICs5MTksOSBAQCBtcHNzYXNfaXJfc2h1dGRvd24oc3RydWN0IG1wc19zb2Z0YyAqc2MpCiAJYWN0 aW9uLT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fUkFJRF9BQ1RJT047CiAJYWN0aW9uLT5BY3Rp b24gPSBNUEkyX1JBSURfQUNUSU9OX1NZU1RFTV9TSFVURE9XTl9JTklUSUFURUQ7CiAJY20tPmNt X2Rlc2MuRGVmYXVsdC5SZXF1ZXN0RmxhZ3MgPSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ERUZB VUxUX1RZUEU7CisJbXBzX2xvY2soc2MpOwogCW1wc19yZXF1ZXN0X3BvbGxlZChzYywgY20pOwor CW1wc191bmxvY2soc2MpOwogCiAJLyoKIAkgKiBEb24ndCBjaGVjayBmb3IgcmVwbHksIGp1c3Qg bGVhdmUuCmRpZmYgLWF1cnAgRlJFRUJTRC1TQVMyLTEyLjAwLjAwLjAxL21wc2xzaS1zb3VyY2Ut MTIuMDAuMDAuMDEvc3lzL2Rldi9tcHMvbXBzX3VzZXIuYyBGUkVFQlNELVNBUzItMTIuMjU1LjAw LjAyL21wc2xzaS1zb3VyY2UtMTIuMjU1LjAwLjAyL3N5cy9kZXYvbXBzL21wc191c2VyLmMKLS0t IEZSRUVCU0QtU0FTMi0xMi4wMC4wMC4wMS9tcHNsc2ktc291cmNlLTEyLjAwLjAwLjAxL3N5cy9k ZXYvbXBzL21wc191c2VyLmMJMjAxMi0wMS0zMCAyMDo0OTowOS4wMDAwMDAwMDAgKzA1MzAKKysr IEZSRUVCU0QtU0FTMi0xMi4yNTUuMDAuMDIvbXBzbHNpLXNvdXJjZS0xMi4yNTUuMDAuMDIvc3lz L2Rldi9tcHMvbXBzX3VzZXIuYwkyMDEyLTAxLTE3IDA0OjMyOjE1LjAwMDAwMDAwMCArMDUzMApA QCAtNzEyLDcgKzcxMiw3IEBAIG1wc191c2VyX2NvbW1hbmQoc3RydWN0IG1wc19zb2Z0YyAqc2Ms IHMKIAljbS0+Y21fZGVzYy5EZWZhdWx0LlJlcXVlc3RGbGFncyA9IE1QSTJfUkVRX0RFU0NSSVBU X0ZMQUdTX0RFRkFVTFRfVFlQRTsKIAogCW1wc19sb2NrKHNjKTsKLQllcnIgPSBtcHNfd2FpdF9j b21tYW5kKHNjLCBjbSwgMCk7CisJZXJyID0gbXBzX3dhaXRfY29tbWFuZChzYywgY20sIDMwKTsK IAogCWlmIChlcnIpIHsKIAkJbXBzX3ByaW50ZihzYywgIiVzOiBpbnZhbGlkIHJlcXVlc3Q6IGVy cm9yICVkXG4iLApAQCAtODQyLDcgKzg0Miw3IEBAIG1wc191c2VyX3Bhc3NfdGhydShzdHJ1Y3Qg bXBzX3NvZnRjICpzYywKIAkJY20tPmNtX2NvbXBsZXRlID0gTlVMTDsKIAkJY20tPmNtX2NvbXBs ZXRlX2RhdGEgPSBOVUxMOwogCi0JCWVyciA9IG1wc193YWl0X2NvbW1hbmQoc2MsIGNtLCAwKTsK KwkJZXJyID0gbXBzX3dhaXRfY29tbWFuZChzYywgY20sIDMwKTsKIAogCQlpZiAoZXJyICE9IDAp IHsKIAkJCWVyciA9IEVJTzsKQEAgLTk3OSw3ICs5NzksNyBAQCBtcHNfdXNlcl9wYXNzX3RocnUo c3RydWN0IG1wc19zb2Z0YyAqc2MsCiAKIAltcHNfbG9jayhzYyk7CiAKLQllcnIgPSBtcHNfd2Fp dF9jb21tYW5kKHNjLCBjbSwgMCk7CisJZXJyID0gbXBzX3dhaXRfY29tbWFuZChzYywgY20sIDMw KTsKIAogCWlmIChlcnIpIHsKIAkJbXBzX3ByaW50ZihzYywgIiVzOiBpbnZhbGlkIHJlcXVlc3Q6 IGVycm9yICVkXG4iLCBfX2Z1bmNfXywKQEAgLTEwOTgsMTAgKzEwOTgsMTIgQEAgbXBzX3VzZXJf Z2V0X2FkYXB0ZXJfZGF0YShzdHJ1Y3QgbXBzX3NvZgogCSAqIE5lZWQgdG8gZ2V0IEJJT1MgQ29u ZmlnIFBhZ2UgMyBmb3IgdGhlIEJJT1MgVmVyc2lvbi4KIAkgKi8KIAlkYXRhLT5CaW9zVmVyc2lv biA9IDA7CisJbXBzX2xvY2soc2MpOwogCWlmIChtcHNfY29uZmlnX2dldF9iaW9zX3BnMyhzYywg Jm1waV9yZXBseSwgJmNvbmZpZ19wYWdlKSkKIAkJcHJpbnRmKCIlczogRXJyb3Igd2hpbGUgcmV0 cmlldmluZyBCSU9TIFZlcnNpb25cbiIsIF9fZnVuY19fKTsKIAllbHNlCiAJCWRhdGEtPkJpb3NW ZXJzaW9uID0gY29uZmlnX3BhZ2UuQmlvc1ZlcnNpb247CisJbXBzX3VubG9jayhzYyk7CiB9CiAK IHN0YXRpYyB2b2lkCkBAIC0xMTk0LDcgKzExOTYsNyBAQCBtcHNfcG9zdF9md19kaWFnX2J1ZmZl cihzdHJ1Y3QgbXBzX3NvZnRjCiAJLyoKIAkgKiBTZW5kIGNvbW1hbmQgc3luY2hyb25vdXNseS4K IAkgKi8KLQlzdGF0dXMgPSBtcHNfd2FpdF9jb21tYW5kKHNjLCBjbSwgMCk7CisJc3RhdHVzID0g bXBzX3dhaXRfY29tbWFuZChzYywgY20sIDMwKTsKIAlpZiAoc3RhdHVzKSB7CiAJCW1wc19wcmlu dGYoc2MsICIlczogaW52YWxpZCByZXF1ZXN0OiBlcnJvciAlZFxuIiwgX19mdW5jX18sCiAJCSAg ICBzdGF0dXMpOwpAQCAtMTI3OCw3ICsxMjgwLDcgQEAgbXBzX3JlbGVhc2VfZndfZGlhZ19idWZm ZXIoc3RydWN0IG1wc19zbwogCS8qCiAJICogU2VuZCBjb21tYW5kIHN5bmNocm9ub3VzbHkuCiAJ ICovCi0Jc3RhdHVzID0gbXBzX3dhaXRfY29tbWFuZChzYywgY20sIDApOworCXN0YXR1cyA9IG1w c193YWl0X2NvbW1hbmQoc2MsIGNtLCAzMCk7CiAJaWYgKHN0YXR1cykgewogCQltcHNfcHJpbnRm KHNjLCAiJXM6IGludmFsaWQgcmVxdWVzdDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLAogCQkgICAg c3RhdHVzKTsKZGlmZiAtYXVycCBGUkVFQlNELVNBUzItMTIuMDAuMDAuMDEvbXBzbHNpLXNvdXJj ZS0xMi4wMC4wMC4wMS9zeXMvZGV2L21wcy9tcHN2YXIuaCBGUkVFQlNELVNBUzItMTIuMjU1LjAw LjAyL21wc2xzaS1zb3VyY2UtMTIuMjU1LjAwLjAyL3N5cy9kZXYvbXBzL21wc3Zhci5oCi0tLSBG UkVFQlNELVNBUzItMTIuMDAuMDAuMDEvbXBzbHNpLXNvdXJjZS0xMi4wMC4wMC4wMS9zeXMvZGV2 L21wcy9tcHN2YXIuaAkyMDEyLTAxLTMwIDIwOjQ5OjA5LjAwMDAwMDAwMCArMDUzMAorKysgRlJF RUJTRC1TQVMyLTEyLjI1NS4wMC4wMi9tcHNsc2ktc291cmNlLTEyLjI1NS4wMC4wMi9zeXMvZGV2 L21wcy9tcHN2YXIuaAkyMDEyLTAxLTE3IDA0OjMyOjE1LjAwMDAwMDAwMCArMDUzMApAQCAtNzgs NiArNzgsNyBAQAogI2RlZmluZSBNUFNfUEVSSU9ESUNfREVMQVkJMQkvKiAxIHNlY29uZCBoZWFy dGJlYXQvd2F0Y2hkb2cgY2hlY2sgKi8KIAogI2RlZmluZSBNUFNfU0NTSV9SSV9JTlZBTElEX0ZS QU1FCSgweDAwMDAwMDAyKQorI2RlZmluZSBNUFNfU1RSSU5HX0xFTkdUSCAgICAgICAgICAgICAg IDY0CiAKIC8qCiAgKiBob3N0IG1hcHBpbmcgcmVsYXRlZCBtYWNybyBkZWZpbml0aW9ucwpAQCAt MzA4LDcgKzMwOSw3IEBAIHN0cnVjdCBtcHNfc29mdGMgewogCXN0cnVjdCBjYWxsb3V0CQkJcGVy aW9kaWM7CiAKIAlzdHJ1Y3QgbXBzc2FzX3NvZnRjCQkqc2Fzc2M7Ci0KKwljaGFyICAgICAgICAg ICAgdG1wX3N0cmluZ1tNUFNfU1RSSU5HX0xFTkdUSF07CiAJVEFJTFFfSEVBRCgsIG1wc19jb21t YW5kKQlyZXFfbGlzdDsKIAlUQUlMUV9IRUFEKCwgbXBzX2NvbW1hbmQpCWhpZ2hfcHJpb3JpdHlf cmVxX2xpc3Q7CiAJVEFJTFFfSEVBRCgsIG1wc19jaGFpbikJCWNoYWluX2xpc3Q7CkBAIC01MjEs NiArNTIyLDEyIEBAIG1wc19mcmVlX2NvbW1hbmQoc3RydWN0IG1wc19zb2Z0YyAqc2MsIHMKIAlj bS0+Y21fbWF4X3NlZ3MgPSAwOwogCWNtLT5jbV9sdW4gPSAwOwogCWNtLT5jbV9zdGF0ZSA9IE1Q U19DTV9TVEFURV9GUkVFOworCWNtLT5jbV9kYXRhID0gTlVMTDsKKwljbS0+Y21fbGVuZ3RoID0g MDsKKwljbS0+Y21fb3V0X2xlbiA9IDA7CisJY20tPmNtX3NnbHNpemUgPSAwOworCWNtLT5jbV9z Z2UgPSBOVUxMOworCiAJVEFJTFFfRk9SRUFDSF9TQUZFKGNoYWluLCAmY20tPmNtX2NoYWluX2xp c3QsIGNoYWluX2xpbmssIGNoYWluX3RlbXApIHsKIAkJVEFJTFFfUkVNT1ZFKCZjbS0+Y21fY2hh aW5fbGlzdCwgY2hhaW4sIGNoYWluX2xpbmspOwogCQltcHNfZnJlZV9jaGFpbihzYywgY2hhaW4p OwpAQCAtNzQ5LDcgKzc1Niw5IEBAIHZvaWQgbXBzX21hcHBpbmdfaXJfY29uZmlnX2NoYW5nZV9l dmVudCgKIHZvaWQgbXBzc2FzX2V2dF9oYW5kbGVyKHN0cnVjdCBtcHNfc29mdGMgKnNjLCB1aW50 cHRyX3QgZGF0YSwKICAgICBNUEkyX0VWRU5UX05PVElGSUNBVElPTl9SRVBMWSAqZXZlbnQpOwog dm9pZCBtcHNzYXNfcHJlcGFyZV9yZW1vdmUoc3RydWN0IG1wc3Nhc19zb2Z0YyAqc2Fzc2MsIHVp bnQxNl90IGhhbmRsZSk7Cit2b2lkIG1wc3Nhc19wcmVwYXJlX3ZvbHVtZV9yZW1vdmUoc3RydWN0 IG1wc3Nhc19zb2Z0YyAqc2Fzc2MsIHVpbnQxNl90IGhhbmRsZSk7CiBpbnQgbXBzc2FzX3N0YXJ0 dXAoc3RydWN0IG1wc19zb2Z0YyAqc2MpOworc3RydWN0IG1wc3Nhc190YXJnZXQgKiBtcHNzYXNf ZmluZF90YXJnZXRfYnlfaGFuZGxlKHN0cnVjdCBtcHNzYXNfc29mdGMgKiwgaW50LCB1aW50MTZf dCk7CiAKIFNZU0NUTF9ERUNMKF9od19tcHMpOwogCiAK --_002_B2FD678A64EAAD45B089B123FDFC3ED729A3414E2Einbmail01lsic_--