From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Remy Bohmer" Subject: [PATCH]: Atmel Serial Console interrupt handler splitup Date: Fri, 7 Dec 2007 16:24:27 +0100 Message-ID: <3efb10970712070724i6fa66666t2b8422329759ce24@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_15370_13392544.1197041068064" Cc: RT , "ARM Linux Mailing List" , "Steven Rostedt" , "David Brownell" To: "Andrew Victor" Return-path: Received: from rv-out-0910.google.com ([209.85.198.184]:10971 "EHLO rv-out-0910.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750785AbXLGPY2 (ORCPT ); Fri, 7 Dec 2007 10:24:28 -0500 Received: by rv-out-0910.google.com with SMTP id k20so720153rvb for ; Fri, 07 Dec 2007 07:24:28 -0800 (PST) Sender: linux-rt-users-owner@vger.kernel.org List-ID: ------=_Part_15370_13392544.1197041068064 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello Andrew, Attached I have put 3 patches for the AT91-series for the serial port driver on AT91. The interrupt handler of the serial console is quite long, and if Preempt-RT is used on AT91 the interrupt handler is even doing illegal things. These illegal things are related to the DBGU port of which the interrupt handler is shared with the system_interrupt which automagically runs in IRQF_NODELAY context due to the timer interrupt. The old interrupt handler calls some kernel interfaces that can block on a mutex. To solve this, I have split up the interrupt handler in a IRQF_NODELAY safe/unsafe part, with as result that the code running in real interrupt context is shortened a lot (the tty driver part is now called from a tasklet). On AT91 David Brownell noticed several months ago that the DBGU can miss some characters on NO_HZ. I would expect that this would be better now due to the shorter interrupt handler, although it was not my goal to solve it with these patches. (David can you verify if this is better now?) So, I have here 3 patches: * atmel_serial_cleanup -> This patch adapts the driver to the coding rules, splits the interrupt handler into 3 routines (cuts the routine in more readable pieces) , but there is no functional change involved. * atmel_serial_irq_splitup -> This patch splits up the interrupt handler. * atmel_serial_irqf_nodelay -> This patch is additionally required to get it properly working on Preempt-RT. (This patch should thus go into the RT-patch, AFTER integration of the other 2 patches into mainline) BUT: I based the patch on the 2.6.23.1 + your patch collection at http://maxim.org.za/AT91RM9200/2.6/2.6.23-at91.patch.gz I did this because this driver conflicts with the DMA(PDC) patches that are in the patchset on maxim.org.za. I found out that these DMA patches are still not integrated into mainline, although it is in your patchset for several kernel releases. I can make a series based on kernel mainline, but that would harden the integration for you in your patchset. The patchset itself is not dependant on the DMA changes, so I can split it up, but the DMA changes itself are quite heavy. But there is also a relation with Preempt-RT. To get the patch in preempt RT the other patches has to be in mainline, so things are stacking up now. What is wise here? should I create a new patchset for mainline? Or can you push the DMA patch also to mainline together with this set? I have it working here for months, so I see no reason not to, maybe you have a reason? I tested it on AT91rm9200-EK (+proprietary boards) + AT91SAM9261-EK, in combination with: 2.6.23.1 and 2.6.23.1-rt5 up to serial speed to 115200 (also with 99% CPU load on prio 99 on RT, no missing characters detected.) Note: Preempt-RT CANNOT run without these patches on AT91. Kind Regards, Remy Bohmer ------=_Part_15370_13392544.1197041068064 Content-Type: application/octet-stream; name=patch_atmel_serial_cleanup Content-Transfer-Encoding: base64 X-Attachment-Id: f_f9wu0tia Content-Disposition: attachment; filename=patch_atmel_serial_cleanup VGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGF0bWVsX3NlcmlhbCBkcml2ZXIgdG8gY29uZm9ybSB0 aGUgY29kaW5nIHJ1bGVzLgoKVGhpcyBwYXRjaCBkZW1hbmRzIHRoZSBwYXRjaCBodHRwOi8vbWF4 aW0ub3JnLnphL0FUOTFSTTkyMDAvMi42LzIuNi4yMy1hdDkxLnBhdGNoLmd6CnRvIGJlIGluc3Rh bGxlZCBmaXJzdC4KClNpZ25lZC1vZmYtYnk6IFJlbXkgQm9obWVyIDxsaW51eEBib2htZXIubmV0 PgotLS0KIGRyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIHwgIDQ1OSArKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNjMgaW5zZXJ0 aW9ucygrKSwgMTk2IGRlbGV0aW9ucygtKQoKSW5kZXg6IGxpbnV4LTIuNi4yMy9kcml2ZXJzL3Nl cmlhbC9hdG1lbF9zZXJpYWwuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaW51eC0yLjYuMjMub3JpZy9kcml2 ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwkyMDA3LTEyLTA1IDE0OjQ4OjI4LjAwMDAwMDAwMCAr MDEwMAorKysgbGludXgtMi42LjIzL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCTIwMDct MTItMDUgMTU6MDg6MjQuMDAwMDAwMDAwICswMTAwCkBAIC01Myw3ICs1Myw3IEBACiAjZGVmaW5l IFNVUFBPUlRfUERDCiAjZGVmaW5lIFBEQ19CVUZGRVJfU0laRQkJKEwxX0NBQ0hFX0JZVEVTIDw8 IDMpCiAjd2FybmluZyAiUmV2aXNpdCIKLSNkZWZpbmUgUERDX1JYX1RJTUVPVVQJCSgzICogMTAp CQkvKiAzIGJ5dGVzICovCisjZGVmaW5lIFBEQ19SWF9USU1FT1VUCQkoMyAqIDEwKQkvKiAzIGJ5 dGVzICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRSkgJiYgZGVm aW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCiAjZGVmaW5lIFNVUFBPUlRfU1lTUlEKQEAgLTgyLDQ0 ICs4Miw1MCBAQAogCiAjZGVmaW5lIEFUTUVMX0lTUl9QQVNTX0xJTUlUCTI1NgogCi0jZGVmaW5l IFVBUlRfUFVUX0NSKHBvcnQsdikJX19yYXdfd3JpdGVsKHYsIChwb3J0KS0+bWVtYmFzZSArIEFU TUVMX1VTX0NSKQorI2RlZmluZSBVQVJUX1BVVF9DUihwb3J0LCB2KQlfX3Jhd193cml0ZWwodiwg KHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfVVNfQ1IpCiAjZGVmaW5lIFVBUlRfR0VUX01SKHBvcnQp CV9fcmF3X3JlYWRsKChwb3J0KS0+bWVtYmFzZSArIEFUTUVMX1VTX01SKQotI2RlZmluZSBVQVJU X1BVVF9NUihwb3J0LHYpCV9fcmF3X3dyaXRlbCh2LCAocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9V U19NUikKLSNkZWZpbmUgVUFSVF9QVVRfSUVSKHBvcnQsdikJX19yYXdfd3JpdGVsKHYsIChwb3J0 KS0+bWVtYmFzZSArIEFUTUVMX1VTX0lFUikKLSNkZWZpbmUgVUFSVF9QVVRfSURSKHBvcnQsdikJ X19yYXdfd3JpdGVsKHYsIChwb3J0KS0+bWVtYmFzZSArIEFUTUVMX1VTX0lEUikKKyNkZWZpbmUg VUFSVF9QVVRfTVIocG9ydCwgdikJX19yYXdfd3JpdGVsKHYsIChwb3J0KS0+bWVtYmFzZSArIEFU TUVMX1VTX01SKQorI2RlZmluZSBVQVJUX1BVVF9JRVIocG9ydCwgdikJX19yYXdfd3JpdGVsKHYs IChwb3J0KS0+bWVtYmFzZSArIEFUTUVMX1VTX0lFUikKKyNkZWZpbmUgVUFSVF9QVVRfSURSKHBv cnQsIHYpCV9fcmF3X3dyaXRlbCh2LCAocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9VU19JRFIpCiAj ZGVmaW5lIFVBUlRfR0VUX0lNUihwb3J0KQlfX3Jhd19yZWFkbCgocG9ydCktPm1lbWJhc2UgKyBB VE1FTF9VU19JTVIpCiAjZGVmaW5lIFVBUlRfR0VUX0NTUihwb3J0KQlfX3Jhd19yZWFkbCgocG9y dCktPm1lbWJhc2UgKyBBVE1FTF9VU19DU1IpCiAjZGVmaW5lIFVBUlRfR0VUX0NIQVIocG9ydCkJ X19yYXdfcmVhZGwoKHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfVVNfUkhSKQotI2RlZmluZSBVQVJU X1BVVF9DSEFSKHBvcnQsdikJX19yYXdfd3JpdGVsKHYsIChwb3J0KS0+bWVtYmFzZSArIEFUTUVM X1VTX1RIUikKKyNkZWZpbmUgVUFSVF9QVVRfQ0hBUihwb3J0LCB2KQlfX3Jhd193cml0ZWwodiwg KHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfVVNfVEhSKQogI2RlZmluZSBVQVJUX0dFVF9CUkdSKHBv cnQpCV9fcmF3X3JlYWRsKChwb3J0KS0+bWVtYmFzZSArIEFUTUVMX1VTX0JSR1IpCi0jZGVmaW5l IFVBUlRfUFVUX0JSR1IocG9ydCx2KQlfX3Jhd193cml0ZWwodiwgKHBvcnQpLT5tZW1iYXNlICsg QVRNRUxfVVNfQlJHUikKLSNkZWZpbmUgVUFSVF9QVVRfUlRPUihwb3J0LHYpCV9fcmF3X3dyaXRl bCh2LCAocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9VU19SVE9SKQorI2RlZmluZSBVQVJUX1BVVF9C UkdSKHBvcnQsIHYpCV9fcmF3X3dyaXRlbCh2LCAocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9VU19C UkdSKQorI2RlZmluZSBVQVJUX1BVVF9SVE9SKHBvcnQsIHYpCV9fcmF3X3dyaXRlbCh2LCAocG9y dCktPm1lbWJhc2UgKyBBVE1FTF9VU19SVE9SKQogCi0vLyAjZGVmaW5lIFVBUlRfR0VUX0NSKHBv cnQpCV9fcmF3X3JlYWRsKChwb3J0KS0+bWVtYmFzZSArIEFUTUVMX1VTX0NSKQkJLy8gaXMgd3Jp dGUtb25seQorLyogd3JpdGUtb25seTogKi8KKy8qICNkZWZpbmUgVUFSVF9HRVRfQ1IocG9ydCkg ICAgX19yYXdfcmVhZGwoKHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfVVNfQ1IpICovCiAKICAvKiBQ REMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFVBUlRfUFVUX1BUQ1IocG9ydCx2KQlfX3Jhd193cml0 ZWwodiwgKHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfUERDX1BUQ1IpCisjZGVmaW5lIFVBUlRfUFVU X1BUQ1IocG9ydCwgdikJX19yYXdfd3JpdGVsKHYsIFwKKwkJCQkJICAgICAocG9ydCktPm1lbWJh c2UgKyBBVE1FTF9QRENfUFRDUikKICNkZWZpbmUgVUFSVF9HRVRfUFRTUihwb3J0KQlfX3Jhd19y ZWFkbCgocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9QRENfUFRTUikKIAotI2RlZmluZSBVQVJUX1BV VF9SUFIocG9ydCx2KQlfX3Jhd193cml0ZWwodiwgKHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfUERD X1JQUikKKyNkZWZpbmUgVUFSVF9QVVRfUlBSKHBvcnQsIHYpCV9fcmF3X3dyaXRlbCh2LCAocG9y dCktPm1lbWJhc2UgKyBBVE1FTF9QRENfUlBSKQogI2RlZmluZSBVQVJUX0dFVF9SUFIocG9ydCkJ X19yYXdfcmVhZGwoKHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfUERDX1JQUikKLSNkZWZpbmUgVUFS VF9QVVRfUkNSKHBvcnQsdikJX19yYXdfd3JpdGVsKHYsIChwb3J0KS0+bWVtYmFzZSArIEFUTUVM X1BEQ19SQ1IpCi0jZGVmaW5lIFVBUlRfUFVUX1JOUFIocG9ydCx2KQlfX3Jhd193cml0ZWwodiwg KHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfUERDX1JOUFIpCi0jZGVmaW5lIFVBUlRfUFVUX1JOQ1Io cG9ydCx2KQlfX3Jhd193cml0ZWwodiwgKHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfUERDX1JOQ1Ip Ci0KLSNkZWZpbmUgVUFSVF9QVVRfVFBSKHBvcnQsdikJX19yYXdfd3JpdGVsKHYsIChwb3J0KS0+ bWVtYmFzZSArIEFUTUVMX1BEQ19UUFIpCi0jZGVmaW5lIFVBUlRfUFVUX1RDUihwb3J0LHYpCV9f cmF3X3dyaXRlbCh2LCAocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9QRENfVENSKQotLy8jZGVmaW5l IFVBUlRfUFVUX1ROUFIocG9ydCx2KQlfX3Jhd193cml0ZWwodiwgKHBvcnQpLT5tZW1iYXNlICsg QVRNRUxfUERDX1ROUFIpCi0vLyNkZWZpbmUgVUFSVF9QVVRfVE5DUihwb3J0LHYpCV9fcmF3X3dy aXRlbCh2LCAocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9QRENfVE5DUikKKyNkZWZpbmUgVUFSVF9Q VVRfUkNSKHBvcnQsIHYpCV9fcmF3X3dyaXRlbCh2LCAocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9Q RENfUkNSKQorI2RlZmluZSBVQVJUX1BVVF9STlBSKHBvcnQsIHYpCV9fcmF3X3dyaXRlbCh2LCBc CisJCQkJCSAgICAgICAocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9QRENfUk5QUikKKyNkZWZpbmUg VUFSVF9QVVRfUk5DUihwb3J0LCB2KQlfX3Jhd193cml0ZWwodiwgXAorCQkJCQkgICAgICAgKHBv cnQpLT5tZW1iYXNlICsgQVRNRUxfUERDX1JOQ1IpCisKKyNkZWZpbmUgVUFSVF9QVVRfVFBSKHBv cnQsIHYpCV9fcmF3X3dyaXRlbCh2LCAocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9QRENfVFBSKQor I2RlZmluZSBVQVJUX1BVVF9UQ1IocG9ydCwgdikJX19yYXdfd3JpdGVsKHYsIChwb3J0KS0+bWVt YmFzZSArIEFUTUVMX1BEQ19UQ1IpCisvKiNkZWZpbmUgVUFSVF9QVVRfVE5QUihwb3J0LCB2KSBf X3Jhd193cml0ZWwodiwgXAorCQkJCQkgICAgKHBvcnQpLT5tZW1iYXNlICsgQVRNRUxfUERDX1RO UFIpKi8KKy8qI2RlZmluZSBVQVJUX1BVVF9UTkNSKHBvcnQsIHYpIF9fcmF3X3dyaXRlbCh2LCBc CisJCQkJCSAgICAocG9ydCktPm1lbWJhc2UgKyBBVE1FTF9QRENfVE5DUikqLwogCi1zdGF0aWMg aW50ICgqYXRtZWxfb3Blbl9ob29rKShzdHJ1Y3QgdWFydF9wb3J0ICopOwotc3RhdGljIHZvaWQg KCphdG1lbF9jbG9zZV9ob29rKShzdHJ1Y3QgdWFydF9wb3J0ICopOworc3RhdGljIGludCAoKmF0 bWVsX29wZW5faG9vaykgKHN0cnVjdCB1YXJ0X3BvcnQgKik7CitzdGF0aWMgdm9pZCAoKmF0bWVs X2Nsb3NlX2hvb2spIChzdHJ1Y3QgdWFydF9wb3J0ICopOwogCiBzdHJ1Y3QgYXRtZWxfZG1hX2J1 ZmZlciB7Ci0JdW5zaWduZWQgY2hhcgkqYnVmOwotCWRtYV9hZGRyX3QJZG1hX2FkZHI7Ci0Jc2l6 ZV90CQlkbWFfc2l6ZTsKLQl1bnNpZ25lZCBpbnQJb2ZzOworCXVuc2lnbmVkIGNoYXIgICAqYnVm OworCWRtYV9hZGRyX3QgICAgICBkbWFfYWRkcjsKKwlzaXplX3QgICAgICAgICAgZG1hX3NpemU7 CisJdW5zaWduZWQgICAgICAgIGludCBvZnM7CiB9OwogCiAvKgpAQCAtMTI3LDE2ICsxMzMsMTYg QEAgc3RydWN0IGF0bWVsX2RtYV9idWZmZXIgewogICovCiBzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0 IHsKIAlzdHJ1Y3QgdWFydF9wb3J0CXVhcnQ7CQkvKiB1YXJ0ICovCi0Jc3RydWN0IGNsawkJKmNs azsJCS8qIHVhcnQgY2xvY2sgKi8KLQl1bnNpZ25lZCBzaG9ydAkJc3VzcGVuZGVkOwkvKiBpcyBw b3J0IHN1c3BlbmRlZD8gKi8KLQlpbnQJCQlicmVha19hY3RpdmU7CS8qIGJyZWFrIGJlaW5nIHJl Y2VpdmVkICovCi0KLQlzaG9ydAkJCXVzZV9kbWFfcng7CS8qIGVuYWJsZSBQREMgcmVjZWl2ZXIg Ki8KLQlzaG9ydAkJCXBkY19yeF9pZHg7CS8qIGN1cnJlbnQgUERDIFJYIGJ1ZmZlciAqLwotCXN0 cnVjdCBhdG1lbF9kbWFfYnVmZmVyCXBkY19yeFsyXTsJLyogUERDIHJlY2VpZXIgKi8KKwlzdHJ1 Y3QgY2xrIAkJKmNsazsJCS8qIHVhcnQgY2xvY2sgKi8KKwl1bnNpZ25lZCBzaG9ydCAJCXN1c3Bl bmRlZDsJLyogaXMgcG9ydCBzdXNwZW5kZWQ/ICovCisJaW50IAkJCWJyZWFrX2FjdGl2ZTsJLyog YnJlYWsgYmVpbmcgcmVjZWl2ZWQgKi8KKworCXNob3J0IAkJCXVzZV9kbWFfcng7CS8qIGVuYWJs ZSBQREMgcmVjZWl2ZXIgKi8KKwlzaG9ydCAJCQlwZGNfcnhfaWR4OwkvKiBjdXJyZW50IFBEQyBS WCBidWZmZXIgKi8KKwlzdHJ1Y3QgYXRtZWxfZG1hX2J1ZmZlciBwZGNfcnhbMl07CS8qIFBEQyBy ZWNlaXZlciAqLwogCi0Jc2hvcnQJCQl1c2VfZG1hX3R4OwkvKiBlbmFibGUgUERDIHRyYW5zbWl0 dGVyICovCi0Jc3RydWN0IGF0bWVsX2RtYV9idWZmZXIJcGRjX3R4OwkJLyogUERDIHRyYW5zbWl0 dGVyICovCisJc2hvcnQgCQkJdXNlX2RtYV90eDsJLyogZW5hYmxlIFBEQyB0cmFuc21pdHRlciAq LworCXN0cnVjdCBhdG1lbF9kbWFfYnVmZmVyIHBkY190eDsJCS8qIFBEQyB0cmFuc21pdHRlciAq LwogfTsKIAogc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgYXRtZWxfcG9ydHNbQVRNRUxf TUFYX1VBUlRdOwpAQCAtMTY3LDggKzE3Myw4IEBAIHN0YXRpYyB2b2lkIGF0bWVsX3NldF9tY3Ry bChzdHJ1Y3QgdWFydF8KICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxUk05MjAwCiAJaWYgKGNwdV9p c19hdDkxcm05MjAwKCkpIHsKIAkJLyoKLQkJICogQVQ5MVJNOTIwMCBFcnJhdGEgIzM5OiBSVFMw IGlzIG5vdCBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBQQTIxLgotCQkgKiAgV2UgbmVlZCB0byBk cml2ZSB0aGUgcGluIG1hbnVhbGx5LgorCQkgKiBBVDkxUk05MjAwIEVycmF0YSAjMzk6IFJUUzAg aXMgbm90IGludGVybmFsbHkKKwkJICogY29ubmVjdGVkIHRvIFBBMjEuIFdlIG5lZWQgdG8gZHJp dmUgdGhlIHBpbiBtYW51YWxseS4KIAkJICovCiAJCWlmIChwb3J0LT5tYXBiYXNlID09IEFUOTFS TTkyMDBfQkFTRV9VUzApIHsKIAkJCWlmIChtY3RybCAmIFRJT0NNX1JUUykKQEAgLTIyOSwxMyAr MjM1LDEzIEBAIHN0YXRpYyB1X2ludCBhdG1lbF9nZXRfbWN0cmwoc3RydWN0IHVhcnQKICAqLwog c3RhdGljIHZvaWQgYXRtZWxfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0 cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQgPSAoc3RydWN0IGF0bWVsX3VhcnRfcG9y dCAqKSBwb3J0OworCXN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQgPSAoc3RydWN0 IGF0bWVsX3VhcnRfcG9ydCAqKXBvcnQ7CiAKIAlpZiAoYXRtZWxfcG9ydC0+dXNlX2RtYV90eCkg ewotCQlVQVJUX1BVVF9QVENSKHBvcnQsIEFUTUVMX1BEQ19UWFRESVMpOwkJLyogZGlzYWJsZSBQ REMgdHJhbnNtaXQgKi8KKwkJLyogZGlzYWJsZSBQREMgdHJhbnNtaXQgKi8KKwkJVUFSVF9QVVRf UFRDUihwb3J0LCBBVE1FTF9QRENfVFhURElTKTsKIAkJVUFSVF9QVVRfSURSKHBvcnQsIEFUTUVM X1VTX0VORFRYIHwgQVRNRUxfVVNfVFhCVUZFKTsKLQl9Ci0JZWxzZQorCX0gZWxzZQogCQlVQVJU X1BVVF9JRFIocG9ydCwgQVRNRUxfVVNfVFhSRFkpOwogfQogCkBAIC0yNDQsMTggKzI1MCwxOCBA QCBzdGF0aWMgdm9pZCBhdG1lbF9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvCiAgKi8KIHN0YXRpYyB2 b2lkIGF0bWVsX3N0YXJ0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IGF0 bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IChzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICopIHBv cnQ7CisJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IChzdHJ1Y3QgYXRtZWxf dWFydF9wb3J0ICopcG9ydDsKIAogCWlmIChhdG1lbF9wb3J0LT51c2VfZG1hX3R4KSB7CiAJCWlm IChVQVJUX0dFVF9QVFNSKHBvcnQpICYgQVRNRUxfUERDX1RYVEVOKQogCQkJLyogVGhlIHRyYW5z bWl0dGVyIGlzIGFscmVhZHkgcnVubmluZy4gIFllcywgd2UKLQkJCSAgIHJlYWxseSBuZWVkIHRo aXMuKi8KKwkJCSAgIHJlYWxseSBuZWVkIHRoaXMuICovCiAJCQlyZXR1cm47CiAKIAkJVUFSVF9Q VVRfSUVSKHBvcnQsIEFUTUVMX1VTX0VORFRYIHwgQVRNRUxfVVNfVFhCVUZFKTsKLQkJVUFSVF9Q VVRfUFRDUihwb3J0LCBBVE1FTF9QRENfVFhURU4pOwkJLyogcmUtZW5hYmxlIFBEQyB0cmFuc21p dCAqLwotCX0KLQllbHNlCisJCS8qIHJlLWVuYWJsZSBQREMgdHJhbnNtaXQgKi8KKwkJVUFSVF9Q VVRfUFRDUihwb3J0LCBBVE1FTF9QRENfVFhURU4pOworCX0gZWxzZQogCQlVQVJUX1BVVF9JRVIo cG9ydCwgQVRNRUxfVVNfVFhSRFkpOwogfQogCkBAIC0yNjQsMTMgKzI3MCwxMyBAQCBzdGF0aWMg dm9pZCBhdG1lbF9zdGFydF90eChzdHJ1Y3QgdWFydF9wCiAgKi8KIHN0YXRpYyB2b2lkIGF0bWVs X3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgYXRtZWxfdWFydF9w b3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKikgcG9ydDsKKwlzdHJ1 Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQg Kilwb3J0OwogCiAJaWYgKGF0bWVsX3BvcnQtPnVzZV9kbWFfcngpIHsKLQkJVUFSVF9QVVRfUFRD Uihwb3J0LCBBVE1FTF9QRENfUlhURElTKTsJCS8qIGRpc2FibGUgUERDIHJlY2VpdmUgKi8KKwkJ LyogZGlzYWJsZSBQREMgcmVjZWl2ZSAqLworCQlVQVJUX1BVVF9QVENSKHBvcnQsIEFUTUVMX1BE Q19SWFRESVMpOwogCQlVQVJUX1BVVF9JRFIocG9ydCwgQVRNRUxfVVNfRU5EUlggfCBBVE1FTF9V U19USU1FT1VUKTsKLQl9Ci0JZWxzZQorCX0gZWxzZQogCQlVQVJUX1BVVF9JRFIocG9ydCwgQVRN RUxfVVNfUlhSRFkpOwogfQogCkBAIC0yNzksNyArMjg1LDkgQEAgc3RhdGljIHZvaWQgYXRtZWxf c3RvcF9yeChzdHJ1Y3QgdWFydF9wbwogICovCiBzdGF0aWMgdm9pZCBhdG1lbF9lbmFibGVfbXMo c3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlVQVJUX1BVVF9JRVIocG9ydCwgQVRNRUxfVVNf UklJQyB8IEFUTUVMX1VTX0RTUklDIHwgQVRNRUxfVVNfRENESUMgfCBBVE1FTF9VU19DVFNJQyk7 CisJVUFSVF9QVVRfSUVSKHBvcnQsCisJCSAgICAgQVRNRUxfVVNfUklJQyB8IEFUTUVMX1VTX0RT UklDIHwgQVRNRUxfVVNfRENESUMgfAorCQkgICAgIEFUTUVMX1VTX0NUU0lDKTsKIH0KIAogLyoK QEAgLTI5OCwxNCArMzA2LDE1IEBAIHN0YXRpYyB2b2lkIGF0bWVsX2JyZWFrX2N0bChzdHJ1Y3Qg dWFydF8KICAqLwogc3RhdGljIHZvaWQgYXRtZWxfcGRjX2VuZHJ4KHN0cnVjdCB1YXJ0X3BvcnQg KnBvcnQpCiB7Ci0Jc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IChzdHJ1Y3Qg YXRtZWxfdWFydF9wb3J0ICopIHBvcnQ7CisJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxf cG9ydCA9IChzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICopcG9ydDsKIAlzdHJ1Y3QgdHR5X3N0cnVj dCAqdHR5ID0gcG9ydC0+aW5mby0+dHR5OwogCXN0cnVjdCBhdG1lbF9kbWFfYnVmZmVyICpwZGMg PSBQRENfUlhfQlVGKGF0bWVsX3BvcnQpOwogCXVuc2lnbmVkIGludCBjb3VudDsKIAogCWNvdW50 ID0gcGRjLT5kbWFfc2l6ZSAtIHBkYy0+b2ZzOwogCWlmIChsaWtlbHkoY291bnQgPiAwKSkgewot CQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShwb3J0LT5kZXYsIHBkYy0+ZG1hX2FkZHIsIHBkYy0+ ZG1hX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHBv cnQtPmRldiwgcGRjLT5kbWFfYWRkciwKKwkJCQkJcGRjLT5kbWFfc2l6ZSwgRE1BX0ZST01fREVW SUNFKTsKIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIHBkYy0+YnVmICsgcGRjLT5vZnMs IGNvdW50KTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIApAQCAtMzE4LDcgKzMyNyw3 IEBAIHN0YXRpYyB2b2lkIGF0bWVsX3BkY19lbmRyeChzdHJ1Y3QgdWFydF8KIAlVQVJUX1BVVF9S TkNSKHBvcnQsIHBkYy0+ZG1hX3NpemUpOwogCiAJLyogU3dpdGNoIHRvIG5leHQgYnVmZmVyICov Ci0JUERDX1JYX1NXSVRDSChhdG1lbF9wb3J0KTsJCS8qIG5leHQgUERDIGJ1ZmZlciAqLworCVBE Q19SWF9TV0lUQ0goYXRtZWxfcG9ydCk7CS8qIG5leHQgUERDIGJ1ZmZlciAqLwogfQogCiAvKgpA QCAtMzI3LDE2ICszMzYsMTcgQEAgc3RhdGljIHZvaWQgYXRtZWxfcGRjX2VuZHJ4KHN0cnVjdCB1 YXJ0XwogICovCiBzdGF0aWMgdm9pZCBhdG1lbF9wZGNfdGltZW91dChzdHJ1Y3QgdWFydF9wb3J0 ICpwb3J0KQogewotCXN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQgPSAoc3RydWN0 IGF0bWVsX3VhcnRfcG9ydCAqKSBwb3J0OworCXN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVs X3BvcnQgPSAoc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqKXBvcnQ7CiAJc3RydWN0IHR0eV9zdHJ1 Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnR0eTsKIAlzdHJ1Y3QgYXRtZWxfZG1hX2J1ZmZlciAqcGRj ID0gUERDX1JYX0JVRihhdG1lbF9wb3J0KTsKIAkvKiB1bnNpZ25lZCAqLyBpbnQgb2ZzLCBjb3Vu dDsKIAotCW9mcyA9IFVBUlRfR0VUX1JQUihwb3J0KSAtIHBkYy0+ZG1hX2FkZHI7CS8qIGN1cnJl bnQgRE1BIGFkcmVzcyAqLworCW9mcyA9IFVBUlRfR0VUX1JQUihwb3J0KSAtIHBkYy0+ZG1hX2Fk ZHI7IC8qIGN1cnJlbnQgRE1BIGFkcmVzcyAqLwogCWNvdW50ID0gb2ZzIC0gcGRjLT5vZnM7CiAK IAlpZiAobGlrZWx5KGNvdW50ID4gMCkpIHsKLQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocG9y dC0+ZGV2LCBwZGMtPmRtYV9hZGRyLCBwZGMtPmRtYV9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOwor CQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShwb3J0LT5kZXYsIHBkYy0+ZG1hX2FkZHIsIHBkYy0+ ZG1hX3NpemUsCisJCQkJCURNQV9GUk9NX0RFVklDRSk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJp bmcodHR5LCBwZGMtPmJ1ZiArIHBkYy0+b2ZzLCBjb3VudCk7CiAJCXR0eV9mbGlwX2J1ZmZlcl9w dXNoKHR0eSk7CiAKQEAgLTM1Nyw3ICszNjcsOCBAQCBzdGF0aWMgdm9pZCBhdG1lbF9wZGNfcnhl cnIoc3RydWN0IHVhcnRfCiAJVUFSVF9QVVRfQ1IocG9ydCwgQVRNRUxfVVNfUlNUU1RBKTsKIAog CWlmIChzdGF0dXMgJiBBVE1FTF9VU19SWEJSSykgewotCQlzdGF0dXMgJj0gfihBVE1FTF9VU19Q QVJFIHwgQVRNRUxfVVNfRlJBTUUpOwkvKiBpZ25vcmUgc2lkZS1lZmZlY3QgKi8KKwkJLyogaWdu b3JlIHNpZGUtZWZmZWN0ICovCisJCXN0YXR1cyAmPSB+KEFUTUVMX1VTX1BBUkUgfCBBVE1FTF9V U19GUkFNRSk7CiAJCXBvcnQtPmljb3VudC5icmsrKzsKIAl9CiAJaWYgKHN0YXR1cyAmIEFUTUVM X1VTX1BBUkUpCkBAIC0zNzMsNyArMzg0LDcgQEAgc3RhdGljIHZvaWQgYXRtZWxfcGRjX3J4ZXJy KHN0cnVjdCB1YXJ0XwogICovCiBzdGF0aWMgdm9pZCBhdG1lbF9wZGNfZW5kdHgoc3RydWN0IHVh cnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0g KHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKikgcG9ydDsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0 ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKilwb3J0OwogCXN0cnVjdCBj aXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OwogCXN0cnVjdCBhdG1lbF9kbWFfYnVm ZmVyICpwZGMgPSAmYXRtZWxfcG9ydC0+cGRjX3R4OwogCkBAIC0zOTQsMTUgKzQwNSwxNiBAQCBz dGF0aWMgdm9pZCBhdG1lbF9wZGNfZW5kdHgoc3RydWN0IHVhcnRfCiAgKi8KIHN0YXRpYyB2b2lk IGF0bWVsX3BkY190eGJ1ZmUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgYXRt ZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKikgcG9y dDsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91 YXJ0X3BvcnQgKilwb3J0OwogCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54 bWl0OwogCXN0cnVjdCBhdG1lbF9kbWFfYnVmZmVyICpwZGMgPSAmYXRtZWxfcG9ydC0+cGRjX3R4 OwogCWludCBjb3VudDsKIAogCWlmICghdWFydF9jaXJjX2VtcHR5KHhtaXQpKSB7CiAJCS8qIG1v cmUgdG8gdHJhbnNtaXQgLSBzZXR1cCBuZXh0IHRyYW5zZmVyICovCi0JCVVBUlRfUFVUX1BUQ1Io cG9ydCwgQVRNRUxfUERDX1RYVERJUyk7CQkJLyogZGlzYWJsZSBQREMgdHJhbnNtaXQgKi8KLQkJ ZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocG9ydC0+ZGV2LCBwZGMtPmRtYV9hZGRyLCBwZGMt PmRtYV9zaXplLCBETUFfVE9fREVWSUNFKTsKKwkJVUFSVF9QVVRfUFRDUihwb3J0LCBBVE1FTF9Q RENfVFhURElTKTsvKiBkaXNhYmxlIFBEQyB0cmFuc21pdCAqLworCQlkbWFfc3luY19zaW5nbGVf Zm9yX2RldmljZShwb3J0LT5kZXYsIHBkYy0+ZG1hX2FkZHIsCisJCQkJCSAgIHBkYy0+ZG1hX3Np emUsIERNQV9UT19ERVZJQ0UpOwogCiAJCWlmICh4bWl0LT50YWlsIDwgeG1pdC0+aGVhZCkKIAkJ CWNvdW50ID0geG1pdC0+aGVhZCAtIHhtaXQtPnRhaWw7CkBAIC00MTIsMTEgKzQyNCwxMSBAQCBz dGF0aWMgdm9pZCBhdG1lbF9wZGNfdHhidWZlKHN0cnVjdCB1YXJ0CiAKIAkJVUFSVF9QVVRfVFBS KHBvcnQsIHBkYy0+ZG1hX2FkZHIgKyB4bWl0LT50YWlsKTsKIAkJVUFSVF9QVVRfVENSKHBvcnQs IGNvdW50KTsKLQkJVUFSVF9QVVRfUFRDUihwb3J0LCBBVE1FTF9QRENfVFhURU4pOwkJCS8qIHJl LWVuYWJsZSBQREMgdHJhbnNtaXQgKi8KLQl9Ci0JZWxzZSB7CisJCS8qIHJlLWVuYWJsZSBQREMg dHJhbnNtaXQgKi8KKwkJVUFSVF9QVVRfUFRDUihwb3J0LCBBVE1FTF9QRENfVFhURU4pOworCX0g ZWxzZSB7CiAJCS8qIG5vdGhpbmcgbGVmdCB0byB0cmFuc21pdCAtIGRpc2FibGUgdGhlIHRyYW5z bWl0dGVyICovCi0JCVVBUlRfUFVUX1BUQ1IocG9ydCwgQVRNRUxfUERDX1RYVERJUyk7CQkJLyog ZGlzYWJsZSBQREMgdHJhbnNtaXQgKi8KKwkJVUFSVF9QVVRfUFRDUihwb3J0LCBBVE1FTF9QRENf VFhURElTKTsvKiBkaXNhYmxlIFBEQyB0cmFuc21pdCAqLwogCQlVQVJUX1BVVF9JRFIocG9ydCwg QVRNRUxfVVNfRU5EVFggfCBBVE1FTF9VU19UWEJVRkUpOwogCX0KIH0KQEAgLTQyNiw3ICs0Mzgs NyBAQCBzdGF0aWMgdm9pZCBhdG1lbF9wZGNfdHhidWZlKHN0cnVjdCB1YXJ0CiAgKi8KIHN0YXRp YyB2b2lkIGF0bWVsX3J4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0 IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IChzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICop IHBvcnQ7CisJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IChzdHJ1Y3QgYXRt ZWxfdWFydF9wb3J0ICopcG9ydDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+aW5m by0+dHR5OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCBmbGc7CiAKQEAgLTQ0NSwxMCArNDU3 LDExIEBAIHN0YXRpYyB2b2lkIGF0bWVsX3J4X2NoYXJzKHN0cnVjdCB1YXJ0X3AKIAkJaWYgKHVu bGlrZWx5KHN0YXR1cyAmIChBVE1FTF9VU19QQVJFIHwgQVRNRUxfVVNfRlJBTUUKIAkJCQkgICAg ICAgfCBBVE1FTF9VU19PVlJFIHwgQVRNRUxfVVNfUlhCUkspCiAJCQkgICAgIHx8IGF0bWVsX3Bv cnQtPmJyZWFrX2FjdGl2ZSkpIHsKLQkJCVVBUlRfUFVUX0NSKHBvcnQsIEFUTUVMX1VTX1JTVFNU QSk7CS8qIGNsZWFyIGVycm9yICovCisJCQlVQVJUX1BVVF9DUihwb3J0LCBBVE1FTF9VU19SU1RT VEEpOyAvKiBjbGVhciBlcnJvciAqLwogCQkJaWYgKHN0YXR1cyAmIEFUTUVMX1VTX1JYQlJLCiAJ CQkgICAgJiYgIWF0bWVsX3BvcnQtPmJyZWFrX2FjdGl2ZSkgewotCQkJCXN0YXR1cyAmPSB+KEFU TUVMX1VTX1BBUkUgfCBBVE1FTF9VU19GUkFNRSk7CS8qIGlnbm9yZSBzaWRlLWVmZmVjdCAqLwor CQkJCS8qIGlnbm9yZSBzaWRlLWVmZmVjdCAqLworCQkJCXN0YXR1cyAmPSB+KEFUTUVMX1VTX1BB UkUgfCBBVE1FTF9VU19GUkFNRSk7CiAJCQkJcG9ydC0+aWNvdW50LmJyaysrOwogCQkJCWF0bWVs X3BvcnQtPmJyZWFrX2FjdGl2ZSA9IDE7CiAJCQkJVUFSVF9QVVRfSUVSKHBvcnQsIEFUTUVMX1VT X1JYQlJLKTsKQEAgLTUyOSw1OCArNTQyLDg4IEBAIHN0YXRpYyB2b2lkIGF0bWVsX3R4X2NoYXJz KHN0cnVjdCB1YXJ0X3AKIH0KIAogLyoKKyAqIHJlY2VpdmUgaW50ZXJydXB0IGhhbmRsZXIuCisg Ki8KK3N0YXRpYyB2b2lkIGF0bWVsX2hhbmRsZV9yZWNlaXZlKHN0cnVjdCB1YXJ0X3BvcnQgKnBv cnQsIHVuc2lnbmVkIGludCBwZW5kaW5nKQoreworCXN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0 bWVsX3BvcnQgPSAoc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqKXBvcnQ7CisKKwkvKiBQREMgcmVj ZWl2ZSAqLworCWlmIChwZW5kaW5nICYgQVRNRUxfVVNfRU5EUlgpCisJCWF0bWVsX3BkY19lbmRy eChwb3J0KTsKKwlpZiAocGVuZGluZyAmIEFUTUVMX1VTX1RJTUVPVVQpCisJCWF0bWVsX3BkY190 aW1lb3V0KHBvcnQpOworCWlmIChhdG1lbF9wb3J0LT51c2VfZG1hX3J4CisJICAgICYmIHBlbmRp bmcgJiAoQVRNRUxfVVNfUlhCUksgfCBBVE1FTF9VU19PVlJFIHwgQVRNRUxfVVNfRlJBTUUgfAor CQkJICBBVE1FTF9VU19QQVJFKSkKKwkJYXRtZWxfcGRjX3J4ZXJyKHBvcnQsIHBlbmRpbmcpOwor CisJLyogSW50ZXJydXB0IHJlY2VpdmUgKi8KKwlpZiAocGVuZGluZyAmIEFUTUVMX1VTX1JYUkRZ KQorCQlhdG1lbF9yeF9jaGFycyhwb3J0KTsKKwllbHNlIGlmIChwZW5kaW5nICYgQVRNRUxfVVNf UlhCUkspIHsKKwkJLyoKKwkJICogRW5kIG9mIGJyZWFrIGRldGVjdGVkLiBJZiBpdCBjYW1lIGFs b25nCisJCSAqIHdpdGggYSBjaGFyYWN0ZXIsIGF0bWVsX3J4X2NoYXJzIHdpbGwKKwkJICogaGFu ZGxlIGl0LgorCQkgKi8KKwkJVUFSVF9QVVRfQ1IocG9ydCwgQVRNRUxfVVNfUlNUU1RBKTsKKwkJ VUFSVF9QVVRfSURSKHBvcnQsIEFUTUVMX1VTX1JYQlJLKTsKKwkJYXRtZWxfcG9ydC0+YnJlYWtf YWN0aXZlID0gMDsKKwl9Cit9CisKKy8qCisgKiB0cmFuc21pdCBpbnRlcnJ1cHQgaGFuZGxlci4K KyAqLworc3RhdGljIHZvaWQgYXRtZWxfaGFuZGxlX3RyYW5zbWl0KHN0cnVjdCB1YXJ0X3BvcnQg KnBvcnQsIHVuc2lnbmVkIGludCBwZW5kaW5nKQoreworCS8qIFBEQyB0cmFuc21pdCAqLworCWlm IChwZW5kaW5nICYgQVRNRUxfVVNfRU5EVFgpCisJCWF0bWVsX3BkY19lbmR0eChwb3J0KTsKKwlp ZiAocGVuZGluZyAmIEFUTUVMX1VTX1RYQlVGRSkKKwkJYXRtZWxfcGRjX3R4YnVmZShwb3J0KTsK KworCS8qIEludGVycnVwdCB0cmFuc21pdCAqLworCWlmIChwZW5kaW5nICYgQVRNRUxfVVNfVFhS RFkpCisJCWF0bWVsX3R4X2NoYXJzKHBvcnQpOworfQorCisvKgorICogc3RhdHVzIGZsYWdzIGlu dGVycnVwdCBoYW5kbGVyLgorICovCitzdGF0aWMgdm9pZCBhdG1lbF9oYW5kbGVfc3RhdHVzKHN0 cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBwZW5kaW5nLAorCQkJCXVuc2lnbmVk IGludCBzdGF0dXMpCit7CisJLyogVE9ETzogQWxsIHJlYWRzIHRvIENTUiB3aWxsIGNsZWFyIHRo ZXNlIGludGVycnVwdHMhICovCisJaWYgKHBlbmRpbmcgJiBBVE1FTF9VU19SSUlDKQorCQlwb3J0 LT5pY291bnQucm5nKys7CisJaWYgKHBlbmRpbmcgJiBBVE1FTF9VU19EU1JJQykKKwkJcG9ydC0+ aWNvdW50LmRzcisrOworCisJaWYgKHBlbmRpbmcgJiBBVE1FTF9VU19EQ0RJQykKKwkJdWFydF9o YW5kbGVfZGNkX2NoYW5nZShwb3J0LCAhKHN0YXR1cyAmIEFUTUVMX1VTX0RDRCkpOworCWlmIChw ZW5kaW5nICYgQVRNRUxfVVNfQ1RTSUMpCisJCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UocG9ydCwg IShzdGF0dXMgJiBBVE1FTF9VU19DVFMpKTsKKwlpZiAocGVuZGluZyAmCisJICAgIChBVE1FTF9V U19SSUlDIHwgQVRNRUxfVVNfRFNSSUMgfCBBVE1FTF9VU19EQ0RJQyB8IEFUTUVMX1VTX0NUU0lD KSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7 Cit9CisKKy8qCiAgKiBJbnRlcnJ1cHQgaGFuZGxlcgogICovCiBzdGF0aWMgaXJxcmV0dXJuX3Qg YXRtZWxfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgdWFydF9w b3J0ICpwb3J0ID0gZGV2X2lkOwotCXN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQg PSAoc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqKSBwb3J0OwogCXVuc2lnbmVkIGludCBzdGF0dXMs IHBlbmRpbmcsIHBhc3NfY291bnRlciA9IDA7CiAKIAlzdGF0dXMgPSBVQVJUX0dFVF9DU1IocG9y dCk7CiAJcGVuZGluZyA9IHN0YXR1cyAmIFVBUlRfR0VUX0lNUihwb3J0KTsKIAl3aGlsZSAocGVu ZGluZykgewotCQkvKiBQREMgcmVjZWl2ZSAqLwotCQlpZiAocGVuZGluZyAmIEFUTUVMX1VTX0VO RFJYKQotCQkJYXRtZWxfcGRjX2VuZHJ4KHBvcnQpOwotCQlpZiAocGVuZGluZyAmIEFUTUVMX1VT X1RJTUVPVVQpCi0JCQlhdG1lbF9wZGNfdGltZW91dChwb3J0KTsKLQkJaWYgKGF0bWVsX3BvcnQt PnVzZV9kbWFfcnggJiYgcGVuZGluZyAmIChBVE1FTF9VU19SWEJSSyB8IEFUTUVMX1VTX09WUkUg fCBBVE1FTF9VU19GUkFNRSB8IEFUTUVMX1VTX1BBUkUpKQotCQkJYXRtZWxfcGRjX3J4ZXJyKHBv cnQsIHBlbmRpbmcpOwotCi0JCS8qIEludGVycnVwdCByZWNlaXZlICovCi0JCWlmIChwZW5kaW5n ICYgQVRNRUxfVVNfUlhSRFkpCi0JCQlhdG1lbF9yeF9jaGFycyhwb3J0KTsKLQkJZWxzZSBpZiAo cGVuZGluZyAmIEFUTUVMX1VTX1JYQlJLKSB7Ci0JCQkvKgotCQkJICogRW5kIG9mIGJyZWFrIGRl dGVjdGVkLiBJZiBpdCBjYW1lIGFsb25nCi0JCQkgKiB3aXRoIGEgY2hhcmFjdGVyLCBhdG1lbF9y eF9jaGFycyB3aWxsCi0JCQkgKiBoYW5kbGUgaXQuCi0JCQkgKi8KLQkJCVVBUlRfUFVUX0NSKHBv cnQsIEFUTUVMX1VTX1JTVFNUQSk7Ci0JCQlVQVJUX1BVVF9JRFIocG9ydCwgQVRNRUxfVVNfUlhC UkspOwotCQkJYXRtZWxfcG9ydC0+YnJlYWtfYWN0aXZlID0gMDsKLQkJfQotCi0JCS8vIFRPRE86 IEFsbCByZWFkcyB0byBDU1Igd2lsbCBjbGVhciB0aGVzZSBpbnRlcnJ1cHRzIQotCQlpZiAocGVu ZGluZyAmIEFUTUVMX1VTX1JJSUMpIHBvcnQtPmljb3VudC5ybmcrKzsKLQkJaWYgKHBlbmRpbmcg JiBBVE1FTF9VU19EU1JJQykgcG9ydC0+aWNvdW50LmRzcisrOwotCQlpZiAocGVuZGluZyAmIEFU TUVMX1VTX0RDRElDKQotCQkJdWFydF9oYW5kbGVfZGNkX2NoYW5nZShwb3J0LCAhKHN0YXR1cyAm IEFUTUVMX1VTX0RDRCkpOwotCQlpZiAocGVuZGluZyAmIEFUTUVMX1VTX0NUU0lDKQotCQkJdWFy dF9oYW5kbGVfY3RzX2NoYW5nZShwb3J0LCAhKHN0YXR1cyAmIEFUTUVMX1VTX0NUUykpOwotCQlp ZiAocGVuZGluZyAmIChBVE1FTF9VU19SSUlDIHwgQVRNRUxfVVNfRFNSSUMgfCBBVE1FTF9VU19E Q0RJQyB8IEFUTUVMX1VTX0NUU0lDKSkKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+ aW5mby0+ZGVsdGFfbXNyX3dhaXQpOwotCi0JCS8qIFBEQyB0cmFuc21pdCAqLwotCQlpZiAocGVu ZGluZyAmIEFUTUVMX1VTX0VORFRYKQotCQkJYXRtZWxfcGRjX2VuZHR4KHBvcnQpOwotCQlpZiAo cGVuZGluZyAmIEFUTUVMX1VTX1RYQlVGRSkKLQkJCWF0bWVsX3BkY190eGJ1ZmUocG9ydCk7Ci0K LQkJLyogSW50ZXJydXB0IHRyYW5zbWl0ICovCi0JCWlmIChwZW5kaW5nICYgQVRNRUxfVVNfVFhS RFkpCi0JCQlhdG1lbF90eF9jaGFycyhwb3J0KTsKKwkJYXRtZWxfaGFuZGxlX3JlY2VpdmUocG9y dCwgcGVuZGluZyk7CisJCWF0bWVsX2hhbmRsZV9zdGF0dXMocG9ydCwgcGVuZGluZywgc3RhdHVz KTsKKwkJYXRtZWxfaGFuZGxlX3RyYW5zbWl0KHBvcnQsIHBlbmRpbmcpOwogCiAJCWlmIChwYXNz X2NvdW50ZXIrKyA+IEFUTUVMX0lTUl9QQVNTX0xJTUlUKQogCQkJYnJlYWs7CkBAIC01OTYsNyAr NjM5LDcgQEAgc3RhdGljIGlycXJldHVybl90IGF0bWVsX2ludGVycnVwdChpbnQgaQogICovCiBz dGF0aWMgaW50IGF0bWVsX3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1 Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQg KikgcG9ydDsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBh dG1lbF91YXJ0X3BvcnQgKilwb3J0OwogCWludCByZXR2YWw7CiAKIAkvKgpAQCAtNjA5LDcgKzY1 Miw5IEBAIHN0YXRpYyBpbnQgYXRtZWxfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3IKIAkvKgogCSAq IEFsbG9jYXRlIHRoZSBJUlEKIAkgKi8KLQlyZXR2YWwgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEs IGF0bWVsX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJhdG1lbF9zZXJpYWwiLCBwb3J0KTsKKwly ZXR2YWwgPQorCSAgICByZXF1ZXN0X2lycShwb3J0LT5pcnEsIGF0bWVsX2ludGVycnVwdCwgSVJR Rl9TSEFSRUQsICJhdG1lbF9zZXJpYWwiLAorCQkJcG9ydCk7CiAJaWYgKHJldHZhbCkgewogCQlw cmludGsoImF0bWVsX3NlcmlhbDogYXRtZWxfc3RhcnR1cCAtIENhbid0IGdldCBpcnFcbiIpOwog CQlyZXR1cm4gcmV0dmFsOwpAQCAtNjI3LDEzICs2NzIsMTkgQEAgc3RhdGljIGludCBhdG1lbF9z dGFydHVwKHN0cnVjdCB1YXJ0X3BvcgogCQkJcGRjLT5idWYgPSBrbWFsbG9jKFBEQ19CVUZGRVJf U0laRSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocGRjLT5idWYgPT0gTlVMTCkgewogCQkJCWlmIChp ICE9IDApIHsKLQkJCQkJZG1hX3VubWFwX3NpbmdsZShwb3J0LT5kZXYsIGF0bWVsX3BvcnQtPnBk Y19yeFswXS5kbWFfYWRkciwgUERDX0JVRkZFUl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQkJ CQlkbWFfdW5tYXBfc2luZ2xlKHBvcnQtPmRldiwKKwkJCQkJCQkgYXRtZWxfcG9ydC0+cGRjX3J4 WzBdLgorCQkJCQkJCSBkbWFfYWRkciwKKwkJCQkJCQkgUERDX0JVRkZFUl9TSVpFLAorCQkJCQkJ CSBETUFfRlJPTV9ERVZJQ0UpOwogCQkJCQlrZnJlZShhdG1lbF9wb3J0LT5wZGNfcnhbMF0uYnVm KTsKIAkJCQl9CiAJCQkJZnJlZV9pcnEocG9ydC0+aXJxLCBwb3J0KTsKIAkJCQlyZXR1cm4gLUVO T01FTTsKIAkJCX0KLQkJCXBkYy0+ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShwb3J0LT5kZXYs IHBkYy0+YnVmLCBQRENfQlVGRkVSX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJCQlwZGMtPmRt YV9hZGRyID0KKwkJCSAgICBkbWFfbWFwX3NpbmdsZShwb3J0LT5kZXYsIHBkYy0+YnVmLCBQRENf QlVGRkVSX1NJWkUsCisJCQkJCSAgIERNQV9GUk9NX0RFVklDRSk7CiAJCQlwZGMtPmRtYV9zaXpl ID0gUERDX0JVRkZFUl9TSVpFOwogCQkJcGRjLT5vZnMgPSAwOwogCQl9CkBAIC02NTEsNyArNzAy LDkgQEAgc3RhdGljIGludCBhdG1lbF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcgogCQlzdHJ1Y3Qg Y2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKIAogCQlwZGMtPmJ1ZiA9IHhtaXQt PmJ1ZjsKLQkJcGRjLT5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHBvcnQtPmRldiwgcGRjLT5i dWYsIFNFUklBTF9YTUlUX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCQlwZGMtPmRtYV9hZGRyID0K KwkJICAgIGRtYV9tYXBfc2luZ2xlKHBvcnQtPmRldiwgcGRjLT5idWYsIFNFUklBTF9YTUlUX1NJ WkUsCisJCQkJICAgRE1BX1RPX0RFVklDRSk7CiAJCXBkYy0+ZG1hX3NpemUgPSBTRVJJQUxfWE1J VF9TSVpFOwogCQlwZGMtPm9mcyA9IDA7CiAJfQpAQCAtNjcyLDE4ICs3MjUsMjEgQEAgc3RhdGlj IGludCBhdG1lbF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcgogCSAqIEZpbmFsbHksIGVuYWJsZSB0 aGUgc2VyaWFsIHBvcnQKIAkgKi8KIAlVQVJUX1BVVF9DUihwb3J0LCBBVE1FTF9VU19SU1RTVEEg fCBBVE1FTF9VU19SU1RSWCk7Ci0JVUFSVF9QVVRfQ1IocG9ydCwgQVRNRUxfVVNfVFhFTiB8IEFU TUVMX1VTX1JYRU4pOwkJLyogZW5hYmxlIHhtaXQgJiByY3ZyICovCisJLyogZW5hYmxlIHhtaXQg JiByY3ZyICovCisJVUFSVF9QVVRfQ1IocG9ydCwgQVRNRUxfVVNfVFhFTiB8IEFUTUVMX1VTX1JY RU4pOwogCiAJaWYgKGF0bWVsX3BvcnQtPnVzZV9kbWFfcngpIHsKLQkJVUFSVF9QVVRfUlRPUihw b3J0LCBQRENfUlhfVElNRU9VVCk7CQkvKiBzZXQgVUFSVCB0aW1lb3V0ICovCisJCS8qIHNldCBV QVJUIHRpbWVvdXQgKi8KKwkJVUFSVF9QVVRfUlRPUihwb3J0LCBQRENfUlhfVElNRU9VVCk7CiAJ CVVBUlRfUFVUX0NSKHBvcnQsIEFUTUVMX1VTX1NUVFRPKTsKIAogCQlVQVJUX1BVVF9JRVIocG9y dCwgQVRNRUxfVVNfRU5EUlggfCBBVE1FTF9VU19USU1FT1VUKTsKLQkJVUFSVF9QVVRfUFRDUihw b3J0LCBBVE1FTF9QRENfUlhURU4pOwkJLyogZW5hYmxlIFBEQyBjb250cm9sbGVyICovCisJCS8q IGVuYWJsZSBQREMgY29udHJvbGxlciAqLworCQlVQVJUX1BVVF9QVENSKHBvcnQsIEFUTUVMX1BE Q19SWFRFTik7CisJfSBlbHNlIHsKKwkJLyogZW5hYmxlIHJlY2VpdmUgb25seSAqLworCQlVQVJU X1BVVF9JRVIocG9ydCwgQVRNRUxfVVNfUlhSRFkpOwogCX0KLQllbHNlCi0JCVVBUlRfUFVUX0lF Uihwb3J0LCBBVE1FTF9VU19SWFJEWSk7CQkvKiBlbmFibGUgcmVjZWl2ZSBvbmx5ICovCi0KIAly ZXR1cm4gMDsKIH0KIApAQCAtNjkyLDcgKzc0OCw3IEBAIHN0YXRpYyBpbnQgYXRtZWxfc3RhcnR1 cChzdHJ1Y3QgdWFydF9wb3IKICAqLwogc3RhdGljIHZvaWQgYXRtZWxfc2h1dGRvd24oc3RydWN0 IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0 ID0gKHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKikgcG9ydDsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9w b3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKilwb3J0OwogCiAJLyoK IAkgKiBFbnN1cmUgZXZlcnl0aGluZyBpcyBzdG9wcGVkLgpAQCAtNzA5LDE0ICs3NjUsMTYgQEAg c3RhdGljIHZvaWQgYXRtZWxfc2h1dGRvd24oc3RydWN0IHVhcnRfcAogCQlmb3IgKGkgPSAwOyBp IDwgMjsgaSsrKSB7CiAJCQlzdHJ1Y3QgYXRtZWxfZG1hX2J1ZmZlciAqcGRjID0gJmF0bWVsX3Bv cnQtPnBkY19yeFtpXTsKIAotCQkJZG1hX3VubWFwX3NpbmdsZShwb3J0LT5kZXYsIHBkYy0+ZG1h X2FkZHIsIHBkYy0+ZG1hX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2lu Z2xlKHBvcnQtPmRldiwgcGRjLT5kbWFfYWRkciwKKwkJCQkJIHBkYy0+ZG1hX3NpemUsIERNQV9G Uk9NX0RFVklDRSk7CiAJCQlrZnJlZShwZGMtPmJ1Zik7CiAJCX0KIAl9CiAJaWYgKGF0bWVsX3Bv cnQtPnVzZV9kbWFfdHgpIHsKIAkJc3RydWN0IGF0bWVsX2RtYV9idWZmZXIgKnBkYyA9ICZhdG1l bF9wb3J0LT5wZGNfdHg7CiAKLQkJZG1hX3VubWFwX3NpbmdsZShwb3J0LT5kZXYsIHBkYy0+ZG1h X2FkZHIsIHBkYy0+ZG1hX3NpemUsIERNQV9UT19ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xl KHBvcnQtPmRldiwgcGRjLT5kbWFfYWRkciwgcGRjLT5kbWFfc2l6ZSwKKwkJCQkgRE1BX1RPX0RF VklDRSk7CiAJfQogCiAJLyoKQEAgLTc0MSw0MyArNzk5LDQ3IEBAIHN0YXRpYyB2b2lkIGF0bWVs X3NodXRkb3duKHN0cnVjdCB1YXJ0X3AKIC8qCiAgKiBQb3dlciAvIENsb2NrIG1hbmFnZW1lbnQu CiAgKi8KLXN0YXRpYyB2b2lkIGF0bWVsX3NlcmlhbF9wbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0 LCB1bnNpZ25lZCBpbnQgc3RhdGUsIHVuc2lnbmVkIGludCBvbGRzdGF0ZSkKK3N0YXRpYyB2b2lk IGF0bWVsX3NlcmlhbF9wbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgc3Rh dGUsCisJCQkgICAgdW5zaWduZWQgaW50IG9sZHN0YXRlKQogewotCXN0cnVjdCBhdG1lbF91YXJ0 X3BvcnQgKmF0bWVsX3BvcnQgPSAoc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqKSBwb3J0OworCXN0 cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQgPSAoc3RydWN0IGF0bWVsX3VhcnRfcG9y dCAqKXBvcnQ7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7Ci0JCWNhc2UgMDoKLQkJCS8qCi0JCQkgKiBF bmFibGUgdGhlIHBlcmlwaGVyYWwgY2xvY2sgZm9yIHRoaXMgc2VyaWFsIHBvcnQuCi0JCQkgKiBU aGlzIGlzIGNhbGxlZCBvbiB1YXJ0X29wZW4oKSBvciBhIHJlc3VtZSBldmVudC4KLQkJCSAqLwot CQkJY2xrX2VuYWJsZShhdG1lbF9wb3J0LT5jbGspOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJ CS8qCi0JCQkgKiBEaXNhYmxlIHRoZSBwZXJpcGhlcmFsIGNsb2NrIGZvciB0aGlzIHNlcmlhbCBw b3J0LgotCQkJICogVGhpcyBpcyBjYWxsZWQgb24gdWFydF9jbG9zZSgpIG9yIGEgc3VzcGVuZCBl dmVudC4KLQkJCSAqLwotCQkJY2xrX2Rpc2FibGUoYXRtZWxfcG9ydC0+Y2xrKTsKLQkJCWJyZWFr OwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICJhdG1lbF9zZXJpYWw6IHVua25vd24g cG0gJWRcbiIsIHN0YXRlKTsKKwljYXNlIDA6CisJCS8qCisJCSAqIEVuYWJsZSB0aGUgcGVyaXBo ZXJhbCBjbG9jayBmb3IgdGhpcyBzZXJpYWwgcG9ydC4KKwkJICogVGhpcyBpcyBjYWxsZWQgb24g dWFydF9vcGVuKCkgb3IgYSByZXN1bWUgZXZlbnQuCisJCSAqLworCQljbGtfZW5hYmxlKGF0bWVs X3BvcnQtPmNsayk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJLyoKKwkJICogRGlzYWJsZSB0aGUg cGVyaXBoZXJhbCBjbG9jayBmb3IgdGhpcyBzZXJpYWwgcG9ydC4KKwkJICogVGhpcyBpcyBjYWxs ZWQgb24gdWFydF9jbG9zZSgpIG9yIGEgc3VzcGVuZCBldmVudC4KKwkJICovCisJCWNsa19kaXNh YmxlKGF0bWVsX3BvcnQtPmNsayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJO X0VSUiAiYXRtZWxfc2VyaWFsOiB1bmtub3duIHBtICVkXG4iLCBzdGF0ZSk7CiAJfQogfQogCiAv KgogICogQ2hhbmdlIHRoZSBwb3J0IHBhcmFtZXRlcnMKICAqLwotc3RhdGljIHZvaWQgYXRtZWxf c2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICogdGVy bWlvcywgc3RydWN0IGt0ZXJtaW9zICogb2xkKQorc3RhdGljIHZvaWQgYXRtZWxfc2V0X3Rlcm1p b3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQkJ ICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7Ci0Jc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAq YXRtZWxfcG9ydCA9IChzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICopIHBvcnQ7CisJc3RydWN0IGF0 bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IChzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICopcG9y dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBtb2RlLCBpbXIsIHF1b3Qs IGJhdWQ7CiAKIAkvKiBHZXQgY3VycmVudCBtb2RlIHJlZ2lzdGVyICovCi0JbW9kZSA9IFVBUlRf R0VUX01SKHBvcnQpICYgfihBVE1FTF9VU19VU0NMS1MgfCBBVE1FTF9VU19DSFJMIHwgQVRNRUxf VVNfTkJTVE9QIHwgQVRNRUxfVVNfUEFSKTsKKwltb2RlID0KKwkgICAgVUFSVF9HRVRfTVIocG9y dCkgJiB+KEFUTUVMX1VTX1VTQ0xLUyB8IEFUTUVMX1VTX0NIUkwgfAorCQkJCSAgQVRNRUxfVVNf TkJTVE9QIHwgQVRNRUxfVVNfUEFSKTsKIAotCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9y dCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrLzE2KTsKKwliYXVkID0gdWFydF9nZXRf YmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgcG9ydC0+dWFydGNsayAvIDE2KTsKIAlx dW90ID0gdWFydF9nZXRfZGl2aXNvcihwb3J0LCBiYXVkKTsKIAogCWlmIChxdW90ID4gNjU1MzUp IHsJLyogQlJHUiBpcyAxNi1iaXQsIHNvIHN3aXRjaCB0byBzbG93ZXIgY2xvY2sgKi8KQEAgLTgw NywxOCArODY5LDE2IEBAIHN0YXRpYyB2b2lkIGF0bWVsX3NldF90ZXJtaW9zKHN0cnVjdCB1YXIK IAogCS8qIHBhcml0eSAqLwogCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFSRU5CKSB7Ci0JCWlm ICh0ZXJtaW9zLT5jX2NmbGFnICYgQ01TUEFSKSB7CQkJLyogTWFyayBvciBTcGFjZSBwYXJpdHkg Ki8KKwkJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDTVNQQVIpIHsgLyogTWFyayBvciBTcGFjZSBw YXJpdHkgKi8KIAkJCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFST0REKQogCQkJCW1vZGUgfD0g QVRNRUxfVVNfUEFSX01BUks7CiAJCQllbHNlCiAJCQkJbW9kZSB8PSBBVE1FTF9VU19QQVJfU1BB Q0U7Ci0JCX0KLQkJZWxzZSBpZiAodGVybWlvcy0+Y19jZmxhZyAmIFBBUk9ERCkKKwkJfSBlbHNl IGlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFST0REKQogCQkJbW9kZSB8PSBBVE1FTF9VU19QQVJf T0REOwogCQllbHNlCiAJCQltb2RlIHw9IEFUTUVMX1VTX1BBUl9FVkVOOwotCX0KLQllbHNlCisJ fSBlbHNlCiAJCW1vZGUgfD0gQVRNRUxfVVNfUEFSX05PTkU7CiAKIAlzcGluX2xvY2tfaXJxc2F2 ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwpAQCAtODQ3LDE2ICs5MDcsMTYgQEAgc3RhdGljIHZvaWQg YXRtZWxfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcgogCQlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElH TlBBUikKIAkJCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBBVE1FTF9VU19PVlJFOwogCX0K LQotCS8vIFRPRE86IElnbm9yZSBhbGwgY2hhcmFjdGVycyBpZiBDUkVBRCBpcyBzZXQuCisJLyog VE9ETzogSWdub3JlIGFsbCBjaGFyYWN0ZXJzIGlmIENSRUFEIGlzIHNldC4qLwogCiAJLyogdXBk YXRlIHRoZSBwZXItcG9ydCB0aW1lb3V0ICovCiAJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCB0 ZXJtaW9zLT5jX2NmbGFnLCBiYXVkKTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgZHJh aW4gdHJhbnNtaXR0ZXIgKi8KIAlpbXIgPSBVQVJUX0dFVF9JTVIocG9ydCk7CS8qIGdldCBpbnRl cnJ1cHQgbWFzayAqLwotCVVBUlRfUFVUX0lEUihwb3J0LCAtMSk7CQkvKiBkaXNhYmxlIGFsbCBp bnRlcnJ1cHRzICovCi0Jd2hpbGUgKCEoVUFSVF9HRVRfQ1NSKHBvcnQpICYgQVRNRUxfVVNfVFhF TVBUWSkpIHsgYmFycmllcigpOyB9CisJVUFSVF9QVVRfSURSKHBvcnQsIC0xKTsJLyogZGlzYWJs ZSBhbGwgaW50ZXJydXB0cyAqLworCXdoaWxlICghKFVBUlRfR0VUX0NTUihwb3J0KSAmIEFUTUVM X1VTX1RYRU1QVFkpKQorCQliYXJyaWVyKCk7CiAKIAkvKiBkaXNhYmxlIHJlY2VpdmVyIGFuZCB0 cmFuc21pdHRlciAqLwogCVVBUlRfUFVUX0NSKHBvcnQsIEFUTUVMX1VTX1RYRElTIHwgQVRNRUxf VVNfUlhESVMpOwpAQCAtOTgyLDcgKzEwNDIsOCBAQCBzdGF0aWMgc3RydWN0IHVhcnRfb3BzIGF0 bWVsX3BvcHMgPSB7CiAvKgogICogQ29uZmlndXJlIHRoZSBwb3J0IGZyb20gdGhlIHBsYXRmb3Jt IGRldmljZSByZXNvdXJjZSBpbmZvLgogICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgYXRtZWxf aW5pdF9wb3J0KHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQsIHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYXRtZWxfaW5pdF9wb3J0 KHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQsCisJCQkJICAgICAgc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJmF0bWVs X3BvcnQtPnVhcnQ7CiAJc3RydWN0IGF0bWVsX3VhcnRfZGF0YSAqZGF0YSA9IHBkZXYtPmRldi5w bGF0Zm9ybV9kYXRhOwpAQCAtMTAwMSwxNiArMTA2MiwxNiBAQCBzdGF0aWMgdm9pZCBfX2Rldmlu aXQgYXRtZWxfaW5pdF9wb3J0KHN0CiAJCS8qIEFscmVhZHkgbWFwcGVkIGJ5IHNldHVwIGNvZGUg Ki8KIAkJcG9ydC0+bWVtYmFzZSA9IGRhdGEtPnJlZ3M7CiAJZWxzZSB7Ci0JCXBvcnQtPmZsYWdz CXw9IFVQRl9JT1JFTUFQOwotCQlwb3J0LT5tZW1iYXNlCT0gTlVMTDsKKwkJcG9ydC0+ZmxhZ3Mg fD0gVVBGX0lPUkVNQVA7CisJCXBvcnQtPm1lbWJhc2UgPSBOVUxMOwogCX0KIAotCWlmICghYXRt ZWxfcG9ydC0+Y2xrKSB7CQkvKiBmb3IgY29uc29sZSwgdGhlIGNsb2NrIGNvdWxkIGFscmVhZHkg YmUgY29uZmlndXJlZCAqLworCS8qIGZvciBjb25zb2xlLCB0aGUgY2xvY2sgY291bGQgYWxyZWFk eSBiZSBjb25maWd1cmVkICovCisJaWYgKCFhdG1lbF9wb3J0LT5jbGspIHsKIAkJYXRtZWxfcG9y dC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNhcnQiKTsKIAkJY2xrX2VuYWJsZShhdG1l bF9wb3J0LT5jbGspOwogCQlwb3J0LT51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGF0bWVsX3BvcnQt PmNsayk7CiAJfQotCiAjaWZkZWYgU1VQUE9SVF9QREMKIAlhdG1lbF9wb3J0LT51c2VfZG1hX3J4 ID0gZGF0YS0+dXNlX2RtYV9yeDsKIAlhdG1lbF9wb3J0LT51c2VfZG1hX3R4ID0gZGF0YS0+dXNl X2RtYV90eDsKQEAgLTEwMzYsNyArMTA5Nyw2IEBAIHZvaWQgX19pbml0IGF0bWVsX3JlZ2lzdGVy X3VhcnRfZm5zKHN0cnUKIAlhdG1lbF9wb3BzLnNldF93YWtlCT0gZm5zLT5zZXRfd2FrZTsKIH0K IAotCiAjaWZkZWYgQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFCiBzdGF0aWMgdm9pZCBhdG1l bF9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQogewpAQCAt MTA1NCw3ICsxMTE0LDcgQEAgc3RhdGljIHZvaWQgYXRtZWxfY29uc29sZV93cml0ZShzdHJ1Y3Qg YwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGltcjsKIAogCS8qCi0JICoJRmlyc3QsIHNhdmUgSU1S IGFuZCB0aGVuIGRpc2FibGUgaW50ZXJydXB0cworCSAqICAgICAgRmlyc3QsIHNhdmUgSU1SIGFu ZCB0aGVuIGRpc2FibGUgaW50ZXJydXB0cwogCSAqLwogCWltciA9IFVBUlRfR0VUX0lNUihwb3J0 KTsJLyogZ2V0IGludGVycnVwdCBtYXNrICovCiAJVUFSVF9QVVRfSURSKHBvcnQsIEFUTUVMX1VT X1JYUkRZIHwgQVRNRUxfVVNfVFhSRFkpOwpAQCAtMTA2MiwzMCArMTEyMiwzMSBAQCBzdGF0aWMg dm9pZCBhdG1lbF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjCiAJdWFydF9jb25zb2xlX3dyaXRlKHBv cnQsIHMsIGNvdW50LCBhdG1lbF9jb25zb2xlX3B1dGNoYXIpOwogCiAJLyoKLQkgKglGaW5hbGx5 LCB3YWl0IGZvciB0cmFuc21pdHRlciB0byBiZWNvbWUgZW1wdHkKLQkgKglhbmQgcmVzdG9yZSBJ TVIKKwkgKiAgICAgIEZpbmFsbHksIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXB0 eQorCSAqICAgICAgYW5kIHJlc3RvcmUgSU1SCiAJICovCiAJZG8gewogCQlzdGF0dXMgPSBVQVJU X0dFVF9DU1IocG9ydCk7CiAJfSB3aGlsZSAoIShzdGF0dXMgJiBBVE1FTF9VU19UWFJEWSkpOwot CVVBUlRfUFVUX0lFUihwb3J0LCBpbXIpOwkvKiBzZXQgaW50ZXJydXB0cyBiYWNrIHRoZSB3YXkg dGhleSB3ZXJlICovCisJVUFSVF9QVVRfSUVSKHBvcnQsIGltcik7IC8qIHNldCBpbnRlcnJ1cHRz IGJhY2sgdGhlIHdheSB0aGV5IHdlcmUgKi8KIH0KIAogLyoKLSAqIElmIHRoZSBwb3J0IHdhcyBh bHJlYWR5IGluaXRpYWxpc2VkIChlZywgYnkgYSBib290IGxvYWRlciksIHRyeSB0byBkZXRlcm1p bmUKLSAqIHRoZSBjdXJyZW50IHNldHVwLgorICogSWYgdGhlIHBvcnQgd2FzIGFscmVhZHkgaW5p dGlhbGlzZWQgKGVnLCBieSBhIGJvb3QgbG9hZGVyKSwKKyAqIHRyeSB0byBkZXRlcm1pbmUgdGhl IGN1cnJlbnQgc2V0dXAuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBhdG1lbF9jb25zb2xlX2dl dF9vcHRpb25zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCAqYmF1ZCwgaW50ICpwYXJpdHks IGludCAqYml0cykKK3N0YXRpYyB2b2lkIF9faW5pdCBhdG1lbF9jb25zb2xlX2dldF9vcHRpb25z KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCAqYmF1ZCwKKwkJCQkJICAgICBpbnQgKnBhcml0 eSwgaW50ICpiaXRzKQogewogCXVuc2lnbmVkIGludCBtciwgcXVvdDsKIAotLy8gVE9ETzogQ1Ig aXMgYSB3cml0ZS1vbmx5IHJlZ2lzdGVyCi0vLwl1bnNpZ25lZCBpbnQgY3I7CisvKiBUT0RPOiBD UiBpcyBhIHdyaXRlLW9ubHkgcmVnaXN0ZXIKKy8vICAgICAgdW5zaWduZWQgaW50IGNyOwogLy8K LS8vCWNyID0gVUFSVF9HRVRfQ1IocG9ydCkgJiAoQVRNRUxfVVNfUlhFTiB8IEFUTUVMX1VTX1RY RU4pOwotLy8JaWYgKGNyID09IChBVE1FTF9VU19SWEVOIHwgQVRNRUxfVVNfVFhFTikpIHsKLS8v CQkvKiBvaywgdGhlIHBvcnQgd2FzIGVuYWJsZWQgKi8KLS8vCX0KKy8vICAgICAgY3IgPSBVQVJU X0dFVF9DUihwb3J0KSAmIChBVE1FTF9VU19SWEVOIHwgQVRNRUxfVVNfVFhFTik7CisvLyAgICAg IGlmIChjciA9PSAoQVRNRUxfVVNfUlhFTiB8IEFUTUVMX1VTX1RYRU4pKSB7CisvLyAgICAgICAg ICAgICAgLyAqIG9rLCB0aGUgcG9ydCB3YXMgZW5hYmxlZCAqIC8KKy8vICAgICAgfSAqLwogCiAJ bXIgPSBVQVJUX0dFVF9NUihwb3J0KSAmIEFUTUVMX1VTX0NIUkw7CiAJaWYgKG1yID09IEFUTUVM X1VTX0NIUkxfOCkKQEAgLTExMTcsMTAgKzExNzgsMTAgQEAgc3RhdGljIGludCBfX2luaXQgYXRt ZWxfY29uc29sZV9zZXR1cChzdAogCWludCBwYXJpdHkgPSAnbic7CiAJaW50IGZsb3cgPSAnbic7 CiAKLQlpZiAocG9ydC0+bWVtYmFzZSA9PSAwKQkJLyogUG9ydCBub3QgaW5pdGlhbGl6ZWQgeWV0 IC0gZGVsYXkgc2V0dXAgKi8KKwlpZiAocG9ydC0+bWVtYmFzZSA9PSAwKQkvKiBQb3J0IG5vdCBp bml0aWFsaXplZCB5ZXQgLSBkZWxheSBzZXR1cCAqLwogCQlyZXR1cm4gLUVOT0RFVjsKIAotCVVB UlRfUFVUX0lEUihwb3J0LCAtMSk7CQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCVVBUlRf UFVUX0lEUihwb3J0LCAtMSk7CS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCVVBUlRfUFVUX0NS KHBvcnQsIEFUTUVMX1VTX1JTVFNUQSB8IEFUTUVMX1VTX1JTVFJYKTsKIAlVQVJUX1BVVF9DUihw b3J0LCBBVE1FTF9VU19UWEVOIHwgQVRNRUxfVVNfUlhFTik7CiAKQEAgLTExNTIsMTMgKzEyMTMs MTcgQEAgc3RhdGljIHN0cnVjdCBjb25zb2xlIGF0bWVsX2NvbnNvbGUgPSB7CiBzdGF0aWMgaW50 IF9faW5pdCBhdG1lbF9jb25zb2xlX2luaXQodm9pZCkKIHsKIAlpZiAoYXRtZWxfZGVmYXVsdF9j b25zb2xlX2RldmljZSkgewotCQlhZGRfcHJlZmVycmVkX2NvbnNvbGUoQVRNRUxfREVWSUNFTkFN RSwgYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZS0+aWQsIE5VTEwpOwotCQlhdG1lbF9pbml0 X3BvcnQoJihhdG1lbF9wb3J0c1thdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlLT5pZF0pLCBh dG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKTsKKwkJYWRkX3ByZWZlcnJlZF9jb25zb2xlKEFU TUVMX0RFVklDRU5BTUUsCisJCQkJICAgICAgYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZS0+ aWQsIE5VTEwpOworCQlhdG1lbF9pbml0X3BvcnQoCisJCQkgICAgICAmKGF0bWVsX3BvcnRzW2F0 bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UtPmlkXSksCisJCQkgICAgICBhdG1lbF9kZWZhdWx0 X2NvbnNvbGVfZGV2aWNlKTsKIAkJcmVnaXN0ZXJfY29uc29sZSgmYXRtZWxfY29uc29sZSk7CiAJ fQogCiAJcmV0dXJuIDA7CiB9CisKIGNvbnNvbGVfaW5pdGNhbGwoYXRtZWxfY29uc29sZV9pbml0 KTsKIAogLyoKQEAgLTExNjYsMTEgKzEyMzEsMTMgQEAgY29uc29sZV9pbml0Y2FsbChhdG1lbF9j b25zb2xlX2luaXQpOwogICovCiBzdGF0aWMgaW50IF9faW5pdCBhdG1lbF9sYXRlX2NvbnNvbGVf aW5pdCh2b2lkKQogewotCWlmIChhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlICYmICEoYXRt ZWxfY29uc29sZS5mbGFncyAmIENPTl9FTkFCTEVEKSkKKwlpZiAoYXRtZWxfZGVmYXVsdF9jb25z b2xlX2RldmljZQorCSAgICAmJiAhKGF0bWVsX2NvbnNvbGUuZmxhZ3MgJiBDT05fRU5BQkxFRCkp CiAJCXJlZ2lzdGVyX2NvbnNvbGUoJmF0bWVsX2NvbnNvbGUpOwogCiAJcmV0dXJuIDA7CiB9CisK IGNvcmVfaW5pdGNhbGwoYXRtZWxfbGF0ZV9jb25zb2xlX2luaXQpOwogCiAjZWxzZQpAQCAtMTE3 OCwyMyArMTI0NSwyNCBAQCBjb3JlX2luaXRjYWxsKGF0bWVsX2xhdGVfY29uc29sZV9pbml0KTsK ICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIGF0bWVsX3VhcnQgPSB7Ci0JLm93 bmVyCQkJPSBUSElTX01PRFVMRSwKLQkuZHJpdmVyX25hbWUJCT0gImF0bWVsX3NlcmlhbCIsCi0J LmRldl9uYW1lCQk9IEFUTUVMX0RFVklDRU5BTUUsCi0JLm1ham9yCQkJPSBTRVJJQUxfQVRNRUxf TUFKT1IsCi0JLm1pbm9yCQkJPSBNSU5PUl9TVEFSVCwKLQkubnIJCQk9IEFUTUVMX01BWF9VQVJU LAotCS5jb25zCQkJPSBBVE1FTF9DT05TT0xFX0RFVklDRSwKKwkub3duZXIJCT0gVEhJU19NT0RV TEUsCisJLmRyaXZlcl9uYW1lCT0gImF0bWVsX3NlcmlhbCIsCisJLmRldl9uYW1lCT0gQVRNRUxf REVWSUNFTkFNRSwKKwkubWFqb3IJCT0gU0VSSUFMX0FUTUVMX01BSk9SLAorCS5taW5vcgkJPSBN SU5PUl9TVEFSVCwKKwkubnIJCT0gQVRNRUxfTUFYX1VBUlQsCisJLmNvbnMJCT0gQVRNRUxfQ09O U09MRV9ERVZJQ0UsCiB9OwogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGF0bWVsX3Nl cmlhbF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBz dGF0ZSkKK3N0YXRpYyBpbnQgYXRtZWxfc2VyaWFsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiwKKwkJCQlwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHVhcnRfcG9y dCAqcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdG1lbF91YXJ0 X3BvcnQgKmF0bWVsX3BvcnQgPSAoc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqKSBwb3J0OworCXN0 cnVjdCBhdG1lbF91YXJ0X3BvcnQgKmF0bWVsX3BvcnQgPSAoc3RydWN0IGF0bWVsX3VhcnRfcG9y dCAqKXBvcnQ7CiAKIAlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikKLQkJCSYmICFj bGtfbXVzdF9kaXNhYmxlKGF0bWVsX3BvcnQtPmNsaykpCisJICAgICYmICFjbGtfbXVzdF9kaXNh YmxlKGF0bWVsX3BvcnQtPmNsaykpCiAJCWVuYWJsZV9pcnFfd2FrZShwb3J0LT5pcnEpOwogCWVs c2UgewogCQl1YXJ0X3N1c3BlbmRfcG9ydCgmYXRtZWxfdWFydCwgcG9ydCk7CkBAIC0xMjA3LDEz ICsxMjc1LDEyIEBAIHN0YXRpYyBpbnQgYXRtZWxfc2VyaWFsX3N1c3BlbmQoc3RydWN0IHAKIHN0 YXRpYyBpbnQgYXRtZWxfc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsKLQlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91 YXJ0X3BvcnQgKikgcG9ydDsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0g KHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKilwb3J0OwogCiAJaWYgKGF0bWVsX3BvcnQtPnN1c3Bl bmRlZCkgewogCQl1YXJ0X3Jlc3VtZV9wb3J0KCZhdG1lbF91YXJ0LCBwb3J0KTsKIAkJYXRtZWxf cG9ydC0+c3VzcGVuZGVkID0gMDsKLQl9Ci0JZWxzZQorCX0gZWxzZQogCQlkaXNhYmxlX2lycV93 YWtlKHBvcnQtPmlycSk7CiAKIAlyZXR1cm4gMDsKQEAgLTEyNDMsNyArMTMxMCw3IEBAIHN0YXRp YyBpbnQgX19kZXZpbml0IGF0bWVsX3NlcmlhbF9wcm9iZSgKIHN0YXRpYyBpbnQgX19kZXZleGl0 IGF0bWVsX3NlcmlhbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlz dHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3Ry dWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IChzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0 ICopIHBvcnQ7CisJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAqYXRtZWxfcG9ydCA9IChzdHJ1Y3Qg YXRtZWxfdWFydF9wb3J0ICopcG9ydDsKIAlpbnQgcmV0ID0gMDsKIAogCWNsa19kaXNhYmxlKGF0 bWVsX3BvcnQtPmNsayk7CkBAIC0xMjY2LDkgKzEzMzMsOSBAQCBzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBhdG1lbF9zZXJpCiAJLnN1c3BlbmQJPSBhdG1lbF9zZXJpYWxfc3VzcGVuZCwK IAkucmVzdW1lCQk9IGF0bWVsX3NlcmlhbF9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1l CT0gImF0bWVsX3VzYXJ0IiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKKwkJCSAgLm5h bWUgPSAiYXRtZWxfdXNhcnQiLAorCQkJICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJCSAgfSwK IH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGF0bWVsX3NlcmlhbF9pbml0KHZvaWQpCg== ------=_Part_15370_13392544.1197041068064 Content-Type: application/octet-stream; name=patch_atmel_serial_irq_splitup Content-Transfer-Encoding: base64 X-Attachment-Id: f_f9wu1ed1 Content-Disposition: attachment; filename=patch_atmel_serial_irq_splitup VGhpcyBwYXRjaCBzcGxpdHMgdXAgdGhlIGludGVycnVwdCBoYW5kbGVyIG9mIHRoZSBzZXJpYWwg cG9ydAppbnRvIGEgaW50ZXJydXB0IHRvcC1oYWxmIGFuZCBzb21lIHRhc2tsZXRzLgoKVGhlIGdv YWwgaXMgdG8gZ2V0IHRoZSBpbnRlcnJ1cHQgdG9wLWhhbGYgYXMgc2hvcnQgYXMgcG9zc2libGUg dG8KbWluaW1pemUgbGF0ZW5jaWVzIG9uIGludGVycnVwdHMuIEJ1dCB0aGUgb2xkIGNvZGUgYWxz byBkb2VzIHNvbWUKY2FsbHMgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIHRoYXQgYXJlIG5vdCBh bGxvd2VkIG9uIHByZWVtcHQtUlQKaW4gSVJRRl9OT0RFTEFZIGNvbnRleHQuIFRoaXMgaGFuZGxl ciBpcyBleGVjdXRlZCBpbiB0aGlzIGNvbnRleHQKYmVjYXVzZSBvZiB0aGUgaW50ZXJydXB0IHNo YXJpbmcgd2l0aCB0aGUgdGltZXIgaW50ZXJydXB0LgpUaGUgdGltZXIgaW50ZXJydXB0IG9uIFBy ZWVtcHQtUlQgcnVucyBpbiBJUlFGX05PREVMQVkgY29udGV4dC4KCjIgdGFza2xldHMgYXJlIHVz ZWQ6Ciogb25lIGZvciBoYW5kbGluZyB0aGUgZXJyb3Igc3RhdHVzZXMKKiBvbmUgZm9yIHB1c2hp bmcgdGhlIGluY29taW5nIGNoYXJhY3RlcnMgaW50byB0aGUgdHR5LWxheWVyLgoKVGhlIFRyYW5z bWl0IHBhdGggd2FzIElSUUZfTk9ERUxBWSBzYWZlIGJ5IGl0c2VsZiwgYW5kIGlzIG5vdCBhZGFw dGVkLgpUaGUgcmVhZCBwYXRoIGZvciBETUEoUERDKSBpcyBhbHNvIG5vdCBhZGFwdGVkLCBiZWNh dXNlIHRoYXQgY29kZQpkb2VzIG5vdCBydW4gaW4gSVJRRl9OT0RFTEFZIGNvbnRleHQgZHVlIHRv IGlycS1zaGFyaW5nLiBUaGUgREJHVSAKd2hpY2ggaXMgc2hhcmVkIHdpdGggdGhlIHRpbWVyLWly cSBkb2VzIG5vdCB3b3JrIHdpdGggRE1BLCBzbyAKdGhlcmVmb3IgdGhpcyBpcyBubyBwcm9ibGVt LgoKUmVhZGluZyB0aGUgY29tcGxldGUgcmVjZWl2ZSBxdWV1ZSBpcyBzdGlsbCBkb25lIGluIHRo ZSB0b3AtaGFsZgpiZWNhdXNlIHdlIG5ldmVyIHdhbnQgdG8gbWlzcyBhbnkgaW5jb21pbmcgY2hh cmFjdGVyLgoKVGhpcyBwYXRjaCBkZW1hbmRzIHRoZSBmb2xsb3dpbmcgcGF0Y2hlcyB0byBiZSBp bnN0YWxsZWQgZmlyc3Q6CiogaHR0cDovL21heGltLm9yZy56YS9BVDkxUk05MjAwLzIuNi8yLjYu MjMtYXQ5MS5wYXRjaC5negoqIGF0bWVsX3NlcmlhbF9jbGVhbnVwLnBhdGNoCgpTaWduZWQtb2Zm LWJ5OiBSZW15IEJvaG1lciA8bGludXhAYm9obWVyLm5ldD4KLS0tCiBkcml2ZXJzL3NlcmlhbC9h dG1lbF9zZXJpYWwuYyB8ICAxNTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTM2IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygt KQoKSW5kZXg6IGxpbnV4LTIuNi4yMy9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBsaW51eC0yLjYuMjMub3JpZy9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwu YwkyMDA3LTEyLTA3IDE1OjMxOjQ4LjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi42LjIzL2Ry aXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCTIwMDctMTItMDcgMTU6MzM6MzQuMDAwMDAwMDAw ICswMTAwCkBAIC0xMjgsNiArMTI4LDIyIEBAIHN0cnVjdCBhdG1lbF9kbWFfYnVmZmVyIHsKIAl1 bnNpZ25lZCAgICAgICAgaW50IG9mczsKIH07CiAKK3N0cnVjdCBhdG1lbF91YXJ0X2NoYXIgewor CXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IG92ZXJydW47CisJdW5zaWduZWQg aW50IGNoOworCXVuc2lnbmVkIGludCBmbGc7Cit9OworCisjZGVmaW5lIEFUTUVMX1NFUklBTF9S SU5HU0laRSAxMDI0CisKK3N0cnVjdCBhdG1lbF91YXJ0X3JpbmcgeworCXVuc2lnbmVkIGludCAg ICAgICAgICBoZWFkOworCXVuc2lnbmVkIGludCAgICAgICAgICB0YWlsOworCXVuc2lnbmVkIGlu dCAgICAgICAgICBjb3VudDsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9jaGFyIGRhdGFbQVRNRUxfU0VS SUFMX1JJTkdTSVpFXTsKK307CisKIC8qCiAgKiBXZSB3cmFwIG91ciBwb3J0IHN0cnVjdHVyZSBh cm91bmQgdGhlIGdlbmVyaWMgdWFydF9wb3J0LgogICovCkBAIC0xNDMsNiArMTU5LDEzIEBAIHN0 cnVjdCBhdG1lbF91YXJ0X3BvcnQgewogCiAJc2hvcnQgCQkJdXNlX2RtYV90eDsJLyogZW5hYmxl IFBEQyB0cmFuc21pdHRlciAqLwogCXN0cnVjdCBhdG1lbF9kbWFfYnVmZmVyIHBkY190eDsJCS8q IFBEQyB0cmFuc21pdHRlciAqLworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0ICAgcnhfdGFzazsK KwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgICBzdGF0dXNfdGFzazsKKwl1bnNpZ25lZCBpbnQgCQlp cnFfcGVuZGluZzsKKwl1bnNpZ25lZCBpbnQgCQlpcnFfc3RhdHVzOworCisJc3RydWN0IGF0bWVs X3VhcnRfcmluZyAgcnhfcmluZzsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0 IGF0bWVsX3BvcnRzW0FUTUVMX01BWF9VQVJUXTsKQEAgLTQzNCwxMiArNDU3LDQyIEBAIHN0YXRp YyB2b2lkIGF0bWVsX3BkY190eGJ1ZmUoc3RydWN0IHVhcnQKIH0KIAogLyoKKyAqIFN0b3JlcyB0 aGUgaW5jb21pbmcgY2hhcmFjdGVyIGluIHRoZSByaW5nIGJ1ZmZlcgorICovCitzdGF0aWMgdm9p ZAorYXRtZWxfYnVmZmVyX3J4X2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQg aW50IHN0YXR1cywKKwkJICAgICB1bnNpZ25lZCBpbnQgb3ZlcnJ1biwgdW5zaWduZWQgaW50IGNo LAorCQkgICAgIHVuc2lnbmVkIGludCBmbGcpCit7CisJc3RydWN0IGF0bWVsX3VhcnRfcG9ydCAq YXRtZWxfcG9ydCA9IChzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgYXRt ZWxfdWFydF9yaW5nICpyaW5nID0gJmF0bWVsX3BvcnQtPnJ4X3Jpbmc7CisJc3RydWN0IGF0bWVs X3VhcnRfY2hhciAqYzsKKworCXNwaW5fbG9ja19iaCgmcG9ydC0+bG9jayk7CisKKwlpZiAocmlu Zy0+Y291bnQgPT0gQVRNRUxfU0VSSUFMX1JJTkdTSVpFKQorCQlnb3RvIG91dDsgLyogQnVmZmVy IG92ZXJmbG93LCBpZ25vcmUgY2hhciAqLworCisJYyA9ICZyaW5nLT5kYXRhW3JpbmctPmhlYWRd OworCWMtPnN0YXR1cyAgPSBzdGF0dXM7CisJYy0+b3ZlcnJ1biA9IG92ZXJydW47CisJYy0+Y2gg ICAgICA9IGNoOworCWMtPmZsZyAgICAgPSBmbGc7CisKKwlyaW5nLT5oZWFkKys7CisJcmluZy0+ aGVhZCAlPSBBVE1FTF9TRVJJQUxfUklOR1NJWkU7CisJcmluZy0+Y291bnQrKzsKKworIG91dDoK KwlzcGluX3VubG9ja19iaCgmcG9ydC0+bG9jayk7Cit9CisKKy8qCiAgKiBDaGFyYWN0ZXJzIHJl Y2VpdmVkIChjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlcikKICAqLwogc3RhdGljIHZvaWQg YXRtZWxfcnhfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgYXRtZWxf dWFydF9wb3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKilwb3J0Owot CXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT50dHk7CiAJdW5zaWduZWQgaW50 IHN0YXR1cywgY2gsIGZsZzsKIAogCXN0YXR1cyA9IFVBUlRfR0VUX0NTUihwb3J0KTsKQEAgLTQ5 OSwxMyArNTUyLDEzIEBAIHN0YXRpYyB2b2lkIGF0bWVsX3J4X2NoYXJzKHN0cnVjdCB1YXJ0X3AK IAkJaWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIocG9ydCwgY2gpKQogCQkJZ290byBpZ25vcmVf Y2hhcjsKIAotCQl1YXJ0X2luc2VydF9jaGFyKHBvcnQsIHN0YXR1cywgQVRNRUxfVVNfT1ZSRSwg Y2gsIGZsZyk7CisJCWF0bWVsX2J1ZmZlcl9yeF9jaGFyKHBvcnQsIHN0YXR1cywgQVRNRUxfVVNf T1ZSRSwgY2gsIGZsZyk7CiAKIAlpZ25vcmVfY2hhcjoKIAkJc3RhdHVzID0gVUFSVF9HRVRfQ1NS KHBvcnQpOwogCX0KIAotCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJdGFza2xldF9zY2hl ZHVsZSgmYXRtZWxfcG9ydC0+cnhfdGFzayk7CiB9CiAKIC8qCkBAIC01NTAsOSArNjAzLDkgQEAg c3RhdGljIHZvaWQgYXRtZWxfaGFuZGxlX3JlY2VpdmUoc3RydWN0IAogCiAJLyogUERDIHJlY2Vp dmUgKi8KIAlpZiAocGVuZGluZyAmIEFUTUVMX1VTX0VORFJYKQotCQlhdG1lbF9wZGNfZW5kcngo cG9ydCk7CisJCWF0bWVsX3BkY19lbmRyeChwb3J0KTsgCS8qTm90IElSUUZfTk9ERUxBWSBTYWZl Ki8KIAlpZiAocGVuZGluZyAmIEFUTUVMX1VTX1RJTUVPVVQpCi0JCWF0bWVsX3BkY190aW1lb3V0 KHBvcnQpOworCQlhdG1lbF9wZGNfdGltZW91dChwb3J0KTsvKk5vdCBJUlFGX05PREVMQVkgU2Fm ZSovCiAJaWYgKGF0bWVsX3BvcnQtPnVzZV9kbWFfcngKIAkgICAgJiYgcGVuZGluZyAmIChBVE1F TF9VU19SWEJSSyB8IEFUTUVMX1VTX09WUkUgfCBBVE1FTF9VU19GUkFNRSB8CiAJCQkgIEFUTUVM X1VTX1BBUkUpKQpAQCAtNTc0LDcgKzYyNyw3IEBAIHN0YXRpYyB2b2lkIGF0bWVsX2hhbmRsZV9y ZWNlaXZlKHN0cnVjdCAKIH0KIAogLyoKLSAqIHRyYW5zbWl0IGludGVycnVwdCBoYW5kbGVyLgor ICogdHJhbnNtaXQgaW50ZXJydXB0IGhhbmRsZXIuIChUcmFuc21pdCBpcyBJUlFGX05PREVMQVkg c2FmZSkKICAqLwogc3RhdGljIHZvaWQgYXRtZWxfaGFuZGxlX3RyYW5zbWl0KHN0cnVjdCB1YXJ0 X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBwZW5kaW5nKQogewpAQCAtNTk1LDE5ICs2NDgsMTYg QEAgc3RhdGljIHZvaWQgYXRtZWxfaGFuZGxlX3RyYW5zbWl0KHN0cnVjdAogc3RhdGljIHZvaWQg YXRtZWxfaGFuZGxlX3N0YXR1cyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQg cGVuZGluZywKIAkJCQl1bnNpZ25lZCBpbnQgc3RhdHVzKQogewotCS8qIFRPRE86IEFsbCByZWFk cyB0byBDU1Igd2lsbCBjbGVhciB0aGVzZSBpbnRlcnJ1cHRzISAqLwotCWlmIChwZW5kaW5nICYg QVRNRUxfVVNfUklJQykKLQkJcG9ydC0+aWNvdW50LnJuZysrOwotCWlmIChwZW5kaW5nICYgQVRN RUxfVVNfRFNSSUMpCi0JCXBvcnQtPmljb3VudC5kc3IrKzsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9w b3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKilwb3J0OwogCi0JaWYg KHBlbmRpbmcgJiBBVE1FTF9VU19EQ0RJQykKLQkJdWFydF9oYW5kbGVfZGNkX2NoYW5nZShwb3J0 LCAhKHN0YXR1cyAmIEFUTUVMX1VTX0RDRCkpOwotCWlmIChwZW5kaW5nICYgQVRNRUxfVVNfQ1RT SUMpCi0JCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UocG9ydCwgIShzdGF0dXMgJiBBVE1FTF9VU19D VFMpKTsKLQlpZiAocGVuZGluZyAmCi0JICAgIChBVE1FTF9VU19SSUlDIHwgQVRNRUxfVVNfRFNS SUMgfCBBVE1FTF9VU19EQ0RJQyB8IEFUTUVMX1VTX0NUU0lDKSkKLQkJd2FrZV91cF9pbnRlcnJ1 cHRpYmxlKCZwb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJc3Bpbl9sb2NrX2JoKCZwb3J0 LT5sb2NrKTsKKworCWF0bWVsX3BvcnQtPmlycV9wZW5kaW5nID0gcGVuZGluZzsKKwlhdG1lbF9w b3J0LT5pcnFfc3RhdHVzICA9IHN0YXR1czsKKworCXNwaW5fdW5sb2NrX2JoKCZwb3J0LT5sb2Nr KTsKKworCXRhc2tsZXRfc2NoZWR1bGUoJmF0bWVsX3BvcnQtPnN0YXR1c190YXNrKTsKIH0KIAog LyoKQEAgLTYzNSw2ICs2ODUsNjcgQEAgc3RhdGljIGlycXJldHVybl90IGF0bWVsX2ludGVycnVw dChpbnQgaQogfQogCiAvKgorICogdGFza2xldCBoYW5kbGluZyB0dHkgc3R1ZmYgb3V0c2lkZSB0 aGUgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK3N0YXRpYyB2b2lkIGF0bWVsX3J4X2hhbmRsZXJf dGFzayh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChz dHJ1Y3QgdWFydF9wb3J0ICopZGF0YTsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9w b3J0ID0gKHN0cnVjdCBhdG1lbF91YXJ0X3BvcnQgKilwb3J0OworCXN0cnVjdCBhdG1lbF91YXJ0 X3JpbmcgKnJpbmcgPSAmYXRtZWxfcG9ydC0+cnhfcmluZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdz OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCXdoaWxlIChy aW5nLT5jb3VudCkgeworCQlzdHJ1Y3QgYXRtZWxfdWFydF9jaGFyIGMgPSByaW5nLT5kYXRhW3Jp bmctPnRhaWxdOworCisJCXJpbmctPnRhaWwrKzsKKwkJcmluZy0+dGFpbCAlPSBBVE1FTF9TRVJJ QUxfUklOR1NJWkU7CisJCXJpbmctPmNvdW50LS07CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJCXVhcnRfaW5zZXJ0X2NoYXIocG9ydCwgYy5zdGF0 dXMsIGMub3ZlcnJ1biwgYy5jaCwgYy5mbGcpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0 LT5sb2NrLCBmbGFncyk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9j aywgZmxhZ3MpOworCisJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+aW5mby0+dHR5KTsKK30K Kworc3RhdGljIHZvaWQgYXRtZWxfc3RhdHVzX2hhbmRsZXJfdGFzayh1bnNpZ25lZCBsb25nIGRh dGEpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopZGF0 YTsKKwlzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0ICphdG1lbF9wb3J0ID0gKHN0cnVjdCBhdG1lbF91 YXJ0X3BvcnQgKilwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHBl bmRpbmcsIHN0YXR1czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7 CisKKwlwZW5kaW5nID0gYXRtZWxfcG9ydC0+aXJxX3BlbmRpbmc7CisJc3RhdHVzID0gYXRtZWxf cG9ydC0+aXJxX3N0YXR1czsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ss IGZsYWdzKTsKKworCS8qIFRPRE86IEFsbCByZWFkcyB0byBDU1Igd2lsbCBjbGVhciB0aGVzZSBp bnRlcnJ1cHRzISAqLworCWlmIChwZW5kaW5nICYgQVRNRUxfVVNfUklJQykKKwkJcG9ydC0+aWNv dW50LnJuZysrOworCWlmIChwZW5kaW5nICYgQVRNRUxfVVNfRFNSSUMpCisJCXBvcnQtPmljb3Vu dC5kc3IrKzsKKworCWlmIChwZW5kaW5nICYgQVRNRUxfVVNfRENESUMpCisJCXVhcnRfaGFuZGxl X2RjZF9jaGFuZ2UocG9ydCwgIShzdGF0dXMgJiBBVE1FTF9VU19EQ0QpKTsKKwlpZiAocGVuZGlu ZyAmIEFUTUVMX1VTX0NUU0lDKQorCQl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKHBvcnQsICEoc3Rh dHVzICYgQVRNRUxfVVNfQ1RTKSk7CisJaWYgKHBlbmRpbmcgJgorCSAgICAoQVRNRUxfVVNfUklJ QyB8IEFUTUVMX1VTX0RTUklDIHwgQVRNRUxfVVNfRENESUMgfCBBVE1FTF9VU19DVFNJQykpCisJ CXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+aW5mby0+ZGVsdGFfbXNyX3dhaXQpOworfQor CisKKy8qCiAgKiBQZXJmb3JtIGluaXRpYWxpemF0aW9uIGFuZCBlbmFibGUgcG9ydCBmb3IgcmVj ZXB0aW9uCiAgKi8KIHN0YXRpYyBpbnQgYXRtZWxfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpw b3J0KQpAQCAtMTA1OCw2ICsxMTY5LDEzIEBAIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBhdG1lbF9p bml0X3BvcnQoc3QKIAlwb3J0LT5tYXBiYXNlCT0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CiAJ cG9ydC0+aXJxCT0gcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7CiAKKwl0YXNrbGV0X2luaXQoJmF0 bWVsX3BvcnQtPnJ4X3Rhc2ssIGF0bWVsX3J4X2hhbmRsZXJfdGFzaywKKwkJCSh1bnNpZ25lZCBs b25nKXBvcnQpOworCXRhc2tsZXRfaW5pdCgmYXRtZWxfcG9ydC0+c3RhdHVzX3Rhc2ssIGF0bWVs X3N0YXR1c19oYW5kbGVyX3Rhc2ssCisJCQkodW5zaWduZWQgbG9uZylwb3J0KTsKKworCW1lbXNl dCgmYXRtZWxfcG9ydC0+cnhfcmluZywgMCwgc2l6ZW9mKGF0bWVsX3BvcnQtPnJ4X3JpbmcpKTsK KwogCWlmIChkYXRhLT5yZWdzKQogCQkvKiBBbHJlYWR5IG1hcHBlZCBieSBzZXR1cCBjb2RlICov CiAJCXBvcnQtPm1lbWJhc2UgPSBkYXRhLT5yZWdzOwo= ------=_Part_15370_13392544.1197041068064 Content-Type: application/octet-stream; name=patch_atmel_serial_irqf_nodelay Content-Transfer-Encoding: base64 X-Attachment-Id: f_f9wu1jp7 Content-Disposition: attachment; filename=patch_atmel_serial_irqf_nodelay T24gUFJFRU1QVC1SVCB3ZSBtYXkgbm90IGJsb2NrIG9uIGEgbm9ybWFsIHNwaW5sb2NrIGluIElS US9JUlFGX05PREVMQVktY29udGV4dC4KVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGJ5IG1ha2luZyB0 aGUgbG9jayBhIHJhd19zcGlubG9ja190IGZvciB0aGUKQXRtZWwgc2VyaWFsIGNvbnNvbGUuCgpU aGlzIHBhdGNoIGRlbWFuZHMgdGhlIGZvbGxvd2luZyBwYXRjaGVzIHRvIGJlIGluc3RhbGxlZCBm aXJzdDoKKiBodHRwOi8vbWF4aW0ub3JnLnphL0FUOTFSTTkyMDAvMi42LzIuNi4yMy1hdDkxLnBh dGNoLmd6CiogYXRtZWxfc2VyaWFsX2NsZWFudXAucGF0Y2gKKiBhdG1lbF9zZXJpYWxfaXJxX3Nw bGl0dXAucGF0Y2gKClNpZ25lZC1vZmYtYnk6IFJlbXkgQm9obWVyIDxsaW51eEBib2htZXIubmV0 PgotLS0KIGluY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaCB8ICAgIDggKysrKysrKy0KIDEgZmls ZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCkluZGV4OiBsaW51eC0y LjYuMjMvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpbnV4LTIu Ni4yMy5vcmlnL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAkyMDA3LTEyLTA3IDE0OjQwOjM1 LjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi42LjIzL2luY2x1ZGUvbGludXgvc2VyaWFsX2Nv cmUuaAkyMDA3LTEyLTA3IDE1OjA4OjMzLjAwMDAwMDAwMCArMDEwMApAQCAtMjI1LDggKzIyNSwx NCBAQCBzdHJ1Y3QgdWFydF9pY291bnQgewogCiB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdp c2VfXyB1cGZfdDsKIAorI2lmZGVmIENPTkZJR19TRVJJQUxfQVRNRUwKK3R5cGVkZWYgcmF3X3Nw aW5sb2NrX3QgdWFydF9zcGlubG9ja190OworI2Vsc2UKK3R5cGVkZWYgc3BpbmxvY2tfdCB1YXJ0 X3NwaW5sb2NrX3Q7CisjZW5kaWYKKwogc3RydWN0IHVhcnRfcG9ydCB7Ci0Jc3BpbmxvY2tfdAkJ bG9jazsJCQkvKiBwb3J0IGxvY2sgKi8KKwl1YXJ0X3NwaW5sb2NrX3QJCWxvY2s7CQkJLyogcG9y dCBsb2NrICovCiAJdW5zaWduZWQgaW50CQlpb2Jhc2U7CQkJLyogaW4vb3V0W2J3bF0gKi8KIAl1 bnNpZ25lZCBjaGFyIF9faW9tZW0JKm1lbWJhc2U7CQkvKiByZWFkL3dyaXRlW2J3bF0gKi8KIAl1 bnNpZ25lZCBpbnQJCWlycTsJCQkvKiBpcnEgbnVtYmVyICovCg== ------=_Part_15370_13392544.1197041068064--