Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161022AbXBACdn (ORCPT ); Wed, 31 Jan 2007 21:33:43 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1161018AbXBACdn (ORCPT ); Wed, 31 Jan 2007 21:33:43 -0500 Received: from wx-out-0506.google.com ([66.249.82.235]:53742 "EHLO wx-out-0506.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161022AbXBACdl (ORCPT ); Wed, 31 Jan 2007 21:33:41 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=gCxeiusqIZjVktVoX9UMaNrfgJ0zC/yKl7qMN2cX6MddPGSevn77KQP3tI2BRhoRBWYK2NVsrFdaLjrAH4bJR1WScjLHAa48XCLF2iAvDpounaTzBoF0rc/NlVAWDZ0WGxe8D+Rdi3Py9Bzgdm5w0e4kRzYrYyyWkAOhCGTvf+8= Message-ID: <6d6a94c50701311833m5952c6fdn8e1f0db28d674e79@mail.gmail.com> Date: Thu, 1 Feb 2007 10:33:40 +0800 From: "Aubrey Li" To: Alan Subject: Re: [BUG]: 2.6.19.2: Weird serial core issue Cc: linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org In-Reply-To: <20070131162123.67e22e23@localhost.localdomain> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_15136_17806601.1170297220414" References: <6d6a94c50701310249o2b2c8024i4d3f28ec1601246a@mail.gmail.com> <20070131162123.67e22e23@localhost.localdomain> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 36614 Lines: 498 ------=_Part_15136_17806601.1170297220414 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 2/1/07, Alan wrote: > > When I telnet my board and run the following command: > > ---- root:~> stty -F /dev/ttyS0 -crtscts > > > > I got the following result from the console of my board: > > ---- root:~>new_termios flag: 0x1cb1, old_termios flag: 0x80001cb1 > > > > That's correct. CRTSCTS flag is clear > > > > But when I type "ENTER" key on the console, I got: > > ----root:~>new_termios flag: 0x80001cb1, old_termios flag: 0x1cb1 > > What code is running on that console at the time. Most likely that user > code is also saving/restoring terminal settings so overwrite yours > I implemented the serial driver by myself, :). See the attachment. I didn't save/restore terminal setting in the my_set_termios(). I trace this back till tty_tioctl(..., unsigned long arg), everytime I type "ENTER" key, the argument "arg" passed into tty_ioctl() is the address of a termios structure, which include wrong c_cflag. It seems once the flag is assigned by uart_set_options the first time, it's never changed. So even userspace application changed the flag, it will be set back soon. I'll dig into it. But I still think it's a bug. -Aubrey ------=_Part_15136_17806601.1170297220414 Content-Type: application/octet-stream; name=bfin_5xx.c Content-Transfer-Encoding: base64 X-Attachment-Id: f_exmknvo7 Content-Disposition: attachment; filename="bfin_5xx.c" LyoKICogRmlsZTogICAgICAgICBkcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jCiAqIEJhc2VkIG9u OiAgICAgQmFzZWQgb24gZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKICogQXV0aG9yOiAgICAgICBB dWJyZXkgTGkgPGF1YnJleS5saUBhbmFsb2cuY29tPgogKgogKiBDcmVhdGVkOgogKiBEZXNjcmlw dGlvbjogIERyaXZlciBmb3IgYmxhY2tmaW4gNXh4IHNlcmlhbCBwb3J0cwogKgogKiBSZXY6ICAg ICAgICAgICRJZDogYmZpbl81eHguYyAyNzA0IDIwMDctMDEtMzAgMDk6NTM6NTlaIGF1YnJleSAk CiAqCiAqIE1vZGlmaWVkOgogKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA2IEFuYWxvZyBE ZXZpY2VzIEluYy4KICoKICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFj a2Zpbi51Y2xpbnV4Lm9yZy8KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IKICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5v dCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCiAqIHRvIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4sCiAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAqLwoKI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklO X0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQojZGVmaW5lIFNVUFBPUlRf U1lTUlEKI2VuZGlmCgojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9p b3BvcnQuaD4KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUu aD4KI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgojaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4K I2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CgojaW5jbHVkZSA8YXNtL21hY2gvYmZpbl9z ZXJpYWxfNXh4Lmg+CgojaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQojaW5jbHVkZSA8bGlu dXgvZG1hLW1hcHBpbmcuaD4KI2luY2x1ZGUgPGFzbS9pby5oPgojaW5jbHVkZSA8YXNtL2lycS5o PgojaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KI2VuZGlmCgovKiBXZSd2ZSBiZWVuIGFzc2ln bmVkIGEgcmFuZ2Ugb24gdGhlICJMb3ctZGVuc2l0eSBzZXJpYWwgcG9ydHMiIG1ham9yICovCiNk ZWZpbmUgU0VSSUFMX0JGSU5fTUFKT1IJVFRZX01BSk9SCiNkZWZpbmUgTUlOT1JfU1RBUlQJCTY0 CgovKgogKiBTZXR1cCBmb3IgY29uc29sZS4gQXJndW1lbnQgY29tZXMgZnJvbSB0aGUgbWVudWNv bmZpZwogKi8KCiNpZiBkZWZpbmVkKENPTkZJR19CQVVEXzk2MDApCiNkZWZpbmUgQ09OU09MRV9C QVVEX1JBVEUgICAgICAgOTYwMAojZWxpZiBkZWZpbmVkKENPTkZJR19CQVVEXzE5MjAwKQojZGVm aW5lIENPTlNPTEVfQkFVRF9SQVRFICAgICAgIDE5MjAwCiNlbGlmIGRlZmluZWQoQ09ORklHX0JB VURfMzg0MDApCiNkZWZpbmUgQ09OU09MRV9CQVVEX1JBVEUgICAgICAgMzg0MDAKI2VsaWYgZGVm aW5lZChDT05GSUdfQkFVRF81NzYwMCkKI2RlZmluZSBDT05TT0xFX0JBVURfUkFURSAgICAgICA1 NzYwMAojZWxpZiBkZWZpbmVkKENPTkZJR19CQVVEXzExNTIwMCkKI2RlZmluZSBDT05TT0xFX0JB VURfUkFURSAgICAgICAxMTUyMDAKI2VuZGlmCgojZGVmaW5lIERNQV9SWF9YQ09VTlQJCTUxMgoj ZGVmaW5lIERNQV9SWF9ZQ09VTlQJCShQQUdFX1NJWkUgLyBETUFfUlhfWENPVU5UKQoKI2RlZmlu ZSBETUFfUlhfRkxVU0hfSklGRklFUwk1CgojaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQp3 YWl0X3F1ZXVlX2hlYWRfdCBiZmluX3NlcmlhbF90eF9xdWV1ZVtOUl9QT1JUU107CnN0YXRpYyB2 b2lkIGJmaW5fc2VyaWFsX2RtYV90eF9jaGFycyhzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFy dCk7CiNlbHNlCnN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX2RvX3dvcmsodm9pZCAqKTsKc3RhdGlj IHZvaWQgYmZpbl9zZXJpYWxfdHhfY2hhcnMoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQp OwpzdGF0aWMgdm9pZCBsb2NhbF9wdXRfY2hhcihzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFy dCwgY2hhciBjaCk7CiNlbmRpZgoKc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfbWN0cmxfY2hlY2so c3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpOwpzdGF0aWMgaW50IGJmaW5fc2VyaWFsX2Nh bGNfYmF1ZCh1bnNpZ25lZCBpbnQgdWFydGNsaywgdW5zaWduZWQgaW50IGJhdWQpOwoKLyoKICog aW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgb24gZW50cnkKICovCnN0YXRpYyB2b2lkIGJmaW5fc2Vy aWFsX3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKewoJc3RydWN0IGJmaW5fc2VyaWFs X3BvcnQgKnVhcnQgPSAoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKilwb3J0OwoKI2lmZGVmIENP TkZJR19TRVJJQUxfQkZJTl9ETUEKICAgICAgICBkaXNhYmxlX2RtYSh1YXJ0LT50eF9kbWFfY2hh bm5lbCk7CiNlbHNlCgl1bnNpZ25lZCBzaG9ydCBpZXI7CgoJaWVyID0gVUFSVF9HRVRfSUVSKHVh cnQpOwoJaWVyICY9IH5FVEJFSTsKCVVBUlRfUFVUX0lFUih1YXJ0LCBpZXIpOwojZW5kaWYKfQoK LyoKICogcG9ydCBpcyBsb2NrZWQgYW5kIGludGVycnVwdHMgYXJlIGRpc2FibGVkCiAqLwpzdGF0 aWMgdm9pZCBiZmluX3NlcmlhbF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQp7Cglz dHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAq KXBvcnQ7CgojaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQoJYmZpbl9zZXJpYWxfZG1hX3R4 X2NoYXJzKHVhcnQpOwojZWxzZQoJdW5zaWduZWQgc2hvcnQgaWVyOwoJaWVyID0gVUFSVF9HRVRf SUVSKHVhcnQpOwoJaWVyIHw9IEVUQkVJOwoJVUFSVF9QVVRfSUVSKHVhcnQsIGllcik7CgliZmlu X3NlcmlhbF90eF9jaGFycyh1YXJ0KTsKI2VuZGlmCn0KCi8qCiAqIEludGVycnVwdHMgYXJlIGVu YWJsZWQKICovCnN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX3N0b3Bfcngoc3RydWN0IHVhcnRfcG9y dCAqcG9ydCkKewoJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSAoc3RydWN0IGJmaW5f c2VyaWFsX3BvcnQgKilwb3J0OwoJdW5zaWduZWQgc2hvcnQgaWVyOwoKCWllciA9IFVBUlRfR0VU X0lFUih1YXJ0KTsKCWllciAmPSBFUkJGSTsKCVVBUlRfUFVUX0lFUih1YXJ0LCBpZXIpOwp9Cgov KgogKiBTZXQgdGhlIG1vZGVtIGNvbnRyb2wgdGltZXIgdG8gZmlyZSBpbW1lZGlhdGVseS4KICov CnN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX2VuYWJsZV9tcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0 KQp7Cn0KCiNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fUElPCnN0YXRpYyB2b2lkIGxvY2FsX3B1 dF9jaGFyKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0LCBjaGFyIGNoKQp7Cgl1bnNpZ25l ZCBzaG9ydCBzdGF0dXM7CglpbnQgZmxhZ3MgPSAwOwoKCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsK CglkbyB7CgkJc3RhdHVzID0gVUFSVF9HRVRfTFNSKHVhcnQpOwoJfSB3aGlsZSAoIShzdGF0dXMg JiBUSFJFKSk7CgoJVUFSVF9QVVRfQ0hBUih1YXJ0LCBjaCk7CgoJbG9jYWxfaXJxX3Jlc3RvcmUo ZmxhZ3MpOwp9CgpzdGF0aWMgdm9pZApiZmluX3NlcmlhbF9yeF9jaGFycyhzdHJ1Y3QgYmZpbl9z ZXJpYWxfcG9ydCAqdWFydCkKewoJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVhcnQtPnBvcnQu aW5mbz91YXJ0LT5wb3J0LmluZm8tPnR0eTowOwoJdW5zaWduZWQgaW50IHN0YXR1cywgY2gsIGZs ZzsKI2lmIGRlZmluZWQoQ09ORklHX0JGNTMxKSB8fCBkZWZpbmVkKENPTkZJR19CRjUzMikgfHwg ZGVmaW5lZChDT05GSUdfQkY1MzMpCglzdGF0aWMgaW50IGluX2JyZWFrID0gMDsKI2VuZGlmCgoJ c3RhdHVzID0gVUFSVF9HRVRfTFNSKHVhcnQpOwogCWNoID0gVUFSVF9HRVRfQ0hBUih1YXJ0KTsK IAl1YXJ0LT5wb3J0Lmljb3VudC5yeCsrOwoKI2lmIGRlZmluZWQoQ09ORklHX0JGNTMxKSB8fCBk ZWZpbmVkKENPTkZJR19CRjUzMikgfHwgZGVmaW5lZChDT05GSUdfQkY1MzMpCglpZiAoaW5fYnJl YWspIHsKCQlpZiAoY2ggIT0gMCkgewoJCQlpbl9icmVhayA9IDA7CgkJCWNoID0gVUFSVF9HRVRf Q0hBUih1YXJ0KTsKCQl9CgkJcmV0dXJuOwoJfQojZW5kaWYKCglpZiAoc3RhdHVzICYgQkkpIHsK I2lmIGRlZmluZWQoQ09ORklHX0JGNTMxKSB8fCBkZWZpbmVkKENPTkZJR19CRjUzMikgfHwgZGVm aW5lZChDT05GSUdfQkY1MzMpCgkJaW5fYnJlYWsgPSAxOwojZW5kaWYKCQl1YXJ0LT5wb3J0Lmlj b3VudC5icmsrKzsKCQlpZiAodWFydF9oYW5kbGVfYnJlYWsoJnVhcnQtPnBvcnQpKQoJCQlnb3Rv IGlnbm9yZV9jaGFyOwoJCWZsZyA9IFRUWV9CUkVBSzsKCX0gZWxzZSBpZiAoc3RhdHVzICYgUEUp IHsKCQlmbGcgPSBUVFlfUEFSSVRZOwoJCXVhcnQtPnBvcnQuaWNvdW50LnBhcml0eSsrOwoJfSBl bHNlIGlmIChzdGF0dXMgJiBPRSkgewoJCWZsZyA9IFRUWV9PVkVSUlVOOwoJCXVhcnQtPnBvcnQu aWNvdW50Lm92ZXJydW4rKzsKCX0gZWxzZSBpZiAoc3RhdHVzICYgRkUpIHsKCQlmbGcgPSBUVFlf RlJBTUU7CgkJdWFydC0+cG9ydC5pY291bnQuZnJhbWUrKzsKCX0gZWxzZQoJCWZsZyA9IFRUWV9O T1JNQUw7CgoJaWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIoJnVhcnQtPnBvcnQsIGNoKSkKCQln b3RvIGlnbm9yZV9jaGFyOwoJaWYgKHR0eSkKCQl1YXJ0X2luc2VydF9jaGFyKCZ1YXJ0LT5wb3J0 LCBzdGF0dXMsIDIsIGNoLCBmbGcpOwoKaWdub3JlX2NoYXI6CglpZiAodHR5KQoJCXR0eV9mbGlw X2J1ZmZlcl9wdXNoKHR0eSk7Cn0KCnN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX3R4X2NoYXJzKHN0 cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQp7CglzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAm dWFydC0+cG9ydC5pbmZvLT54bWl0OwoKCWlmICh1YXJ0LT5wb3J0LnhfY2hhcikgewoJCVVBUlRf UFVUX0NIQVIodWFydCwgdWFydC0+cG9ydC54X2NoYXIpOwoJCXVhcnQtPnBvcnQuaWNvdW50LnR4 Kys7CgkJdWFydC0+cG9ydC54X2NoYXIgPSAwOwoJCXJldHVybjsKCX0KCS8qCgkgKiBDaGVjayB0 aGUgbW9kZW0gY29udHJvbCBsaW5lcyBiZWZvcmUKCSAqIHRyYW5zbWl0dGluZyBhbnl0aGluZy4K CSAqLwoJYmZpbl9zZXJpYWxfbWN0cmxfY2hlY2sodWFydCk7CgoJaWYgKHVhcnRfY2lyY19lbXB0 eSh4bWl0KSB8fCB1YXJ0X3R4X3N0b3BwZWQoJnVhcnQtPnBvcnQpKSB7CgkJYmZpbl9zZXJpYWxf c3RvcF90eCgmdWFydC0+cG9ydCk7CgkJcmV0dXJuOwoJfQoKCWxvY2FsX3B1dF9jaGFyKHVhcnQs IHhtaXQtPmJ1Zlt4bWl0LT50YWlsXSk7Cgl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyAxKSAm IChVQVJUX1hNSVRfU0laRSAtIDEpOwoJdWFydC0+cG9ydC5pY291bnQudHgrKzsKCglpZiAodWFy dF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCgkJdWFydF93cml0ZV93 YWtldXAoJnVhcnQtPnBvcnQpOwoKCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCgkJYmZpbl9z ZXJpYWxfc3RvcF90eCgmdWFydC0+cG9ydCk7Cn0KCnN0YXRpYyBpcnFyZXR1cm5fdCBiZmluX3Nl cmlhbF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQp7CglzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9y dCAqdWFydCA9IGRldl9pZDsKCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKCglzcGluX2xvY2soJnVh cnQtPnBvcnQubG9jayk7CglzdGF0dXMgPSBVQVJUX0dFVF9JSVIodWFydCk7CglkbyB7CgkJaWYg KChzdGF0dXMgJiBJSVJfU1RBVFVTKSA9PSBJSVJfVFhfUkVBRFkpCgkJCWJmaW5fc2VyaWFsX3R4 X2NoYXJzKHVhcnQpOwoJCWlmICgoc3RhdHVzICYgSUlSX1NUQVRVUykgPT0gSUlSX1JYX1JFQURZ KQoJCQliZmluX3NlcmlhbF9yeF9jaGFycyh1YXJ0KTsKCQlzdGF0dXMgPSBVQVJUX0dFVF9JSVIo dWFydCk7Cgl9IHdoaWxlIChzdGF0dXMgJihJSVJfVFhfUkVBRFkgfCBJSVJfUlhfUkVBRFkpKTsK CXNwaW5fdW5sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwoJcmV0dXJuIElSUV9IQU5ETEVEOwp9Cgpz dGF0aWMgdm9pZCBiZmluX3NlcmlhbF9kb193b3JrKHZvaWQgKnBvcnQpCnsKCXN0cnVjdCBiZmlu X3NlcmlhbF9wb3J0ICp1YXJ0ID0gKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICopcG9ydDsKCgli ZmluX3NlcmlhbF9tY3RybF9jaGVjayh1YXJ0KTsKfQoKI2VuZGlmCgojaWZkZWYgQ09ORklHX1NF UklBTF9CRklOX0RNQQpzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9kbWFfdHhfY2hhcnMoc3RydWN0 IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCnsKCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZ1YXJ0 LT5wb3J0LmluZm8tPnhtaXQ7Cgl1bnNpZ25lZCBzaG9ydCBpZXI7CglpbnQgZmxhZ3MgPSAwOwoK CWlmICghdWFydC0+dHhfZG9uZSkKCQlyZXR1cm47CgoJdWFydC0+dHhfZG9uZSA9IDA7CgoJaWYg KHVhcnQtPnBvcnQueF9jaGFyKSB7CgkJVUFSVF9QVVRfQ0hBUih1YXJ0LCB1YXJ0LT5wb3J0Lnhf Y2hhcik7CgkJdWFydC0+cG9ydC5pY291bnQudHgrKzsKCQl1YXJ0LT5wb3J0LnhfY2hhciA9IDA7 CgkJdWFydC0+dHhfZG9uZSA9IDE7CgkJcmV0dXJuOwoJfQoJLyoKCSAqIENoZWNrIHRoZSBtb2Rl bSBjb250cm9sIGxpbmVzIGJlZm9yZQoJICogdHJhbnNtaXR0aW5nIGFueXRoaW5nLgoJICovCgli ZmluX3NlcmlhbF9tY3RybF9jaGVjayh1YXJ0KTsKCglpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQp IHx8IHVhcnRfdHhfc3RvcHBlZCgmdWFydC0+cG9ydCkpIHsKCQliZmluX3NlcmlhbF9zdG9wX3R4 KCZ1YXJ0LT5wb3J0KTsKCQl1YXJ0LT50eF9kb25lID0gMTsKCQlyZXR1cm47Cgl9CgoJbG9jYWxf aXJxX3NhdmUoZmxhZ3MpOwoJdWFydC0+dHhfY291bnQgPSBDSVJDX0NOVCh4bWl0LT5oZWFkLCB4 bWl0LT50YWlsLCBVQVJUX1hNSVRfU0laRSk7CglpZiAodWFydC0+dHhfY291bnQgPiAoVUFSVF9Y TUlUX1NJWkUgLSB4bWl0LT50YWlsKSkKCQl1YXJ0LT50eF9jb3VudCA9IFVBUlRfWE1JVF9TSVpF IC0geG1pdC0+dGFpbDsKCWJsYWNrZmluX2RjYWNoZV9mbHVzaF9yYW5nZSgodW5zaWduZWQgbG9u ZykoeG1pdC0+YnVmK3htaXQtPnRhaWwpLAoJCQkJCSh1bnNpZ25lZCBsb25nKSh4bWl0LT5idWYr eG1pdC0+dGFpbCt1YXJ0LT50eF9jb3VudCkpOwoJc2V0X2RtYV9jb25maWcodWFydC0+dHhfZG1h X2NoYW5uZWwsCgkJc2V0X2JmaW5fZG1hX2NvbmZpZyhESVJfUkVBRCwgRE1BX0ZMT1dfU1RPUCwK CQkJSU5UUl9PTl9CVUYsCgkJCURJTUVOU0lPTl9MSU5FQVIsCgkJCURBVEFfU0laRV84KSk7Cglz ZXRfZG1hX3N0YXJ0X2FkZHIodWFydC0+dHhfZG1hX2NoYW5uZWwsICh1bnNpZ25lZCBsb25nKSh4 bWl0LT5idWYreG1pdC0+dGFpbCkpOwoJc2V0X2RtYV94X2NvdW50KHVhcnQtPnR4X2RtYV9jaGFu bmVsLCB1YXJ0LT50eF9jb3VudCk7CglzZXRfZG1hX3hfbW9kaWZ5KHVhcnQtPnR4X2RtYV9jaGFu bmVsLCAxKTsKCWVuYWJsZV9kbWEodWFydC0+dHhfZG1hX2NoYW5uZWwpOwoJaWVyID0gVUFSVF9H RVRfSUVSKHVhcnQpOwoJaWVyIHw9IEVUQkVJOwoJVUFSVF9QVVRfSUVSKHVhcnQsIGllcik7Cgls b2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cn0KCnN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX2RtYV9y eF9jaGFycyhzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqIHVhcnQpCnsKCXN0cnVjdCB0dHlfc3Ry dWN0ICp0dHkgPSB1YXJ0LT5wb3J0LmluZm8tPnR0eTsKCWludCBpLCBmbGcsIHN0YXR1czsKCglz dGF0dXMgPSBVQVJUX0dFVF9MU1IodWFydCk7Cgl1YXJ0LT5wb3J0Lmljb3VudC5yeCArPSBDSVJD X0NOVCh1YXJ0LT5yeF9kbWFfYnVmLmhlYWQsIHVhcnQtPnJ4X2RtYV9idWYudGFpbCwgVUFSVF9Y TUlUX1NJWkUpOzsKCiAgICAgICAgaWYgKHN0YXR1cyAmIEJJKSB7CiAgICAgICAgICAgICAgICB1 YXJ0LT5wb3J0Lmljb3VudC5icmsrKzsKICAgICAgICAgICAgICAgIGlmICh1YXJ0X2hhbmRsZV9i cmVhaygmdWFydC0+cG9ydCkpCiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG1hX2lnbm9y ZV9jaGFyOwogICAgICAgICAgICAgICAgZmxnID0gVFRZX0JSRUFLOwogICAgICAgIH0gZWxzZSBp ZiAoc3RhdHVzICYgUEUpIHsKICAgICAgICAgICAgICAgIGZsZyA9IFRUWV9QQVJJVFk7CiAgICAg ICAgICAgICAgICB1YXJ0LT5wb3J0Lmljb3VudC5wYXJpdHkrKzsKICAgICAgICB9IGVsc2UgaWYg KHN0YXR1cyAmIE9FKSB7CiAgICAgICAgICAgICAgICBmbGcgPSBUVFlfT1ZFUlJVTjsKICAgICAg ICAgICAgICAgIHVhcnQtPnBvcnQuaWNvdW50Lm92ZXJydW4rKzsKICAgICAgICB9IGVsc2UgaWYg KHN0YXR1cyAmIEZFKSB7CiAgICAgICAgICAgICAgICBmbGcgPSBUVFlfRlJBTUU7CiAgICAgICAg ICAgICAgICB1YXJ0LT5wb3J0Lmljb3VudC5mcmFtZSsrOwogICAgICAgIH0gZWxzZQogICAgICAg ICAgICAgICAgZmxnID0gVFRZX05PUk1BTDsKCglmb3IgKGkgPSB1YXJ0LT5yeF9kbWFfYnVmLmhl YWQ7IGkgPCB1YXJ0LT5yeF9kbWFfYnVmLnRhaWw7IGkrKykgewoJCWlmICh1YXJ0X2hhbmRsZV9z eXNycV9jaGFyKCZ1YXJ0LT5wb3J0LCB1YXJ0LT5yeF9kbWFfYnVmLmJ1ZltpXSkpCgkJCWdvdG8g ZG1hX2lnbm9yZV9jaGFyOwoJCXVhcnRfaW5zZXJ0X2NoYXIoJnVhcnQtPnBvcnQsIHN0YXR1cywg MiwgdWFydC0+cnhfZG1hX2J1Zi5idWZbaV0sIGZsZyk7Cgl9CmRtYV9pZ25vcmVfY2hhcjoKCXR0 eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Cn0KCnZvaWQgYmZpbl9zZXJpYWxfcnhfZG1hX3RpbWVv dXQoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCnsKCWludCB4X3BvcywgcG9zOwoJaW50 IGZsYWdzID0gMDsKCgliZmluX3NlcmlhbF9kbWFfdHhfY2hhcnModWFydCk7CgoJbG9jYWxfaXJx X3NhdmUoZmxhZ3MpOwoJeF9wb3MgPSBETUFfUlhfWENPVU5UIC0gZ2V0X2RtYV9jdXJyX3hjb3Vu dCh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CglpZiAoeF9wb3MgPT0gRE1BX1JYX1hDT1VOVCkKCQl4 X3BvcyA9IDA7CgoJcG9zID0gdWFydC0+cnhfZG1hX25yb3dzICogRE1BX1JYX1hDT1VOVCArIHhf cG9zOwoKCWlmIChwb3M+dWFydC0+cnhfZG1hX2J1Zi50YWlsKSB7CgkJdWFydC0+cnhfZG1hX2J1 Zi50YWlsID0gcG9zOwoJCWJmaW5fc2VyaWFsX2RtYV9yeF9jaGFycyh1YXJ0KTsKCQl1YXJ0LT5y eF9kbWFfYnVmLmhlYWQgPSB1YXJ0LT5yeF9kbWFfYnVmLnRhaWw7Cgl9Cglsb2NhbF9pcnFfcmVz dG9yZShmbGFncyk7Cgl1YXJ0LT5yeF9kbWFfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBETUFf UlhfRkxVU0hfSklGRklFUzsKCWFkZF90aW1lcigmKHVhcnQtPnJ4X2RtYV90aW1lcikpOwp9Cgpz dGF0aWMgaXJxcmV0dXJuX3QgYmZpbl9zZXJpYWxfZG1hX3R4X2ludChpbnQgaXJxLCB2b2lkICpk ZXZfaWQpCnsKCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gZGV2X2lkOwoJc3RydWN0 IGNpcmNfYnVmICp4bWl0ID0gJnVhcnQtPnBvcnQuaW5mby0+eG1pdDsKCXVuc2lnbmVkIHNob3J0 IGllcjsKCglzcGluX2xvY2soJnVhcnQtPnBvcnQubG9jayk7CglpZiAoIShnZXRfZG1hX2N1cnJf aXJxc3RhdCh1YXJ0LT50eF9kbWFfY2hhbm5lbCkmRE1BX1JVTikpIHsKCQljbGVhcl9kbWFfaXJx c3RhdCh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7CgkJZGlzYWJsZV9kbWEodWFydC0+dHhfZG1hX2No YW5uZWwpOwoJCWllciA9IFVBUlRfR0VUX0lFUih1YXJ0KTsKCQlpZXIgJj0gfkVUQkVJOwoJCVVB UlRfUFVUX0lFUih1YXJ0LCBpZXIpOwoJCXhtaXQtPnRhaWwgPSAoeG1pdC0+dGFpbCt1YXJ0LT50 eF9jb3VudCkgJihVQVJUX1hNSVRfU0laRSAtMSk7CgkJdWFydC0+cG9ydC5pY291bnQudHgrPXVh cnQtPnR4X2NvdW50OwoKCQlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtF VVBfQ0hBUlMpCgkJCXVhcnRfd3JpdGVfd2FrZXVwKCZ1YXJ0LT5wb3J0KTsKCgkJaWYgKHVhcnRf Y2lyY19lbXB0eSh4bWl0KSkKCQkJYmZpbl9zZXJpYWxfc3RvcF90eCgmdWFydC0+cG9ydCk7CgkJ dWFydC0+dHhfZG9uZSA9IDE7Cgl9CgoJc3Bpbl91bmxvY2soJnVhcnQtPnBvcnQubG9jayk7Cgly ZXR1cm4gSVJRX0hBTkRMRUQ7Cn0KCnN0YXRpYyBpcnFyZXR1cm5fdCBiZmluX3NlcmlhbF9kbWFf cnhfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKewoJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQg KnVhcnQgPSBkZXZfaWQ7Cgl1bnNpZ25lZCBzaG9ydCBpcnFzdGF0OwoKCXVhcnQtPnJ4X2RtYV9u cm93cysrOwoJaWYgKHVhcnQtPnJ4X2RtYV9ucm93cyA9PSBETUFfUlhfWUNPVU5UKSB7CgkJdWFy dC0+cnhfZG1hX25yb3dzID0gMDsKCQl1YXJ0LT5yeF9kbWFfYnVmLnRhaWwgPSBETUFfUlhfWENP VU5UKkRNQV9SWF9ZQ09VTlQ7CgkJYmZpbl9zZXJpYWxfZG1hX3J4X2NoYXJzKHVhcnQpOwoJCXVh cnQtPnJ4X2RtYV9idWYuaGVhZCA9IHVhcnQtPnJ4X2RtYV9idWYudGFpbCA9IDA7Cgl9CglzcGlu X2xvY2soJnVhcnQtPnBvcnQubG9jayk7CglpcnFzdGF0ID0gZ2V0X2RtYV9jdXJyX2lycXN0YXQo dWFydC0+cnhfZG1hX2NoYW5uZWwpOwoJY2xlYXJfZG1hX2lycXN0YXQodWFydC0+cnhfZG1hX2No YW5uZWwpOwoKCXNwaW5fdW5sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwoJcmV0dXJuIElSUV9IQU5E TEVEOwp9CiNlbmRpZgoKLyoKICogUmV0dXJuIFRJT0NTRVJfVEVNVCB3aGVuIHRyYW5zbWl0dGVy IGlzIG5vdCBidXN5LgogKi8Kc3RhdGljIHVuc2lnbmVkIGludCBiZmluX3NlcmlhbF90eF9lbXB0 eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFy dCA9IChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqKXBvcnQ7Cgl1bnNpZ25lZCBzaG9ydCBsc3I7 CgoJbHNyID0gVUFSVF9HRVRfTFNSKHVhcnQpOwoJaWYgKGxzciAmIFRIUkUpCgkJcmV0dXJuIFRJ T0NTRVJfVEVNVDsKCWVsc2UKCQlyZXR1cm4gMDsKfQoKc3RhdGljIHVuc2lnbmVkIGludCBiZmlu X3NlcmlhbF9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKewoJLyogSGFyZHdhcmUg ZmxvdyBjb250cm9sIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHRoZSBmaXJzdCBwb3J0ICovCiNpZmRl ZiBDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTCglpZiAoKGJmaW5fcmVhZDE2KENUU19QT1JUKSAm ICgxIDw8IENUU19QSU4pKSAmJiAocG9ydC0+bGluZSA9PSAwKSkKCQlyZXR1cm4gVElPQ01fRFNS IHwgVElPQ01fQ0FSOwoJZWxzZQojZW5kaWYKCQlyZXR1cm4gVElPQ01fQ1RTIHwgVElPQ01fRFNS IHwgVElPQ01fQ0FSOwp9CgpzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9zZXRfbWN0cmwoc3RydWN0 IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IG1jdHJsKQp7CiNpZmRlZiBDT05GSUdfU0VS SUFMX0JGSU5fQ1RTUlRTCglpZiAobWN0cmwgJiBUSU9DTV9SVFMpCgkJYmZpbl93cml0ZTE2KFJU U19QT1JULCBiZmluX3JlYWQxNihSVFNfUE9SVCkgJiAofjEgPDwgUlRTX1BJTikpOwoJZWxzZQoJ CWJmaW5fd3JpdGUxNihSVFNfUE9SVCwgYmZpbl9yZWFkMTYoUlRTX1BPUlQpIHwgKDEgPDwgUlRT X1BJTikpOwojZW5kaWYKfQoKLyoKICogSGFuZGxlIGFueSBjaGFuZ2Ugb2YgbW9kZW0gc3RhdHVz IHNpZ25hbCBzaW5jZSB3ZSB3ZXJlIGxhc3QgY2FsbGVkLgogKi8Kc3RhdGljIHZvaWQgYmZpbl9z ZXJpYWxfbWN0cmxfY2hlY2soc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCnsKI2lmZGVm IENPTkZJR19TRVJJQUxfQkZJTl9DVFNSVFMKCXVuc2lnbmVkIGludCBzdGF0dXM7CiMgaWZkZWYg Q09ORklHX1NFUklBTF9CRklOX0RNQQoJc3RydWN0IHVhcnRfaW5mbyAqaW5mbyA9IHVhcnQtPnBv cnQuaW5mbzsKCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CgoJc3RhdHVzID0g YmZpbl9zZXJpYWxfZ2V0X21jdHJsKCZ1YXJ0LT5wb3J0KTsKCWlmICghKHN0YXR1cyAmIFRJT0NN X0NUUykpIHsKCQl0dHktPmh3X3N0b3BwZWQgPSAxOwoJfSBlbHNlIHsKCQl0dHktPmh3X3N0b3Bw ZWQgPSAwOwoJfQojIGVsc2UKCXN0YXR1cyA9IGJmaW5fc2VyaWFsX2dldF9tY3RybCgmdWFydC0+ cG9ydCk7Cgl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKCZ1YXJ0LT5wb3J0LCBzdGF0dXMgJiBUSU9D TV9DVFMpOwoJaWYgKCEoc3RhdHVzICYgVElPQ01fQ1RTKSkKCQlzY2hlZHVsZV93b3JrKCZ1YXJ0 LT5jdHNfd29ya3F1ZXVlKTsKIyBlbmRpZgojZW5kaWYKfQoKLyoKICogSW50ZXJydXB0cyBhcmUg YWx3YXlzIGRpc2FibGVkLgogKi8Kc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfYnJlYWtfY3RsKHN0 cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKewp9CgpzdGF0aWMgaW50IGJm aW5fc2VyaWFsX3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKewoJc3RydWN0IGJmaW5f c2VyaWFsX3BvcnQgKnVhcnQgPSAoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKilwb3J0OwoKI2lm ZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKCglpZiAo cmVxdWVzdF9kbWEodWFydC0+cnhfZG1hX2NoYW5uZWwsICJCRklOX1VBUlRfUlgiKSA8IDApIHsK CQlwcmludGsoS0VSTl9OT1RJQ0UgIlVuYWJsZSB0byBhdHRhY2ggQmxhY2tmaW4gVUFSVCBSWCBE TUEgY2hhbm5lbFxuIik7CgkJcmV0dXJuIC1FQlVTWTsKCX0KCglpZiAocmVxdWVzdF9kbWEodWFy dC0+dHhfZG1hX2NoYW5uZWwsICJCRklOX1VBUlRfVFgiKSA8IDApIHsKCQlwcmludGsoS0VSTl9O T1RJQ0UgIlVuYWJsZSB0byBhdHRhY2ggQmxhY2tmaW4gVUFSVCBUWCBETUEgY2hhbm5lbFxuIik7 CgkJZnJlZV9kbWEodWFydC0+cnhfZG1hX2NoYW5uZWwpOwoJCXJldHVybiAtRUJVU1k7Cgl9CgoJ c2V0X2RtYV9jYWxsYmFjayh1YXJ0LT5yeF9kbWFfY2hhbm5lbCwgYmZpbl9zZXJpYWxfZG1hX3J4 X2ludCwgdWFydCk7CglzZXRfZG1hX2NhbGxiYWNrKHVhcnQtPnR4X2RtYV9jaGFubmVsLCBiZmlu X3NlcmlhbF9kbWFfdHhfaW50LCB1YXJ0KTsKCgl1YXJ0LT5yeF9kbWFfYnVmLmJ1ZiA9ICh1bnNp Z25lZCBjaGFyICopZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIFBBR0VfU0laRSwgJmRtYV9oYW5k bGUsIEdGUF9ETUEpOwoJdWFydC0+cnhfZG1hX2J1Zi5oZWFkID0gMDsKCXVhcnQtPnJ4X2RtYV9i dWYudGFpbCA9IDA7Cgl1YXJ0LT5yeF9kbWFfbnJvd3MgPSAwOwoKCXNldF9kbWFfY29uZmlnKHVh cnQtPnJ4X2RtYV9jaGFubmVsLAoJCXNldF9iZmluX2RtYV9jb25maWcoRElSX1dSSVRFLCBETUFf RkxPV19BVVRPLAoJCQkJSU5UUl9PTl9ST1csIERJTUVOU0lPTl8yRCwKCQkJCURBVEFfU0laRV84 KSk7CglzZXRfZG1hX3hfY291bnQodWFydC0+cnhfZG1hX2NoYW5uZWwsIERNQV9SWF9YQ09VTlQp OwoJc2V0X2RtYV94X21vZGlmeSh1YXJ0LT5yeF9kbWFfY2hhbm5lbCwgMSk7CglzZXRfZG1hX3lf Y291bnQodWFydC0+cnhfZG1hX2NoYW5uZWwsIERNQV9SWF9ZQ09VTlQpOwoJc2V0X2RtYV95X21v ZGlmeSh1YXJ0LT5yeF9kbWFfY2hhbm5lbCwgMSk7CglzZXRfZG1hX3N0YXJ0X2FkZHIodWFydC0+ cnhfZG1hX2NoYW5uZWwsICh1bnNpZ25lZCBsb25nKXVhcnQtPnJ4X2RtYV9idWYuYnVmKTsKCWVu YWJsZV9kbWEodWFydC0+cnhfZG1hX2NoYW5uZWwpOwoKCXVhcnQtPnJ4X2RtYV90aW1lci5kYXRh ID0gKHVuc2lnbmVkIGxvbmcpKHVhcnQpOwoJdWFydC0+cnhfZG1hX3RpbWVyLmZ1bmN0aW9uID0g KHZvaWQgKiliZmluX3NlcmlhbF9yeF9kbWFfdGltZW91dDsKCXVhcnQtPnJ4X2RtYV90aW1lci5l eHBpcmVzID0gamlmZmllcyArIERNQV9SWF9GTFVTSF9KSUZGSUVTOwoJYWRkX3RpbWVyKCYodWFy dC0+cnhfZG1hX3RpbWVyKSk7CiNlbHNlCglpZiAocmVxdWVzdF9pcnEKCSAgICAodWFydC0+cG9y dC5pcnEsIGJmaW5fc2VyaWFsX2ludCwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsCgkgICAgICJC RklOX1VBUlQwX1JYIiwgdWFydCkpIHsKCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVuYWJsZSB0byBh dHRhY2ggQmxhY2tGaW4gVUFSVCBSWCBpbnRlcnJ1cHRcbiIpOwoJCXJldHVybiAtRUJVU1k7Cgl9 CgoJaWYgKHJlcXVlc3RfaXJxCgkgICAgKHVhcnQtPnBvcnQuaXJxKzEsIGJmaW5fc2VyaWFsX2lu dCwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsCgkgICAgICJCRklOX1VBUlQwX1RYIiwgdWFydCkp IHsKCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVuYWJsZSB0byBhdHRhY2ggQmxhY2tGaW4gVUFSVCBU WCBpbnRlcnJ1cHRcbiIpOwoJCWZyZWVfaXJxKHVhcnQtPnBvcnQuaXJxLCB1YXJ0KTsKCQlyZXR1 cm4gLUVCVVNZOwoJfQojZW5kaWYKCVVBUlRfUFVUX0lFUih1YXJ0LCBVQVJUX0dFVF9JRVIodWFy dCkgfCBFUkJGSSk7CglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfc2h1dGRv d24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKewoJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVh cnQgPSAoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKilwb3J0OwoKI2lmZGVmIENPTkZJR19TRVJJ QUxfQkZJTl9ETUEKCWRpc2FibGVfZG1hKHVhcnQtPnR4X2RtYV9jaGFubmVsKTsKCWZyZWVfZG1h KHVhcnQtPnR4X2RtYV9jaGFubmVsKTsKCWRpc2FibGVfZG1hKHVhcnQtPnJ4X2RtYV9jaGFubmVs KTsKCWZyZWVfZG1hKHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKCWRlbF90aW1lcigmKHVhcnQtPnJ4 X2RtYV90aW1lcikpOwojZWxzZQoJZnJlZV9pcnEodWFydC0+cG9ydC5pcnEsIHVhcnQpOwoJZnJl ZV9pcnEodWFydC0+cG9ydC5pcnErMSwgdWFydCk7CiNlbmRpZgp9CgpzdGF0aWMgdm9pZApiZmlu X3NlcmlhbF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlv cyAqdGVybWlvcywKCQkgICBzdHJ1Y3QgdGVybWlvcyAqb2xkKQp7CglzdHJ1Y3QgYmZpbl9zZXJp YWxfcG9ydCAqdWFydCA9IChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqKXBvcnQ7Cgl1bnNpZ25l ZCBsb25nIGZsYWdzOwoJdW5zaWduZWQgaW50IGJhdWQsIHF1b3Q7Cgl1bnNpZ25lZCBzaG9ydCB2 YWwsIGllcjsKCgliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwg MCwgcG9ydC0+dWFydGNsay8xNik7CglxdW90ID0gYmZpbl9zZXJpYWxfY2FsY19iYXVkKHBvcnQt PnVhcnRjbGssIGJhdWQpOwoJc3Bpbl9sb2NrX2lycXNhdmUoJnVhcnQtPnBvcnQubG9jaywgZmxh Z3MpOwoKCS8qIERpc2FibGUgVUFSVCAqLwoJaWVyID0gVUFSVF9HRVRfSUVSKHVhcnQpOwoJVUFS VF9QVVRfSUVSKHVhcnQsIDApOwoKCS8qIFNldCBETEFCIGluIExDUiB0byBBY2Nlc3MgRExMIGFu ZCBETEggKi8KCXZhbCA9IFVBUlRfR0VUX0xDUih1YXJ0KTsKCXZhbCB8PSBETEFCOwoJVUFSVF9Q VVRfTENSKHVhcnQsIHZhbCk7CglfX2J1aWx0aW5fYmZpbl9zc3luYygpOwoKCVVBUlRfUFVUX0RM TCh1YXJ0LCBxdW90ICYgMHhGRik7CglfX2J1aWx0aW5fYmZpbl9zc3luYygpOwoJVUFSVF9QVVRf RExIKHVhcnQsIChxdW90ID4+IDgpICYgMHhGRik7CglfX2J1aWx0aW5fYmZpbl9zc3luYygpOwoJ CgkvKiBDbGVhciBETEFCIGluIExDUiB0byBBY2Nlc3MgVEhSIFJCUiBJRVIgKi8KCXZhbCA9IFVB UlRfR0VUX0xDUih1YXJ0KTsKCXZhbCAmPSB+RExBQjsKCVVBUlRfUFVUX0xDUih1YXJ0LCB2YWwp OwoJX19idWlsdGluX2JmaW5fc3N5bmMoKTsKCgkvKiBFbmFibGUgVUFSVCAqLwoJVUFSVF9QVVRf SUVSKHVhcnQsIGllcik7CgoJdmFsID0gVUFSVF9HRVRfR0NUTCh1YXJ0KTsKCXZhbCB8PSBVQ0VO OwoJVUFSVF9QVVRfR0NUTCh1YXJ0LCB2YWwpOwoKCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVh cnQtPnBvcnQubG9jaywgZmxhZ3MpOwp9CgpzdGF0aWMgY29uc3QgY2hhciAqYmZpbl9zZXJpYWxf dHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAq dWFydCA9IChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqKXBvcnQ7CgoJcmV0dXJuIHVhcnQtPnBv cnQudHlwZSA9PSBQT1JUX0JGSU4gPyAiQkZJTi1VQVJUIiA6IE5VTEw7Cn0KCi8qCiAqIFJlbGVh c2UgdGhlIG1lbW9yeSByZWdpb24ocykgYmVpbmcgdXNlZCBieSAncG9ydCcuCiAqLwpzdGF0aWMg dm9pZCBiZmluX3NlcmlhbF9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKewp9 CgovKgogKiBSZXF1ZXN0IHRoZSBtZW1vcnkgcmVnaW9uKHMpIGJlaW5nIHVzZWQgYnkgJ3BvcnQn LgogKi8Kc3RhdGljIGludCBiZmluX3NlcmlhbF9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9y dCAqcG9ydCkKewoJcmV0dXJuIDA7Cn0KCi8qCiAqIENvbmZpZ3VyZS9hdXRvY29uZmlndXJlIHRo ZSBwb3J0LgogKi8Kc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfY29uZmlnX3BvcnQoc3RydWN0IHVh cnRfcG9ydCAqcG9ydCwgaW50IGZsYWdzKQp7CglzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFy dCA9IChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqKXBvcnQ7CgoJaWYgKGZsYWdzICYgVUFSVF9D T05GSUdfVFlQRSAmJgoJICAgIGJmaW5fc2VyaWFsX3JlcXVlc3RfcG9ydCgmdWFydC0+cG9ydCkg PT0gMCkKCQl1YXJ0LT5wb3J0LnR5cGUgPSBQT1JUX0JGSU47Cn0KCi8qCiAqIFZlcmlmeSB0aGUg bmV3IHNlcmlhbF9zdHJ1Y3QgKGZvciBUSU9DU1NFUklBTCkuCiAqIFRoZSBvbmx5IGNoYW5nZSB3 ZSBhbGxvdyBhcmUgdG8gdGhlIGZsYWdzIGFuZCB0eXBlLCBhbmQKICogZXZlbiB0aGVuIG9ubHkg YmV0d2VlbiBQT1JUX0JGSU4gYW5kIFBPUlRfVU5LTk9XTgogKi8Kc3RhdGljIGludApiZmluX3Nl cmlhbF92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0 cnVjdCAqc2VyKQp7CglyZXR1cm4gMDsKfQoKc3RhdGljIHN0cnVjdCB1YXJ0X29wcyBiZmluX3Nl cmlhbF9wb3BzID0gewoJLnR4X2VtcHR5CT0gYmZpbl9zZXJpYWxfdHhfZW1wdHksCgkuc2V0X21j dHJsCT0gYmZpbl9zZXJpYWxfc2V0X21jdHJsLAoJLmdldF9tY3RybAk9IGJmaW5fc2VyaWFsX2dl dF9tY3RybCwKCS5zdG9wX3R4CT0gYmZpbl9zZXJpYWxfc3RvcF90eCwKCS5zdGFydF90eAk9IGJm aW5fc2VyaWFsX3N0YXJ0X3R4LAoJLnN0b3BfcngJPSBiZmluX3NlcmlhbF9zdG9wX3J4LAoJLmVu YWJsZV9tcwk9IGJmaW5fc2VyaWFsX2VuYWJsZV9tcywKCS5icmVha19jdGwJPSBiZmluX3Nlcmlh bF9icmVha19jdGwsCgkuc3RhcnR1cAk9IGJmaW5fc2VyaWFsX3N0YXJ0dXAsCgkuc2h1dGRvd24J PSBiZmluX3NlcmlhbF9zaHV0ZG93biwKCS5zZXRfdGVybWlvcwk9IGJmaW5fc2VyaWFsX3NldF90 ZXJtaW9zLAoJLnR5cGUJCT0gYmZpbl9zZXJpYWxfdHlwZSwKCS5yZWxlYXNlX3BvcnQJPSBiZmlu X3NlcmlhbF9yZWxlYXNlX3BvcnQsCgkucmVxdWVzdF9wb3J0CT0gYmZpbl9zZXJpYWxfcmVxdWVz dF9wb3J0LAoJLmNvbmZpZ19wb3J0CT0gYmZpbl9zZXJpYWxfY29uZmlnX3BvcnQsCgkudmVyaWZ5 X3BvcnQJPSBiZmluX3NlcmlhbF92ZXJpZnlfcG9ydCwKfTsKCnN0YXRpYyBpbnQgYmZpbl9zZXJp YWxfY2FsY19iYXVkKHVuc2lnbmVkIGludCB1YXJ0Y2xrLCB1bnNpZ25lZCBpbnQgYmF1ZCkKewoJ aW50IHF1b3Q7CgoJcXVvdCA9IHVhcnRjbGsgLyAoYmF1ZCAqIDgpOwoJaWYgKChxdW90ICYgMHgx KSA9PSAxKSB7CgkJcXVvdCsrOwoJfQoJcmV0dXJuIHF1b3QvMjsKfQoKc3RhdGljIHZvaWQgX19p bml0IGJmaW5fc2VyaWFsX2luaXRfcG9ydHModm9pZCkKewoJc3RhdGljIGludCBmaXJzdCA9IDE7 CglpbnQgaTsKCXVuc2lnbmVkIHNob3J0IHZhbDsKCWludCBxdW90OwoKCWlmICghZmlyc3QpCgkJ cmV0dXJuOwoJZmlyc3QgPSAwOwoJYmZpbl9zZXJpYWxfaHdfaW5pdCgpOwoKCWZvciAoaSA9IDA7 IGkgPCBOUl9QT1JUUzsgaSsrKSB7CgkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC51YXJ0Y2xr ICAgPSBnZXRfc2NsaygpOwoJCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQub3BzICAgICAgID0g JmJmaW5fc2VyaWFsX3BvcHM7CgkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5saW5lICAgICAg PSBpOwoJCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQuaW90eXBlICAgID0gVVBJT19NRU07CgkJ YmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5tZW1iYXNlICAgPSAodm9pZCBfX2lvbWVtICopdWFy dF9iYXNlX2FkZHJbaV07CgkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5tYXBiYXNlICAgPSB1 YXJ0X2Jhc2VfYWRkcltpXTsKCQliZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0LmlycSAgICAgICA9 IHVhcnRfaXJxW2ldOwoJCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQuZmxhZ3MgICAgID0gVVBG X0JPT1RfQVVUT0NPTkY7CiNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fRE1BCgkJYmZpbl9zZXJp YWxfcG9ydHNbaV0udHhfZG9uZQkgICAgPSAxOwoJCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnR4X2Nv dW50CSAgICA9IDA7CgkJYmZpbl9zZXJpYWxfcG9ydHNbaV0udHhfZG1hX2NoYW5uZWwgPSB1YXJ0 X3R4X2RtYV9jaGFubmVsW2ldOwoJCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnJ4X2RtYV9jaGFubmVs ID0gdWFydF9yeF9kbWFfY2hhbm5lbFtpXTsKCgkJaW5pdF90aW1lcigmKGJmaW5fc2VyaWFsX3Bv cnRzW2ldLnJ4X2RtYV90aW1lcikpOwojZWxzZQoJCUlOSVRfV09SSygmYmZpbl9zZXJpYWxfcG9y dHNbaV0uY3RzX3dvcmtxdWV1ZSwgYmZpbl9zZXJpYWxfZG9fd29yaywgJmJmaW5fc2VyaWFsX3Bv cnRzW2ldKTsKI2VuZGlmCgoJCXF1b3QgPSBiZmluX3NlcmlhbF9jYWxjX2JhdWQoYmZpbl9zZXJp YWxfcG9ydHNbaV0ucG9ydC51YXJ0Y2xrLCBDT05TT0xFX0JBVURfUkFURSk7CgoJCS8qIERpc2Fi bGUgVUFSVCAqLwoJCVVBUlRfUFVUX0dDVEwoJmJmaW5fc2VyaWFsX3BvcnRzW2ldLCAwKTsKCgkJ LyogU2V0IERMQUIgaW4gTENSIHRvIEFjY2VzcyBETEwgYW5kIERMSCAqLwoJCXZhbCA9IFVBUlRf R0VUX0xDUigmYmZpbl9zZXJpYWxfcG9ydHNbaV0pOwoJCXZhbCB8PSBETEFCOwoJCVVBUlRfUFVU X0xDUigmYmZpbl9zZXJpYWxfcG9ydHNbaV0sIHZhbCk7CgoJCVVBUlRfUFVUX0RMTCgmYmZpbl9z ZXJpYWxfcG9ydHNbaV0sIHF1b3QgJiAweEZGKTsKCQlVQVJUX1BVVF9ETEgoJmJmaW5fc2VyaWFs X3BvcnRzW2ldLCAocXVvdCA+PiA4KSAmIDB4RkYpOwoKCQkvKiBDbGVhciBETEFCIGluIExDUiB0 byBBY2Nlc3MgVEhSIFJCUiBJRVIgKi8KCQl2YWwgPSBVQVJUX0dFVF9MQ1IoJmJmaW5fc2VyaWFs X3BvcnRzW2ldKTsKCQl2YWwgJj0gfkRMQUI7CgkJVUFSVF9QVVRfTENSKCZiZmluX3NlcmlhbF9w b3J0c1tpXSwgdmFsKTsKCgkJLyogU2V0IExDUiB0byBXb3JkIExlbmdoIDgtYml0IHdvcmQgc2Vs ZWN0ICovCgkJdmFsID0gV0xTKDgpOwoJCVVBUlRfUFVUX0xDUigmYmZpbl9zZXJpYWxfcG9ydHNb aV0sIHZhbCk7CgoJCSAvKiBFbmFibGUgVUFSVCAqLwoJCXZhbCA9IFVBUlRfR0VUX0dDVEwoJmJm aW5fc2VyaWFsX3BvcnRzW2ldKTsKCQl2YWwgfD0gVUNFTjsKCQlVQVJUX1BVVF9HQ1RMKCZiZmlu X3NlcmlhbF9wb3J0c1tpXSwgdmFsKTsKCX0KfQoKI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9D T05TT0xFCi8qCiAqIEludGVycnVwdHMgYXJlIGRpc2FibGVkIG9uIGVudGVyaW5nCiAqLwpzdGF0 aWMgdm9pZApiZmluX3NlcmlhbF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29u c3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KQp7CglzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9y dCAqdWFydCA9ICZiZmluX3NlcmlhbF9wb3J0c1tjby0+aW5kZXhdOwoJaW50IGZsYWdzID0gMDsK CXVuc2lnbmVkIHNob3J0IHN0YXR1cywgdG1wOwoJaW50IGk7CgoJbG9jYWxfaXJxX3NhdmUoZmxh Z3MpOwoKCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CgkJZG8gewoJCQlzdGF0dXMgPSBV QVJUX0dFVF9MU1IodWFydCk7CgkJfSB3aGlsZSAoIShzdGF0dXMgJiBUSFJFKSk7CgoJCXRtcCA9 IFVBUlRfR0VUX0xDUih1YXJ0KTsKCQl0bXAgJj0gfkRMQUI7CgkJVUFSVF9QVVRfTENSKHVhcnQs IHRtcCk7CgoJCVVBUlRfUFVUX0NIQVIodWFydCwgc1tpXSk7CgkJaWYgKHNbaV0gPT0gJ1xuJykg ewoJCQlkbyB7CgkJCQlzdGF0dXMgPSBVQVJUX0dFVF9MU1IodWFydCk7CgkJCX0gd2hpbGUoIShz dGF0dXMgJiBUSFJFKSk7CgkJCVVBUlRfUFVUX0NIQVIodWFydCwgJ1xyJyk7CgkJfQoJfQoKCWxv Y2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKfQoKLyoKICogSWYgdGhlIHBvcnQgd2FzIGFscmVhZHkg aW5pdGlhbGlzZWQgKGVnLCBieSBhIGJvb3QgbG9hZGVyKSwKICogdHJ5IHRvIGRldGVybWluZSB0 aGUgY3VycmVudCBzZXR1cC4KICovCnN0YXRpYyB2b2lkIF9faW5pdApiZmluX3NlcmlhbF9jb25z b2xlX2dldF9vcHRpb25zKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0LCBpbnQgKmJhdWQs CgkJCSAgIGludCAqcGFyaXR5LCBpbnQgKmJpdHMpCnsKCXVuc2lnbmVkIHNob3J0IHN0YXR1czsK CglzdGF0dXMgPSBVQVJUX0dFVF9JRVIodWFydCkgJiAoRVJCRkkgfCBFVEJFSSk7CglpZiAoc3Rh dHVzID09IChFUkJGSSB8IEVUQkVJKSkgewoJCS8qIG9rLCB0aGUgcG9ydCB3YXMgZW5hYmxlZCAq LwoJCXVuc2lnbmVkIHNob3J0IGxjciwgdmFsOwoJCXVuc2lnbmVkIHNob3J0IGRsaCwgZGxsOwoK CQlsY3IgPSBVQVJUX0dFVF9MQ1IodWFydCk7CgoJCSpwYXJpdHkgPSAnbic7CgkJaWYgKGxjciAm IFBFTikgewoJCQlpZiAobGNyICYgRVBTKQoJCQkJKnBhcml0eSA9ICdlJzsKCQkJZWxzZQoJCQkJ KnBhcml0eSA9ICdvJzsKCQl9CgkJc3dpdGNoIChsY3IgJiAweDAzKSB7CgkJCWNhc2UgMDoJKmJp dHMgPSA1OyBicmVhazsKCQkJY2FzZSAxOgkqYml0cyA9IDY7IGJyZWFrOwoJCQljYXNlIDI6CSpi aXRzID0gNzsgYnJlYWs7CgkJCWNhc2UgMzoJKmJpdHMgPSA4OyBicmVhazsKCQl9CgkJLyogU2V0 IERMQUIgaW4gTENSIHRvIEFjY2VzcyBETEwgYW5kIERMSCAqLwoJCXZhbCA9IFVBUlRfR0VUX0xD Uih1YXJ0KTsKCQl2YWwgfD0gRExBQjsKCQlVQVJUX1BVVF9MQ1IodWFydCwgdmFsKTsKCgkJZGxs ID0gVUFSVF9HRVRfRExMKHVhcnQpOwoJCWRsaCA9IFVBUlRfR0VUX0RMSCh1YXJ0KTsKCgkJLyog Q2xlYXIgRExBQiBpbiBMQ1IgdG8gQWNjZXNzIFRIUiBSQlIgSUVSICovCgkJdmFsID0gVUFSVF9H RVRfTENSKHVhcnQpOwoJCXZhbCAmPSB+RExBQjsKCQlVQVJUX1BVVF9MQ1IodWFydCwgdmFsKTsK CgkJKmJhdWQgPSBnZXRfc2NsaygpIC8gKDE2KihkbGwgfCBkbGggPDwgOCkpOwoJfQoJcHJfZGVi dWcoIiVzOmJhdWQgPSAlZCwgcGFyaXR5ID0gJWMsIGJpdHM9ICVkXG4iLCBfX0ZVTkNUSU9OX18s ICpiYXVkLCAqcGFyaXR5LCAqYml0cyk7Cn0KCnN0YXRpYyBpbnQgX19pbml0CmJmaW5fc2VyaWFs X2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQp7CglzdHJ1 Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydDsKCWludCBiYXVkID0gQ09OU09MRV9CQVVEX1JBVEU7 CglpbnQgYml0cyA9IDg7CglpbnQgcGFyaXR5ID0gJ24nOwojaWZkZWYgQ09ORklHX1NFUklBTF9C RklOX0NUU1JUUwoJaW50IGZsb3cgPSAncic7CiNlbHNlCglpbnQgZmxvdyA9ICduJzsKI2VuZGlm CgoJLyoKCSAqIENoZWNrIHdoZXRoZXIgYW4gaW52YWxpZCB1YXJ0IG51bWJlciBoYXMgYmVlbiBz cGVjaWZpZWQsIGFuZAoJICogaWYgc28sIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGF2YWlsYWJsZSBw b3J0IHRoYXQgZG9lcyBoYXZlCgkgKiBjb25zb2xlIHN1cHBvcnQuCgkgKi8KCWlmIChjby0+aW5k ZXggPT0gLTEgfHwgY28tPmluZGV4ID49IE5SX1BPUlRTKQoJCWNvLT5pbmRleCA9IDA7Cgl1YXJ0 ID0gJmJmaW5fc2VyaWFsX3BvcnRzW2NvLT5pbmRleF07CgoJaWYgKG9wdGlvbnMpCgkJdWFydF9w YXJzZV9vcHRpb25zKG9wdGlvbnMsICZiYXVkLCAmcGFyaXR5LCAmYml0cywgJmZsb3cpOwoJZWxz ZQoJCWJmaW5fc2VyaWFsX2NvbnNvbGVfZ2V0X29wdGlvbnModWFydCwgJmJhdWQsICZwYXJpdHks ICZiaXRzKTsKCglyZXR1cm4gdWFydF9zZXRfb3B0aW9ucygmdWFydC0+cG9ydCwgY28sIGJhdWQs IHBhcml0eSwgYml0cywgZmxvdyk7Cn0KCnN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgYmZpbl9z ZXJpYWxfcmVnOwpzdGF0aWMgc3RydWN0IGNvbnNvbGUgYmZpbl9zZXJpYWxfY29uc29sZSA9IHsK CS5uYW1lCQk9ICJ0dHlTIiwKCS53cml0ZQkJPSBiZmluX3NlcmlhbF9jb25zb2xlX3dyaXRlLAoJ LmRldmljZQkJPSB1YXJ0X2NvbnNvbGVfZGV2aWNlLAoJLnNldHVwCQk9IGJmaW5fc2VyaWFsX2Nv bnNvbGVfc2V0dXAsCgkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAoJLmluZGV4CQk9IC0xLAoJ LmRhdGEJCT0gJmJmaW5fc2VyaWFsX3JlZywKfTsKCnN0YXRpYyBpbnQgX19pbml0IGJmaW5fc2Vy aWFsX3JzX2NvbnNvbGVfaW5pdCh2b2lkKQp7CgliZmluX3NlcmlhbF9pbml0X3BvcnRzKCk7Cgly ZWdpc3Rlcl9jb25zb2xlKCZiZmluX3NlcmlhbF9jb25zb2xlKTsKCXJldHVybiAwOwp9CmNvbnNv bGVfaW5pdGNhbGwoYmZpbl9zZXJpYWxfcnNfY29uc29sZV9pbml0KTsKCiNkZWZpbmUgQkZJTl9T RVJJQUxfQ09OU09MRQkmYmZpbl9zZXJpYWxfY29uc29sZQojZWxzZQojZGVmaW5lIEJGSU5fU0VS SUFMX0NPTlNPTEUJTlVMTAojZW5kaWYKCnN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgYmZpbl9z ZXJpYWxfcmVnID0gewoJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKCS5kcml2ZXJfbmFtZQkJPSAi YmZpbi11YXJ0IiwKCS5kZXZfbmFtZQkJPSAidHR5UyIsCgkubWFqb3IJCQk9IFNFUklBTF9CRklO X01BSk9SLAoJLm1pbm9yCQkJPSBNSU5PUl9TVEFSVCwKCS5ucgkJCT0gTlJfUE9SVFMsCgkuY29u cwkJCT0gQkZJTl9TRVJJQUxfQ09OU09MRSwKfTsKCnN0YXRpYyBpbnQgYmZpbl9zZXJpYWxfc3Vz cGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKewoJ c3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYp OwoKCWlmICh1YXJ0KQoJCXVhcnRfc3VzcGVuZF9wb3J0KCZiZmluX3NlcmlhbF9yZWcsICZ1YXJ0 LT5wb3J0KTsKCglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBiZmluX3NlcmlhbF9yZXN1bWUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQp7CglzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFy dCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CgoJaWYgKHVhcnQpCgkJdWFydF9yZXN1bWVf cG9ydCgmYmZpbl9zZXJpYWxfcmVnLCAmdWFydC0+cG9ydCk7CgoJcmV0dXJuIDA7Cn0KCnN0YXRp YyBpbnQgYmZpbl9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQp7Cglz dHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2U7CglpbnQgaTsKCglmb3IgKGkgPSAw OyBpIDwgZGV2LT5udW1fcmVzb3VyY2VzOyBpKyssIHJlcysrKQoJCWlmIChyZXMtPmZsYWdzICYg SU9SRVNPVVJDRV9NRU0pCgkJCWJyZWFrOwoKCWlmIChpIDwgZGV2LT5udW1fcmVzb3VyY2VzKSB7 CgkJZm9yIChpID0gMDsgaSA8IE5SX1BPUlRTOyBpKyssIHJlcysrKSB7CgkJCWlmIChiZmluX3Nl cmlhbF9wb3J0c1tpXS5wb3J0Lm1hcGJhc2UgIT0gcmVzLT5zdGFydCkKCQkJCWNvbnRpbnVlOwoJ CQliZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0LmRldiA9ICZkZXYtPmRldjsKCQkJdWFydF9hZGRf b25lX3BvcnQoJmJmaW5fc2VyaWFsX3JlZywgJmJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQpOwoJ CQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZiZmluX3NlcmlhbF9wb3J0c1tpXSk7CgkJfQoJ fQoKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IGJmaW5fc2VyaWFsX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQp7CglzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwoKCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5V TEwpOwoKCWlmICh1YXJ0KQoJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZiZmluX3NlcmlhbF9yZWcs ICZ1YXJ0LT5wb3J0KTsKCglyZXR1cm4gMDsKfQoKc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgYmZpbl9zZXJpYWxfZHJpdmVyID0gewoJLnByb2JlCQk9IGJmaW5fc2VyaWFsX3Byb2JlLAoJ LnJlbW92ZQkJPSBiZmluX3NlcmlhbF9yZW1vdmUsCgkuc3VzcGVuZAk9IGJmaW5fc2VyaWFsX3N1 c3BlbmQsCgkucmVzdW1lCQk9IGJmaW5fc2VyaWFsX3Jlc3VtZSwKCS5kcml2ZXIJCT0gewoJCS5u YW1lCT0gImJmaW4tdWFydCIsCgl9LAp9OwoKc3RhdGljIGludCBfX2luaXQgYmZpbl9zZXJpYWxf aW5pdCh2b2lkKQp7CglpbnQgcmV0OwoKCXByX2luZm8oIlNlcmlhbDogQmxhY2tmaW4gc2VyaWFs IGRyaXZlclxuIik7CgoJYmZpbl9zZXJpYWxfaW5pdF9wb3J0cygpOwoKCXJldCA9IHVhcnRfcmVn aXN0ZXJfZHJpdmVyKCZiZmluX3NlcmlhbF9yZWcpOwoJaWYgKHJldCA9PSAwKSB7CgkJcmV0ID0g cGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiZmluX3NlcmlhbF9kcml2ZXIpOwoJCWlmIChyZXQp IHsKCQkJcHJfZGVidWcoInVhcnQgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKCQkJdWFydF91bnJlZ2lz dGVyX2RyaXZlcigmYmZpbl9zZXJpYWxfcmVnKTsKCQl9Cgl9CglyZXR1cm4gcmV0Owp9CgpzdGF0 aWMgdm9pZCBfX2V4aXQgYmZpbl9zZXJpYWxfZXhpdCh2b2lkKQp7CglwbGF0Zm9ybV9kcml2ZXJf dW5yZWdpc3RlcigmYmZpbl9zZXJpYWxfZHJpdmVyKTsKCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIo JmJmaW5fc2VyaWFsX3JlZyk7Cn0KCm1vZHVsZV9pbml0KGJmaW5fc2VyaWFsX2luaXQpOwptb2R1 bGVfZXhpdChiZmluX3NlcmlhbF9leGl0KTsKCk1PRFVMRV9BVVRIT1IoIkF1YnJleS5MaSA8YXVi cmV5LmxpQGFuYWxvZy5jb20+Iik7Ck1PRFVMRV9ERVNDUklQVElPTigiQmxhY2tmaW4gZ2VuZXJp YyBzZXJpYWwgcG9ydCBkcml2ZXIiKTsKTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpNT0RVTEVfQUxJ QVNfQ0hBUkRFVl9NQUpPUihTRVJJQUxfQkZJTl9NQUpPUik7Cg== ------=_Part_15136_17806601.1170297220414-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/