From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v2 20/30] xen/x86: add the basic infrastructure to import QEMU passthrough code Date: Tue, 27 Sep 2016 17:57:15 +0200 Message-ID: <1474991845-27962-21-git-send-email-roger.pau@citrix.com> References: <1474991845-27962-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1boumC-00085P-Li for xen-devel@lists.xenproject.org; Tue, 27 Sep 2016 15:58:36 +0000 In-Reply-To: <1474991845-27962-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Andrew Cooper , Paul Durrant , Jan Beulich , boris.ostrovsky@oracle.com, Roger Pau Monne List-Id: xen-devel@lists.xenproject.org TW9zdCBvZiB0aGlzIGNvZGUgaGFzIGJlZW4gcGlja2VkIHVwIGZyb20gUUVNVSBhbmQgbW9kaWZp ZWQgc28gaXQgY2FuIGJlCnBsdWdnZWQgaW50byB0aGUgaW50ZXJuYWwgWGVuIElPIGhhbmRsZXJz LiBUaGUgc3RydWN0dXJlIG9mIHRoZSBoYW5kbGVycyBoYXMKYmVlbiBrZWVwIHF1aXRlIHNpbWls YXIgdG8gUUVNVSwgc28gZXhpc3RpbmcgaGFuZGxlcnMgY2FuIGJlIGltcG9ydGVkCndpdGhvdXQg YSBsb3Qgb2YgZWZmb3J0LgoKU2lnbmVkLW9mZi1ieTogUm9nZXIgUGF1IE1vbm7DqSA8cm9nZXIu cGF1QGNpdHJpeC5jb20+Ci0tLQpDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpD YzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KQ2M6IFBhdWwgRHVy cmFudCA8cGF1bC5kdXJyYW50QGNpdHJpeC5jb20+Ci0tLQogZG9jcy9taXNjL3hlbi1jb21tYW5k LWxpbmUubWFya2Rvd24gfCAgIDggKwogeGVuL2FyY2gveDg2L2h2bS9odm0uYyAgICAgICAgICAg ICAgfCAgIDIgKwogeGVuL2FyY2gveDg2L2h2bS9pby5jICAgICAgICAgICAgICAgfCA2MjEgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS9hc20teDg2L2h2 bS9kb21haW4uaCAgICB8ICAgNCArCiB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9pby5oICAgICAg ICB8IDE3NiArKysrKysrKysrCiB4ZW4vaW5jbHVkZS94ZW4vcGNpLmggICAgICAgICAgICAgICB8 ICAgNSArCiA2IGZpbGVzIGNoYW5nZWQsIDgxNiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEv ZG9jcy9taXNjL3hlbi1jb21tYW5kLWxpbmUubWFya2Rvd24gYi9kb2NzL21pc2MveGVuLWNvbW1h bmQtbGluZS5tYXJrZG93bgppbmRleCA1OWQ3MjEwLi43ODEzMGM4IDEwMDY0NAotLS0gYS9kb2Nz L21pc2MveGVuLWNvbW1hbmQtbGluZS5tYXJrZG93bgorKysgYi9kb2NzL21pc2MveGVuLWNvbW1h bmQtbGluZS5tYXJrZG93bgpAQCAtNjcwLDYgKzY3MCwxNCBAQCBGbGFnIHRoYXQgbWFrZXMgYSA2 NGJpdCBkb20wIGJvb3QgaW4gUFZIIG1vZGUuIE5vIDMyYml0IHN1cHBvcnQgYXQgcHJlc2VudC4K IAogRmxhZyB0aGF0IG1ha2VzIGEgZG9tMCBib290IGluIFBWSHYyIG1vZGUuCiAKKyMjIyBkb20w cGVybWlzc2l2ZQorPiBgPSA8Ym9vbGVhbj5gCisKKz4gRGVmYXVsdDogYHRydWVgCisKK1NlbGVj dCBtb2RlIG9mIFBDSSBwYXNzLXRocm91Z2ggd2hlbiB1c2luZyBhIFBWSHYyIERvbTAsIGVpdGhl ciBwZXJtaXNzaXZlIG9yCitub3QuCisKICMjIyBkdHVhcnQgKEFSTSkKID4gYD0gcGF0aCBbOm9w dGlvbnNdYAogCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jIGIveGVuL2FyY2gv eDg2L2h2bS9odm0uYwppbmRleCBhMjkxZjgyLi5iYzRmN2JjIDEwMDY0NAotLS0gYS94ZW4vYXJj aC94ODYvaHZtL2h2bS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKQEAgLTYzMiw2ICs2 MzIsOCBAQCBpbnQgaHZtX2RvbWFpbl9pbml0aWFsaXNlKHN0cnVjdCBkb21haW4gKmQpCiAgICAg ICAgICAgICBnb3RvIGZhaWwxOwogICAgICAgICB9CiAgICAgICAgIG1lbXNldChkLT5hcmNoLmh2 bV9kb21haW4uaW9fYml0bWFwLCB+MCwgSFZNX0lPQklUTUFQX1NJWkUpOworICAgICAgICBJTklU X0xJU1RfSEVBRCgmZC0+YXJjaC5odm1fZG9tYWluLnB0X2RldmljZXMpOworICAgICAgICByd2xv Y2tfaW5pdCgmZC0+YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOwogICAgIH0KICAgICBlbHNlCiAg ICAgICAgIGQtPmFyY2guaHZtX2RvbWFpbi5pb19iaXRtYXAgPSBodm1faW9fYml0bWFwOwpkaWZm IC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9pby5jIGIveGVuL2FyY2gveDg2L2h2bS9pby5jCmlu ZGV4IDMxZDU0ZGMuLjdkZTFkZTMgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaW8uYwor KysgYi94ZW4vYXJjaC94ODYvaHZtL2lvLmMKQEAgLTQ2LDYgKzQ2LDEwIEBACiAjaW5jbHVkZSA8 eGVuL2lvY2FwLmg+CiAjaW5jbHVkZSA8cHVibGljL2h2bS9pb3JlcS5oPgogCisvKiBTZXQgcGVy bWlzc2l2ZSBtb2RlIGZvciBIVk0gRG9tMCBQQ0kgcGFzcy10aHJvdWdoIGJ5IGRlZmF1bHQgKi8K K3N0YXRpYyBib29sX3Qgb3B0X2RvbTBwZXJtaXNzaXZlID0gMTsKK2Jvb2xlYW5fcGFyYW0oImRv bTBwZXJtaXNzaXZlIiwgb3B0X2RvbTBwZXJtaXNzaXZlKTsKKwogdm9pZCBzZW5kX3RpbWVvZmZz ZXRfcmVxKHVuc2lnbmVkIGxvbmcgdGltZW9mZikKIHsKICAgICBpb3JlcV90IHAgPSB7CkBAIC0y NTgsMTIgKzI2Miw0MDMgQEAgc3RhdGljIGJvb2xfdCBod19kcGNpX3BvcnRpb19hY2NlcHQoY29u c3Qgc3RydWN0IGh2bV9pb19oYW5kbGVyICpoYW5kbGVyLAogICAgIHJldHVybiAwOwogfQogCitz dGF0aWMgc3RydWN0IGh2bV9wdF9kZXZpY2UgKmh3X2RwY2lfZ2V0X2RldmljZShzdHJ1Y3QgZG9t YWluICpkKQoreworICAgIHVpbnQ4X3QgYnVzLCBzbG90LCBmdW5jOworICAgIHVpbnQzMl90IGFk ZHI7CisgICAgc3RydWN0IGh2bV9wdF9kZXZpY2UgKmRldjsKKworICAgIC8qIERlY29kZSBidXMs IHNsb3QgYW5kIGZ1bmMuICovCisgICAgYWRkciA9IENGOF9CREYoZC0+YXJjaC5wY2lfY2Y4KTsK KyAgICBidXMgPSBQQ0lfQlVTKGFkZHIpOworICAgIHNsb3QgPSBQQ0lfU0xPVChhZGRyKTsKKyAg ICBmdW5jID0gUENJX0ZVTkMoYWRkcik7CisKKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KCBkZXYs ICZkLT5hcmNoLmh2bV9kb21haW4ucHRfZGV2aWNlcywgZW50cmllcyApCisgICAgeworICAgICAg ICBpZiAoIGRldi0+cGRldi0+c2VnICE9IDAgfHwgZGV2LT5wZGV2LT5idXMgIT0gYnVzIHx8Cisg ICAgICAgICAgICAgZGV2LT5wZGV2LT5kZXZmbiAhPSBQQ0lfREVWRk4oc2xvdCxmdW5jKSApCisg ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZXR1cm4gZGV2OworICAgIH0KKworICAg IHJldHVybiBOVUxMOworfQorCisvKiBEaXNwYXRjaGVycyAqLworCisvKiBGaW5kIGVtdWxhdGUg cmVnaXN0ZXIgZ3JvdXAgZW50cnkgKi8KK3N0cnVjdCBodm1fcHRfcmVnX2dyb3VwICpodm1fcHRf ZmluZF9yZWdfZ3JwKHN0cnVjdCBodm1fcHRfZGV2aWNlICpkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcmVzcykKK3sKKyAgICBzdHJ1 Y3QgaHZtX3B0X3JlZ19ncm91cCAqZW50cnkgPSBOVUxMOworCisgICAgLyogRmluZCByZWdpc3Rl ciBncm91cCBlbnRyeSAqLworICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoIGVudHJ5LCAmZC0+cmVn aXN0ZXJfZ3JvdXBzLCBlbnRyaWVzICkKKyAgICB7CisgICAgICAgIC8qIGNoZWNrIGFkZHJlc3Mg Ki8KKyAgICAgICAgaWYgKCAoZW50cnktPmJhc2Vfb2Zmc2V0IDw9IGFkZHJlc3MpCisgICAgICAg ICAgICAgJiYgKChlbnRyeS0+YmFzZV9vZmZzZXQgKyBlbnRyeS0+c2l6ZSkgPiBhZGRyZXNzKSAp CisgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQorCisgICAgLyogR3JvdXAgZW50cnkg bm90IGZvdW5kICovCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEZpbmQgZW11bGF0ZSByZWdp c3RlciBlbnRyeSAqLworc3RydWN0IGh2bV9wdF9yZWcgKmh2bV9wdF9maW5kX3JlZyhzdHJ1Y3Qg aHZtX3B0X3JlZ19ncm91cCAqcmVnX2dycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgYWRkcmVzcykKK3sKKyAgICBzdHJ1Y3QgaHZtX3B0X3JlZyAqcmVnX2Vu dHJ5ID0gTlVMTDsKKyAgICBzdHJ1Y3QgaHZtX3B0X3JlZ19oYW5kbGVyICpoYW5kbGVyID0gTlVM TDsKKyAgICB1aW50MzJfdCByZWFsX29mZnNldCA9IDA7CisKKyAgICAvKiBGaW5kIHJlZ2lzdGVy IGVudHJ5ICovCisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSggcmVnX2VudHJ5LCAmcmVnX2dycC0+ cmVnaXN0ZXJzLCBlbnRyaWVzICkKKyAgICB7CisgICAgICAgIGhhbmRsZXIgPSByZWdfZW50cnkt PmhhbmRsZXI7CisgICAgICAgIHJlYWxfb2Zmc2V0ID0gcmVnX2dycC0+YmFzZV9vZmZzZXQgKyBo YW5kbGVyLT5vZmZzZXQ7CisgICAgICAgIC8qIENoZWNrIGFkZHJlc3MgKi8KKyAgICAgICAgaWYg KCAocmVhbF9vZmZzZXQgPD0gYWRkcmVzcykKKyAgICAgICAgICAgICAmJiAoKHJlYWxfb2Zmc2V0 ICsgaGFuZGxlci0+c2l6ZSkgPiBhZGRyZXNzKSApCisgICAgICAgICAgICByZXR1cm4gcmVnX2Vu dHJ5OworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGh2bV9wdF9w Y2lfY29uZmlnX2FjY2Vzc19jaGVjayhzdHJ1Y3QgaHZtX3B0X2RldmljZSAqZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHIsIGludCBsZW4p Cit7CisgICAgLyogQ2hlY2sgb2Zmc2V0IHJhbmdlICovCisgICAgaWYgKCBhZGRyID49IDB4RkYg KQorICAgIHsKKyAgICAgICAgcHJpbnRrX3BkZXYoZC0+cGRldiwgWEVOTE9HX0RFQlVHLAorICAg ICAgICAgICAgImZhaWxlZCB0byBhY2Nlc3MgcmVnaXN0ZXIgd2l0aCBvZmZzZXQgZXhjZWVkaW5n IDB4RkYuICIKKyAgICAgICAgICAgICIoYWRkcjogMHglMDJ4LCBsZW46ICVkKVxuIiwgYWRkciwg bGVuKTsKKyAgICAgICAgcmV0dXJuIC1FRE9NOworICAgIH0KKworICAgIC8qIENoZWNrIHJlYWQg c2l6ZSAqLworICAgIGlmICggKGxlbiAhPSAxKSAmJiAobGVuICE9IDIpICYmIChsZW4gIT0gNCkg KQorICAgIHsKKyAgICAgICAgcHJpbnRrX3BkZXYoZC0+cGRldiwgWEVOTE9HX0RFQlVHLAorICAg ICAgICAgICAgImZhaWxlZCB0byBhY2Nlc3MgcmVnaXN0ZXIgd2l0aCBpbnZhbGlkIGFjY2VzcyBs ZW5ndGguICIKKyAgICAgICAgICAgICIoYWRkcjogMHglMDJ4LCBsZW46ICVkKVxuIiwgYWRkciwg bGVuKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgLyogQ2hlY2sgb2Zm c2V0IGFsaWdubWVudCAqLworICAgIGlmICggYWRkciAmIChsZW4gLSAxKSApCisgICAgeworICAg ICAgICBwcmludGtfcGRldihkLT5wZGV2LCBYRU5MT0dfREVCVUcsCisgICAgICAgICAgICAiZmFp bGVkIHRvIGFjY2VzcyByZWdpc3RlciB3aXRoIGludmFsaWQgYWNjZXNzIHNpemUgIgorICAgICAg ICAgICAgImFsaWdubWVudC4gKGFkZHI6IDB4JTAyeCwgbGVuOiAlZClcbiIsIGFkZHIsIGxlbik7 CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitz dGF0aWMgaW50IGh2bV9wdF9wY2lfcmVhZF9jb25maWcoc3RydWN0IGh2bV9wdF9kZXZpY2UgKmQs IHVpbnQzMl90IGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3QgKmRhdGEsIGludCBsZW4pCit7CisgICAgdWludDMyX3QgdmFsID0gMDsKKyAgICBzdHJ1Y3Qg aHZtX3B0X3JlZ19ncm91cCAqcmVnX2dycF9lbnRyeSA9IE5VTEw7CisgICAgc3RydWN0IGh2bV9w dF9yZWcgKnJlZ19lbnRyeSA9IE5VTEw7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgZW11bF9s ZW4gPSAwOworICAgIHVpbnQzMl90IGZpbmRfYWRkciA9IGFkZHI7CisgICAgdW5zaWduZWQgaW50 IHNlZyA9IGQtPnBkZXYtPnNlZzsKKyAgICB1bnNpZ25lZCBpbnQgYnVzID0gZC0+cGRldi0+YnVz OworICAgIHVuc2lnbmVkIGludCBzbG90ID0gUENJX1NMT1QoZC0+cGRldi0+ZGV2Zm4pOworICAg IHVuc2lnbmVkIGludCBmdW5jID0gUENJX0ZVTkMoZC0+cGRldi0+ZGV2Zm4pOworCisgICAgLyog U2FuaXR5IGNoZWNrcy4gKi8KKyAgICBpZiAoIGh2bV9wdF9wY2lfY29uZmlnX2FjY2Vzc19jaGVj ayhkLCBhZGRyLCBsZW4pICkKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwor CisgICAgLyogRmluZCByZWdpc3RlciBncm91cCBlbnRyeS4gKi8KKyAgICByZWdfZ3JwX2VudHJ5 ID0gaHZtX3B0X2ZpbmRfcmVnX2dycChkLCBhZGRyKTsKKyAgICBpZiAoIHJlZ19ncnBfZW50cnkg PT0gTlVMTCApCisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKworICAgIC8q IFJlYWQgSS9PIGRldmljZSByZWdpc3RlciB2YWx1ZS4gKi8KKyAgICBzd2l0Y2goIGxlbiApCisg ICAgeworICAgIGNhc2UgMToKKyAgICAgICAgdmFsID0gcGNpX2NvbmZfcmVhZDgoc2VnLCBidXMs IHNsb3QsIGZ1bmMsIGFkZHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAg IHZhbCA9IHBjaV9jb25mX3JlYWQxNihzZWcsIGJ1cywgc2xvdCwgZnVuYywgYWRkcik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgdmFsID0gcGNpX2NvbmZfcmVhZDMyKHNl ZywgYnVzLCBzbG90LCBmdW5jLCBhZGRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK KyAgICAgICAgQlVHKCk7CisgICAgfQorCisgICAgLyogQWRqdXN0IHRoZSByZWFkIHZhbHVlIHRv IGFwcHJvcHJpYXRlIENGQy1DRkYgd2luZG93LiAqLworICAgIHZhbCA8PD0gKGFkZHIgJiAzKSA8 PCAzOworICAgIGVtdWxfbGVuID0gbGVuOworCisgICAgLyogTG9vcCBhcm91bmQgdGhlIGd1ZXN0 IHJlcXVlc3RlZCBzaXplLiAqLworICAgIHdoaWxlICggZW11bF9sZW4gPiAwICkKKyAgICB7Cisg ICAgICAgIC8qIEZpbmQgcmVnaXN0ZXIgZW50cnkgdG8gYmUgZW11bGF0ZWQuICovCisgICAgICAg IHJlZ19lbnRyeSA9IGh2bV9wdF9maW5kX3JlZyhyZWdfZ3JwX2VudHJ5LCBmaW5kX2FkZHIpOwor ICAgICAgICBpZiAoIHJlZ19lbnRyeSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBo dm1fcHRfcmVnX2hhbmRsZXIgKmhhbmRsZXIgPSByZWdfZW50cnktPmhhbmRsZXI7CisgICAgICAg ICAgICB1aW50MzJfdCByZWFsX29mZnNldCA9IHJlZ19ncnBfZW50cnktPmJhc2Vfb2Zmc2V0ICsg aGFuZGxlci0+b2Zmc2V0OworICAgICAgICAgICAgdWludDMyX3QgdmFsaWRfbWFzayA9IDB4RkZG RkZGRkYgPj4gKCg0IC0gZW11bF9sZW4pIDw8IDMpOworICAgICAgICAgICAgdWludDhfdCAqcHRy X3ZhbCA9IE5VTEw7CisKKyAgICAgICAgICAgIHZhbGlkX21hc2sgPDw9IChmaW5kX2FkZHIgLSBy ZWFsX29mZnNldCkgPDwgMzsKKyAgICAgICAgICAgIHB0cl92YWwgPSAodWludDhfdCAqKSZ2YWwg KyAocmVhbF9vZmZzZXQgJiAzKTsKKworICAgICAgICAgICAgLyogRG8gZW11bGF0aW9uIGJhc2Vk IG9uIHJlZ2lzdGVyIHNpemUuICovCisgICAgICAgICAgICBzd2l0Y2ggKCBoYW5kbGVyLT5zaXpl ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBp ZiAoIGhhbmRsZXItPnUuYi5yZWFkICkKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBoYW5kbGVy LT51LmIucmVhZChkLCByZWdfZW50cnksIHB0cl92YWwsIHZhbGlkX21hc2spOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIGlmICgg aGFuZGxlci0+dS53LnJlYWQgKQorICAgICAgICAgICAgICAgICAgICByYyA9IGhhbmRsZXItPnUu dy5yZWFkKGQsIHJlZ19lbnRyeSwgKHVpbnQxNl90ICopcHRyX3ZhbCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZF9tYXNrKTsKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBpZiAoIGhhbmRs ZXItPnUuZHcucmVhZCApCisgICAgICAgICAgICAgICAgICAgIHJjID0gaGFuZGxlci0+dS5kdy5y ZWFkKGQsIHJlZ19lbnRyeSwgKHVpbnQzMl90ICopcHRyX3ZhbCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRfbWFzayk7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggcmMgPCAwICkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCByZWFkIGVtdWxhdGlvbiwgc2h1dHRpbmcgZG93 biBkb21haW5cbiIpOworICAgICAgICAgICAgICAgIGRvbWFpbl9jcmFzaChjdXJyZW50LT5kb21h aW4pOworICAgICAgICAgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgLyogQ2FsY3VsYXRlIG5leHQgYWRkcmVzcyB0byBmaW5k LiAqLworICAgICAgICAgICAgZW11bF9sZW4gLT0gaGFuZGxlci0+c2l6ZTsKKyAgICAgICAgICAg IGlmICggZW11bF9sZW4gPiAwICkKKyAgICAgICAgICAgICAgICBmaW5kX2FkZHIgPSByZWFsX29m ZnNldCArIGhhbmRsZXItPnNpemU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7 CisgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIHdpdGggcGFzc3Rocm91Z2ggdHlwZSByZWdp c3RlciAqLworICAgICAgICAgICAgZW11bF9sZW4tLTsKKyAgICAgICAgICAgIGZpbmRfYWRkcisr OworICAgICAgICB9CisgICAgfQorCisgICAgLyogTmVlZCB0byBzaGlmdCBiYWNrIGJlZm9yZSBy ZXR1cm5pbmcgdGhlbSB0byBwY2kgYnVzIGVtdWxhdG9yICovCisgICAgdmFsID4+PSAoKGFkZHIg JiAzKSA8PCAzKTsKKyAgICAqZGF0YSA9IHZhbDsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7 Cit9CisKK3N0YXRpYyBpbnQgaHZtX3B0X3BjaV93cml0ZV9jb25maWcoc3RydWN0IGh2bV9wdF9k ZXZpY2UgKmQsIHVpbnQzMl90IGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCB2YWwsIGludCBsZW4pCit7CisgICAgaW50IGluZGV4ID0gMDsKKyAgICBz dHJ1Y3QgaHZtX3B0X3JlZ19ncm91cCAqcmVnX2dycF9lbnRyeSA9IE5VTEw7CisgICAgaW50IHJj ID0gMDsKKyAgICB1aW50MzJfdCByZWFkX3ZhbCA9IDAsIHdiX21hc2s7CisgICAgaW50IGVtdWxf bGVuID0gMDsKKyAgICBzdHJ1Y3QgaHZtX3B0X3JlZyAqcmVnX2VudHJ5ID0gTlVMTDsKKyAgICB1 aW50MzJfdCBmaW5kX2FkZHIgPSBhZGRyOworICAgIHN0cnVjdCBodm1fcHRfcmVnX2hhbmRsZXIg KmhhbmRsZXIgPSBOVUxMOworICAgIGJvb2wgd3BfZmxhZyA9IGZhbHNlOworICAgIHVuc2lnbmVk IGludCBzZWcgPSBkLT5wZGV2LT5zZWc7CisgICAgdW5zaWduZWQgaW50IGJ1cyA9IGQtPnBkZXYt PmJ1czsKKyAgICB1bnNpZ25lZCBpbnQgc2xvdCA9IFBDSV9TTE9UKGQtPnBkZXYtPmRldmZuKTsK KyAgICB1bnNpZ25lZCBpbnQgZnVuYyA9IFBDSV9GVU5DKGQtPnBkZXYtPmRldmZuKTsKKworICAg IC8qIFNhbml0eSBjaGVja3MuICovCisgICAgaWYgKCBodm1fcHRfcGNpX2NvbmZpZ19hY2Nlc3Nf Y2hlY2soZCwgYWRkciwgbGVuKSApCisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJM RTsKKworICAgIC8qIEZpbmQgcmVnaXN0ZXIgZ3JvdXAgZW50cnkuICovCisgICAgcmVnX2dycF9l bnRyeSA9IGh2bV9wdF9maW5kX3JlZ19ncnAoZCwgYWRkcik7CisgICAgaWYgKCByZWdfZ3JwX2Vu dHJ5ID09IE5VTEwgKQorICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisKKyAg ICAvKiBSZWFkIEkvTyBkZXZpY2UgcmVnaXN0ZXIgdmFsdWUuICovCisgICAgc3dpdGNoKCBsZW4g KQorICAgIHsKKyAgICBjYXNlIDE6CisgICAgICAgIHJlYWRfdmFsID0gcGNpX2NvbmZfcmVhZDgo c2VnLCBidXMsIHNsb3QsIGZ1bmMsIGFkZHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6 CisgICAgICAgIHJlYWRfdmFsID0gcGNpX2NvbmZfcmVhZDE2KHNlZywgYnVzLCBzbG90LCBmdW5j LCBhZGRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICByZWFkX3ZhbCA9 IHBjaV9jb25mX3JlYWQzMihzZWcsIGJ1cywgc2xvdCwgZnVuYywgYWRkcik7CisgICAgICAgIGJy ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEJVRygpOworICAgIH0KKyAgICB3Yl9tYXNrID0g MHhGRkZGRkZGRiA+PiAoKDQgLSBsZW4pIDw8IDMpOworCisgICAgLyogQWRqdXN0IHRoZSByZWFk IGFuZCB3cml0ZSB2YWx1ZSB0byBhcHByb3ByaWF0ZSBDRkMtQ0ZGIHdpbmRvdyAqLworICAgIHJl YWRfdmFsIDw8PSAoYWRkciAmIDMpIDw8IDM7CisgICAgdmFsIDw8PSAoYWRkciAmIDMpIDw8IDM7 CisgICAgZW11bF9sZW4gPSBsZW47CisKKyAgICAvKiBMb29wIGFyb3VuZCB0aGUgZ3Vlc3QgcmVx dWVzdGVkIHNpemUgKi8KKyAgICB3aGlsZSAoIGVtdWxfbGVuID4gMCApCisgICAgeworICAgICAg ICAvKiBGaW5kIHJlZ2lzdGVyIGVudHJ5IHRvIGJlIGVtdWxhdGVkICovCisgICAgICAgIHJlZ19l bnRyeSA9IGh2bV9wdF9maW5kX3JlZyhyZWdfZ3JwX2VudHJ5LCBmaW5kX2FkZHIpOworICAgICAg ICBpZiAoIHJlZ19lbnRyeSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZXIgPSByZWdf ZW50cnktPmhhbmRsZXI7CisgICAgICAgICAgICB1aW50MzJfdCByZWFsX29mZnNldCA9IHJlZ19n cnBfZW50cnktPmJhc2Vfb2Zmc2V0ICsgaGFuZGxlci0+b2Zmc2V0OworICAgICAgICAgICAgdWlu dDMyX3QgdmFsaWRfbWFzayA9IDB4RkZGRkZGRkYgPj4gKCg0IC0gZW11bF9sZW4pIDw8IDMpOwor ICAgICAgICAgICAgdWludDhfdCAqcHRyX3ZhbCA9IE5VTEw7CisgICAgICAgICAgICB1aW50MzJf dCB3cF9tYXNrID0gaGFuZGxlci0+ZW11X21hc2sgfCBoYW5kbGVyLT5yb19tYXNrOworCisgICAg ICAgICAgICB2YWxpZF9tYXNrIDw8PSAoZmluZF9hZGRyIC0gcmVhbF9vZmZzZXQpIDw8IDM7Cisg ICAgICAgICAgICBwdHJfdmFsID0gKHVpbnQ4X3QgKikmdmFsICsgKHJlYWxfb2Zmc2V0ICYgMyk7 CisgICAgICAgICAgICBpZiAoICFkLT5wZXJtaXNzaXZlICkKKyAgICAgICAgICAgICAgICB3cF9t YXNrIHw9IGhhbmRsZXItPnJlc19tYXNrOworICAgICAgICAgICAgaWYgKCB3cF9tYXNrID09ICgw eEZGRkZGRkZGID4+ICgoNCAtIGhhbmRsZXItPnNpemUpIDw8IDMpKSApCisgICAgICAgICAgICAg ICAgd2JfbWFzayAmPSB+KCh3cF9tYXNrID4+ICgoZmluZF9hZGRyIC0gcmVhbF9vZmZzZXQpIDw8 IDMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAoKGxlbiAtIGVtdWxfbGVuKSA8 PCAzKSk7CisKKyAgICAgICAgICAgIC8qIERvIGVtdWxhdGlvbiBiYXNlZCBvbiByZWdpc3RlciBz aXplICovCisgICAgICAgICAgICBzd2l0Y2ggKCBoYW5kbGVyLT5zaXplICkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZXItPnUu Yi53cml0ZSApCisgICAgICAgICAgICAgICAgICAgIHJjID0gaGFuZGxlci0+dS5iLndyaXRlKGQs IHJlZ19lbnRyeSwgcHRyX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVhZF92YWwgPj4gKChyZWFsX29mZnNldCAmIDMpIDw8IDMpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZF9tYXNrKTsKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBpZiAo IGhhbmRsZXItPnUudy53cml0ZSApCisgICAgICAgICAgICAgICAgICAgIHJjID0gaGFuZGxlci0+ dS53LndyaXRlKGQsIHJlZ19lbnRyeSwgKHVpbnQxNl90ICopcHRyX3ZhbCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWRfdmFsID4+ICgocmVhbF9vZmZz ZXQgJiAzKSA8PCAzKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZhbGlkX21hc2spOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz ZSA0OgorICAgICAgICAgICAgICAgIGlmICggaGFuZGxlci0+dS5kdy53cml0ZSApCisgICAgICAg ICAgICAgICAgICAgIHJjID0gaGFuZGxlci0+dS5kdy53cml0ZShkLCByZWdfZW50cnksICh1aW50 MzJfdCAqKXB0cl92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocmVhZF92YWwgPj4gKChyZWFsX29mZnNldCAmIDMpIDw8IDMpKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX21hc2spOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHJjIDwgMCAp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcs CisgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgd3JpdGUgZW11bGF0aW9uLCBzaHV0 dGluZyBkb3duIGRvbWFpblxuIik7CisgICAgICAgICAgICAgICAgZG9tYWluX2NyYXNoKGN1cnJl bnQtPmRvbWFpbik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxF OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBDYWxjdWxhdGUgbmV4dCBhZGRyZXNz IHRvIGZpbmQgKi8KKyAgICAgICAgICAgIGVtdWxfbGVuIC09IGhhbmRsZXItPnNpemU7CisgICAg ICAgICAgICBpZiAoIGVtdWxfbGVuID4gMCApCisgICAgICAgICAgICAgICAgZmluZF9hZGRyID0g cmVhbF9vZmZzZXQgKyBoYW5kbGVyLT5zaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg ICAgICAgeworICAgICAgICAgICAgLyogTm90aGluZyB0byBkbyB3aXRoIHBhc3N0aHJvdWdoIHR5 cGUgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgIGlmICggIWQtPnBlcm1pc3NpdmUgKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIHdiX21hc2sgJj0gfigweGZmIDw8ICgobGVuIC0gZW11 bF9sZW4pIDw8IDMpKTsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFVu dXNlZCBCQVJzIHdpbGwgbWFrZSBpdCBoZXJlLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBpc3N1ZQor ICAgICAgICAgICAgICAgICAqIHdhcm5pbmdzIGZvciB3cml0ZXMgdG8gdGhlbSAoYm9ndXMgd3Jp dGVzIGdldCBkZWFsdCB3aXRoCisgICAgICAgICAgICAgICAgICogYWJvdmUpLgorICAgICAgICAg ICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICggaW5kZXggPCAwICkKKyAgICAgICAgICAg ICAgICAgICAgd3BfZmxhZyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbXVs X2xlbi0tOworICAgICAgICAgICAgZmluZF9hZGRyKys7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICAvKiBOZWVkIHRvIHNoaWZ0IGJhY2sgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB4ZW5faG9zdF9w Y2lfc2V0X2Jsb2NrICovCisgICAgdmFsID4+PSAoYWRkciAmIDMpIDw8IDM7CisKKyAgICBpZiAo IHdwX2ZsYWcgJiYgIWQtPnBlcm1pc3NpdmVfd2FybmVkICkKKyAgICB7CisgICAgICAgIGQtPnBl cm1pc3NpdmVfd2FybmVkID0gdHJ1ZTsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcs CisgICAgICAgICAgIldyaXRlLWJhY2sgdG8gdW5rbm93biBmaWVsZCAweCUwMnggKHBhcnRpYWxs eSkgaW5oaWJpdGVkICgweCUwKngpXG4iLAorICAgICAgICAgIGFkZHIsIGxlbiAqIDIsIHdiX21h c2spOworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAiSWYgdGhl IGRldmljZSBkb2Vzbid0IHdvcmssIHRyeSBlbmFibGluZyBwZXJtaXNzaXZlIG1vZGVcbiIpOwor ICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAiKHVuc2FmZSkgYW5k IGlmIGl0IGhlbHBzIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB4ZW4tZGV2ZWxcbiIpOworICAgIH0K KyAgICBmb3IgKCBpbmRleCA9IDA7IHdiX21hc2s7IGluZGV4ICs9IGxlbiApCisgICAgeworICAg ICAgICAvKiBVbmtub3duIHJlZ3MgYXJlIHBhc3NlZCB0aHJvdWdoICovCisgICAgICAgIHdoaWxl ICggISh3Yl9tYXNrICYgMHhmZikgKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRleCsrOwor ICAgICAgICAgICAgd2JfbWFzayA+Pj0gODsKKyAgICAgICAgfQorICAgICAgICBsZW4gPSAwOwor ICAgICAgICBkbyB7CisgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgIHdiX21hc2sgPj49 IDg7CisgICAgICAgIH0gd2hpbGUgKCB3Yl9tYXNrICYgMHhmZiApOworCisgICAgICAgIHN3aXRj aCggbGVuICkKKyAgICAgICAgeworICAgICAgICBjYXNlIDE6CisgICAgICAgIHsKKyAgICAgICAg ICAgIHVpbnQ4X3QgdmFsdWU7CisgICAgICAgICAgICBtZW1jcHkoJnZhbHVlLCAodWludDhfdCAq KSZ2YWwgKyBpbmRleCwgMSk7CisgICAgICAgICAgICBwY2lfY29uZl93cml0ZTgoc2VnLCBidXMs IHNsb3QsIGZ1bmMsIGFkZHIgKyBpbmRleCwgdmFsdWUpOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyAgICAgICAgY2FzZSAyOgorICAgICAgICB7CisgICAgICAgICAgICB1aW50MTZf dCB2YWx1ZTsKKyAgICAgICAgICAgIG1lbWNweSgmdmFsdWUsICh1aW50OF90ICopJnZhbCArIGlu ZGV4LCAyKTsKKyAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlMTYoc2VnLCBidXMsIHNsb3QsIGZ1 bmMsIGFkZHIgKyBpbmRleCwgdmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgY2FzZSA0OgorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZTsK KyAgICAgICAgICAgIG1lbWNweSgmdmFsdWUsICh1aW50OF90ICopJnZhbCArIGluZGV4LCA0KTsK KyAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlMzIoc2VnLCBidXMsIHNsb3QsIGZ1bmMsIGFkZHIg KyBpbmRleCwgdmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgIEJVRygpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy biBYODZFTVVMX09LQVk7Cit9CisKIHN0YXRpYyBpbnQgaHdfZHBjaV9wb3J0aW9fcmVhZChjb25z dCBzdHJ1Y3QgaHZtX2lvX2hhbmRsZXIgKmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDY0X3QgYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICpkYXRhKQogewog ICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOworICAgIHN0cnVjdCBo dm1fcHRfZGV2aWNlICpkZXY7CisgICAgdWludDMyX3QgZGF0YTMyOworICAgIHVpbnQ4X3QgcmVn OworICAgIGludCByYzsKIAogICAgIGlmICggYWRkciA9PSAweGNmOCApCiAgICAgewpAQCAtMjc2 LDYgKzY3MSwyMiBAQCBzdGF0aWMgaW50IGh3X2RwY2lfcG9ydGlvX3JlYWQoY29uc3Qgc3RydWN0 IGh2bV9pb19oYW5kbGVyICpoYW5kbGVyLAogICAgIHNpemUgPSBtaW4oc2l6ZSwgNCAtICgodWlu dDMyX3QpYWRkciAmIDMpKTsKICAgICBpZiAoIHNpemUgPT0gMyApCiAgICAgICAgIHNpemUgPSAy OworCisgICAgcmVhZF9sb2NrKCZjdXJyZC0+YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOworICAg IGRldiA9IGh3X2RwY2lfZ2V0X2RldmljZShjdXJyZCk7CisgICAgaWYgKCBkZXYgIT0gTlVMTCAp CisgICAgeworICAgICAgICByZWcgPSAoY3VycmQtPmFyY2gucGNpX2NmOCAmIDB4ZmMpIHwgKGFk ZHIgJiAweDMpOworICAgICAgICByYyA9IGh2bV9wdF9wY2lfcmVhZF9jb25maWcoZGV2LCByZWcs ICZkYXRhMzIsIHNpemUpOworICAgICAgICBpZiAoIHJjID09IFg4NkVNVUxfT0tBWSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIHJlYWRfdW5sb2NrKCZjdXJyZC0+YXJjaC5odm1fZG9tYWluLnB0 X2xvY2spOworICAgICAgICAgICAgKmRhdGEgPSBkYXRhMzI7CisgICAgICAgICAgICByZXR1cm4g cmM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVhZF91bmxvY2soJmN1cnJkLT5hcmNoLmh2bV9k b21haW4ucHRfbG9jayk7CisKICAgICBpZiAoIHBjaV9jZmdfb2soY3VycmQsIGFkZHIgJiAzLCBz aXplLCBOVUxMKSApCiAgICAgICAgICpkYXRhID0gcGNpX2NvbmZfcmVhZChjdXJyZC0+YXJjaC5w Y2lfY2Y4LCBhZGRyICYgMywgc2l6ZSk7CiAKQEAgLTI4OCw3ICs2OTksMTAgQEAgc3RhdGljIGlu dCBod19kcGNpX3BvcnRpb193cml0ZShjb25zdCBzdHJ1Y3QgaHZtX2lvX2hhbmRsZXIgKmhhbmRs ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGEpCiB7CiAg ICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50LT5kb21haW47CisgICAgc3RydWN0IGh2 bV9wdF9kZXZpY2UgKmRldjsKICAgICB1aW50MzJfdCBkYXRhMzI7CisgICAgdWludDhfdCByZWc7 CisgICAgaW50IHJjOwogCiAgICAgaWYgKCBhZGRyID09IDB4Y2Y4ICkKICAgICB7CkBAIC0zMDIs MTIgKzcxNiwyMTkgQEAgc3RhdGljIGludCBod19kcGNpX3BvcnRpb193cml0ZShjb25zdCBzdHJ1 Y3QgaHZtX2lvX2hhbmRsZXIgKmhhbmRsZXIsCiAgICAgaWYgKCBzaXplID09IDMgKQogICAgICAg ICBzaXplID0gMjsKICAgICBkYXRhMzIgPSBkYXRhOworCisgICAgcmVhZF9sb2NrKCZjdXJyZC0+ YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOworICAgIGRldiA9IGh3X2RwY2lfZ2V0X2RldmljZShj dXJyZCk7CisgICAgaWYgKCBkZXYgIT0gTlVMTCApCisgICAgeworICAgICAgICByZWcgPSAoY3Vy cmQtPmFyY2gucGNpX2NmOCAmIDB4ZmMpIHwgKGFkZHIgJiAweDMpOworICAgICAgICByYyA9IGh2 bV9wdF9wY2lfd3JpdGVfY29uZmlnKGRldiwgcmVnLCBkYXRhMzIsIHNpemUpOworICAgICAgICBp ZiAoIHJjID09IFg4NkVNVUxfT0tBWSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRfdW5s b2NrKCZjdXJyZC0+YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOworICAgICAgICAgICAgcmV0dXJu IHJjOworICAgICAgICB9CisgICAgfQorICAgIHJlYWRfdW5sb2NrKCZjdXJyZC0+YXJjaC5odm1f ZG9tYWluLnB0X2xvY2spOworCiAgICAgaWYgKCBwY2lfY2ZnX29rKGN1cnJkLCBhZGRyICYgMywg c2l6ZSwgJmRhdGEzMikgKQogICAgICAgICBwY2lfY29uZl93cml0ZShjdXJyZC0+YXJjaC5wY2lf Y2Y4LCBhZGRyICYgMywgc2l6ZSwgZGF0YSk7CiAKICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwog fQogCitzdGF0aWMgdm9pZCBodm1fcHRfZnJlZV9kZXZpY2Uoc3RydWN0IGh2bV9wdF9kZXZpY2Ug KmRldikKK3sKKyAgICBzdHJ1Y3QgaHZtX3B0X3JlZ19ncm91cCAqZ3JvdXAsICpnOworCisgICAg bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCBncm91cCwgZywgJmRldi0+cmVnaXN0ZXJfZ3JvdXBz LCBlbnRyaWVzICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBodm1fcHRfcmVnICpyZWcsICpyOwor CisgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSggcmVnLCByLCAmZ3JvdXAtPnJlZ2lz dGVycywgZW50cmllcyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxpc3RfZGVsKCZyZWctPmVu dHJpZXMpOworICAgICAgICAgICAgeGZyZWUocmVnKTsKKyAgICAgICAgfQorCisgICAgICAgIGxp c3RfZGVsKCZncm91cC0+ZW50cmllcyk7CisgICAgICAgIHhmcmVlKGdyb3VwKTsKKyAgICB9CisK KyAgICB4ZnJlZShkZXYpOworfQorCitzdGF0aWMgaW50IGh2bV9wdF9hZGRfcmVnaXN0ZXIoc3Ry dWN0IGh2bV9wdF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgaHZtX3B0X3JlZ19ncm91cCAqZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGh2bV9wdF9yZWdfaGFuZGxlciAqaGFuZGxlcikKK3sKKyAgICBzdHJ1Y3Qg cGNpX2RldiAqcGRldiA9IGRldi0+cGRldjsKKyAgICBzdHJ1Y3QgaHZtX3B0X3JlZyAqcmVnOwor CisgICAgcmVnID0geG1hbGxvYyhzdHJ1Y3QgaHZtX3B0X3JlZyk7CisgICAgaWYgKCByZWcgPT0g TlVMTCApCisgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgbWVtc2V0KHJlZywgMCwgc2l6 ZW9mKCpyZWcpKTsKKyAgICByZWctPmhhbmRsZXIgPSBoYW5kbGVyOworICAgIGlmICggaGFuZGxl ci0+aW5pdCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGhvc3RfbWFzaywgc2l6 ZV9tYXNrLCBkYXRhID0gMDsKKyAgICAgICAgdWludDhfdCBzZWcsIGJ1cywgc2xvdCwgZnVuYzsK KyAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldDsKKyAgICAgICAgdWludDMyX3QgdmFsOworICAg ICAgICBpbnQgcmM7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBlbXVsYXRlIHJlZ2lzdGVyICov CisgICAgICAgIHJjID0gaGFuZGxlci0+aW5pdChkZXYsIHJlZy0+aGFuZGxlciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdyb3VwLT5iYXNlX29mZnNldCArIHJlZy0+aGFuZGxlci0+b2Zm c2V0LCAmZGF0YSk7CisgICAgICAgIGlmICggcmMgPCAwICkKKyAgICAgICAgICAgIHJldHVybiBy YzsKKworICAgICAgICBpZiAoIGRhdGEgPT0gSFZNX1BUX0lOVkFMSURfUkVHICkKKyAgICAgICAg eworICAgICAgICAgICAgeGZyZWUocmVnKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg ICB9CisKKyAgICAgICAgLyogU3luYyB1cCB0aGUgZGF0YSB0byB2YWwgKi8KKyAgICAgICAgb2Zm c2V0ID0gZ3JvdXAtPmJhc2Vfb2Zmc2V0ICsgcmVnLT5oYW5kbGVyLT5vZmZzZXQ7CisgICAgICAg IHNpemVfbWFzayA9IDB4RkZGRkZGRkYgPj4gKCg0IC0gcmVnLT5oYW5kbGVyLT5zaXplKSA8PCAz KTsKKworICAgICAgICBzZWcgPSBwZGV2LT5zZWc7CisgICAgICAgIGJ1cyA9IHBkZXYtPmJ1czsK KyAgICAgICAgc2xvdCA9IFBDSV9TTE9UKHBkZXYtPmRldmZuKTsKKyAgICAgICAgZnVuYyA9IFBD SV9GVU5DKHBkZXYtPmRldmZuKTsKKworICAgICAgICBzd2l0Y2ggKCByZWctPmhhbmRsZXItPnNp emUgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHZhbCA9IHBjaV9j b25mX3JlYWQ4KHNlZywgYnVzLCBzbG90LCBmdW5jLCBvZmZzZXQpOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHZhbCA9IHBjaV9jb25mX3JlYWQxNihz ZWcsIGJ1cywgc2xvdCwgZnVuYywgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIDQ6CisgICAgICAgICAgICB2YWwgPSBwY2lfY29uZl9yZWFkMzIoc2VnLCBidXMsIHNs b3QsIGZ1bmMsIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK KyAgICAgICAgICAgIEJVRygpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICog U2V0IGJpdHMgaW4gZW11X21hc2sgYXJlIHRoZSBvbmVzIHdlIGVtdWxhdGUuIFRoZSByZWcgc2hh bGwKKyAgICAgICAgICogY29udGFpbiB0aGUgZW11bGF0ZWQgdmlldyBvZiB0aGUgZ3Vlc3QgLSB0 aGVyZWZvcmUgd2UgZmxpcAorICAgICAgICAgKiB0aGUgbWFzayB0byBtYXNrIG91dCB0aGUgaG9z dCB2YWx1ZXMgKHdoaWNoIHJlZyBpbml0aWFsbHkKKyAgICAgICAgICogaGFzKS4KKyAgICAgICAg ICovCisgICAgICAgIGhvc3RfbWFzayA9IHNpemVfbWFzayAmIH5yZWctPmhhbmRsZXItPmVtdV9t YXNrOworCisgICAgICAgIGlmICggKGRhdGEgJiBob3N0X21hc2spICE9ICh2YWwgJiBob3N0X21h c2spICkKKyAgICAgICAgeworICAgICAgICAgICAgdWludDMyX3QgbmV3X3ZhbDsKKworICAgICAg ICAgICAgLyogTWFzayBvdXQgaG9zdCAoaW5jbHVkaW5nIHBhc3Qgc2l6ZSkuICovCisgICAgICAg ICAgICBuZXdfdmFsID0gdmFsICYgaG9zdF9tYXNrOworICAgICAgICAgICAgLyogTWVyZ2UgZW11 bGF0ZWQgb25lcyAoZXhjbHVkaW5nIHRoZSBub24tZW11bGF0ZWQgb25lcykuICovCisgICAgICAg ICAgICBuZXdfdmFsIHw9IGRhdGEgJiBob3N0X21hc2s7CisgICAgICAgICAgICAvKgorICAgICAg ICAgICAgICogTGVhdmUgaW50YWN0IGhvc3QgYW5kIGVtdWxhdGVkIHZhbHVlcyBwYXN0IHRoZSBz aXplIC0KKyAgICAgICAgICAgICAqIGV2ZW4gdGhvdWdoIHdlIGRvIG5vdCBjYXJlIGFzIHdlIHdy aXRlIHBlciByZWctPnNpemUKKyAgICAgICAgICAgICAqIGdyYW51bGFyaXR5LCBidXQgZm9yIHRo ZSBsb2dnaW5nIGJlbG93IGxldHMgaGF2ZSB0aGUKKyAgICAgICAgICAgICAqIHByb3BlciB2YWx1 ZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbmV3X3ZhbCB8PSAoKHZhbCB8IGRhdGEp KSAmIH5zaXplX21hc2s7CisgICAgICAgICAgICBwcmludGtfcGRldihwZGV2LCBYRU5MT0dfRVJS LAorIm9mZnNldCAweCUwNHggbWlzbWF0Y2ghIEVtdWxhdGVkPTB4JTA0eCwgaG9zdD0weCUwNHgs IHN5bmNpbmcgdG8gMHglMDR4LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwg ZGF0YSwgdmFsLCBuZXdfdmFsKTsKKyAgICAgICAgICAgIHZhbCA9IG5ld192YWw7CisgICAgICAg IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsID0gZGF0YTsKKworICAgICAgICBpZiAo IHZhbCAmIH5zaXplX21hc2sgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGtfcGRldihw ZGV2LCBYRU5MT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAiT2Zmc2V0IDB4JTA0eDoweCUw NHggZXhwYW5kcyBwYXN0IHJlZ2lzdGVyIHNpemUoJWQpIVxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgIG9mZnNldCwgdmFsLCByZWctPmhhbmRsZXItPnNpemUpOworICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKworICAgICAgICByZWctPnZhbC5kd29yZCA9IHZhbDsK KyAgICB9CisgICAgbGlzdF9hZGRfdGFpbCgmcmVnLT5lbnRyaWVzLCAmZ3JvdXAtPnJlZ2lzdGVy cyk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBodm1fcHRfaGFuZGxlcl9p bml0ICpod2RvbV9wdF9oYW5kbGVyc1tdID0geworfTsKKworaW50IGh3ZG9tX2FkZF9kZXZpY2Uo c3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBkZXYtPmRv bWFpbjsKKyAgICBzdHJ1Y3QgaHZtX3B0X2RldmljZSAqZGV2OworICAgIGludCBqLCBpLCByYzsK KworICAgIEFTU0VSVCggaXNfaGFyZHdhcmVfZG9tYWluKGQpICk7CisgICAgQVNTRVJUKCBwY2lk ZXZzX2xvY2tlZCgpICk7CisKKyAgICBkZXYgPSB4bWFsbG9jKHN0cnVjdCBodm1fcHRfZGV2aWNl KTsKKyAgICBpZiAoIGRldiA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAg ICBtZW1zZXQoZGV2LCAwICwgc2l6ZW9mKCpkZXYpKTsKKworICAgIGRldi0+cGRldiA9IHBkZXY7 CisgICAgSU5JVF9MSVNUX0hFQUQoJmRldi0+cmVnaXN0ZXJfZ3JvdXBzKTsKKworICAgIGRldi0+ cGVybWlzc2l2ZSA9IG9wdF9kb20wcGVybWlzc2l2ZTsKKworICAgIGZvciAoIGogPSAwOyBqIDwg QVJSQVlfU0laRShod2RvbV9wdF9oYW5kbGVycyk7IGorKyApCisgICAgeworICAgICAgICBzdHJ1 Y3QgaHZtX3B0X2hhbmRsZXJfaW5pdCAqaGFuZGxlcl9pbml0ID0gaHdkb21fcHRfaGFuZGxlcnNb al07CisgICAgICAgIHN0cnVjdCBodm1fcHRfcmVnX2dyb3VwICpncm91cDsKKworICAgICAgICBn cm91cCA9IHhtYWxsb2Moc3RydWN0IGh2bV9wdF9yZWdfZ3JvdXApOworICAgICAgICBpZiAoIGdy b3VwID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICB4ZnJlZShkZXYpOworICAgICAg ICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKyAgICAgICAgSU5JVF9MSVNUX0hFQUQo Jmdyb3VwLT5yZWdpc3RlcnMpOworCisgICAgICAgIHJjID0gaGFuZGxlcl9pbml0LT5pbml0KGRl diwgZ3JvdXApOworICAgICAgICBpZiAoIHJjID09IDAgKQorICAgICAgICB7CisgICAgICAgICAg ICBmb3IgKCBpID0gMDsgaGFuZGxlcl9pbml0LT5oYW5kbGVyc1tpXS5zaXplICE9IDA7IGkrKyAp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJjOworCisgICAgICAgICAgICAg ICAgcmMgPSBodm1fcHRfYWRkX3JlZ2lzdGVyKGRldiwgZ3JvdXAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGVyX2luaXQtPmhhbmRsZXJzW2ldKTsKKyAg ICAgICAgICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgIHByaW50a19wZGV2KHBkZXYsIFhFTkxPR19FUlIsICJlcnJvciBhZGRpbmcgcmVnaXN0 ZXI6ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyk7CisgICAgICAg ICAgICAgICAgICAgIGh2bV9wdF9mcmVlX2RldmljZShkZXYpOworICAgICAgICAgICAgICAgICAg ICByZXR1cm4gcmM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg ICAgICBsaXN0X2FkZF90YWlsKCZncm91cC0+ZW50cmllcywgJmRldi0+cmVnaXN0ZXJfZ3JvdXBz KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICB4ZnJlZShncm91cCk7Cisg ICAgfQorCisgICAgd3JpdGVfbG9jaygmZC0+YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOworICAg IGxpc3RfYWRkX3RhaWwoJmRldi0+ZW50cmllcywgJmQtPmFyY2guaHZtX2RvbWFpbi5wdF9kZXZp Y2VzKTsKKyAgICB3cml0ZV91bmxvY2soJmQtPmFyY2guaHZtX2RvbWFpbi5wdF9sb2NrKTsKKyAg ICBwcmludGtfcGRldihwZGV2LCBYRU5MT0dfREVCVUcsICJhZGRlZCBmb3IgcGFzcy10aHJvdWdo XG4iKTsKKworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGh2bV9pb19v cHMgZHBjaV9wb3J0aW9fb3BzID0gewogICAgIC5hY2NlcHQgPSBkcGNpX3BvcnRpb19hY2NlcHQs CiAgICAgLnJlYWQgPSBkcGNpX3BvcnRpb19yZWFkLApkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUv YXNtLXg4Ni9odm0vZG9tYWluLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9kb21haW4uaApp bmRleCBmMzRkNzg0Li4xYjFhNTJmIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2 bS9kb21haW4uaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9kb21haW4uaApAQCAtMTUy LDYgKzE1MiwxMCBAQCBzdHJ1Y3QgaHZtX2RvbWFpbiB7CiAgICAgICAgIHN0cnVjdCB2bXhfZG9t YWluIHZteDsKICAgICAgICAgc3RydWN0IHN2bV9kb21haW4gc3ZtOwogICAgIH07CisKKyAgICAv KiBMaXN0IG9mIHBhc3NlZC10aHJvdWdoIGRldmljZXMgKGh3IGRvbWFpbiBvbmx5KS4gKi8KKyAg ICBzdHJ1Y3QgbGlzdF9oZWFkIHB0X2RldmljZXM7CisgICAgcndsb2NrX3QgcHRfbG9jazsKIH07 CiAKICNkZWZpbmUgaGFwX2VuYWJsZWQoZCkgICgoZCktPmFyY2guaHZtX2RvbWFpbi5oYXBfZW5h YmxlZCkKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmggYi94ZW4vaW5j bHVkZS9hc20teDg2L2h2bS9pby5oCmluZGV4IGU5YjNmODMuLjgwZjgzMGQgMTAwNjQ0Ci0tLSBh L3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9o dm0vaW8uaApAQCAtMTUzLDYgKzE1MywxODIgQEAgZXh0ZXJuIHZvaWQgaHZtX2RwY2lfbXNpX2Vv aShzdHJ1Y3QgZG9tYWluICpkLCBpbnQgdmVjdG9yKTsKIAogdm9pZCByZWdpc3Rlcl9kcGNpX3Bv cnRpb19oYW5kbGVyKHN0cnVjdCBkb21haW4gKmQpOwogCisvKiBTdHJ1Y3R1cmVzIGZvciBwY2kt cGFzc3Rocm91Z2ggc3RhdGUgYW5kIGhhbmRsZXJzLiAqLworc3RydWN0IGh2bV9wdF9kZXZpY2U7 CitzdHJ1Y3QgaHZtX3B0X3JlZ19oYW5kbGVyOworc3RydWN0IGh2bV9wdF9yZWc7CitzdHJ1Y3Qg aHZtX3B0X3JlZ19ncm91cDsKKworLyogUmV0dXJuIGNvZGUgd2hlbiByZWdpc3RlciBzaG91bGQg YmUgaWdub3JlZC4gKi8KKyNkZWZpbmUgSFZNX1BUX0lOVkFMSURfUkVHIDB4RkZGRkZGRkYKKwor LyogZnVuY3Rpb24gdHlwZSBmb3IgY29uZmlnIHJlZyAqLwordHlwZWRlZiBpbnQgKCpodm1fcHRf Y29uZl9yZWdfaW5pdCkKKyAgICAoc3RydWN0IGh2bV9wdF9kZXZpY2UgKiwgc3RydWN0IGh2bV9w dF9yZWdfaGFuZGxlciAqLCB1aW50MzJfdCByZWFsX29mZnNldCwKKyAgICAgdWludDMyX3QgKmRh dGEpOworCit0eXBlZGVmIGludCAoKmh2bV9wdF9jb25mX2R3b3JkX3dyaXRlKQorICAgIChzdHJ1 Y3QgaHZtX3B0X2RldmljZSAqLCBzdHJ1Y3QgaHZtX3B0X3JlZyAqY2ZnX2VudHJ5LAorICAgICB1 aW50MzJfdCAqdmFsLCB1aW50MzJfdCBkZXZfdmFsdWUsIHVpbnQzMl90IHZhbGlkX21hc2spOwor dHlwZWRlZiBpbnQgKCpodm1fcHRfY29uZl93b3JkX3dyaXRlKQorICAgIChzdHJ1Y3QgaHZtX3B0 X2RldmljZSAqLCBzdHJ1Y3QgaHZtX3B0X3JlZyAqY2ZnX2VudHJ5LAorICAgICB1aW50MTZfdCAq dmFsLCB1aW50MTZfdCBkZXZfdmFsdWUsIHVpbnQxNl90IHZhbGlkX21hc2spOwordHlwZWRlZiBp bnQgKCpodm1fcHRfY29uZl9ieXRlX3dyaXRlKQorICAgIChzdHJ1Y3QgaHZtX3B0X2RldmljZSAq LCBzdHJ1Y3QgaHZtX3B0X3JlZyAqY2ZnX2VudHJ5LAorICAgICB1aW50OF90ICp2YWwsIHVpbnQ4 X3QgZGV2X3ZhbHVlLCB1aW50OF90IHZhbGlkX21hc2spOwordHlwZWRlZiBpbnQgKCpodm1fcHRf Y29uZl9kd29yZF9yZWFkKQorICAgIChzdHJ1Y3QgaHZtX3B0X2RldmljZSAqLCBzdHJ1Y3QgaHZt X3B0X3JlZyAqY2ZnX2VudHJ5LAorICAgICB1aW50MzJfdCAqdmFsLCB1aW50MzJfdCB2YWxpZF9t YXNrKTsKK3R5cGVkZWYgaW50ICgqaHZtX3B0X2NvbmZfd29yZF9yZWFkKQorICAgIChzdHJ1Y3Qg aHZtX3B0X2RldmljZSAqLCBzdHJ1Y3QgaHZtX3B0X3JlZyAqY2ZnX2VudHJ5LAorICAgICB1aW50 MTZfdCAqdmFsLCB1aW50MTZfdCB2YWxpZF9tYXNrKTsKK3R5cGVkZWYgaW50ICgqaHZtX3B0X2Nv bmZfYnl0ZV9yZWFkKQorICAgIChzdHJ1Y3QgaHZtX3B0X2RldmljZSAqLCBzdHJ1Y3QgaHZtX3B0 X3JlZyAqY2ZnX2VudHJ5LAorICAgICB1aW50OF90ICp2YWwsIHVpbnQ4X3QgdmFsaWRfbWFzayk7 CisKK3R5cGVkZWYgaW50ICgqaHZtX3B0X2dyb3VwX2luaXQpCisgICAgKHN0cnVjdCBodm1fcHRf ZGV2aWNlICosIHN0cnVjdCBodm1fcHRfcmVnX2dyb3VwICopOworCisvKgorICogRW11bGF0ZWQg cmVnaXN0ZXIgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBzaG91bGQgYmUgc2hhcmVkIGJldHdl ZW4gYWxsIHRoZSBjb25zdW1lcnMgdGhhdCB0cmFwIG9uIGFjY2Vzc2VzCisgKiB0byBjZXJ0YWlu IFBDSSByZWdpc3RlcnMuCisgKi8KK3N0cnVjdCBodm1fcHRfcmVnX2hhbmRsZXIgeworICAgIHVp bnQzMl90IG9mZnNldDsKKyAgICB1aW50MzJfdCBzaXplOworICAgIHVpbnQzMl90IGluaXRfdmFs OworICAgIC8qIHJlZyByZXNlcnZlZCBmaWVsZCBtYXNrIChPTjpyZXNlcnZlZCwgT0ZGOmRlZmlu ZWQpICovCisgICAgdWludDMyX3QgcmVzX21hc2s7CisgICAgLyogcmVnIHJlYWQgb25seSBmaWVs ZCBtYXNrIChPTjpSTy9ST1MsIE9GRjpvdGhlcikgKi8KKyAgICB1aW50MzJfdCByb19tYXNrOwor ICAgIC8qIHJlZyByZWFkL3dyaXRlLTEtY2xlYXIgZmllbGQgbWFzayAoT046UlcxQy9SVzFDUywg T0ZGOm90aGVyKSAqLworICAgIHVpbnQzMl90IHJ3MWNfbWFzazsKKyAgICAvKiByZWcgZW11bGF0 ZSBmaWVsZCBtYXNrIChPTjplbXUsIE9GRjpwYXNzdGhyb3VnaCkgKi8KKyAgICB1aW50MzJfdCBl bXVfbWFzazsKKyAgICBodm1fcHRfY29uZl9yZWdfaW5pdCBpbml0OworICAgIC8qIHJlYWQvd3Jp dGUgZnVuY3Rpb24gcG9pbnRlcgorICAgICAqIGZvciBkb3VibGVfd29yZC93b3JkL2J5dGUgc2l6 ZSAqLworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGh2bV9wdF9j b25mX2R3b3JkX3dyaXRlIHdyaXRlOworICAgICAgICAgICAgaHZtX3B0X2NvbmZfZHdvcmRfcmVh ZCByZWFkOworICAgICAgICB9IGR3OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgaHZt X3B0X2NvbmZfd29yZF93cml0ZSB3cml0ZTsKKyAgICAgICAgICAgIGh2bV9wdF9jb25mX3dvcmRf cmVhZCByZWFkOworICAgICAgICB9IHc7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBo dm1fcHRfY29uZl9ieXRlX3dyaXRlIHdyaXRlOworICAgICAgICAgICAgaHZtX3B0X2NvbmZfYnl0 ZV9yZWFkIHJlYWQ7CisgICAgICAgIH0gYjsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3QgaHZtX3B0 X2hhbmRsZXJfaW5pdCB7CisgICAgc3RydWN0IGh2bV9wdF9yZWdfaGFuZGxlciAqaGFuZGxlcnM7 CisgICAgaHZtX3B0X2dyb3VwX2luaXQgaW5pdDsKK307CisKKy8qCisgKiBFbXVsYXRlZCByZWdp c3RlciB2YWx1ZS4KKyAqCisgKiBUaGlzIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiBlYWNoIHNw ZWNpZmljIGVtdWxhdGVkIHJlZ2lzdGVyLgorICovCitzdHJ1Y3QgaHZtX3B0X3JlZyB7CisgICAg c3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOworICAgIHN0cnVjdCBodm1fcHRfcmVnX2hhbmRsZXIg KmhhbmRsZXI7CisgICAgdW5pb24geworICAgICAgICB1aW50OF90ICAgYnl0ZTsKKyAgICAgICAg dWludDE2X3QgIHdvcmQ7CisgICAgICAgIHVpbnQzMl90ICBkd29yZDsKKyAgICB9IHZhbDsKK307 CisKKy8qCisgKiBFbXVsYXRlZCByZWdpc3RlciBncm91cC4KKyAqCisgKiBJbiBvcmRlciB0byBz cGVlZCB1cCAoYW5kIGxvZ2ljYWxseSBncm91cCkgZW11bGF0ZWQgcmVnaXN0ZXJzIHNlYXJjaCwK KyAqIGdyb3VwcyBhcmUgdXNlZCB0aGF0IHJlcHJlc2VudCBzcGVjaWZpYyBlbXVsYXRlZCBmZWF0 dXJlcywgbGlrZSBNU0kuCisgKi8KK3N0cnVjdCBodm1fcHRfcmVnX2dyb3VwIHsKKyAgICBzdHJ1 Y3QgbGlzdF9oZWFkIGVudHJpZXM7CisgICAgdWludDMyX3QgYmFzZV9vZmZzZXQ7CisgICAgdWlu dDhfdCBzaXplOworICAgIHN0cnVjdCBsaXN0X2hlYWQgcmVnaXN0ZXJzOworfTsKKworLyoKKyAq IEd1ZXN0IE1TSSBpbmZvcm1hdGlvbi4KKyAqCisgKiBNU0kgdmFsdWVzIHNldCBieSB0aGUgZ3Vl c3QuCisgKi8KK3N0cnVjdCBodm1fcHRfbXNpIHsKKyAgICB1aW50MTZfdCBmbGFnczsKKyAgICB1 aW50MzJfdCBhZGRyX2xvOyAgLyogZ3Vlc3QgbWVzc2FnZSBhZGRyZXNzICovCisgICAgdWludDMy X3QgYWRkcl9oaTsgIC8qIGd1ZXN0IG1lc3NhZ2UgdXBwZXIgYWRkcmVzcyAqLworICAgIHVpbnQx Nl90IGRhdGE7ICAgICAvKiBndWVzdCBtZXNzYWdlIGRhdGEgKi8KKyAgICB1aW50MzJfdCBjdHJs X29mZnNldDsgLyogc2F2ZWQgY29udHJvbCBvZmZzZXQgKi8KKyAgICBpbnQgcGlycTsgICAgICAg ICAgLyogZ3Vlc3QgcGlycSBjb3JyZXNwb25kaW5nICovCisgICAgYm9vbF90IGluaXRpYWxpemVk OyAgLyogd2hlbiBndWVzdCBNU0kgaXMgaW5pdGlhbGl6ZWQgKi8KKyAgICBib29sX3QgbWFwcGVk OyAgICAgICAvKiB3aGVuIHBpcnEgaXMgbWFwcGVkICovCit9OworCisvKgorICogR3Vlc3QgcGFz c2VkLXRocm91Z2ggUENJIGRldmljZS4KKyAqLworc3RydWN0IGh2bV9wdF9kZXZpY2UgeworICAg IHN0cnVjdCBsaXN0X2hlYWQgZW50cmllczsKKworICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2Owor CisgICAgYm9vbF90IHBlcm1pc3NpdmU7CisgICAgYm9vbF90IHBlcm1pc3NpdmVfd2FybmVkOwor CisgICAgLyogTVNJIHN0YXR1cy4gKi8KKyAgICBzdHJ1Y3QgaHZtX3B0X21zaSBtc2k7CisKKyAg ICBzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lzdGVyX2dyb3VwczsKK307CisKKy8qCisgKiBUaGUgaGll cmFyY2h5IG9mIHRoZSBhYm92ZSBzdHJ1Y3R1cmVzIGlzIHRoZSBmb2xsb3dpbmc6CisgKgorICog Ky0tLS0tLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAg ICAgICAgIHwgZW50cmllcyB8ICAgICAgICAgICAgICAgfCAuLi4KKyAqIHwgaHZtX3B0X2Rldmlj ZSArLS0tLS0tLS0tKyBodm1fcHRfZGV2aWNlICstLS0tKworICogfCAgICAgICAgICAgICAgIHwg ICAgICAgICB8ICAgICAgICAgICAgICAgfAorICogKy0rLS0tLS0tLS0tLS0tLSsgICAgICAgICAr LS0tLS0tLS0tLS0tLS0tKworICogICB8CisgKiAgIHwgcmVnaXN0ZXJfZ3JvdXBzCisgKiAgIHwK KyAqICstdi0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCisg KiB8ICAgICAgICAgICAgICAgICAgfCBlbnRyaWVzICB8ICAgICAgICAgICAgICAgICAgfCAuLi4K KyAqIHwgaHZtX3B0X3JlZ19ncm91cCArLS0tLS0tLS0tLSsgaHZtX3B0X3JlZ19ncm91cCArLS0t LSsKKyAqIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8 CisgKiArLSstLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKwor ICogICB8CisgKiAgIHwgcmVnaXN0ZXJzCisgKiAgIHwKKyAqICstdi0tLS0tLS0tLS0rICAgICAg ICAgICAgKy0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICB8IGVudHJpZXMgICAgfCAgICAg ICAgICAgIHwgLi4uCisgKiB8IGh2bV9wdF9yZWcgKy0tLS0tLS0tLS0tLSsgaHZtX3B0X3JlZyAr LS0tLSsKKyAqIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKyAqICst Ky0tLS0tLS0tLS0rICAgICAgICAgICAgKy0rLS0tLS0tLS0tLSsKKyAqICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICB8CisgKiAgIHwgaGFuZGxlciAgICAgICAgICAgICAgICAgfCBoYW5kbGVy CisgKiAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy12LS0tLS0tLS0tLS0tLS0t LS0tKyAgICArLXYtLS0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICB8 ICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgaHZtX3B0X3JlZ19oYW5kbGVyIHwgICAg fCBodm1fcHRfcmVnX2hhbmRsZXIgfAorICogfCAgICAgICAgICAgICAgICAgICAgfCAgICB8ICAg ICAgICAgICAgICAgICAgICB8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICstLS0tLS0t LS0tLS0tLS0tLS0tLSsKKyAqLworCisvKiBIZWxwZXIgdG8gYWRkIHBhc3NlZC10aHJvdWdoIGRl dmljZXMgdG8gdGhlIGhhcmR3YXJlIGRvbWFpbi4gKi8KK2ludCBod2RvbV9hZGRfZGV2aWNlKHN0 cnVjdCBwY2lfZGV2ICpwZGV2KTsKKwogI2VuZGlmIC8qIF9fQVNNX1g4Nl9IVk1fSU9fSF9fICov CiAKIApkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL3BjaS5oIGIveGVuL2luY2x1ZGUveGVu L3BjaS5oCmluZGV4IGYxOTE3NzMuLmIyMWE4OTEgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL3hl bi9wY2kuaAorKysgYi94ZW4vaW5jbHVkZS94ZW4vcGNpLmgKQEAgLTkwLDYgKzkwLDExIEBAIHN0 cnVjdCBwY2lfZGV2IHsKICAgICB1NjQgdmZfcmxlbls2XTsKIH07CiAKKy8qIEhlbHBlciBmb3Ig cHJpbnRpbmcgcGNpX2RldiByZWxhdGVkIG1lc3NhZ2VzLiAqLworI2RlZmluZSBwcmludGtfcGRl dihwZGV2LCBsdmwsIGZtdCwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgcHJpbnRrKGx2bCAiUENJICUwNHg6JTAyeDolMDJ4LiV1OiAiIGZtdCwgcGRldi0+c2Vn LCBwZGV2LT5idXMsICAgICAgXAorICAgICAgICAgICBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIFBD SV9GVU5DKHBkZXYtPmRldmZuKSwgIyNfX1ZBX0FSR1NfXykKKwogI2RlZmluZSBmb3JfZWFjaF9w ZGV2KGRvbWFpbiwgcGRldikgXAogICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocGRldiwgJihkb21h aW4tPmFyY2gucGRldl9saXN0KSwgZG9tYWluX2xpc3QpCiAKLS0gCjIuNy40IChBcHBsZSBHaXQt NjYpCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVu LWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3Rz Lnhlbi5vcmcveGVuLWRldmVsCg==