Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756931AbXEQKOH (ORCPT ); Thu, 17 May 2007 06:14:07 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754956AbXEQKNz (ORCPT ); Thu, 17 May 2007 06:13:55 -0400 Received: from hqemgate01.nvidia.com ([216.228.112.170]:8905 "EHLO HQEMGATE01.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754394AbXEQKNx (ORCPT ); Thu, 17 May 2007 06:13:53 -0400 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C7986C.4E17BDD4" Subject: [PATCH] drivers/ata: Add the SW NCQ support to sata_nv for MCP51/MCP55/MCP61 Date: Thu, 17 May 2007 18:15:45 +0800 Message-ID: <15F501D1A78BD343BE8F4D8DB854566B13F197C0@hkemmail01.nvidia.com> In-Reply-To: <464A94D7.30300@garzik.org> X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: [PATCH] drivers/ata: Add the SW NCQ support to sata_nv for MCP51/MCP55/MCP61 Thread-Index: AceXek9fNVIiebYuSyehXcTkfOQflAA8JvYg References: <15F501D1A78BD343BE8F4D8DB854566B13CD8F45@hkemmail01.nvidia.com> <464A94D7.30300@garzik.org> From: "Peer Chen" To: Cc: "Jeff Garzik" , "Robert Hancock" , , "Kuan Luo" X-OriginalArrivalTime: 17 May 2007 10:13:52.0960 (UTC) FILETIME=[1205AC00:01C7986C] Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 44363 Lines: 604 This is a multi-part message in MIME format. ------_=_NextPart_001_01C7986C.4E17BDD4 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: quoted-printable =20Add the Software NCQ support to sata_nv.c for MCP51/MCP55/MCP61 SATA controller. This patch base on sata_nv.c file from kernel 2.6.22-rc1 See attachment for the patch. Signed-off-by: Kuan Luo Signed-off-by: Peer Chen =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D See attached file. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D -------------------------------------------------------------------------= ---------- This email message is for the sole use of the intended recipient(s) and m= ay contain confidential information. Any unauthorized review, use, disclosure or di= stribution is prohibited. If you are not the intended recipient, please contact the= =20sender by reply email and destroy all copies of the original message. -------------------------------------------------------------------------= ---------- ------_=_NextPart_001_01C7986C.4E17BDD4 Content-Type: application/octet-stream; name="patch-sata_nv-swncq" Content-Transfer-Encoding: base64 Content-Description: patch-sata_nv-swncq Content-Disposition: attachment; filename="patch-sata_nv-swncq" LS0tIGxpbnV4LTIuNi4yMi1yYzEvZHJpdmVycy9hdGEvc2F0YV9udi5jLm9yaWcJMjAwNy0wNS0x NyAxNDo0ODoyNi4wMDAwMDAwMDAgLTA0MDAKKysrIGxpbnV4LTIuNi4yMi1yYzEvZHJpdmVycy9h dGEvc2F0YV9udi5jCTIwMDctMDUtMTcgMTc6MDc6MjguMDAwMDAwMDAwIC0wNDAwCkBAIC00Niw2 ICs0Niw4IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3Np X2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9z Y3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxsaW51eC9saWJh dGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkJCSJzYXRhX252IgpAQCAtMTY5LDYgKzE3MSwzNiBA QCBlbnVtIHsKIAlOVl9BRE1BX1BPUlRfUkVHSVNURVJfTU9ERQk9ICgxIDw8IDApLAogCU5WX0FE TUFfQVRBUElfU0VUVVBfQ09NUExFVEUJPSAoMSA8PCAxKSwKIAorCS8qIE1DUDU1IHJlZyBvZmZz ZXQgKi8KKwlOVl9DVExfTUNQNTUJCQk9IDB4NDAwLAorCU5WX0lOVF9TVEFUVVNfTUNQNTUJCT0g MHg0NDAsCisJTlZfSU5UX0VOQUJMRV9NQ1A1NQkJPSAweDQ0NCwKKwlOVl9OQ1FfUkVHX01DUDU1 CQk9IDB4NDQ4LAorCU5WX0NIMV9TQUNUSVZFX01DUDU1CQk9IDB4MEMsIAorCQorCS8qIE1DUDU1 ICovCisJTlZfSU5UX0FMTF9NQ1A1NQkJPSAweGZmZmYsCisJTlZfSU5UX1BPUlRfU0hJRlRfTUNQ NTUJCT0gMTYsCS8qIGVhY2ggcG9ydCBvY2N1cGllcyAxNiBiaXRzICovCisJTlZfSU5UX01BU0tf TUNQNTUJCT0gTlZfSU5UX0FMTF9NQ1A1NSAmIDB4ZmZmZCwKKwkKKwkvKiBOQ1EgRU5BQkxFIEJJ VFMqLworCU5WX0NUTF9QUklfU1dOQ1EJCT0gMHgwMiwKKwlOVl9DVExfU0VDX1NXTkNRCQk9IDB4 MDQsCisJCisJLyogTUNQNTUgc3RhdHVzIGJpdHMqLworCU5WX0lOVF9ERVZfTUNQNTUJCT0gMHgw MSwKKwlOVl9JTlRfUE1fTUNQNTUJCQk9IDB4MDIsCisJTlZfSU5UX0FEREVEX01DUDU1CQk9IDB4 MDQsCisJTlZfSU5UX1JFTU9WRURfTUNQNTUJCT0gMHgwOCwKKyAJCisgCU5WX0lOVF9CQUNLT1VU X01DUDU1CQk9IDB4MTAsCisgCU5WX0lOVF9TREJGSVNfTUNQNTUJCT0gMHgyMCwKKyAJTlZfSU5U X0RIUkVHRklTX01DUDU1CQk9IDB4NDAsCisJTlZfSU5UX0RNQVNFVFVQX01DUDU1CQk9IDB4ODAs CisJCisJTlZfSU5UX0hPVFBMVUdfTUNQNTUJCT0gKE5WX0lOVF9BRERFRF9NQ1A1NSB8CisJCQkJ CQlOVl9JTlRfUkVNT1ZFRF9NQ1A1NSksCisKIH07CiAKIC8qIEFETUEgUGh5c2ljYWwgUmVnaW9u IERlc2NyaXB0b3IgLSBvbmUgU0cgc2VnbWVudCAqLwpAQCAtMjY0LDEzICsyOTYsMTE4IEBAIHN0 YXRpYyB2b2lkIG52X2FkbWFfaG9zdF9zdG9wKHN0cnVjdCBhdGEKIHN0YXRpYyB2b2lkIG52X2Fk bWFfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBzdGF0aWMg dm9pZCBudl9hZG1hX3RmX3JlYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNr ZmlsZSAqdGYpOwogCitzdGF0aWMgdm9pZCBuY3FfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3Bv cnQgKmFwKTsKK3N0YXRpYyB2b2lkIG52X21jcDU1X3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCk7 CitzdGF0aWMgdm9pZCBudl9tY3A1NV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0 aWMgdm9pZCBuY3FfaG9zdF9pbml0KHN0cnVjdCBhdGFfaG9zdCAqaG9zdCk7CitzdGF0aWMgdm9p ZCBudl9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIGludCBudl9zdGRf cWNfZGVmZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50ICBudl9wb3J0X3N0YXJ0 KHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIHZvaWQgbnZfcG9ydF9zdG9wKHN0cnVjdCBh dGFfcG9ydCAqYXApOworc3RhdGljIHZvaWQgbmNxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXAp Oworc3RhdGljIHZvaWQgbnZfcWNfcHJlcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0 YXRpYyB2b2lkIG52X2ZpbGxfc2coc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMg dm9pZCBuY3Ffc2FjdGl2ZV9zdGFydCAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0 aWMgdTMyIG5jcV9zYWN0aXZlX3ZhbHVlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyB1 bnNpZ25lZCBpbnQgbnZfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsK K3N0YXRpYyB1MzIgbmNxX3RhZ192YWx1ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyBp bnQgbnZfbmNxaW50cl9zZGJmaXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IG52 X25jcWludHJfZG1hc2V0dXBmaXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgdm9pZCBu Y3FfY2xlYXJfc2luZ2xlZmlzKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUzMiB2YWwpOworc3RhdGlj IHUzMiBuY3Ffb3duZmlzaW50cl92YWx1ZSAoc3RydWN0IGF0YV9wb3J0ICphcCk7Cit2b2lkIG5j cV9ob3RwbHVnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUzMiBmaXMpOworc3RhdGljIGlycXJldHVy bl90IG52X21jcDU1X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOworc3Rh dGljIGludCBuY3FfaW50ZXJydXB0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUzMiBmaXMpOworc3Rh dGljIGludCBudl9zY3NpX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKKwkJCSAgICB2 b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSk7CisKKyN1bmRlZiBOQ1FfREVCVUcKKyN1 bmRlZiBOQ1FfVkVSQk9TRV9ERUJVRworI2lmZGVmIE5DUV9ERUJVRworI2RlZmluZSBOUFJJTlRL KGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmbXQsIF9fRlVOQ1RJT05fXywg IyMgYXJncykKKyNpZmRlZiBOQ1FfVkVSQk9TRV9ERUJVRworI2RlZmluZSBOVlBSSU5USyhmbXQs IGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm10LCBfX0ZVTkNUSU9OX18sICMjIGFy Z3MpCisjZWxzZQorI2RlZmluZSBOVlBSSU5USyhmbXQsIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSgw KQorI2VuZGlmCS8qIE5DUV9WRVJCT1NFX0RFQlVHICovCisjZWxzZQorI2RlZmluZSBOUFJJTlRL KGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIE5WUFJJTlRLKGZtdCwgYXJn cy4uLikgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKworLyogICAgY21kX3N0b3AKKyB8X2J5dGUg M19ffHxfX2J5dGUgMl9fX198fF9fYnl0ZSAxX19ffHxfX2J5dGUgMF9fX19ffAorCitieXRlMDp0 aGUgZG1hIGZpcyB0YWcncyB2YWx1ZSBwbHVzIDEgIAorYnl0ZTE6IGRlZmVyIHRhZydzIHZhbHVl IHBsdXMgMQorYnl0ZTI6IGJhY2tvdXQgdGFnJ3MgdmFsdWUgcGx1cyAxCisKKyovCisvKiBuY3Eg b3BlcmF0aW9uICovCitzdHJ1Y3QgbnZfcG9ydF9wcml2IHsKKwlzdHJ1Y3QgYXRhX3ByZAkqcHJk OwkgLyogb3VyIFNHIGxpc3QgKi8KKwlkbWFfYWRkcl90CXByZF9kbWE7IC8qIGFuZCBpdHMgRE1B IG1hcHBpbmcgKi8KKwl1MzIJCXFjX2FjdGl2ZTsKKwl1OAkJY3VycmVudF90YWc7LyogdGhlIGxh c3QgdGFnICovCisJdTMyCQlkaGZpc19mbGFnczsvKiBlYWNoIGJpdCBpcyByZXNwb25kaW5nIHRv IG9uZSBjbWQsCisJCQkJCWlmIHJlY2VpdmluZyBkaCBmaXMgLGJpdCBzZXQgb25lLiovCisJdTgJ CXJldHJ5OwkvKiB0aGUgbGFzdCBjbWQgbmVlZGVkIHJldHJ5ICovCisJdTMyCQljbWRfc3RvcDsJ Lyogc3RvcCBzZW5kaW5nIGNtZCBmcm9tIHVwcGVyIGxheWVyLiovCisJdTMyCQljbWRfc2VuZGVk OyAvKiBkZWJ1ZyBpbmZvICovCisJdTMyCQlkZWZlcl9iaXRzOwkKKyAJY29uc3QJc3RydWN0IG52 X25jcV9vcGVyYXRpb25zCSpvcHM7CisKK307CisKK3N0cnVjdCAgbnZfbmNxX29wZXJhdGlvbnN7 CisJdm9pZAkoKmJtZG1hX3N0b3ApKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCXZvaWQJKCpzYWN0 aXZlX3N0YXJ0KSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CisJdTMyCSgqc2FjdGl2ZV92 YWx1ZSkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCXUzMgkoKnRhZ192YWx1ZSkgKHN0cnVjdCBh dGFfcG9ydCAqYXApOworCXUzMgkoKmNoZWNrX293bmZpcykgKHN0cnVjdCBhdGFfcG9ydCAqYXAp Oy8qIGdldCB0aGUgY2hhbm5lbCAncyBmaXMgdmFsdWUgKi8KKwl2b2lkCSgqY2xlYXJfc2luZ2xl ZmlzKSAoc3RydWN0IGF0YV9wb3J0ICphcCx1MzIgZmxhZyk7CisJaW50CSgqcWNfZGVmZXIpIChz dHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnZfbmNxX29w ZXJhdGlvbnMgbnZfbmNxX29wcyA9IHsKKwkuYm1kbWFfc3RvcAkJPSBudl9ibWRtYV9zdG9wLAor CS5zYWN0aXZlX3N0YXJ0CQk9IG5jcV9zYWN0aXZlX3N0YXJ0LAorCS5zYWN0aXZlX3ZhbHVlCQk9 IG5jcV9zYWN0aXZlX3ZhbHVlLAorCS50YWdfdmFsdWUJCT0gbmNxX3RhZ192YWx1ZSwKKwkuY2xl YXJfc2luZ2xlZmlzCT0gbmNxX2NsZWFyX3NpbmdsZWZpcywKKwkucWNfZGVmZXIJCT0gbnZfc3Rk X3FjX2RlZmVyLAorCS5jaGVja19vd25maXMJCT0gbmNxX293bmZpc2ludHJfdmFsdWUgLAorfTsK KworI2RlZmluZSBkbWFfYnl0ZShyZXN1bHQpICgoKHJlc3VsdCkgPj4gMCkgJiAweGZmKQorI2Rl ZmluZSBkZWZlcl9ieXRlKHJlc3VsdCkgICAgKCgocmVzdWx0KSA+PiA4KSAmIDB4ZmYpCisjZGVm aW5lIGJhY2tfYnl0ZShyZXN1bHQpICAgKCgocmVzdWx0KSA+PiAxNikgJiAweGZmKQorCitzdGF0 aWMgaW5saW5lIHZvaWQgIHNldF9kbWFfYnl0ZShzdHJ1Y3QgbnZfcG9ydF9wcml2ICpwcCwgdTgg dmFsKQoreworCXBwLT5jbWRfc3RvcCB8PSB2YWwgKyAxOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgIHNldF9kZWZlcl9ieXRlKHN0cnVjdCBudl9wb3J0X3ByaXYgKnBwLCB1OCB2YWwpCit7CisJ cHAtPmNtZF9zdG9wIHw9ICgodmFsICsgMSkgPDwgOCkgOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgIHNldF9iYWNrX2J5dGUoc3RydWN0IG52X3BvcnRfcHJpdiAqcHAsIHU4IHZhbCkKK3sKKwlw cC0+Y21kX3N0b3AgfD0gKCh2YWwgKyAxKSA8PCAxNik7Cit9CisKIGVudW0gbnZfaG9zdF90eXBl CiB7CiAJR0VORVJJQywKIAlORk9SQ0UyLAogCU5GT1JDRTMgPSBORk9SQ0UyLAkvKiBORjIgPT0g TkYzIGFzIGZhciBhcyBzYXRhX252IGlzIGNvbmNlcm5lZCAqLwogCUNLODA0LAotCUFETUEKKwlB RE1BLAorCU1DUDU1LAorCU1DUDUxID0gTUNQNTUsCisJTUNQNjEgPSBNQ1A1NQogfTsKIAogc3Rh dGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG52X3BjaV90YmxbXSA9IHsKQEAgLTI4MSwx MyArNDE4LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBudl9wY2kKIAl7 IFBDSV9WREVWSUNFKE5WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0NLODA0X1NB VEEyKSwgQ0s4MDQgfSwKIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgUENJX0RFVklDRV9JRF9OVklE SUFfTkZPUkNFX01DUDA0X1NBVEEpLCBDSzgwNCB9LAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCBQ Q0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQMDRfU0FUQTIpLCBDSzgwNCB9LAotCXsgUENJ X1ZERVZJQ0UoTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfU0FUQSks IEdFTkVSSUMgfSwKLQl7IFBDSV9WREVWSUNFKE5WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFf TkZPUkNFX01DUDUxX1NBVEEyKSwgR0VORVJJQyB9LAotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCBQ Q0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTVfU0FUQSksIEdFTkVSSUMgfSwKLQl7IFBD SV9WREVWSUNFKE5WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDU1X1NBVEEy KSwgR0VORVJJQyB9LAotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJ QV9ORk9SQ0VfTUNQNjFfU0FUQSksIEdFTkVSSUMgfSwKLQl7IFBDSV9WREVWSUNFKE5WSURJQSwg UENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDYxX1NBVEEyKSwgR0VORVJJQyB9LAotCXsg UENJX1ZERVZJQ0UoTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjFfU0FU QTMpLCBHRU5FUklDIH0sCisJeyBQQ0lfVkRFVklDRShOVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJ RElBX05GT1JDRV9NQ1A1MV9TQVRBKSwgTUNQNTEgfSwKKwl7IFBDSV9WREVWSUNFKE5WSURJQSwg UENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDUxX1NBVEEyKSwgTUNQNTEgfSwKKwl7IFBD SV9WREVWSUNFKE5WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDU1X1NBVEEp LCBNQ1A1NSB9LAorCXsgUENJX1ZERVZJQ0UoTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9O Rk9SQ0VfTUNQNTVfU0FUQTIpLE1DUDU1IH0sCisJeyBQQ0lfVkRFVklDRShOVklESUEsIFBDSV9E RVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9TQVRBKSwgTUNQNjEgfSwKKwl7IFBDSV9WREVW SUNFKE5WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDYxX1NBVEEyKSwgTUNQ NjEgfSwKKwl7IFBDSV9WREVWSUNFKE5WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNF X01DUDYxX1NBVEEzKSwgTUNQNjEgfSwKIAl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfQU5Z X0lELAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQlQQ0lfQ0xBU1NfU1RPUkFHRV9JREU8 PDgsIDB4ZmZmZjAwLCBHRU5FUklDIH0sCkBAIC0zNDUsNiArNDgyLDI0IEBAIHN0YXRpYyBzdHJ1 Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG52X2FkbWEKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jp b3NfcGFyYW0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBudl9zaHRf bmNxID0geworCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSBEUlZfTkFNRSwK KwkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLAorCS5xdWV1ZWNvbW1hbmQJCT0gbnZfc2NzaV9x dWV1ZWNtZCwKKwkuY2FuX3F1ZXVlCQk9IEFUQV9NQVhfUVVFVUUgLSAxLAorCS50aGlzX2lkCQk9 IEFUQV9TSFRfVEhJU19JRCwKKwkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAorCS5j bWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAorCS5lbXVsYXRlZAkJPSBBVEFfU0hU X0VNVUxBVEVELAorCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAor CS5wcm9jX25hbWUJCT0gRFJWX05BTUUsCisJLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5E QVJZLAorCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCisJLnNsYXZl X2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKKwkuYmlvc19wYXJhbQkJPSBhdGFf c3RkX2Jpb3NfcGFyYW0sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJh dGlvbnMgbnZfZ2VuZXJpY19vcHMgPSB7CiAJLnBvcnRfZGlzYWJsZQkJPSBhdGFfcG9ydF9kaXNh YmxlLAogCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLApAQCAtNDU3LDYgKzYxMiwzMyBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgCiAJLmhvc3Rfc3RvcAkJPSBudl9h ZG1hX2hvc3Rfc3RvcCwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0 aW9ucyBudl9tY3A1NV9vcHMgPSB7CisJLnBvcnRfZGlzYWJsZQkJPSBhdGFfcG9ydF9kaXNhYmxl LAorCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAor CS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKKwkuY2hlY2tfc3RhdHVzCQk9IGF0 YV9jaGVja19zdGF0dXMsCisJLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAorCS5i bWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCisJLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRt YV9zdGFydCwKKwkuYm1kbWFfc3RvcAkJPSBhdGFfYm1kbWFfc3RvcCwKKwkuYm1kbWFfc3RhdHVz CQk9IGF0YV9ibWRtYV9zdGF0dXMsCisJLnFjX3ByZXAJCT0gbnZfcWNfcHJlcCwKKwkucWNfaXNz dWUJCT0gbnZfcWNfaXNzdWVfcHJvdCwKKwkuZnJlZXplCQkJPSBudl9tY3A1NV9mcmVlemUsCisJ LnRoYXcJCQk9IG52X21jcDU1X3RoYXcsCisJLmVycm9yX2hhbmRsZXIJCT0gbmNxX2Vycm9yX2hh bmRsZXIsCisJLnBvc3RfaW50ZXJuYWxfY21kCT0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21k LAorCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKKwkuaXJxX2NsZWFyCQk9IGF0YV9ibWRt YV9pcnFfY2xlYXIsCisJLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKKwkuaXJxX2FjawkJPSBhdGFf aXJxX2FjaywKKwkuc2NyX3JlYWQJCT0gbnZfc2NyX3JlYWQsCisJLnNjcl93cml0ZQkJPSBudl9z Y3Jfd3JpdGUsCisJLnBvcnRfc3RhcnQJCT0gbnZfcG9ydF9zdGFydCwKKwkucG9ydF9zdG9wCQk9 IG52X3BvcnRfc3RvcCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBu dl9wb3J0X2luZm9bXSA9IHsKIAkvKiBnZW5lcmljICovCiAJewpAQCAtNTAzLDYgKzY4NSwxNiBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gbnZfcG9yCiAJCS5wb3J0X29wcwk9 ICZudl9hZG1hX29wcywKIAkJLmlycV9oYW5kbGVyCT0gbnZfYWRtYV9pbnRlcnJ1cHQsCiAJfSwK KwkvKiBtY3A1NS82MSAqLworCXsKKwkJLnNodAkJPSAmbnZfc2h0X25jcSwKKwkJLmZsYWdzCSAg ICAgICAgPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZICwKKwkJLnBpb19tYXNr CT0gTlZfUElPX01BU0ssCisJCS5td2RtYV9tYXNrCT0gTlZfTVdETUFfTUFTSywKKwkJLnVkbWFf bWFzawk9IE5WX1VETUFfTUFTSywKKwkJLnBvcnRfb3BzCT0gJm52X21jcDU1X29wcywKKwkJLmly cV9oYW5kbGVyCT0gbnZfbWNwNTVfaW50ZXJydXB0LAorCX0sCiB9OwogCiBNT0RVTEVfQVVUSE9S KCJOVklESUEiKTsKQEAgLTUxMiw2ICs3MDQsNyBAQCBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwg bnZfcGNpX3RibCk7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiAKIHN0YXRpYyBpbnQg YWRtYV9lbmFibGVkID0gMTsKK3N0YXRpYyBpbnQgbmNxX2VuYWJsZWQgPSAwOwogCiBzdGF0aWMg dm9pZCBudl9hZG1hX3JlZ2lzdGVyX21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKQEAgLTc2 Nyw2ICs5NjAsOTYgQEAgc3RhdGljIGludCBudl9hZG1hX2NoZWNrX2NwYihzdHJ1Y3QgYXRhXwog CXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGF0YV9kZXZpY2UgKiBhdGFfZmluZF9kZXYo c3RydWN0IGF0YV9wb3J0ICphcCwgaW50IGlkKQoreworCWlmIChsaWtlbHkoaWQgPCBBVEFfTUFY X0RFVklDRVMpKQorCQlyZXR1cm4gJmFwLT5kZXZpY2VbaWRdOworCXJldHVybiBOVUxMOworfQor CitzdGF0aWMgaW50IGF0YV9zY3NpX2Rldl9lbmFibGVkKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYp Cit7CisJaWYgKHVubGlrZWx5KCFhdGFfZGV2X2VuYWJsZWQoZGV2KSkpCisJCXJldHVybiAwOwor CisJaWYgKChkZXYtPmFwLT5mbGFncyAmIEFUQV9GTEFHX05PX0FUQVBJKSkgeworCQlpZiAodW5s aWtlbHkoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQVBJKSkgeworCQkJYXRhX2Rldl9wcmludGso ZGV2LCBLRVJOX1dBUk5JTkcsCisJCQkJICAgICAgICJXQVJOSU5HOiBBVEFQSSBpcyAlcywgZGV2 aWNlIGlnbm9yZWQuXG4iLAorCQkJCSAgICAgICAxID8gIm5vdCBzdXBwb3J0ZWQgd2l0aCB0aGlz IGRyaXZlciIgOiAiZGlzYWJsZWQiKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJu IDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRhX2RldmljZSAqIF9fYXRhX3Njc2lfZmluZF9kZXYo c3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQkJY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzY3Np ZGV2KQoreworCS8qIHNraXAgY29tbWFuZHMgbm90IGFkZHJlc3NlZCB0byB0YXJnZXRzIHdlIHNp bXVsYXRlICovCisJaWYgKHVubGlrZWx5KHNjc2lkZXYtPmNoYW5uZWwgfHwgc2NzaWRldi0+bHVu KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gYXRhX2ZpbmRfZGV2KGFwLCBzY3NpZGV2LT5p ZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRhX2RldmljZSAqCithdGFfc2NzaV9maW5kX2Rldihz dHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lkZXYpCit7 CisJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9IF9fYXRhX3Njc2lfZmluZF9kZXYoYXAsIHNjc2lk ZXYpOworCisJaWYgKHVubGlrZWx5KCFkZXYgfHwgIWF0YV9zY3NpX2Rldl9lbmFibGVkKGRldikp KQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBkZXY7Cit9CisKK3N0YXRpYyBpbnQgbnZfc2Nz aV9xdWV1ZWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCisJCQkgICAgdm9pZCAoKmRvbmUpKHN0 cnVjdCBzY3NpX2NtbmQgKikpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKwlzdHJ1Y3QgYXRh X2RldmljZSAqZGV2OworCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaWRldiA9IGNtZC0+ZGV2aWNl OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2NzaWRldi0+aG9zdDsKKwlzdHJ1Y3QgbnZf cG9ydF9wcml2ICpwcDsKKwlpbnQgcmMgPSAwLCBmbGFnID0gMDsKKworCWFwID0gYXRhX3Nob3N0 X3RvX3BvcnQoc2hvc3QpOworCXBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwlzcGluX3VubG9jayhz aG9zdC0+aG9zdF9sb2NrKTsKKwlzcGluX2xvY2soYXAtPmxvY2spOworCWRldiA9IGF0YV9zY3Np X2ZpbmRfZGV2KGFwLCBzY3NpZGV2KTsKKwlpZiAobGlrZWx5KGRldikpIHsKKwkJaWYgKGRldi0+ Y2xhc3MgPT0gQVRBX0RFVl9BVEEpIHsKKwkJCXN3aXRjaCAoY21kLT5jbW5kWzBdKSB7CisJCQkJ Y2FzZSBSRUFEXzY6CisJCQkJY2FzZSBSRUFEXzEwOgorCQkJCWNhc2UgUkVBRF8xNjoKKwkJCQkK KwkJCQljYXNlIFdSSVRFXzY6CisJCQkJY2FzZSBXUklURV8xMDoKKwkJCQljYXNlIFdSSVRFXzE2 OiAJZmxhZz0xO2JyZWFrOworCQkJCWRlZmF1bHQ6IAlmbGFnPTA7YnJlYWs7CisJCQl9CisJCQkK KwkJCWlmIChmbGFnICYmIChkZXYtPmZsYWdzICYgKEFUQV9ERkxBR19QSU8gfCBBVEFfREZMQUdf TkNRKSkgPT0gQVRBX0RGTEFHX05DUSkKKwkJCQlyYyA9IHBwLT5vcHMtPnFjX2RlZmVyKGFwKTsK KwkJfQorCX0gZWxzZSB7CisJCWNtZC0+cmVzdWx0ID0gKERJRF9CQURfVEFSR0VUIDw8IDE2KTsK KwkJZG9uZShjbWQpOworCX0KKworCXNwaW5fdW5sb2NrKGFwLT5sb2NrKTsKKwlzcGluX2xvY2so c2hvc3QtPmhvc3RfbG9jayk7CisKKwlpZiAocmMpCisJCXJldHVybiBTQ1NJX01MUVVFVUVfREVW SUNFX0JVU1k7CisJZWxzZQorCQlyZXR1cm4gYXRhX3Njc2lfcXVldWVjbWQoY21kLCAgZG9uZSk7 Cit9CisKIHN0YXRpYyBpbnQgbnZfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHU4IGly cV9zdGF0KQogewogCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMgPSBhdGFfcWNfZnJvbV90YWco YXAsIGFwLT5hY3RpdmVfdGFnKTsKQEAgLTEzOTcsNiArMTY4MCw0NSBAQCBzdGF0aWMgaXJxcmV0 dXJuX3QgbnZfY2s4MDRfaW50ZXJydXB0KGluCiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGly cXJldHVybl90IG52X21jcDU1X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2Up Cit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2luc3RhbmNlOworCXN0cnVjdCBudl9w b3J0X3ByaXYgKnBwIDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9 IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaXJxX3N0YXQ7CisJc3Bpbl9sb2NrX2ly cXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkKKwlpcnFfc3RhdCA9IHJlYWRsKGhvc3QtPmlv bWFwW05WX01NSU9fQkFSXSArIE5WX0lOVF9TVEFUVVNfTUNQNTUpOworCQorCWZvciAoaSA9IDA7 IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKKwkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3Qt PnBvcnRzW2ldOworCisJCWlmIChhcCAmJiAhKGFwLT5mbGFncyAmIEFUQV9GTEFHX0RJU0FCTEVE KSApIHsKKwkJCXBwID0gYXAtPnByaXZhdGVfZGF0YTsKKworCQkJaWYgKHBwLT5xY19hY3RpdmUp IHsKKwkJCQloYW5kbGVkICs9IG5jcV9pbnRlcnJ1cHQoYXAsIChpcnFfc3RhdCAmIDB4ZmZmZikp OworCQkJfSBlbHNlIHsKKworCQkJCWlmIChpcnFfc3RhdCkKKwkJCQkJcHAtPm9wcy0+Y2xlYXJf c2luZ2xlZmlzKGFwLCAweGZmZjApOyAvL3Jlc2VydmUgSG90cGx1ZyBhbmQgSU5UIGludHIKKwkJ CQkKKwkJCQloYW5kbGVkICs9IG52X2hvc3RfaW50cihhcCwgKHU4KWlycV9zdGF0KTsKKwkJCX0K KwkJCQorCisJCX0KKworCQlpcnFfc3RhdCA+Pj0gTlZfSU5UX1BPUlRfU0hJRlRfTUNQNTU7CisJ fQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJcmV0 dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKIHN0YXRpYyB1MzIgbnZfc2NyX3JlYWQgKHN0 cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcpCiB7CiAJaWYgKHNjX3JlZyA+ IFNDUl9DT05UUk9MKQpAQCAtMTQ2MSw2ICsxNzgzLDQ2IEBAIHN0YXRpYyB2b2lkIG52X2NrODA0 X3RoYXcoc3RydWN0IGF0YV9wb3IKIAl3cml0ZWIobWFzaywgbW1pb19iYXNlICsgTlZfSU5UX0VO QUJMRV9DSzgwNCk7CiB9CiAKK3N0YXRpYyB2b2lkIG52X21jcDU1X2ZyZWV6ZShzdHJ1Y3QgYXRh X3BvcnQgKmFwKQoreworCXZvaWQgX19pb21lbSAqbW1pb19iYXNlID0gYXAtPmhvc3QtPmlvbWFw W05WX01NSU9fQkFSXTsKKwlpbnQgc2hpZnQgPSBhcC0+cG9ydF9ubyAqIE5WX0lOVF9QT1JUX1NI SUZUX01DUDU1OworCXUzMiBtYXNrOworCXUzMiB2YWw7CisJCisJaWYgKGFwLT5mbGFncyAmIEFU QV9GTEFHX05DUSkgeworCQl2YWwgPSByZWFkbChtbWlvX2Jhc2UgKyBOVl9DVExfTUNQNTUpOwor CQl2YWwgJj0gfihOVl9DVExfUFJJX1NXTkNRIDw8IGFwLT5wb3J0X25vKTsKKwkJd3JpdGVsKHZh bCwgbW1pb19iYXNlICsgTlZfQ1RMX01DUDU1KTsvKiBkaXNhYmxlIG5jcSAqLworCX0KKwkKKwl3 cml0ZWwoTlZfSU5UX0FMTF9NQ1A1NSA8PCBzaGlmdCwgbW1pb19iYXNlICsgTlZfSU5UX1NUQVRV U19NQ1A1NSk7CisJbWFzayA9IHJlYWRsKG1taW9fYmFzZSArIE5WX0lOVF9FTkFCTEVfTUNQNTUp OworCW1hc2sgJj0gfihOVl9JTlRfQUxMX01DUDU1IDw8IHNoaWZ0KTsKKwl3cml0ZWwobWFzaywg bW1pb19iYXNlICsgTlZfSU5UX0VOQUJMRV9NQ1A1NSk7CisJYXRhX2JtZG1hX2ZyZWV6ZShhcCk7 Cit9CisKK3N0YXRpYyB2b2lkIG52X21jcDU1X3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sK Kwl2b2lkIF9faW9tZW0gKm1taW9fYmFzZSA9IGFwLT5ob3N0LT5pb21hcFtOVl9NTUlPX0JBUl07 CisJaW50IHNoaWZ0ID0gYXAtPnBvcnRfbm8gKiBOVl9JTlRfUE9SVF9TSElGVF9NQ1A1NTsKKwl1 MzIgbWFzazsKKwl1MzIgdmFsOworCQorCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19OQ1EpIHsK KwkJbmNxX2NsZWFyKGFwKTsKKwkJdmFsID0gcmVhZGwobW1pb19iYXNlICsgTlZfQ1RMX01DUDU1 KTsKKwkJdmFsIHw9IChOVl9DVExfUFJJX1NXTkNRIDw8IGFwLT5wb3J0X25vKTsKKwkJd3JpdGVs KHZhbCwgbW1pb19iYXNlICsgTlZfQ1RMX01DUDU1KTsvKiBlbmFibGUgbmNxICovCisJfQorCXdy aXRlbChOVl9JTlRfQUxMX01DUDU1IDw8IHNoaWZ0LCBtbWlvX2Jhc2UgKyBOVl9JTlRfU1RBVFVT X01DUDU1KTsKKwltYXNrID0gcmVhZGwobW1pb19iYXNlICsgTlZfSU5UX0VOQUJMRV9NQ1A1NSk7 CisJbWFzayB8PSAoTlZfSU5UX01BU0tfTUNQNTUgPDwgc2hpZnQpOworCXdyaXRlbChtYXNrLCBt bWlvX2Jhc2UgKyBOVl9JTlRfRU5BQkxFX01DUDU1KTsKKwlhdGFfYm1kbWFfdGhhdyhhcCk7Cit9 CisKIHN0YXRpYyBpbnQgbnZfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVk IGludCAqY2xhc3MsCiAJCQl1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewpAQCAtMTUzNCw2ICsx ODk2LDY5MCBAQCBzdGF0aWMgdm9pZCBudl9hZG1hX2Vycm9yX2hhbmRsZXIoc3RydWN0CiAJCQkg ICBudl9oYXJkcmVzZXQsIGF0YV9zdGRfcG9zdHJlc2V0KTsKIH0KIAorc3RhdGljIHZvaWQgbmNx X2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IG52X3BvcnRfcHJpdiAqcHAg PSBhcC0+cHJpdmF0ZV9kYXRhOworCQorCXBwLT5kaGZpc19mbGFncyA9IDA7CisJcHAtPnFjX2Fj dGl2ZSA9IDA7CisJcHAtPnJldHJ5ID0gMDsKKwlwcC0+ZGVmZXJfYml0cyA9IDA7CisJcHAtPmNt ZF9zdG9wID0gMDsKKwlwcC0+Y21kX3NlbmRlZCA9IDA7CisJcHAtPmN1cnJlbnRfdGFnID0gMDsJ Cit9CisKKworc3RhdGljIHZvaWQgbmNxX3N0b3Aoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlz dHJ1Y3QgbnZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdTMyIHNlcnJvciwg c3N0YXR1cywgc2N0bDsKKwkKKwlOUFJJTlRLKCJzaG9zdC0+aG9zdF9mYWlsZWQgOiV4IHNob3N0 LT5ob3N0X2J1c3k6JXggXG4iLAorCQkJCQkJYXAtPnNjc2lfaG9zdC0+aG9zdF9mYWlsZWQsCisJ CQkJCQlhcC0+c2NzaV9ob3N0LT5ob3N0X2J1c3kpOworCQkJCQkJCisJTlBSSU5USygiYXAtPnFj X2FjdGl2ZToleCwgcHAtPnFjX2FjdGl2ZToleCBkZWZlcl9iaXRzOiV4IGNtZF9zdG9wOiV4ICIK KwkJCQkJImN1cnJlbnRfdGFnOiV4IGRoZmlzX2ZsYWdzOiV4IFxuIiwKKwkJCQkJCQlhcC0+cWNf YWN0aXZlLAorCQkJCQkJCXBwLT5xY19hY3RpdmUsCisJCQkJCQkJcHAtPmRlZmVyX2JpdHMsCisJ CQkJCQkJcHAtPmNtZF9zdG9wLAorCQkJCQkJCXBwLT5jdXJyZW50X3RhZywKKwkJCQkJCQlwcC0+ ZGhmaXNfZmxhZ3MpOworCisJc2F0YV9zY3JfcmVhZChhcCwgU0NSX0VSUk9SLCAmc2Vycm9yKTsK KwlzYXRhX3Njcl9yZWFkKGFwLCBTQ1JfU1RBVFVTLCAmc3N0YXR1cyk7CisJc2F0YV9zY3JfcmVh ZChhcCwgU0NSX0NPTlRST0wsICZzY3RsKTsKKwlOUFJJTlRLKCJhdGEldTogU0VycjoweCV4IFNT dGF0OjB4JXggU0N0bDoweCV4XG4iLCBhcC0+aWQsIHNlcnJvciwgc3N0YXR1cywgc2N0bCk7CisJ CisJcHAtPm9wcy0+Ym1kbWFfc3RvcChhcCk7CisJcHAtPm9wcy0+Y2xlYXJfc2luZ2xlZmlzKGFw LCAweGZmZmYpOworCisJbmNxX2NsZWFyKGFwKTsKK30KKworaW50IG52X3N0ZF9wcmVyZXNldChz dHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQoreworCXN0cnVjdCBh dGFfZWhfY29udGV4dCAqZWhjID0gJmFwLT5laF9jb250ZXh0OworCQorCWlmIChhcC0+ZmxhZ3Mg JiBBVEFfRkxBR19OQ1EpIAorCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJ CisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKK30KKworc3RhdGljIHZv aWQgbmNxX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwl1MzIgbmNxX2N0 bCwgbmNxX2VuYWJsZTsKKwl2b2lkIF9faW9tZW0gKm1taW8gPSAgYXAtPmhvc3QtPmlvbWFwW05W X01NSU9fQkFSXTsKKwkKKwluY3Ffc3RvcChhcCk7CisJYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBu dl9zdGRfcHJlcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LAorCQkJCW52X2hhcmRyZXNldCwgYXRh X3N0ZF9wb3N0cmVzZXQpOworCisJbmNxX2N0bCA9IHJlYWRsKG1taW8gKyBOVl9DVExfTUNQNTUp OworCW5jcV9lbmFibGUgPSByZWFkbChtbWlvICsgTlZfSU5UX0VOQUJMRV9NQ1A1NSk7CisJTlBS SU5USygiYXRhJXU6IE5DUV9DVEw6JXgsIE5DUV9FTkFCTEU6JXhcbiIsIGFwLT5pZCwgbmNxX2N0 bCwgbmNxX2VuYWJsZSk7CisKK30KKworc3RhdGljIHZvaWQgbmNxX2hvc3RfaW5pdChzdHJ1Y3Qg YXRhX2hvc3QgKmhvc3QpCit7CisJdTMyIGZsYWdzOworCXZvaWQgX19pb21lbQkqbW1pbyA9IGhv c3QtPmlvbWFwW05WX01NSU9fQkFSXTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9k ZXYoaG9zdC0+ZGV2KTsKKwl1OCByZWd2YWwsIHJldjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8q IGVuYWJsZSBiYXIgNSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIE5WX01DUF9TQVRB X0NGR18yMCwgJnJlZ3ZhbCk7CisJcmVndmFsIHw9IE5WX01DUF9TQVRBX0NGR18yMF9TQVRBX1NQ QUNFX0VOOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBOVl9NQ1BfU0FUQV9DRkdfMjAs IHJlZ3ZhbCk7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDdmLCAmcmVndmFsKTsK KwlyZWd2YWwgJj0gfigxIDw8IDcpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDdm LCByZWd2YWwpOworCQorCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4MDgsICZyZXYpOwor CQorCS8qIG9ubHkgc3VwcG9ydCBBMDIgYW5kIGFib3ZlIGZvciBtY3A1NSwgYWxsIGZvciBtY3A2 MS4qLworCWlmICgocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9N Q1A1NV9TQVRBIHx8CisJICAgICBwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OVklESUFf TkZPUkNFX01DUDU1X1NBVEEyKQorCQkmJiAgcmV2IDwgMHhhMikgCisJCXJldHVybjsKKwkKKwlm bGFncyA9IHJlYWRsKG1taW8gKyBOVl9DVExfTUNQNTUpOworCisJLyogZW5hYmxlIG5jcSAqLwor CWlmKG5jcV9lbmFibGVkKXsKKwl3cml0ZWwoZmxhZ3MgfCBOVl9DVExfUFJJX1NXTkNRIHwgTlZf Q1RMX1NFQ19TV05DUSwgbW1pbyArIE5WX0NUTF9NQ1A1NSk7CisKKwlmb3IgKGkgPSAwOyBpIDwg aG9zdC0+bl9wb3J0czsgaSsrKQorCSAgICBob3N0LT5wb3J0c1tpXS0+ZmxhZ3MgfD0gQVRBX0ZM QUdfTkNROworCQorCWZsYWdzID0gcmVhZGwobW1pbyArIE5WX0lOVF9FTkFCTEVfTUNQNTUpOwor CWZsYWdzID0gKGZsYWdzIHwgMHgwMGZkMDBmZCk7CisJd3JpdGVsKGZsYWdzLCBtbWlvICsgTlZf SU5UX0VOQUJMRV9NQ1A1NSk7CisJZmxhZ3MgPSByZWFkbChtbWlvICsgTlZfSU5UX0VOQUJMRV9N Q1A1NSk7CisJfQorCisJd3JpdGVsKH4weDAsIG1taW8gKyBOVl9JTlRfU1RBVFVTX01DUDU1KTsv KiAgY2xlYXIgaW50ciBzdGF0dXMgKi8KK30KKworc3RhdGljIHZvaWQgbnZfYm1kbWFfc3RvcChz dHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19NTUlPKSB7 CisJCXZvaWQgX19pb21lbSAqbW1pbyA9IGFwLT5pb2FkZHIuYm1kbWFfYWRkcjsKKworCQkvKiBj bGVhciBzdGFydC9zdG9wIGJpdCAqLworCQl3cml0ZWIocmVhZGIobW1pbyArIEFUQV9ETUFfQ01E KSAmIH5BVEFfRE1BX1NUQVJULAorCQkJbW1pbyArIEFUQV9ETUFfQ01EKTsKKwl9IGVsc2Ugewor CQkvKiBjbGVhciBzdGFydC9zdG9wIGJpdCAqLworCQlpb3dyaXRlOChpb3JlYWQ4KGFwLT5pb2Fk ZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfQ01EKSAmIH5BVEFfRE1BX1NUQVJULAorCQkJYXAtPmlv YWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9DTUQpOworCX0KKwlhdGFfYWx0c3RhdHVzKGFwKTsK K30KKworLyoqCisqCW52X3N0ZF9xY19kZWZlcgorKgkKKyogUkVUVVJOUzoKKyogMSBkZWZlciwg MCBubyBuZWVkIGRlZmVyCisqLworCitzdGF0aWMgaW50IG52X3N0ZF9xY19kZWZlcihzdHJ1Y3Qg YXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBudl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVf ZGF0YTsKKwl1MzIgZmlzOworCisJaWYgKGFwLT5xY19hY3RpdmUgPT0gMCkKKwkJcmV0dXJuIDA7 CisJCQorCWlmIChhdGFfdGFnX3ZhbGlkKGFwLT5hY3RpdmVfdGFnKSkKKwkJcmV0dXJuIDE7CisK KwlpZiAocHAtPmNtZF9zdG9wKQorCQlyZXR1cm4gMTsKKwkKKwlmaXMgPSBwcC0+b3BzLT5jaGVj a19vd25maXMoYXApOworCisJaWYgKGZpcyAmIE5WX0lOVF9ETUFTRVRVUF9NQ1A1NSkgeworCQlp ZiAoIWRtYV9ieXRlKHBwLT5jbWRfc3RvcCkpCisJCQlzZXRfZG1hX2J5dGUocHAsIHBwLT5vcHMt PnRhZ192YWx1ZShhcCkpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCAgbnZfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBk ZXZpY2UgKmRldiA9IGFwLT5ob3N0LT5kZXY7CisJc3RydWN0IG52X3BvcnRfcHJpdiAqcHA7CisJ aW50IHJjOworCisJcmMgPSBhdGFfcG9ydF9zdGFydChhcCk7CisJaWYgKHJjKQorCQlyZXR1cm4g cmM7CisKKwlwcCA9IGt6YWxsb2Moc2l6ZW9mKCpwcCksIEdGUF9LRVJORUwpOworCWlmICghcHAp IHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCQorCXBwLT5wcmQgPSBk bWFfYWxsb2NfY29oZXJlbnQoZGV2LCBBVEFfUFJEX1RCTF9TWipBVEFfTUFYX1FVRVVFLCAmcHAt PnByZF9kbWEsIEdGUF9LRVJORUwpOworCWlmICghcHAtPnByZCkgeworCQlyYyA9IC1FTk9NRU07 CisJCWdvdG8gZXJyX291dF9rZnJlZTsKKwl9CisJcHAtPm9wcyA9ICZudl9uY3Ffb3BzOworCisJ YXAtPnByaXZhdGVfZGF0YSA9IHBwOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfa2ZyZWU6CisJ a2ZyZWUocHApOworZXJyX291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG52X3Bv cnRfc3RvcChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGFw LT5ob3N0LT5kZXY7CisJc3RydWN0IG52X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRh OworCisJYXAtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBB VEFfUFJEX1RCTF9TWipBVEFfTUFYX1FVRVVFLCBwcC0+cHJkLCBwcC0+cHJkX2RtYSk7CisJa2Zy ZWUocHApOworfQorCitzdGF0aWMgdm9pZCBudl9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2Nt ZCAqcWMpCit7CisJaWYgKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9OQ1EpCisJCXJldHVy biBhdGFfcWNfcHJlcChxYyk7CisJCisJaWYgKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19ETUFN QVApKQorCQlyZXR1cm47CisKKwludl9maWxsX3NnKHFjKTsKK30KKworc3RhdGljIHZvaWQgbnZf ZmlsbF9zZyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAq YXAgPSBxYy0+YXA7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgaWR4 OworCQorCXN0cnVjdCBudl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwkKKwlz dHJ1Y3QgYXRhX3ByZCAqcHJkOworCisJV0FSTl9PTihxYy0+X19zZyA9PSBOVUxMKTsKKwlXQVJO X09OKHFjLT5uX2VsZW0gPT0gMCAmJiBxYy0+cGFkX2xlbiA9PSAwKTsKKwkKKwlwcmQgPSAoc3Ry dWN0IGF0YV9wcmQqKSgodTY0KXBwLT5wcmQgKyBBVEFfUFJEX1RCTF9TWipxYy0+dGFnKTsKKwkK KwlpZHggPSAwOworCWF0YV9mb3JfZWFjaF9zZyhzZywgcWMpIHsKKwkJdTMyIGFkZHIsIG9mZnNl dDsKKwkJdTMyIHNnX2xlbiwgbGVuOworCisJCS8qIGRldGVybWluZSBpZiBwaHlzaWNhbCBETUEg YWRkciBzcGFucyA2NEsgYm91bmRhcnkuCisJCSAqIE5vdGUgaC93IGRvZXNuJ3Qgc3VwcG9ydCA2 NC1iaXQsIHNvIHdlIHVuY29uZGl0aW9uYWxseQorCQkgKiB0cnVuY2F0ZSBkbWFfYWRkcl90IHRv IHUzMi4KKwkJICovCisJCWFkZHIgPSAodTMyKSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCXNnX2xl biA9IHNnX2RtYV9sZW4oc2cpOworCisJCXdoaWxlIChzZ19sZW4pIHsKKwkJCW9mZnNldCA9IGFk ZHIgJiAweGZmZmY7CisJCQlsZW4gPSBzZ19sZW47CisJCQlpZiAoKG9mZnNldCArIHNnX2xlbikg PiAweDEwMDAwKQorCQkJCWxlbiA9IDB4MTAwMDAgLSBvZmZzZXQ7CisKKwkJCXByZFtpZHhdLmFk ZHIgPSBjcHVfdG9fbGUzMihhZGRyKTsKKwkJCXByZFtpZHhdLmZsYWdzX2xlbiA9IGNwdV90b19s ZTMyKGxlbiAmIDB4ZmZmZik7CisKKwkJCWlkeCsrOworCQkJc2dfbGVuIC09IGxlbjsKKwkJCWFk ZHIgKz0gbGVuOworCQl9CisJfQorCisJaWYgKGlkeCkKKwkJcHJkW2lkeCAtIDFdLmZsYWdzX2xl biB8PSBjcHVfdG9fbGUzMihBVEFfUFJEX0VPVCk7Cit9CisKK3N0YXRpYyB2b2lkIG5jcV9zYWN0 aXZlX3N0YXJ0IChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9y dCAqYXAgPSBxYy0+YXA7CisJdm9pZCBfX2lvbWVtICptbWlvID0gYXAtPmhvc3QtPmlvbWFwW05W X01NSU9fQkFSXTsKKworCXUzMiBiYXNlID0gTlZfQ0gxX1NBQ1RJVkVfTUNQNTUgKyBhcC0+cG9y dF9ubyAqIDB4NDA7CisJdTMyICBzYWN0aXZlOworCisJc2FjdGl2ZSA9IHJlYWRsKG1taW8gKyBi YXNlKTsKKwlzYWN0aXZlICB8PSAoMSA8PCBxYy0+dGFnKTsKKwl3cml0ZWwoc2FjdGl2ZSwgbW1p byArIGJhc2UpOworfQorCitzdGF0aWMgdTMyIG5jcV9zYWN0aXZlX3ZhbHVlIChzdHJ1Y3QgYXRh X3BvcnQgKmFwKQoreworCXZvaWQgX19pb21lbSAqbW1pbyA9IGFwLT5ob3N0LT5pb21hcFtOVl9N TUlPX0JBUl07CisJdTMyIGJhc2UgPSBOVl9DSDFfU0FDVElWRV9NQ1A1NSArIGFwLT5wb3J0X25v ICogMHg0MDsKKwl1MzIgIHNhY3RpdmU7CisJCisJc2FjdGl2ZSA9IHJlYWRsKG1taW8gKyBiYXNl KTsKKwlyZXR1cm4gc2FjdGl2ZTsKK30KKworc3RhdGljIHUzMiBuY3Ffb3duZmlzaW50cl92YWx1 ZSAoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwl2b2lkIF9faW9tZW0gKm1taW8gPSBhcC0+aG9z dC0+aW9tYXBbTlZfTU1JT19CQVJdOworCXUzMiAgdmFsdWU7CisJCisJdmFsdWUgPSByZWFkbCht bWlvICsgTlZfSU5UX1NUQVRVU19NQ1A1NSk7CisJdmFsdWUgPSAodmFsdWUgPj4gKGFwLT5wb3J0 X25vICogTlZfSU5UX1BPUlRfU0hJRlRfTUNQNTUpKSAmIDB4ZmZmZjsKKworCXJldHVybiB2YWx1 ZTsKK30KKworc3RhdGljIHZvaWQgbmNxX2NsZWFyX3NpbmdsZWZpcyhzdHJ1Y3QgYXRhX3BvcnQg KmFwLCB1MzIgdmFsKQoreworCXZvaWQgX19pb21lbSAqbW1pbyA9IGFwLT5ob3N0LT5pb21hcFtO Vl9NTUlPX0JBUl07CisJdTMyICBmbGFncyA9ICh2YWwgPDwgKGFwLT5wb3J0X25vICogTlZfSU5U X1BPUlRfU0hJRlRfTUNQNTUpKTsKKworCXdyaXRlbChmbGFncywgbW1pbyArIE5WX0lOVF9TVEFU VVNfTUNQNTUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG52X3FjX2lzc3VlX3Byb3Qoc3Ry dWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFw OworCXN0cnVjdCBudl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKworCXN0cnVj dCBhdGFfdGFza2ZpbGUJKnRmID0gJihxYy0+dGYpOworCXN0cnVjdCBhdGFfdGFza2ZpbGUgKnR0 ZiwgcnRmOworCQorCXUzMiBmaXMsIHN0YXQwLCBzdGF0MTsgCisJdHRmID0gJnJ0ZjsKKworCWlm IChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfTkNRKQorCQlyZXR1cm4gYXRhX3FjX2lzc3Vl X3Byb3QocWMpOworCQorCU5QUklOVEsoIkVOVEVSIE5DUVxuIik7CisJc3RhdDAJPSBwcC0+b3Bz LT5zYWN0aXZlX3ZhbHVlKGFwKTsKKwlpZiAocHAtPnJldHJ5KSB7CisJCU5QUklOVEsoImlkOjB4 JXggUkVUUlk6IHFjLT50YWc6JXhcbiIsIGFwLT5pZCwgcWMtPnRhZyk7CisJCWdvdG8gcmV0cnlf Y21kOworCX0KKworCXN0YXQxID0gKHN0YXQwICB8ICgxIDw8IHFjLT50YWcpKTsKKwlmaXMgPSBw cC0+b3BzLT5jaGVja19vd25maXMoYXApOworCWlmIChzdGF0MCA+IDAgICYmIHN0YXQwICE9IHN0 YXQxKSB7CS8qIG5ldyBjbWQgKi8KKworCQlpZiAoZmlzICYgTlZfSU5UX0RNQVNFVFVQX01DUDU1 KSB7CisJCQlpZiAoIWRtYV9ieXRlKHBwLT5jbWRfc3RvcCkpCisJCQkJc2V0X2RtYV9ieXRlKHBw LCBwcC0+b3BzLT50YWdfdmFsdWUoYXApKTsKKwkJCWdvdG8gYmFja19vdXQ7CisJCQorCQl9CisJ CWlmIChmaXMgJiBOVl9JTlRfREhSRUdGSVNfTUNQNTUpIHsKKwkJCWFwLT5vcHMtPmNoZWNrX3N0 YXR1cyhhcCk7CisJCQlhcC0+b3BzLT5pcnFfY2xlYXIoYXApOyAvKiBjbGVhciBibSBpcnEgKi8K KwkJCXBwLT5vcHMtPmNsZWFyX3NpbmdsZWZpcyhhcCwgTlZfSU5UX0RIUkVHRklTX01DUDU1IHwg TlZfSU5UX0RFVl9NQ1A1NSk7CisJCQorCQkJLyogZWFjaCBjbWQgZ2VuZXJhdGUgb25lIGRoZmlz IGludHIsIG90aGVyd2lzZSBlcnJvciBoYXBwZW5zICovCisJCQlwcC0+ZGhmaXNfZmxhZ3MgfD0g KDB4MSA8PCBwcC0+Y3VycmVudF90YWcpOwkKKwkJfQorCQkJCisJCQkKKwkJaWYgKHBwLT5kaGZp c19mbGFncyAhPSBwcC0+cWNfYWN0aXZlKQorCQkvKiBxdWV1ZSBoYXZlIGNtZCxidXQgZGhmaXMg ZG9uJ3QgZ2VuZXJhdGUgaW50cgorCQkgKiBzdGF0MCE9c3RhdDEgaW5kaWNhdGVzIHRoZSBjbWQg aXNuJ3QgYSByZXRyeSBjbWQuIAorCQkgKi8KKwkJCWdvdG8gYmFja19vdXQ7CQorCX0KKworcmV0 cnlfY21kOgorCXBwLT5vcHMtPnNhY3RpdmVfc3RhcnQocWMpOworCXN0YXQxID0gcHAtPm9wcy0+ c2FjdGl2ZV92YWx1ZShhcCk7CisJCisJTlZQUklOVEsoImlkOjB4JXggc2FjdGl2ZSBzdGF0MDol eCwgc3RhdDE6JXggdGFnOiV4IFxuIiwgYXAtPmlkLCBzdGF0MCwgc3RhdDEsIHFjLT50YWcpOwor CXBwLT5jdXJyZW50X3RhZyA9IHFjLT50YWc7CisKKwlhcC0+b3BzLT50Zl9sb2FkKGFwLCAmcWMt PnRmKTsJIC8qIGxvYWQgdGYgcmVnaXN0ZXJzICovCisJYXAtPm9wcy0+ZXhlY19jb21tYW5kKGFw LCB0Zik7CisJcHAtPmRoZmlzX2ZsYWdzICY9IH4oMSA8PCBxYy0+dGFnKSA7CisJcHAtPnFjX2Fj dGl2ZSB8PSAoMHgxIDw8IHFjLT50YWcpOworCQorCWlmICghcHAtPnJldHJ5KQorCQlwcC0+Y21k X3NlbmRlZCsrOworCQkKKwlpZiAocHAtPnJldHJ5KSAKKwkJcHAtPnJldHJ5LS07CisJCisJTlBS SU5USygiRVhJVCBOQ1FcbiIpOworCXJldHVybiAwOworYmFja19vdXQ6CisJcHAtPmRlZmVyX2Jp dHMgfD0gKDB4MSA8PCBxYy0+dGFnKTsKKwlpZiAoZGVmZXJfYnl0ZShwcC0+Y21kX3N0b3ApKSB7 CisJCU5QUklOVEsoIkVSUkNNRF9TVE9QXG4iKTsKKwl9CQorCXNldF9kZWZlcl9ieXRlKHBwLCBx Yy0+dGFnKTsKKwlwcC0+cmV0cnkrKzsKKwlOUFJJTlRLKCJFWElUIE5DUVxuIik7CisJcmV0dXJu IDA7Cit9CisKK3UzMiBuY3FfdmFsaWRfZGhmaXNmbGFnKHN0cnVjdCBudl9wb3J0X3ByaXYgKnBw KQoreworCXUzMiB2YWxpZCA9IChwcC0+ZGhmaXNfZmxhZ3MgPT0gcHAtPnFjX2FjdGl2ZSk7CQor CQorCWlmIChiYWNrX2J5dGUocHAtPmNtZF9zdG9wKSkKKwkJcmV0dXJuIHZhbGlkOworCQorCWlm ICghdmFsaWQpIHsgCisJCXNldF9iYWNrX2J5dGUocHAsIHBwLT5jdXJyZW50X3RhZyk7CisJCXBw LT5yZXRyeSsrOworCQlOUFJJTlRLKCJOT1QgREhGSVMgaW50ciAgZGhmaXNfZmxhZ3M6JXggcHAt PnFjX2FjdGl2ZToleFxuIixwcC0+ZGhmaXNfZmxhZ3MsIHBwLT5xY19hY3RpdmUpOworCX0KKwly ZXR1cm4gdmFsaWQ7Cit9CisKKworI2lmZGVmCU5DUV9ERUJVRwkKK3N0YXRpYyB2b2lkIGZpc19k dW1wKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUzMiBmaXMpCit7CisJdTggZG1hX3N0YXQ7CisJdTMy IHNhY3RpdmU7CisJdTMyIHRhZzsKKwl1MzIgc2Vycm9yLCBzc3RhdHVzLCBzY3RsOworCXN0cnVj dCBudl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwkKKwlzYWN0aXZlCQk9IHBw LT5vcHMtPnNhY3RpdmVfdmFsdWUoYXApOworCWRtYV9zdGF0CT0gYXAtPm9wcy0+Ym1kbWFfc3Rh dHVzKGFwKTsKKwl0YWcgCQk9IHBwLT5vcHMtPnRhZ192YWx1ZShhcCk7CisJCisKKwlOUFJJTlRL KCJpZDoweCV4IGNtZF9zZW5kZWQ6JXggZmlzOjB4JVggZG1hX3N0YXQ6MHglWCAiCisJCSJzYWN0 aXZlOjB4JVggY21kX3N0b3A6MHglWCBhcHNhY3RpdmU6JXggdGFnOiVYICIsCisJCQkJCQkJYXAt PmlkLAorCQkJCQkJCXBwLT5jbWRfc2VuZGVkLAorCQkJCQkJCWZpcywKKwkJCQkJCQlkbWFfc3Rh dCwKKwkJCQkJCQlzYWN0aXZlLAorCQkJCQkJCXBwLT5jbWRfc3RvcCwKKwkJCQkJCQlhcC0+c2Fj dGl2ZSwKKwkJCQkJCQl0YWcpOworCisJc2F0YV9zY3JfcmVhZChhcCwgU0NSX0VSUk9SLCAmc2Vy cm9yKTsKKwlzYXRhX3Njcl9yZWFkKGFwLCBTQ1JfU1RBVFVTLCAmc3N0YXR1cyk7CisJc2F0YV9z Y3JfcmVhZChhcCwgU0NSX0NPTlRST0wsICZzY3RsKTsKKwlwcmludGsoIlNFcnI6MHgleCBTU3Rh dDoweCV4IFNDdGw6MHgleCAiLCBzZXJyb3IsIHNzdGF0dXMsIHNjdGwpOworCQlpZiAoZmlzICYg TlZfSU5UX0JBQ0tPVVRfTUNQNTUpCisJCQlwcmludGsoIiBiYWNrb3V0Iik7CQkJCQkJCQkKKwkJ CisJCWlmIChmaXMgJiBOVl9JTlRfREhSRUdGSVNfTUNQNTUpCisJCQlwcmludGsoIiBkaGZpcyIp OworCQkKKwkJaWYoZmlzICYgTlZfSU5UX0RNQVNFVFVQX01DUDU1KSAKKwkJCXByaW50aygiIGRt YXNldHVwIik7CisJCQorCQlpZiAoZmlzICYgTlZfSU5UX1NEQkZJU19NQ1A1NSkKKwkJCXByaW50 aygiIHNkYmZpcyIpOworCQkKKwkJCXByaW50aygiXG4iKTsKKworCXJldHVybjsKK30KKworI2Vs c2UKKyNkZWZpbmUgZmlzX2R1bXAoeCwgeSkKKyNlbmRpZgorCisKK3ZvaWQgbmNxX2hvdHBsdWco c3RydWN0IGF0YV9wb3J0ICphcCwgdTMyIGZpcykKK3sKKwkKKwkJdTMyIHNlcnJvcjsKKwkJc3Ry dWN0IGF0YV9laF9pbmZvICplaGkgPSAmYXAtPmVoX2luZm87CisJCQorCQlhdGFfZWhpX2NsZWFy X2Rlc2MoZWhpKTsKKworCQkvKiBBSENJIG5lZWRzIFNFcnJvciBjbGVhcmVkOyBvdGhlcndpc2Us IGl0IG1pZ2h0IGxvY2sgdXAgKi8KKwkJc2F0YV9zY3JfcmVhZChhcCwgU0NSX0VSUk9SLCAmc2Vy cm9yKTsKKwkJc2F0YV9zY3Jfd3JpdGUoYXAsIFNDUl9FUlJPUiwgc2Vycm9yKTsKKwkKKwkJLyog YW5hbHl6ZSBAaXJxX3N0YXQgKi8KKwkJYXRhX2VoaV9wdXNoX2Rlc2MoZWhpLCAiZmlzX3N0YXQg MHglMDh4IiwgZmlzKTsKKwkKKwkJYXRhX2VoaV9ob3RwbHVnZ2VkKGVoaSk7CQorCQkKKwkJLyog b2theSwgbGV0J3MgaGFuZCBvdmVyIHRvIEVIICovCisJCWVoaS0+c2Vycm9yIHw9IHNlcnJvcjsK KworCQlhdGFfcG9ydF9mcmVlemUoYXApOworfQorCisKK3N0YXRpYyBpbnQgbmNxX2ludGVycnVw dChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1MzIgZmlzKQoreworCXN0cnVjdCBudl9wb3J0X3ByaXYg KnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwkKKwl1MzIgcmMgPSAwOworCXUzMiB0YWc7CisJdTgg YXRhX3N0YXQ7CisJCisJaWYgKCFmaXMpCisJCXJldHVybiAwOworCQkKKworCWF0YV9zdGF0ID0g YXAtPm9wcy0+Y2hlY2tfc3RhdHVzKGFwKTsKKworCWFwLT5vcHMtPmlycV9jbGVhcihhcCk7IC8q IGNsZWFyIGJtIGlycSAqLworCisJZmlzX2R1bXAoYXAsIGZpcyk7CisKKwlpZiAoZmlzICYgTlZf SU5UX0hPVFBMVUdfTUNQNTUpIHsKKwkJbmNxX2hvdHBsdWcoYXAsIGZpcyk7CisJCXBwLT5vcHMt PmNsZWFyX3NpbmdsZWZpcyhhcCwgMHhmZmZmKTsKKwkJcmV0dXJuIDE7CisJfQorCisKKwlpZiAo IShmaXMgJiAweGYwKSkgeworCQlwcC0+b3BzLT5jbGVhcl9zaW5nbGVmaXMoYXAsIDB4MGYpOwor CQlyZXR1cm4gcmM7CQorCX0KKworCXBwLT5vcHMtPmNsZWFyX3NpbmdsZWZpcyhhcCwgTlZfSU5U X0RFVl9NQ1A1NSk7CisKKwlpZiAoZmlzICZOVl9JTlRfQkFDS09VVF9NQ1A1NSkgeworCQlwcC0+ b3BzLT5jbGVhcl9zaW5nbGVmaXMoYXAsIE5WX0lOVF9CQUNLT1VUX01DUDU1KTsKKwkJcHAtPnJl dHJ5KysgOworCQlzZXRfYmFja19ieXRlKHBwLCBwcC0+Y3VycmVudF90YWcpOworCQlOUFJJTlRL KCJCQUNLIE9VVCBGSVM6JXggXG4iLCBmaXMpOyAKKwkJcmMgPSAxOworCSB9IC8qIGZpcnN0IGhh bmRsZSBiYWNrIG91dCAqLworCQorCWlmIChmaXMgJiBOVl9JTlRfU0RCRklTX01DUDU1KSB7CisJ CXBwLT5vcHMtPmNsZWFyX3NpbmdsZWZpcyhhcCwgTlZfSU5UX1NEQkZJU19NQ1A1NSB8IE5WX0lO VF9ERVZfTUNQNTUpOworCQlyYyA9IG52X25jcWludHJfc2RiZmlzKGFwKTsKKwl9IAorCisJaWYg KGZpcyAmTlZfSU5UX0RIUkVHRklTX01DUDU1KSB7CisJCXBwLT5vcHMtPmNsZWFyX3NpbmdsZWZp cyhhcCwgTlZfSU5UX0RIUkVHRklTX01DUDU1KTsKKworCQkvKiBlYWNoIGNtZCBnZW5lcmF0ZSBv bmUgZGhmaXMgaW50ciwgb3RoZXJ3aXNlIGVycm9yIGhhcHBlbnMgKi8KKwkJcHAtPmRoZmlzX2Zs YWdzIHw9ICgweDEgPDwgcHAtPmN1cnJlbnRfdGFnKTsKKwl9CisKKwlpZiAoZmlzICYgTlZfSU5U X0RNQVNFVFVQX01DUDU1KSB7CisJCS8qIGRvbid0IHNlbmQgbmV4dCByZXF1ZXN0IGFmdGVyIHJl Y2VpdmluZyBkbWEgc2V0dXBmaXMgKi8KKwkJdGFnID0gcHAtPm9wcy0+dGFnX3ZhbHVlKGFwKTsK KwkJaWYgKCFkbWFfYnl0ZShwcC0+Y21kX3N0b3ApKSAKKwkJCXNldF9kbWFfYnl0ZShwcCwgdGFn KTsJCisJCQkKKwkJcHAtPm9wcy0+Y2xlYXJfc2luZ2xlZmlzKGFwLCBOVl9JTlRfRE1BU0VUVVBf TUNQNTUpOworCisJCXJjID0gbnZfbmNxaW50cl9kbWFzZXR1cGZpcyhhcCk7CisJfQorCisJcmV0 dXJuIHJjOworfQorCisjaWZkZWYgTkNRX0RFQlVHCitzdGF0aWMgdm9pZCBzZGJmaXNfZHVtcChz dHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBudl9wb3J0X3ByaXYgKnBwID0gYXAtPnBy aXZhdGVfZGF0YTsKKwkKKwkJCisJTlBSSU5USygiaWQ6MHgleCByZXRyeToleCBhcC0+cWNfYWN0 aXZlOjB4JXggcHAtPnFjX2FjdGl2ZToweCV4ICIKKwkJImRlZmVyX2JpdHM6MHgleCBjbWRfc3Rv cDoweCV4IGN1cnJlbnRfdGFnOiVYIHBwLT5kaGZpc19mbGFnczoweCV4XG4iLAorCQkJCQkJCWFw LT5pZCwKKwkJCQkJCQlwcC0+cmV0cnksCisJCQkJCQkJYXAtPnFjX2FjdGl2ZSwKKwkJCQkJCQlw cC0+cWNfYWN0aXZlLAorCQkJCQkJCXBwLT5kZWZlcl9iaXRzLAorCQkJCQkJCXBwLT5jbWRfc3Rv cCwKKwkJCQkJCQlwcC0+Y3VycmVudF90YWcsCisJCQkJCQkJcHAtPmRoZmlzX2ZsYWdzKTsKKwor CXJldHVybjsKK30KKyNlbHNlCisjZGVmaW5lIHNkYmZpc19kdW1wKHgpCisjZW5kaWYKKworc3Rh dGljIGludCBudl9uY3FpbnRyX3NkYmZpcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVj dCBhdGFfcXVldWVkX2NtZCAqcWM7CisJdTMyIHNhY3RpdmU7CisJaW50IG5yX2RvbmUgPSAwOwor CXUzMiBkb25lX21hc2s7CisJaW50IGk7CisJdTMyIGRoX3ZhbGlkOworCXN0cnVjdCBudl9wb3J0 X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKm1taW8gPSBhcC0+ aG9zdC0+aW9tYXBbTlZfTU1JT19CQVJdOworCXUzMiBiYXNlID0gTlZfQ0gxX1NBQ1RJVkVfTUNQ NTUgKyBhcC0+cG9ydF9ubyAqIDB4NDA7CisJCisJcHAtPm9wcy0+Ym1kbWFfc3RvcChhcCk7CisK KwlzYWN0aXZlID0gcmVhZGwobW1pbyArIGJhc2UpOworCQorCWRvbmVfbWFzayA9IHBwLT5xY19h Y3RpdmUgXiBzYWN0aXZlOworCWlmICh1bmxpa2VseShkb25lX21hc2sgJiBzYWN0aXZlKSkgewor CQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLCAiaWxsZWdhbCBxY19hY3RpdmUgdHJhbnNp dGlvbiAiCisJCQkJIiglMDh4LT4lMDh4KVxuIiwgYXAtPnFjX2FjdGl2ZSwgc2FjdGl2ZSk7CisJ CXJldHVybiAtRUlOVkFMOworCX0JCisJZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfUVVFVUU7IGkr KykgeworCQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCisJCWlmICghKGRvbmVfbWFzayAm ICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgocWMgPSBhdGFfcWNfZnJvbV90YWco YXAsIGkpKSkgeworCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwkJCXBwLT5xY19hY3RpdmUgJj0g figweDEgPDwgaSk7CisJCQlwcC0+ZGhmaXNfZmxhZ3MgJj0gfigweDEgPDwgaSk7CisJCQlucl9k b25lKys7CisJCX0KKwl9CisJCisJaWYgKCFhcC0+cWNfYWN0aXZlKSB7CisJCU5QUklOVEsoIm92 ZXJcbiIpOworCQlwcC0+ZGhmaXNfZmxhZ3MgPSAwOworCQlwcC0+cmV0cnkgPSAwOworCQlwcC0+ cWNfYWN0aXZlID0gMDsKKwkJcHAtPmRlZmVyX2JpdHMgPSAwOworCQlwcC0+Y21kX3N0b3AgPSAw OworCQlwcC0+Y21kX3NlbmRlZCA9IDA7CisJCXBwLT5jdXJyZW50X3RhZyA9IDA7CisJCXJldHVy biBucl9kb25lOworCX0KKworCWRoX3ZhbGlkID0gbmNxX3ZhbGlkX2RoZmlzZmxhZyhwcCk7CisJ c2RiZmlzX2R1bXAoYXApOworCQorCWlmIChhcC0+cWNfYWN0aXZlID4gMCAmJiBwcC0+cWNfYWN0 aXZlID09ICgxIDw8IHBwLT5jdXJyZW50X3RhZykgJiYKKwkJCWJhY2tfYnl0ZShwcC0+Y21kX3N0 b3ApKSB7CisJCQorCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgcHAtPmN1cnJlbnRfdGFnKTsK KwkJCWlmICh1bmxpa2VseSghcWMpKQkJCQkKKwkJCQlyZXR1cm4gbnJfZG9uZTsKKwkJCQkKKwkJ TlBSSU5USygiYmFja291dCBvciBub3ZhbGlkXG4iKTsKKwkJYXAtPm9wcy0+cWNfaXNzdWUocWMp OworCisJCXJldHVybiBucl9kb25lOworCX0JCisJCQkKKwlpZiAocHAtPnFjX2FjdGl2ZSA+IDAg fHwgcHAtPmRlZmVyX2JpdHMgPT0gMCkKKwkJcmV0dXJuIG5yX2RvbmU7CisKKwlmb3IgKGkgPSAw OyBpIDwgMzI7IGkrKykgeworCQlpZiAoIShwcC0+ZGVmZXJfYml0cyAmICgweDEgPDwgaSkpKQor CQkJY29udGludWU7CisJCQorCQlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgaSk7CisJCXBwLT5k ZWZlcl9iaXRzICY9IH4oMHgxIDw8IGkpOworCQlOUFJJTlRLKCJERUZFUlxuIik7CisJCWFwLT5v cHMtPnFjX2lzc3VlKHFjKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBucl9kb25lOworfQor CitzdGF0aWMgdTMyIG5jcV90YWdfdmFsdWUoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwl2b2lk IF9faW9tZW0gKm1taW8gPSBhcC0+aG9zdC0+aW9tYXBbTlZfTU1JT19CQVJdOworCXUzMiB0YWc7 CisJdTMyIGJhc2UgPSAgTlZfTkNRX1JFR19NQ1A1NSArIGFwLT5wb3J0X25vICogMjsKKworCXRh ZyA9IHJlYWRiKG1taW8gKyBiYXNlKTsKKwl0YWcgPSAoKHRhZyA+PiAyKSAmIDB4MWYpOworCXJl dHVybiAgdGFnOworfQorCitzdGF0aWMgaW50IG52X25jcWludHJfZG1hc2V0dXBmaXMoc3RydWN0 IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCXVuc2lnbmVk IGludCBydyA7CisJdTggZG1hY3RsOworCXUzMiB0YWc7CisJc3RydWN0IG52X3BvcnRfcHJpdiAq cHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCisJcHAtPm9wcy0+Ym1kbWFfc3RvcChhcCk7CisJdGFn ID0gcHAtPm9wcy0+dGFnX3ZhbHVlKGFwKTsKKworCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCB0 YWcpOworCisJaWYgKHVubGlrZWx5KCFxYykpCisJCXJldHVybiAwOworCisJcncgID0gICgocWMt PnRmLmZsYWdzKSAmIEFUQV9URkxBR19XUklURSk7CisKKwkvKiBsb2FkIFBSRCB0YWJsZSBhZGRy LiAqLworCWlvd3JpdGUzMihwcC0+cHJkX2RtYSArIEFUQV9QUkRfVEJMX1NaKihxYy0+dGFnKSwg YXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9UQUJMRV9PRlMpOworCisJLyogc3BlY2lm eSBkYXRhIGRpcmVjdGlvbiwgdHJpcGxlLWNoZWNrIHN0YXJ0IGJpdCBpcyBjbGVhciAqLworCWRt YWN0bCA9IGlvcmVhZDgoYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9DTUQpOworCWRt YWN0bCAmPSB+KEFUQV9ETUFfV1IpOworCWlmICghcncpCisJCWRtYWN0bCB8PSBBVEFfRE1BX1dS OworCisJaW93cml0ZTgoZG1hY3RsIHwgQVRBX0RNQV9TVEFSVCwgYXAtPmlvYWRkci5ibWRtYV9h ZGRyICsgQVRBX0RNQV9DTUQpOwkKKworCXJldHVybiAxOwkJCit9CisKIHN0YXRpYyBpbnQgbnZf aW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9p ZCAqZW50KQogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uID0gMDsKQEAgLTE1NjAsNyAr MjYwNiw3IEBAIHN0YXRpYyBpbnQgbnZfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICoKIAkJcmV0 dXJuIHJjOwogCiAJLyogZGV0ZXJtaW5lIHR5cGUgYW5kIGFsbG9jYXRlIGhvc3QgKi8KLQlpZiAo dHlwZSA+PSBDSzgwNCAmJiBhZG1hX2VuYWJsZWQpIHsKKwlpZiAoKHR5cGUgPT0gQ0s4MDQgfHwg dHlwZSA9PSBBRE1BKSAmJiBhZG1hX2VuYWJsZWQpIHsKIAkJZGV2X3ByaW50ayhLRVJOX05PVElD RSwgJnBkZXYtPmRldiwgIlVzaW5nIEFETUEgbW9kZVxuIik7CiAJCXR5cGUgPSBBRE1BOwogCX0K QEAgLTE1OTMsNyArMjYzOSw3IEBAIHN0YXRpYyBpbnQgbnZfaW5pdF9vbmUgKHN0cnVjdCBwY2lf ZGV2ICoKIAlob3N0LT5wb3J0c1sxXS0+aW9hZGRyLnNjcl9hZGRyID0gYmFzZSArIE5WX1BPUlQx X1NDUl9SRUdfT0ZGU0VUOwogCiAJLyogZW5hYmxlIFNBVEEgc3BhY2UgZm9yIENLODA0ICovCi0J aWYgKHR5cGUgPj0gQ0s4MDQpIHsKKwlpZiAodHlwZSA9PSBDSzgwNCB8fCB0eXBlID09IEFETUEp IHsKIAkJdTggcmVndmFsOwogCiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIE5WX01DUF9T QVRBX0NGR18yMCwgJnJlZ3ZhbCk7CkBAIC0xNjA2LDcgKzI2NTIsOCBAQCBzdGF0aWMgaW50IG52 X2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqCiAJCXJjID0gbnZfYWRtYV9ob3N0X2luaXQoaG9z dCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKLQl9CisJfWVsc2UgaWYgKHR5cGUgPT0gTUNQ NTUpCisJCW5jcV9ob3N0X2luaXQoaG9zdCk7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAly ZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGRldi0+aXJxLCBwcGlbMF0tPmlycV9oYW5k bGVyLApAQCAtMTYxOSw3ICsyNjY2LDcgQEAgc3RhdGljIHZvaWQgbnZfcmVtb3ZlX29uZSAoc3Ry dWN0IHBjaV9kZQogCXN0cnVjdCBudl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9k YXRhOwogCiAJYXRhX3BjaV9yZW1vdmVfb25lKHBkZXYpOwotCWtmcmVlKGhwcml2KTsKKwlkZXZt X2tmcmVlKCZwZGV2LT5kZXYsaHByaXYpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xNzE0 LDMgKzI3NjEsNiBAQCBtb2R1bGVfaW5pdChudl9pbml0KTsKIG1vZHVsZV9leGl0KG52X2V4aXQp OwogbW9kdWxlX3BhcmFtX25hbWVkKGFkbWEsIGFkbWFfZW5hYmxlZCwgYm9vbCwgMDQ0NCk7CiBN T0RVTEVfUEFSTV9ERVNDKGFkbWEsICJFbmFibGUgdXNlIG9mIEFETUEgKERlZmF1bHQ6IHRydWUp Iik7Cittb2R1bGVfcGFyYW1fbmFtZWQobmNxLCBuY3FfZW5hYmxlZCwgYm9vbCwgMDQ0NCk7CitN T0RVTEVfUEFSTV9ERVNDKG5jcSwgIkVuYWJsZSB1c2Ugb2YgTkNRIChEZWZhdWx0OiBmYWxzZSki KTsKKwo= ------_=_NextPart_001_01C7986C.4E17BDD4-- - 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/