From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v7,1/2] dmaengine: fsl-edma: extract common fsl-edma code (no changes in behavior intended) From: Angelo Dureghello Message-Id: <20180703103716.20482-1-angelo@sysam.it> Date: Tue, 3 Jul 2018 12:37:15 +0200 To: vinod.koul@linaro.org Cc: dmaengine@vger.kernel.org, linux-m68k@vger.kernel.org, Angelo Dureghello List-ID: VGhpcyBwYXRjaCBhZGRzIGEgbmV3IGZzbC1lZG1hLWNvbW1vbiBtb2R1bGUgdG8gYWxsb3cgbmV3 Cm1jZi1lZG1hIG1vZHVsZSBjb2RlIHRvIHVzZSBtb3N0IG9mIHRoZSBmc2wtZWRtYSBjb2RlLgoK RHVlIHRvIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiBDb2xkRmlyZSBlZG1hICg2NCBjaGFubmVs cykgYW5kCmZzbC1lZG1hICgzMiBjaGFubmVscyksIGFzIHJlZ2lzdGVyIHNldCBvZmZzZXRzIGFu ZCBzb21lIG90aGVyCnBvaW50cyBhcyB0aGUgZGlmZmVyZW50IGludGVycnVwdCBvcmdhbml6YXRp b24gYW5kIG90aGVyIG1pbm9yCnRoaW5ncywgYSBjb21tb24gbW9kdWxlIGNhbiBjb2xsZWN0IG1v c3Qgb2YgdGhlIGNvZGUgZm9yIGJvdGgKMzIgYW5kIDY0IGNoYW5uZWwgZWRtYSBtb2R1bGUgdmVy c2lvbnMuCgpTaWduZWQtb2ZmLWJ5OiBBbmdlbG8gRHVyZWdoZWxsbyA8YW5nZWxvQHN5c2FtLml0 PgotLS0KQ2hhbmdlcyBmb3IgdjI6Ci0gcGF0Y2ggc3BsaXR0ZWQgaW50byA0Ci0gYWRkIGZzbC1l ZG1hLWNvbW1vbiBtb2R1bGUKCkNoYW5nZXMgZm9yIHYzOgpub25lCgpDaGFuZ2VzIGZvciB2NDoK LSBwYXRjaCBzaW1wbGlmaWVkIGZyb20gNC80IGludG8gMi8yCi0gY29sbGVjdGluZyBhbGwgdGhl IGZzbC1lZG1hLXJlbGF0ZWQgY2hhbmdlcwoKQ2hhbmdlcyBmb3IgdjU6Ci0gYWRkIEVYUE9SVF9T WU1CT0xfR1BMIGZvciBhbGwgY29tbW9uIGZ1bmN0aW9ucwoKQ2hhbmdlcyBmb3IgdjY6Ci0gYWRq dXN0ZWQgY29tbWVudCBoZWFkZXIKLSB3ZSBuZWVkIHRvIGZyZWUgdGhlIGludGVycnVwdHMgYXQg cmVtb3ZlKCksIHNvIHJlbW92ZWQgYWxsIGRldm1fCiAgaW50ZXJydXB0IHJlbGF0ZWQgY2FsbHMK CkNoYW5nZXMgZm9yIHY3OgotIGZpeCBzcGFyc2UgZXJyb3JzCi0gZml4IGFkZGl0aW9uYWwgc3Bh Y2UgaW4gaGVhZGVyIGZpbGUgZW5kCi0tLQogZHJpdmVycy9kbWEvTWFrZWZpbGUgICAgICAgICAg fCAgIDIgKy0KIGRyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5jIHwgNjcwICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmggfCAxNjEg KysrKysrKysKIGRyaXZlcnMvZG1hL2ZzbC1lZG1hLmMgICAgICAgIHwgNzUzICsrLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgODcwIGluc2VydGlvbnMo KyksIDcxNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9mc2wt ZWRtYS1jb21tb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL2ZzbC1lZG1hLWNv bW1vbi5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9N YWtlZmlsZQppbmRleCAyMDNhOTlkNjgzMTUuLjY2MDIyZjU5ZmNhNCAxMDA2NDQKLS0tIGEvZHJp dmVycy9kbWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9kbWEvTWFrZWZpbGUKQEAgLTMxLDcgKzMx LDcgQEAgb2JqLSQoQ09ORklHX0RXX0FYSV9ETUFDKSArPSBkdy1heGktZG1hYy8KIG9iai0kKENP TkZJR19EV19ETUFDX0NPUkUpICs9IGR3Lwogb2JqLSQoQ09ORklHX0VQOTNYWF9ETUEpICs9IGVw OTN4eF9kbWEubwogb2JqLSQoQ09ORklHX0ZTTF9ETUEpICs9IGZzbGRtYS5vCi1vYmotJChDT05G SUdfRlNMX0VETUEpICs9IGZzbC1lZG1hLm8KK29iai0kKENPTkZJR19GU0xfRURNQSkgKz0gZnNs LWVkbWEubyBmc2wtZWRtYS1jb21tb24ubwogb2JqLSQoQ09ORklHX0ZTTF9SQUlEKSArPSBmc2xf cmFpZC5vCiBvYmotJChDT05GSUdfSFNVX0RNQSkgKz0gaHN1Lwogb2JqLSQoQ09ORklHX0lNR19N RENfRE1BKSArPSBpbWctbWRjLWRtYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2wtZWRt YS1jb21tb24uYyBiL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzJlNTJjMWI1NTI3Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMKQEAgLTAsMCArMSw2NzAgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEz LTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYworLy8gQ29weXJpZ2h0IChjKSAyMDE3 IFN5c2FtLCBBbmdlbG8gRHVyZWdoZWxsbyAgPGFuZ2Vsb0BzeXNhbS5pdD4KKworI2luY2x1ZGUg PGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJm c2wtZWRtYS1jb21tb24uaCIKKworI2RlZmluZSBFRE1BX0NSCQkJMHgwMAorI2RlZmluZSBFRE1B X0VTCQkJMHgwNAorI2RlZmluZSBFRE1BX0VSUQkJMHgwQworI2RlZmluZSBFRE1BX0VFSQkJMHgx NAorI2RlZmluZSBFRE1BX0NFRUkJCTB4MTgKKyNkZWZpbmUgRURNQV9TRUVJCQkweDE5CisjZGVm aW5lIEVETUFfQ0VSUQkJMHgxQQorI2RlZmluZSBFRE1BX1NFUlEJCTB4MUIKKyNkZWZpbmUgRURN QV9DSU5UCQkweDFGCisjZGVmaW5lIEVETUFfQ0VSUgkJMHgxRQorI2RlZmluZSBFRE1BX1NTUlQJ CTB4MUQKKyNkZWZpbmUgRURNQV9DRE5FCQkweDFDCisjZGVmaW5lIEVETUFfSU5UUgkJMHgyNAor I2RlZmluZSBFRE1BX0VSUgkJMHgyQworCisjZGVmaW5lIEVETUE2NF9FUlFICQkweDA4CisjZGVm aW5lIEVETUE2NF9FRUlICQkweDEwCisjZGVmaW5lIEVETUE2NF9TRVJRCQkweDE4CisjZGVmaW5l IEVETUE2NF9DRVJRCQkweDE5CisjZGVmaW5lIEVETUE2NF9TRUVJCQkweDFhCisjZGVmaW5lIEVE TUE2NF9DRUVJCQkweDFiCisjZGVmaW5lIEVETUE2NF9DSU5UCQkweDFjCisjZGVmaW5lIEVETUE2 NF9DRVJSCQkweDFkCisjZGVmaW5lIEVETUE2NF9TU1JUCQkweDFlCisjZGVmaW5lIEVETUE2NF9D RE5FCQkweDFmCisjZGVmaW5lIEVETUE2NF9JTlRICQkweDIwCisjZGVmaW5lIEVETUE2NF9JTlRM CQkweDI0CisjZGVmaW5lIEVETUE2NF9FUlJICQkweDI4CisjZGVmaW5lIEVETUE2NF9FUlJMCQkw eDJjCisKKyNkZWZpbmUgRURNQV9UQ0QJCTB4MTAwMAorI2RlZmluZSBFRE1BX1RDRF9TSVpFCQkz MgorI2RlZmluZSBFRE1BX1RDRF9NRU1fQUxJR04JRURNQV9UQ0RfU0laRQorCisjZGVmaW5lIEVE TUFfVENEX0FUVFJfU1NJWkVfOEJJVAkwCisjZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVfMTZC SVQJQklUKDApCisjZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVfMzJCSVQJQklUKDEpCisjZGVm aW5lIEVETUFfVENEX0FUVFJfU1NJWkVfNjRCSVQJKEJJVCgxKSB8IEJJVCgwKSkKKyNkZWZpbmUg RURNQV9UQ0RfQVRUUl9TU0laRV8xNkJZVEUJQklUKDIpCisjZGVmaW5lIEVETUFfVENEX0FUVFJf U1NJWkVfMzJCWVRFCShCSVQoMikgfCBCSVQoMCkpCisjZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJ WkVfOEJJVAkoRURNQV9UQ0RfQVRUUl9TU0laRV84QklUIDw8IDgpCisjZGVmaW5lIEVETUFfVENE X0FUVFJfRFNJWkVfMTZCSVQJKEVETUFfVENEX0FUVFJfU1NJWkVfMTZCSVQgPDwgOCkKKyNkZWZp bmUgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJJVAkoRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVCA8 PCA4KQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzY0QklUCShFRE1BX1RDRF9BVFRSX1NT SVpFXzY0QklUIDw8IDgpCisjZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJWkVfMTZCWVRFCShFRE1B X1RDRF9BVFRSX1NTSVpFXzE2QllURSA8PCA4KQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpF XzMyQllURQkoRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJZVEUgPDwgOCkKKworI2RlZmluZSBFRE1B X1RDRF9DSVRFUl9DSVRFUih4KQkJKCh4KSAmIEdFTk1BU0soMTQsIDApKQorI2RlZmluZSBFRE1B X1RDRF9CSVRFUl9CSVRFUih4KQkJKCh4KSAmIEdFTk1BU0soMTQsIDApKQorCisjZGVmaW5lIEVE TUFfVENEX0NTUl9TVEFSVAkJQklUKDApCisjZGVmaW5lIEVETUFfVENEX0NTUl9JTlRfTUFKT1IJ CUJJVCgxKQorI2RlZmluZSBFRE1BX1RDRF9DU1JfSU5UX0hBTEYJCUJJVCgyKQorI2RlZmluZSBF RE1BX1RDRF9DU1JfRF9SRVEJCUJJVCgzKQorI2RlZmluZSBFRE1BX1RDRF9DU1JfRV9TRwkJQklU KDQpCisjZGVmaW5lIEVETUFfVENEX0NTUl9FX0xJTksJCUJJVCg1KQorI2RlZmluZSBFRE1BX1RD RF9DU1JfQUNUSVZFCQlCSVQoNikKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX0RPTkUJCUJJVCg3KQor CitzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqdG9fZnNsX2VkbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4g KmNoYW4pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZnNsX2VkbWFfY2hh biwgdmNoYW4uY2hhbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0b19mc2xfZWRtYV9jaGFuKTsK Kworc3RydWN0IGZzbF9lZG1hX2Rlc2MgKnRvX2ZzbF9lZG1hX2Rlc2Moc3RydWN0IHZpcnRfZG1h X2Rlc2MgKnZkKQoreworCXJldHVybiBjb250YWluZXJfb2YodmQsIHN0cnVjdCBmc2xfZWRtYV9k ZXNjLCB2ZGVzYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0b19mc2xfZWRtYV9kZXNjKTsKKwor LyoKKyAqIFIvVyBmdW5jdGlvbnMgZm9yIGJpZy0gb3IgbGl0dGxlLWVuZGlhbiByZWdpc3RlcnM6 CisgKiBUaGUgZURNQSBjb250cm9sbGVyJ3MgZW5kaWFuIGlzIGluZGVwZW5kZW50IG9mIHRoZSBD UFUgY29yZSdzIGVuZGlhbi4KKyAqIEZvciB0aGUgYmlnLWVuZGlhbiBJUCBtb2R1bGUsIHRoZSBv ZmZzZXQgZm9yIDgtYml0IG9yIDE2LWJpdCByZWdpc3RlcnMKKyAqIHNob3VsZCBhbHNvIGJlIHN3 YXBwZWQgb3Bwb3NpdGUgdG8gdGhhdCBpbiBsaXR0bGUtZW5kaWFuIElQLgorICovCit1MzIgZWRt YV9yZWFkbChzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLAorCQkJdm9pZCBfX2lvbWVtICph ZGRyKQoreworCWlmIChlZG1hLT5iaWdfZW5kaWFuKQorCQlyZXR1cm4gaW9yZWFkMzJiZShhZGRy KTsKKwllbHNlCisJCXJldHVybiBpb3JlYWQzMihhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KGVkbWFfcmVhZGwpOworCit2b2lkIGVkbWFfd3JpdGViKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUg KmVkbWEsIHU4IHZhbCwKKwkJCXZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkvKiBzd2FwIHRoZSBy ZWcgb2Zmc2V0IGZvciB0aGVzZSBpbiBiaWctZW5kaWFuIG1vZGUgKi8KKwlpZiAoZWRtYS0+Ymln X2VuZGlhbikKKwkJaW93cml0ZTgodmFsLCAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25n KWFkZHIgXiAweDMpKTsKKwllbHNlCisJCWlvd3JpdGU4KHZhbCwgYWRkcik7Cit9CitFWFBPUlRf U1lNQk9MX0dQTChlZG1hX3dyaXRlYik7CisKK3ZvaWQgZWRtYV93cml0ZXcoc3RydWN0IGZzbF9l ZG1hX2VuZ2luZSAqZWRtYSwgdTE2IHZhbCwKKwkJCXZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkv KiBzd2FwIHRoZSByZWcgb2Zmc2V0IGZvciB0aGVzZSBpbiBiaWctZW5kaWFuIG1vZGUgKi8KKwlp ZiAoZWRtYS0+YmlnX2VuZGlhbikKKwkJaW93cml0ZTE2YmUodmFsLCAodm9pZCBfX2lvbWVtICop KCh1bnNpZ25lZCBsb25nKWFkZHIgXiAweDIpKTsKKwllbHNlCisJCWlvd3JpdGUxNih2YWwsIGFk ZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZWRtYV93cml0ZXcpOworCit2b2lkIGVkbWFfd3Jp dGVsKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEsIHUzMiB2YWwsCisJCQl2b2lkIF9faW9t ZW0gKmFkZHIpCit7CisJaWYgKGVkbWEtPmJpZ19lbmRpYW4pCisJCWlvd3JpdGUzMmJlKHZhbCwg YWRkcik7CisJZWxzZQorCQlpb3dyaXRlMzIodmFsLCBhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKGVkbWFfd3JpdGVsKTsKKworc3RhdGljIHZvaWQgZnNsX2VkbWFfZmlsbF90Y2Qoc3RydWN0 IGZzbF9lZG1hX2h3X3RjZCAqdGNkLAorCQkJdTMyIHNyYywgdTMyIGRzdCwgdTE2IGF0dHIsIHUx NiBzb2ZmLAorCQkJdTMyIG5ieXRlcywgdTMyIHNsYXN0LCB1MTYgY2l0ZXIsIHUxNiBiaXRlciwK KwkJCXUxNiBkb2ZmLCB1MzIgZGxhc3Rfc2dhLCBib29sIG1ham9yX2ludCwKKwkJCWJvb2wgZGlz YWJsZV9yZXEsIGJvb2wgZW5hYmxlX3NnKQoreworCXUxNiBjc3IgPSAwOworCisJLyoKKwkgKiBl RE1BIGhhcmR3YXJlIFNHcyByZXF1aXJlIHRoZSBUQ0RzIHRvIGJlIHN0b3JlZCBpbiBsaXR0bGUK KwkgKiBlbmRpYW4gZm9ybWF0IGlycmVzcGVjdGl2ZSBvZiB0aGUgcmVnaXN0ZXIgZW5kaWFuIG1v ZGVsLgorCSAqIFNvIHdlIHB1dCB0aGUgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBpbiBtZW1vcnks IHdhaXRpbmcKKwkgKiBmb3IgZnNsX2VkbWFfc2V0X3RjZF9yZWdzIGRvaW5nIHRoZSBzd2FwLgor CSAqLworCXRjZC0+c2FkZHIgPSBjcHVfdG9fbGUzMihzcmMpOworCXRjZC0+ZGFkZHIgPSBjcHVf dG9fbGUzMihkc3QpOworCXRjZC0+YXR0ciA9IGNwdV90b19sZTE2KGF0dHIpOworCXRjZC0+c29m ZiA9IGNwdV90b19sZTE2KHNvZmYpOworCXRjZC0+bmJ5dGVzID0gY3B1X3RvX2xlMzIobmJ5dGVz KTsKKwl0Y2QtPnNsYXN0ID0gY3B1X3RvX2xlMzIoc2xhc3QpOworCXRjZC0+Y2l0ZXIgPSBjcHVf dG9fbGUxNihFRE1BX1RDRF9DSVRFUl9DSVRFUihjaXRlcikpOworCXRjZC0+ZG9mZiA9IGNwdV90 b19sZTE2KGRvZmYpOworCXRjZC0+ZGxhc3Rfc2dhID0gY3B1X3RvX2xlMzIoZGxhc3Rfc2dhKTsK Kwl0Y2QtPmJpdGVyID0gY3B1X3RvX2xlMTYoRURNQV9UQ0RfQklURVJfQklURVIoYml0ZXIpKTsK KworCWlmIChtYWpvcl9pbnQpCisJCWNzciB8PSBFRE1BX1RDRF9DU1JfSU5UX01BSk9SOworCWlm IChkaXNhYmxlX3JlcSkKKwkJY3NyIHw9IEVETUFfVENEX0NTUl9EX1JFUTsKKwlpZiAoZW5hYmxl X3NnKQorCQljc3IgfD0gRURNQV9UQ0RfQ1NSX0VfU0c7CisKKwl0Y2QtPmNzciA9IGNwdV90b19s ZTE2KGNzcik7Cit9CisKK3N0YXRpYyB2b2lkIGZzbF9lZG1hX2VuYWJsZV9yZXF1ZXN0KHN0cnVj dCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0g JmZzbF9jaGFuLT5lZG1hLT5yZWdzOworCXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNo YW5faWQ7CisKKwlpZiAoZnNsX2NoYW4tPmVkbWEtPnZlcnNpb24gPT0gdjEpIHsKKwkJZWRtYV93 cml0ZWIoZnNsX2NoYW4tPmVkbWEsIEVETUFfU0VFSV9TRUVJKGNoKSwgcmVncy0+c2VlaSk7CisJ CWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1hLCBjaCwgcmVncy0+c2VycSk7CisJfSBlbHNlIHsK KwkJLyogQ29sZEZpcmUgaXMgYmlnIGVuZGlhbiwgYW5kIGFjY2Vzc2VzIG5hdGl2ZWx5CisJCSAq IGJpZyBlbmRpYW4gSS9PIHBlcmlwaGVyYWxzCisJCSAqLworCQlpb3dyaXRlOChFRE1BX1NFRUlf U0VFSShjaCksIHJlZ3MtPnNlZWkpOworCQlpb3dyaXRlOChjaCwgcmVncy0+c2VycSk7CisJfQor fQorCitzdGF0aWMgdW5zaWduZWQgaW50IGZzbF9lZG1hX2dldF90Y2RfYXR0cihlbnVtIGRtYV9z bGF2ZV9idXN3aWR0aCBhZGRyX3dpZHRoKQoreworCXN3aXRjaCAoYWRkcl93aWR0aCkgeworCWNh c2UgMToKKwkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfOEJJVCB8IEVETUFfVENEX0FUVFJf RFNJWkVfOEJJVDsKKwljYXNlIDI6CisJCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzE2QklU IHwgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJJVDsKKwljYXNlIDQ6CisJCXJldHVybiBFRE1BX1RD RF9BVFRSX1NTSVpFXzMyQklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJJVDsKKwljYXNlIDg6 CisJCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzY0QklUIHwgRURNQV9UQ0RfQVRUUl9EU0la RV82NEJJVDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVCB8 IEVETUFfVENEX0FUVFJfRFNJWkVfMzJCSVQ7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGZzbF9l ZG1hX2Rlc2MgKmZzbF9lZG1hX2FsbG9jX2Rlc2Moc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9j aGFuLAorCQlpbnQgc2dfbGVuKQoreworCXN0cnVjdCBmc2xfZWRtYV9kZXNjICpmc2xfZGVzYzsK KwlpbnQgaTsKKworCWZzbF9kZXNjID0ga3phbGxvYyhzaXplb2YoKmZzbF9kZXNjKSArCisJCQlz aXplb2Yoc3RydWN0IGZzbF9lZG1hX3N3X3RjZCkgKiBzZ19sZW4sIEdGUF9OT1dBSVQpOworCWlm ICghZnNsX2Rlc2MpCisJCXJldHVybiBOVUxMOworCisJZnNsX2Rlc2MtPmVjaGFuID0gZnNsX2No YW47CisJZnNsX2Rlc2MtPm5fdGNkcyA9IHNnX2xlbjsKKwlmb3IgKGkgPSAwOyBpIDwgc2dfbGVu OyBpKyspIHsKKwkJZnNsX2Rlc2MtPnRjZFtpXS52dGNkID0gZG1hX3Bvb2xfYWxsb2MoZnNsX2No YW4tPnRjZF9wb29sLAorCQkJCQlHRlBfTk9XQUlULCAmZnNsX2Rlc2MtPnRjZFtpXS5wdGNkKTsK KwkJaWYgKCFmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QpCisJCQlnb3RvIGVycjsKKwl9CisJcmV0dXJu IGZzbF9kZXNjOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlkbWFfcG9vbF9mcmVlKGZz bF9jaGFuLT50Y2RfcG9vbCwgZnNsX2Rlc2MtPnRjZFtpXS52dGNkLAorCQkJCWZzbF9kZXNjLT50 Y2RbaV0ucHRjZCk7CisJa2ZyZWUoZnNsX2Rlc2MpOworCXJldHVybiBOVUxMOworfQorCitzdGF0 aWMgdm9pZCBmc2xfZWRtYV9zZXRfdGNkX3JlZ3Moc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9j aGFuLAorCQkJICAgc3RydWN0IGZzbF9lZG1hX2h3X3RjZCAqdGNkKQoreworCXN0cnVjdCBmc2xf ZWRtYV9lbmdpbmUgKmVkbWEgPSBmc2xfY2hhbi0+ZWRtYTsKKwlzdHJ1Y3QgZnNsX2VkbWFfaHdf dGNkIF9faW9tZW0gKm10Y2QgPSBlZG1hLT5yZWdzLnRjZAorCQkJCQkrIGZzbF9jaGFuLT52Y2hh bi5jaGFuLmNoYW5faWQ7CisKKwkvKgorCSAqIFRDRCBwYXJhbWV0ZXJzIGFyZSBzdG9yZWQgaW4g c3RydWN0IGZzbF9lZG1hX2h3X3RjZCBpbiBsaXR0bGUKKwkgKiBlbmRpYW4gZm9ybWF0LiBIb3dl dmVyLCB3ZSBuZWVkIHRvIGxvYWQgdGhlIFRDRCByZWdpc3RlcnMgaW4KKwkgKiBiaWctIG9yIGxp dHRsZS1lbmRpYW4gb2JleWluZyB0aGUgZURNQSBlbmdpbmUgbW9kZWwgZW5kaWFuLgorCSAqLwor CWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+c2FkZHIpLCAmbXRjZC0+c2FkZHIp OworCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+ZGFkZHIpLCAmbXRjZC0+ZGFk ZHIpOworCWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+YXR0ciksICZtdGNkLT5h dHRyKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPnNvZmYpLCAmbXRjZC0+ c29mZik7CisJZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNkLT5uYnl0ZXMpLCAmbXRj ZC0+bmJ5dGVzKTsKKwllZG1hX3dyaXRlbChlZG1hLCBsZTMyX3RvX2NwdSh0Y2QtPnNsYXN0KSwg Jm10Y2QtPnNsYXN0KTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmNpdGVy KSwgJm10Y2QtPmNpdGVyKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmJp dGVyKSwgJm10Y2QtPmJpdGVyKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2Qt PmRvZmYpLCAmbXRjZC0+ZG9mZik7CisJZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNk LT5kbGFzdF9zZ2EpLCAmbXRjZC0+ZGxhc3Rfc2dhKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2 X3RvX2NwdSh0Y2QtPmNzciksICZtdGNkLT5jc3IpOworfQorCitzdGF0aWMgc2l6ZV90IGZzbF9l ZG1hX2Rlc2NfcmVzaWR1ZShzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCisJCXN0cnVj dCB2aXJ0X2RtYV9kZXNjICp2ZGVzYywgYm9vbCBpbl9wcm9ncmVzcykKK3sKKwlzdHJ1Y3QgZnNs X2VkbWFfZGVzYyAqZWRlc2MgPSBmc2xfY2hhbi0+ZWRlc2M7CisJc3RydWN0IGVkbWFfcmVncyAq cmVncyA9ICZmc2xfY2hhbi0+ZWRtYS0+cmVnczsKKwl1MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4u Y2hhbi5jaGFuX2lkOworCWVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXIgPSBmc2xfY2hh bi0+ZGlyOworCWRtYV9hZGRyX3QgY3VyX2FkZHIsIGRtYV9hZGRyOworCXNpemVfdCBsZW4sIHNp emU7CisJaW50IGk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIHRvdGFsIHNpemUgaW4gdGhpcyBkZXNj ICovCisJZm9yIChsZW4gPSBpID0gMDsgaSA8IGZzbF9jaGFuLT5lZGVzYy0+bl90Y2RzOyBpKysp CisJCWxlbiArPSBsZTMyX3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPm5ieXRlcykKKwkJCSog bGUxNl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNkLT5iaXRlcik7CisKKwlpZiAoIWluX3Byb2dy ZXNzKQorCQlyZXR1cm4gbGVuOworCisJaWYgKGRpciA9PSBETUFfTUVNX1RPX0RFVikKKwkJY3Vy X2FkZHIgPSBlZG1hX3JlYWRsKGZzbF9jaGFuLT5lZG1hLCAmcmVncy0+dGNkW2NoXS5zYWRkcik7 CisJZWxzZQorCQljdXJfYWRkciA9IGVkbWFfcmVhZGwoZnNsX2NoYW4tPmVkbWEsICZyZWdzLT50 Y2RbY2hdLmRhZGRyKTsKKworCS8qIGZpZ3VyZSBvdXQgdGhlIGZpbmlzaGVkIGFuZCBjYWxjdWxh dGUgdGhlIHJlc2lkdWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZnNsX2NoYW4tPmVkZXNjLT5uX3Rj ZHM7IGkrKykgeworCQlzaXplID0gbGUzMl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNkLT5uYnl0 ZXMpCisJCQkqIGxlMTZfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+Yml0ZXIpOworCQlpZiAo ZGlyID09IERNQV9NRU1fVE9fREVWKQorCQkJZG1hX2FkZHIgPSBsZTMyX3RvX2NwdShlZGVzYy0+ dGNkW2ldLnZ0Y2QtPnNhZGRyKTsKKwkJZWxzZQorCQkJZG1hX2FkZHIgPSBsZTMyX3RvX2NwdShl ZGVzYy0+dGNkW2ldLnZ0Y2QtPmRhZGRyKTsKKworCQlsZW4gLT0gc2l6ZTsKKwkJaWYgKGN1cl9h ZGRyID49IGRtYV9hZGRyICYmIGN1cl9hZGRyIDwgZG1hX2FkZHIgKyBzaXplKSB7CisJCQlsZW4g Kz0gZG1hX2FkZHIgKyBzaXplIC0gY3VyX2FkZHI7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJl dHVybiBsZW47Cit9CisKK3ZvaWQgZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xf ZWRtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0gJmZzbF9j aGFuLT5lZG1hLT5yZWdzOworCXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7 CisKKwlpZiAoZnNsX2NoYW4tPmVkbWEtPnZlcnNpb24gPT0gdjEpIHsKKwkJZWRtYV93cml0ZWIo ZnNsX2NoYW4tPmVkbWEsIGNoLCByZWdzLT5jZXJxKTsKKwkJZWRtYV93cml0ZWIoZnNsX2NoYW4t PmVkbWEsIEVETUFfQ0VFSV9DRUVJKGNoKSwgcmVncy0+Y2VlaSk7CisJfSBlbHNlIHsKKwkJLyog Q29sZEZpcmUgaXMgYmlnIGVuZGlhbiwgYW5kIGFjY2Vzc2VzIG5hdGl2ZWx5CisJCSAqIGJpZyBl bmRpYW4gSS9PIHBlcmlwaGVyYWxzCisJCSAqLworCQlpb3dyaXRlOChjaCwgcmVncy0+Y2VycSk7 CisJCWlvd3JpdGU4KEVETUFfQ0VFSV9DRUVJKGNoKSwgcmVncy0+Y2VlaSk7CisJfQorfQorRVhQ T1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KTsKKwordm9pZCBmc2xfZWRt YV9jbGVhbnVwX3ZjaGFuKHN0cnVjdCBkbWFfZGV2aWNlICpkbWFkZXYpCit7CisJc3RydWN0IGZz bF9lZG1hX2NoYW4gKmNoYW4sICpfY2hhbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShj aGFuLCBfY2hhbiwKKwkJCQkmZG1hZGV2LT5jaGFubmVscywgdmNoYW4uY2hhbi5kZXZpY2Vfbm9k ZSkgeworCQlsaXN0X2RlbCgmY2hhbi0+dmNoYW4uY2hhbi5kZXZpY2Vfbm9kZSk7CisJCXRhc2ts ZXRfa2lsbCgmY2hhbi0+dmNoYW4udGFzayk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNs X2VkbWFfY2xlYW51cF92Y2hhbik7CisKK3ZvaWQgZnNsX2VkbWFfZnJlZV9kZXNjKHN0cnVjdCB2 aXJ0X2RtYV9kZXNjICp2ZGVzYykKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqbWNmX2Rlc2M7 CisJaW50IGk7CisKKwltY2ZfZGVzYyA9IHRvX2ZzbF9lZG1hX2Rlc2ModmRlc2MpOworCisJZm9y IChpID0gMDsgaSA8IG1jZl9kZXNjLT5uX3RjZHM7IGkrKykKKwkJZG1hX3Bvb2xfZnJlZShtY2Zf ZGVzYy0+ZWNoYW4tPnRjZF9wb29sLCBtY2ZfZGVzYy0+dGNkW2ldLnZ0Y2QsCisJCQkJbWNmX2Rl c2MtPnRjZFtpXS5wdGNkKTsKKwlrZnJlZShtY2ZfZGVzYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TChmc2xfZWRtYV9mcmVlX2Rlc2MpOworCitpbnQgZnNsX2VkbWFfYWxsb2NfY2hhbl9yZXNvdXJj ZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICptY2Zf Y2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisKKwltY2ZfY2hhbi0+dGNkX3Bvb2wgPSBk bWFfcG9vbF9jcmVhdGUoInRjZF9wb29sIiwgY2hhbi0+ZGV2aWNlLT5kZXYsCisJCQlzaXplb2Yo c3RydWN0IGZzbF9lZG1hX2h3X3RjZCksIEVETUFfVENEX01FTV9BTElHTiwgMCk7CisKKwlyZXR1 cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZzbF9lZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2Vz KTsKKwordm9pZCBmc2xfZWRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAq Y2hhbikKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9j aGFuKGNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGhlYWQpOworCisJ c3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJZnNsX2Vk bWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKKwlmc2xfY2hhbi0+ZWRlc2MgPSBOVUxMOwor CXZjaGFuX2dldF9hbGxfZGVzY3JpcHRvcnMoJmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisKKwl2 Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3QoJmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOworCWRtYV9w b29sX2Rlc3Ryb3koZnNsX2NoYW4tPnRjZF9wb29sKTsKKwlmc2xfY2hhbi0+dGNkX3Bvb2wgPSBO VUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyk7 CisKK2ludCBmc2xfZWRtYV9zbGF2ZV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJ ICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY29uZmlnKQoreworCXN0cnVjdCBmc2xfZWRtYV9j aGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisKKwltZW1jcHkoJmZzbF9j aGFuLT5jZmcsIGNvbmZpZywgc2l6ZW9mKCpjb25maWcpKTsKKworCXJldHVybiAwOworfQorRVhQ T1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfc2xhdmVfY29uZmlnKTsKKworc3RydWN0IGRtYV9hc3lu Y190eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWMoCisJCXN0cnVjdCBkbWFf Y2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCisJCXNpemVf dCBwZXJpb2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1 bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9 IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNj OworCWRtYV9hZGRyX3QgZG1hX2J1Zl9uZXh0OworCWludCBzZ19sZW4sIGk7CisJdTMyIHNyY19h ZGRyLCBkc3RfYWRkciwgbGFzdF9zZywgbmJ5dGVzLCBhdHRyOworCXUxNiBzb2ZmLCBkb2ZmLCBp dGVyOworCisJaWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24oZGlyZWN0aW9uKSkKKwkJcmV0dXJuIE5V TEw7CisKKwlzZ19sZW4gPSBidWZfbGVuIC8gcGVyaW9kX2xlbjsKKwlmc2xfZGVzYyA9IGZzbF9l ZG1hX2FsbG9jX2Rlc2MoZnNsX2NoYW4sIHNnX2xlbik7CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0 dXJuIE5VTEw7CisKKwlmc2xfZGVzYy0+aXNjeWNsaWMgPSB0cnVlOworCWZzbF9jaGFuLT5kaXIg PSBkaXJlY3Rpb247CisKKwlkbWFfYnVmX25leHQgPSBkbWFfYWRkcjsKKworCWZvciAoaSA9IDA7 IGkgPCBzZ19sZW47IGkrKykgeworCQlpZiAoZG1hX2J1Zl9uZXh0ID49IGRtYV9hZGRyICsgYnVm X2xlbikKKwkJCWRtYV9idWZfbmV4dCA9IGRtYV9hZGRyOworCisJCS8qIGdldCBuZXh0IHNnJ3Mg cGh5c2ljYWwgYWRkcmVzcyAqLworCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpICUg c2dfbGVuXS5wdGNkOworCisJCWlmIChkaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJ CW5ieXRlcyA9IGZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGggKgorCQkJCSBmc2xfY2hhbi0+ Y2ZnLmRzdF9tYXhidXJzdDsKKwkJCXNyY19hZGRyID0gZG1hX2J1Zl9uZXh0OworCQkJZHN0X2Fk ZHIgPSBmc2xfY2hhbi0+Y2ZnLmRzdF9hZGRyOworCQkJc29mZiA9IGZzbF9jaGFuLT5jZmcuZHN0 X2FkZHJfd2lkdGg7CisJCQlkb2ZmID0gMDsKKwkJCWF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0 dHIoCisJCQkJZnNsX2NoYW4tPmNmZy5kc3RfYWRkcl93aWR0aCk7CisJCX0gZWxzZSB7CisJCQlu Ynl0ZXMgPSBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoICoKKwkJCQkgZnNsX2NoYW4tPmNm Zy5zcmNfbWF4YnVyc3Q7CisJCQlzcmNfYWRkciA9ICBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyOwor CQkJZHN0X2FkZHIgPSBkbWFfYnVmX25leHQ7CisJCQlzb2ZmID0gMDsKKwkJCWRvZmYgPSBmc2xf Y2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoOworCQkJYXR0ciA9IGZzbF9lZG1hX2dldF90Y2RfYXR0 cigKKwkJCQlmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoKTsKKwkJfQorCisJCWl0ZXIgPSBw ZXJpb2RfbGVuIC8gbmJ5dGVzOworCisJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2Rb aV0udnRjZCwKKwkJCQkgIHNyY19hZGRyLCBkc3RfYWRkciwKKwkJCQkgIGF0dHIsIHNvZmYsIG5i eXRlcywgMCwgaXRlciwKKwkJCQkgIGl0ZXIsIGRvZmYsIGxhc3Rfc2csIHRydWUsIGZhbHNlLCB0 cnVlKTsKKwkJZG1hX2J1Zl9uZXh0ICs9IHBlcmlvZF9sZW47CisJfQorCisJcmV0dXJuIHZjaGFu X3R4X3ByZXAoJmZzbF9jaGFuLT52Y2hhbiwgJmZzbF9kZXNjLT52ZGVzYywgZmxhZ3MpOworfQor RVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfcHJlcF9kbWFfY3ljbGljKTsKKworc3RydWN0IGRt YV9hc3luY190eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX3NsYXZlX3NnKAorCQlzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQl1bnNpZ25lZCBpbnQg c2dfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1bnNpZ25l ZCBsb25nIGZsYWdzLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpm c2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2Mg KmZzbF9kZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdTMyIHNyY19hZGRyLCBkc3Rf YWRkciwgbGFzdF9zZywgbmJ5dGVzLCBhdHRyOworCXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOworCWlu dCBpOworCisJaWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24oZGlyZWN0aW9uKSkKKwkJcmV0dXJuIE5V TEw7CisKKwlmc2xfZGVzYyA9IGZzbF9lZG1hX2FsbG9jX2Rlc2MoZnNsX2NoYW4sIHNnX2xlbik7 CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlmc2xfZGVzYy0+aXNjeWNsaWMg PSBmYWxzZTsKKwlmc2xfY2hhbi0+ZGlyID0gZGlyZWN0aW9uOworCisJZm9yX2VhY2hfc2coc2ds LCBzZywgc2dfbGVuLCBpKSB7CisJCS8qIGdldCBuZXh0IHNnJ3MgcGh5c2ljYWwgYWRkcmVzcyAq LworCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpICUgc2dfbGVuXS5wdGNkOworCisJ CWlmIChkaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJCW5ieXRlcyA9IGZzbF9jaGFu LT5jZmcuZHN0X2FkZHJfd2lkdGggKgorCQkJCSBmc2xfY2hhbi0+Y2ZnLmRzdF9tYXhidXJzdDsK KwkJCXNyY19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQkJZHN0X2FkZHIgPSBmc2xfY2hh bi0+Y2ZnLmRzdF9hZGRyOworCQkJc29mZiA9IGZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGg7 CisJCQlkb2ZmID0gMDsKKwkJCWF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0dHIoCisJCQkJCWZz bF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGgpOworCisJCX0gZWxzZSB7CisJCQluYnl0ZXMgPSBm c2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoICoKKwkJCQkgZnNsX2NoYW4tPmNmZy5zcmNfbWF4 YnVyc3Q7CisJCQlzcmNfYWRkciA9IGZzbF9jaGFuLT5jZmcuc3JjX2FkZHI7CisJCQlkc3RfYWRk ciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCXNvZmYgPSAwOworCQkJZG9mZiA9IGZzbF9jaGFu LT5jZmcuc3JjX2FkZHJfd2lkdGg7CisJCQlhdHRyID0gZnNsX2VkbWFfZ2V0X3RjZF9hdHRyKAor CQkJCQlmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoKTsKKwkJfQorCisJCWl0ZXIgPSBzZ19k bWFfbGVuKHNnKSAvIG5ieXRlczsKKworCQlpZiAoaSA8IHNnX2xlbiAtIDEpIHsKKwkJCWxhc3Rf c2cgPSBmc2xfZGVzYy0+dGNkWyhpICsgMSldLnB0Y2Q7CisJCQlmc2xfZWRtYV9maWxsX3RjZChm c2xfZGVzYy0+dGNkW2ldLnZ0Y2QsCisJCQkJCSAgc3JjX2FkZHIsCisJCQkJCSAgZHN0X2FkZHIs IGF0dHIsIHNvZmYsCisJCQkJCSAgbmJ5dGVzLCAwLCBpdGVyLCBpdGVyLCBkb2ZmLCBsYXN0X3Nn LAorCQkJCQkgIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CisJCX0gZWxzZSB7CisJCQlsYXN0X3NnID0g MDsKKwkJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2RbaV0udnRjZCwKKwkJCQkJICBz cmNfYWRkciwKKwkJCQkJICBkc3RfYWRkciwgYXR0ciwgc29mZiwKKwkJCQkJICBuYnl0ZXMsIDAs IGl0ZXIsIGl0ZXIsIGRvZmYsIGxhc3Rfc2csCisJCQkJCSAgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOwor CQl9CisJfQorCisJcmV0dXJuIHZjaGFuX3R4X3ByZXAoJmZzbF9jaGFuLT52Y2hhbiwgJmZzbF9k ZXNjLT52ZGVzYywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfcHJlcF9z bGF2ZV9zZyk7CisKK2VudW0gZG1hX3N0YXR1cyBmc2xfZWRtYV90eF9zdGF0dXMoc3RydWN0IGRt YV9jaGFuICpjaGFuLAorCQlkbWFfY29va2llX3QgY29va2llLCBzdHJ1Y3QgZG1hX3R4X3N0YXRl ICp0eHN0YXRlKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9l ZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjOworCWVudW0gZG1h X3N0YXR1cyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0YXR1cyA9IGRtYV9j b29raWVfc3RhdHVzKGNoYW4sIGNvb2tpZSwgdHhzdGF0ZSk7CisJaWYgKHN0YXR1cyA9PSBETUFf Q09NUExFVEUpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoIXR4c3RhdGUpCisJCXJldHVybiBm c2xfY2hhbi0+c3RhdHVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5s b2NrLCBmbGFncyk7CisJdmRlc2MgPSB2Y2hhbl9maW5kX2Rlc2MoJmZzbF9jaGFuLT52Y2hhbiwg Y29va2llKTsKKwlpZiAoZnNsX2NoYW4tPmVkZXNjICYmIGNvb2tpZSA9PSBmc2xfY2hhbi0+ZWRl c2MtPnZkZXNjLnR4LmNvb2tpZSkKKwkJdHhzdGF0ZS0+cmVzaWR1ZSA9CisJCQkJZnNsX2VkbWFf ZGVzY19yZXNpZHVlKGZzbF9jaGFuLCB2ZGVzYywgdHJ1ZSk7CisJZWxzZSBpZiAodmRlc2MpCisJ CXR4c3RhdGUtPnJlc2lkdWUgPQorCQkJCWZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShmc2xfY2hhbiwg dmRlc2MsIGZhbHNlKTsKKwllbHNlCisJCXR4c3RhdGUtPnJlc2lkdWUgPSAwOworCisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKworCXJldHVy biBmc2xfY2hhbi0+c3RhdHVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfdHhfc3Rh dHVzKTsKKworaW50IGZzbF9lZG1hX3BhdXNlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlz dHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZj aGFuLmxvY2ssIGZsYWdzKTsKKwlpZiAoZnNsX2NoYW4tPmVkZXNjKSB7CisJCWZzbF9lZG1hX2Rp c2FibGVfcmVxdWVzdChmc2xfY2hhbik7CisJCWZzbF9jaGFuLT5zdGF0dXMgPSBETUFfUEFVU0VE OworCQlmc2xfY2hhbi0+aWRsZSA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lN Qk9MX0dQTChmc2xfZWRtYV9wYXVzZSk7CisKK2ludCBmc2xfZWRtYV9yZXN1bWUoc3RydWN0IGRt YV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2Zz bF9lZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCWlmIChmc2xfY2hhbi0+ZWRl c2MpIHsKKwkJZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3QoZnNsX2NoYW4pOworCQlmc2xfY2hhbi0+ c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOworCQlmc2xfY2hhbi0+aWRsZSA9IGZhbHNlOworCX0K KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwor CXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfcmVzdW1lKTsKKworaW50 IGZzbF9lZG1hX3Rlcm1pbmF0ZV9hbGwoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVj dCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQoaGVhZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKwlmc2xfZWRtYV9kaXNhYmxlX3JlcXVl c3QoZnNsX2NoYW4pOworCWZzbF9jaGFuLT5lZGVzYyA9IE5VTEw7CisJZnNsX2NoYW4tPmlkbGUg PSB0cnVlOworCXZjaGFuX2dldF9hbGxfZGVzY3JpcHRvcnMoJmZzbF9jaGFuLT52Y2hhbiwgJmhl YWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFn cyk7CisJdmNoYW5fZG1hX2Rlc2NfZnJlZV9saXN0KCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsK KwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZzbF9lZG1hX3Rlcm1pbmF0ZV9hbGwp OworCit2b2lkIGZzbF9lZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQor eworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICptY2ZfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hh bik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2ZfY2hh bi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCisJaWYgKHZjaGFuX2lzc3VlX3BlbmRpbmcoJm1jZl9j aGFuLT52Y2hhbikgJiYgIW1jZl9jaGFuLT5lZGVzYykKKwkJZnNsX2VkbWFfeGZlcl9kZXNjKG1j Zl9jaGFuKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jZl9jaGFuLT52Y2hhbi5sb2Nr LCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfZWRtYV9pc3N1ZV9wZW5kaW5nKTsK Kwordm9pZCBmc2xfZWRtYV94ZmVyX2Rlc2Moc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFu KQoreworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYzsKKworCXZkZXNjID0gdmNoYW5fbmV4 dF9kZXNjKCZmc2xfY2hhbi0+dmNoYW4pOworCWlmICghdmRlc2MpCisJCXJldHVybjsKKwlmc2xf Y2hhbi0+ZWRlc2MgPSB0b19mc2xfZWRtYV9kZXNjKHZkZXNjKTsKKwlmc2xfZWRtYV9zZXRfdGNk X3JlZ3MoZnNsX2NoYW4sIGZzbF9jaGFuLT5lZGVzYy0+dGNkWzBdLnZ0Y2QpOworCWZzbF9lZG1h X2VuYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKKwlmc2xfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BS T0dSRVNTOworCWZzbF9jaGFuLT5pZGxlID0gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChm c2xfZWRtYV94ZmVyX2Rlc2MpOworCisvKgorICogT24gdGhlIDMyIGNoYW5uZWxzIFZ5YnJpZC9t cGM1Nzd4IGVkbWEgdmVyc2lvbiAoaGVyZSBjYWxsZWQgInYxIiksCisgKiByZWdpc3RlciBvZmZz ZXRzIGFyZSBkaWZmZXJlbnQgY29tcGFyZWQgdG8gQ29sZEZpcmUgbWNmNTQ0MXggNjQgY2hhbm5l bHMKKyAqIGVkbWEgKGhlcmUgY2FsbGVkICJ2MiIpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0 cyB1cCByZWdpc3RlciBvZmZzZXRzIGFzIHBlciBwcm9wZXIgZGVjbGFyZWQgdmVyc2lvbgorICog c28gbXVzdCBiZSBjYWxsZWQgaW4geHh4X2VkbWFfcHJvYmUoKSBqdXN0IGFmdGVyIHNldHRpbmcg dGhlCisgKiBlZG1hICJ2ZXJzaW9uIiBhbmQgIm1lbWJhc2UiIGFwcHJvcHJpYXRlbHkuCisgKi8K K3ZvaWQgZnNsX2VkbWFfc2V0dXBfcmVncyhzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hKQor eworCWVkbWEtPnJlZ3MuY3IgPSBlZG1hLT5tZW1iYXNlICsgRURNQV9DUjsKKwllZG1hLT5yZWdz LmVzID0gZWRtYS0+bWVtYmFzZSArIEVETUFfRVM7CisJZWRtYS0+cmVncy5lcnFsID0gZWRtYS0+ bWVtYmFzZSArIEVETUFfRVJROworCWVkbWEtPnJlZ3MuZWVpbCA9IGVkbWEtPm1lbWJhc2UgKyBF RE1BX0VFSTsKKworCWVkbWEtPnJlZ3Muc2VycSA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZl cnNpb24gPT0gdjEpID8KKwkJCUVETUFfU0VSUSA6IEVETUE2NF9TRVJRKTsKKwllZG1hLT5yZWdz LmNlcnEgPSBlZG1hLT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09IHYxKSA/CisJCQlFRE1B X0NFUlEgOiBFRE1BNjRfQ0VSUSk7CisJZWRtYS0+cmVncy5zZWVpID0gZWRtYS0+bWVtYmFzZSAr ICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkgPworCQkJRURNQV9TRUVJIDogRURNQTY0X1NFRUkpOwor CWVkbWEtPnJlZ3MuY2VlaSA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEp ID8KKwkJCUVETUFfQ0VFSSA6IEVETUE2NF9DRUVJKTsKKwllZG1hLT5yZWdzLmNpbnQgPSBlZG1h LT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09IHYxKSA/CisJCQlFRE1BX0NJTlQgOiBFRE1B NjRfQ0lOVCk7CisJZWRtYS0+cmVncy5jZXJyID0gZWRtYS0+bWVtYmFzZSArICgoZWRtYS0+dmVy c2lvbiA9PSB2MSkgPworCQkJRURNQV9DRVJSIDogRURNQTY0X0NFUlIpOworCWVkbWEtPnJlZ3Mu c3NydCA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFf U1NSVCA6IEVETUE2NF9TU1JUKTsKKwllZG1hLT5yZWdzLmNkbmUgPSBlZG1hLT5tZW1iYXNlICsg KChlZG1hLT52ZXJzaW9uID09IHYxKSA/CisJCQlFRE1BX0NETkUgOiBFRE1BNjRfQ0RORSk7CisJ ZWRtYS0+cmVncy5pbnRsID0gZWRtYS0+bWVtYmFzZSArICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkg PworCQkJRURNQV9JTlRSIDogRURNQTY0X0lOVEwpOworCWVkbWEtPnJlZ3MuZXJybCA9IGVkbWEt Pm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFfRVJSIDogRURNQTY0 X0VSUkwpOworCisJaWYgKGVkbWEtPnZlcnNpb24gPT0gdjIpIHsKKwkJZWRtYS0+cmVncy5lcnFo ID0gZWRtYS0+bWVtYmFzZSArIEVETUE2NF9FUlFIOworCQllZG1hLT5yZWdzLmVlaWggPSBlZG1h LT5tZW1iYXNlICsgRURNQTY0X0VFSUg7CisJCWVkbWEtPnJlZ3MuZXJyaCA9IGVkbWEtPm1lbWJh c2UgKyBFRE1BNjRfRVJSSDsKKwkJZWRtYS0+cmVncy5pbnRoID0gZWRtYS0+bWVtYmFzZSArIEVE TUE2NF9JTlRIOworCX0KKworCWVkbWEtPnJlZ3MudGNkID0gZWRtYS0+bWVtYmFzZSArIEVETUFf VENEOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfc2V0dXBfcmVncyk7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uaCBiL2RyaXZlcnMvZG1hL2ZzbC1lZG1h LWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGUzYzYw OWM2MmZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmgK QEAgLTAsMCArMSwxNjEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICov CisvKgorICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5j LgorICogQ29weXJpZ2h0IDIwMTggQW5nZWxvIER1cmVnaGVsbG8gPGFuZ2Vsb0BzeXNhbS5pdD4K KyAqLworI2lmbmRlZiBfRlNMX0VETUFfQ09NTU9OX0hfCisjZGVmaW5lIF9GU0xfRURNQV9DT01N T05fSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJ2aXJ0LWRtYS5o IgorCisjZGVmaW5lIERNQU1VWF9OUgkJMgorCisjZGVmaW5lIEVETUFfQ1JfRURCRwkJQklUKDEp CisjZGVmaW5lIEVETUFfQ1JfRVJDQQkJQklUKDIpCisjZGVmaW5lIEVETUFfQ1JfRVJHQQkJQklU KDMpCisjZGVmaW5lIEVETUFfQ1JfSE9FCQlCSVQoNCkKKyNkZWZpbmUgRURNQV9DUl9IQUxUCQlC SVQoNSkKKyNkZWZpbmUgRURNQV9DUl9DTE0JCUJJVCg2KQorI2RlZmluZSBFRE1BX0NSX0VNTE0J CUJJVCg3KQorI2RlZmluZSBFRE1BX0NSX0VDWAkJQklUKDE2KQorI2RlZmluZSBFRE1BX0NSX0NY CQlCSVQoMTcpCisKKyNkZWZpbmUgRURNQV9TRUVJX1NFRUkoeCkJKCh4KSAmIEdFTk1BU0soNiwg MCkpCisjZGVmaW5lIEVETUFfQ0VFSV9DRUVJKHgpCSgoeCkgJiBHRU5NQVNLKDYsIDApKQorI2Rl ZmluZSBFRE1BX0NJTlRfQ0lOVCh4KQkoKHgpICYgR0VOTUFTSyg2LCAwKSkKKyNkZWZpbmUgRURN QV9DRVJSX0NFUlIoeCkJKCh4KSAmIEdFTk1BU0soNiwgMCkpCisKKyNkZWZpbmUgRlNMX0VETUFf QlVTV0lEVEhTCShCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURSkgfCBcCisJCQkJIEJJVChE TUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUykgfCBcCisJCQkJIEJJVChETUFfU0xBVkVfQlVTV0lE VEhfNF9CWVRFUykgfCBcCisJCQkJIEJJVChETUFfU0xBVkVfQlVTV0lEVEhfOF9CWVRFUykpCisK K2VudW0gZnNsX2VkbWFfcG1fc3RhdGUgeworCVJVTk5JTkcgPSAwLAorCVNVU1BFTkRFRCwKK307 CisKKy8qCisgKiBUaGlzIGFyZSB0Y2QgcmVncywgZXF1YWwgZm9yIGJvdGggdjMyIGFuZCB2NjQK KyAqLworc3RydWN0IGZzbF9lZG1hX2h3X3RjZCB7CisJX19sZTMyCXNhZGRyOworCV9fbGUxNglz b2ZmOworCV9fbGUxNglhdHRyOworCV9fbGUzMgluYnl0ZXM7CisJX19sZTMyCXNsYXN0OworCV9f bGUzMglkYWRkcjsKKwlfX2xlMTYJZG9mZjsKKwlfX2xlMTYJY2l0ZXI7CisJX19sZTMyCWRsYXN0 X3NnYTsKKwlfX2xlMTYJY3NyOworCV9fbGUxNgliaXRlcjsKK307CisKKy8qCisgKiBUaGlzIGFy ZSBpb21lbSBwb2ludGVycywgZm9yIGJvdGggdjMyIGFuZCB2NjQuCisgKi8KK3N0cnVjdCBlZG1h X3JlZ3MgeworCXZvaWQgX19pb21lbSAqY3I7CisJdm9pZCBfX2lvbWVtICplczsKKwl2b2lkIF9f aW9tZW0gKmVycTsKKwl2b2lkIF9faW9tZW0gKmVycWg7CisJdm9pZCBfX2lvbWVtICplcnFsOwkv KiBha2EgZXJxIG9uIHYzMiAqLworCXZvaWQgX19pb21lbSAqZWVpaDsKKwl2b2lkIF9faW9tZW0g KmVlaWw7CS8qIGFrYSBlZWkgb24gdjMyICovCisJdm9pZCBfX2lvbWVtICpzZWVpOworCXZvaWQg X19pb21lbSAqY2VlaTsKKwl2b2lkIF9faW9tZW0gKnNlcnE7CisJdm9pZCBfX2lvbWVtICpjZXJx OworCXZvaWQgX19pb21lbSAqY2ludDsKKwl2b2lkIF9faW9tZW0gKmNlcnI7CisJdm9pZCBfX2lv bWVtICpzc3J0OworCXZvaWQgX19pb21lbSAqY2RuZTsKKwl2b2lkIF9faW9tZW0gKmludGg7CisJ dm9pZCBfX2lvbWVtICppbnRsOworCXZvaWQgX19pb21lbSAqZXJyaDsKKwl2b2lkIF9faW9tZW0g KmVycmw7CisJc3RydWN0IGZzbF9lZG1hX2h3X3RjZCBfX2lvbWVtICp0Y2Q7Cit9OworCitzdHJ1 Y3QgZnNsX2VkbWFfc3dfdGNkIHsKKwlkbWFfYWRkcl90IHB0Y2Q7CisJc3RydWN0IGZzbF9lZG1h X2h3X3RjZCAqdnRjZDsKK307CisKK3N0cnVjdCBmc2xfZWRtYV9jaGFuIHsKKwlzdHJ1Y3Qgdmly dF9kbWFfY2hhbiB2Y2hhbjsKKwllbnVtIGRtYV9zdGF0dXMgc3RhdHVzOworCWVudW0gZnNsX2Vk bWFfcG1fc3RhdGUgcG1fc3RhdGU7CisJYm9vbCBpZGxlOworCXUzMiBzbGF2ZV9pZDsKKwlzdHJ1 Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hOworCXN0cnVjdCBmc2xfZWRtYV9kZXNjICplZGVzYzsK KwlzdHJ1Y3QgZG1hX3Bvb2wgKnRjZF9wb29sOworCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnIGNm ZzsKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyOworfTsKKworc3RydWN0IGZzbF9l ZG1hX2Rlc2MgeworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjIHZkZXNjOworCXN0cnVjdCBmc2xfZWRt YV9jaGFuICplY2hhbjsKKwlib29sIGlzY3ljbGljOworCXVuc2lnbmVkIGludCBuX3RjZHM7CisJ c3RydWN0IGZzbF9lZG1hX3N3X3RjZCB0Y2RbXTsKK307CisKK2VudW0gZWRtYV92ZXJzaW9uIHsK Kwl2MSwgLyogMzJjaCwgVnliZGlyLCBtcGM1N3gsIGV0YyAqLworCXYyLCAvKiA2NGNoIENvbGRm aXJlICovCit9OworCitzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lIHsKKwlzdHJ1Y3QgZG1hX2Rldmlj ZSBkbWFfZGV2OworCXN0cnVjdCBlZG1hX3JlZ3MgcmVnczsKKwl2b2lkIF9faW9tZW0gKm1lbWJh c2U7CisJdm9pZCBfX2lvbWVtICptdXhiYXNlW0RNQU1VWF9OUl07CisJc3RydWN0IGNsayAqbXV4 Y2xrW0RNQU1VWF9OUl07CisJc3RydWN0IG11dGV4IGZzbF9lZG1hX211dGV4OworCXUzMiBuX2No YW5zOworCWludCB0eGlycTsKKwlpbnQgZXJyaXJxOworCWJvb2wgYmlnX2VuZGlhbjsKKwllbnVt IGVkbWFfdmVyc2lvbiB2ZXJzaW9uOworCXN0cnVjdCBmc2xfZWRtYV9jaGFuIGNoYW5zW107Cit9 OworCit1MzIgZWRtYV9yZWFkbChzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB2b2lkIF9f aW9tZW0gKmFkZHIpOwordm9pZCBlZG1hX3dyaXRlYihzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpl ZG1hLCB1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7Cit2b2lkIGVkbWFfd3JpdGV3KHN0cnVj dCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEsIHUxNiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7Cit2 b2lkIGVkbWFfd3JpdGVsKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEsIHUzMiB2YWwsIHZv aWQgX19pb21lbSAqYWRkcik7CitzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqdG9fZnNsX2VkbWFfY2hh bihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworc3RydWN0IGZzbF9lZG1hX2Rlc2MgKnRvX2ZzbF9l ZG1hX2Rlc2Moc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkKTsKK3ZvaWQgZnNsX2VkbWFfc2V0dXBf cmVncyhzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hKTsKK3ZvaWQgZnNsX2VkbWFfZGlzYWJs ZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbik7Cit2b2lkIGZzbF9lZG1h X2ZyZWVfZGVzYyhzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmRlc2MpOwordm9pZCBmc2xfZWRtYV94 ZmVyX2Rlc2Moc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKTsKK3ZvaWQgZnNsX2VkbWFf Y2xlYW51cF92Y2hhbihzdHJ1Y3QgZG1hX2RldmljZSAqZG1hZGV2KTsKKworLyogT3BlcmF0aW9u cyAqLworaW50IGZzbF9lZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAq Y2hhbik7Cit2b2lkIGZzbF9lZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFu ICpjaGFuKTsKK2ludCBmc2xfZWRtYV9zbGF2ZV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFu LAorCQkJICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY29uZmlnKTsKK3N0cnVjdCBkbWFfYXN5 bmNfdHhfZGVzY3JpcHRvciAqZnNsX2VkbWFfcHJlcF9kbWFfY3ljbGljKAorCQlzdHJ1Y3QgZG1h X2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBidWZfbGVuLAorCQlzaXpl X3QgcGVyaW9kX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ dW5zaWduZWQgbG9uZyBmbGFncyk7CitzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmZz bF9lZG1hX3ByZXBfc2xhdmVfc2coCisJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHNj YXR0ZXJsaXN0ICpzZ2wsCisJCXVuc2lnbmVkIGludCBzZ19sZW4sIGVudW0gZG1hX3RyYW5zZmVy X2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNvbnRl eHQpOworZW51bSBkbWFfc3RhdHVzIGZzbF9lZG1hX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4g KmNoYW4sCisJCWRtYV9jb29raWVfdCBjb29raWUsIHN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4c3Rh dGUpOworaW50IGZzbF9lZG1hX3BhdXNlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CitpbnQgZnNs X2VkbWFfcmVzdW1lKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CitpbnQgZnNsX2VkbWFfdGVybWlu YXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOwordm9pZCBmc2xfZWRtYV9pc3N1ZV9wZW5k aW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisKKyNlbmRpZiAvKiBfRlNMX0VETUFfQ09NTU9O X0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2wtZWRtYS5jIGIvZHJpdmVycy9kbWEv ZnNsLWVkbWEuYwppbmRleCBjNzU2ODg2OTI4NGUuLjVhNDE2NmU0ODVmOSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9kbWEvZnNsLWVkbWEuYworKysgYi9kcml2ZXJzL2RtYS9mc2wtZWRtYS5jCkBAIC0x LDI1NCArMSwyMSBAQAotLyoKLSAqIGRyaXZlcnMvZG1hL2ZzbC1lZG1hLmMKLSAqCi0gKiBDb3B5 cmlnaHQgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCi0gKgotICogRHJp dmVyIGZvciB0aGUgRnJlZXNjYWxlIGVETUEgZW5naW5lIHdpdGggZmxleGlibGUgY2hhbm5lbCBt dWx0aXBsZXhpbmcKLSAqIGNhcGFiaWxpdHkgZm9yIERNQSByZXF1ZXN0IHNvdXJjZXMuIFRoZSBl RE1BIGJsb2NrIGNhbiBiZSBmb3VuZCBvbiBzb21lCi0gKiBWeWJyaWQgYW5kIExheWVyc2NhcGUg U29Dcy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRo ZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2Us IG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8KKy8vIENvcHlyaWdodCAyMDEzLTIwMTQg RnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4K ICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4K ICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgot I2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5j bHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUg PGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNs dWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kbWEuaD4KIAotI2luY2x1 ZGUgInZpcnQtZG1hLmgiCi0KLSNkZWZpbmUgRURNQV9DUgkJCTB4MDAKLSNkZWZpbmUgRURNQV9F UwkJCTB4MDQKLSNkZWZpbmUgRURNQV9FUlEJCTB4MEMKLSNkZWZpbmUgRURNQV9FRUkJCTB4MTQK LSNkZWZpbmUgRURNQV9TRVJRCQkweDFCCi0jZGVmaW5lIEVETUFfQ0VSUQkJMHgxQQotI2RlZmlu ZSBFRE1BX1NFRUkJCTB4MTkKLSNkZWZpbmUgRURNQV9DRUVJCQkweDE4Ci0jZGVmaW5lIEVETUFf Q0lOVAkJMHgxRgotI2RlZmluZSBFRE1BX0NFUlIJCTB4MUUKLSNkZWZpbmUgRURNQV9TU1JUCQkw eDFECi0jZGVmaW5lIEVETUFfQ0RORQkJMHgxQwotI2RlZmluZSBFRE1BX0lOVFIJCTB4MjQKLSNk ZWZpbmUgRURNQV9FUlIJCTB4MkMKLQotI2RlZmluZSBFRE1BX1RDRF9TQUREUih4KQkoMHgxMDAw ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX1NPRkYoeCkJKDB4MTAwNCArIDMyICogKHgp KQotI2RlZmluZSBFRE1BX1RDRF9BVFRSKHgpCSgweDEwMDYgKyAzMiAqICh4KSkKLSNkZWZpbmUg RURNQV9UQ0RfTkJZVEVTKHgpCSgweDEwMDggKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0Rf U0xBU1QoeCkJKDB4MTAwQyArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9EQUREUih4KQko MHgxMDEwICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX0RPRkYoeCkJKDB4MTAxNCArIDMy ICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9DSVRFUl9FTElOSyh4KQkoMHgxMDE2ICsgMzIgKiAo eCkpCi0jZGVmaW5lIEVETUFfVENEX0NJVEVSKHgpCSgweDEwMTYgKyAzMiAqICh4KSkKLSNkZWZp bmUgRURNQV9UQ0RfRExBU1RfU0dBKHgpCSgweDEwMTggKyAzMiAqICh4KSkKLSNkZWZpbmUgRURN QV9UQ0RfQ1NSKHgpCQkoMHgxMDFDICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX0JJVEVS X0VMSU5LKHgpCSgweDEwMUUgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfQklURVIoeCkJ KDB4MTAxRSArIDMyICogKHgpKQotCi0jZGVmaW5lIEVETUFfQ1JfRURCRwkJQklUKDEpCi0jZGVm aW5lIEVETUFfQ1JfRVJDQQkJQklUKDIpCi0jZGVmaW5lIEVETUFfQ1JfRVJHQQkJQklUKDMpCi0j ZGVmaW5lIEVETUFfQ1JfSE9FCQlCSVQoNCkKLSNkZWZpbmUgRURNQV9DUl9IQUxUCQlCSVQoNSkK LSNkZWZpbmUgRURNQV9DUl9DTE0JCUJJVCg2KQotI2RlZmluZSBFRE1BX0NSX0VNTE0JCUJJVCg3 KQotI2RlZmluZSBFRE1BX0NSX0VDWAkJQklUKDE2KQotI2RlZmluZSBFRE1BX0NSX0NYCQlCSVQo MTcpCi0KLSNkZWZpbmUgRURNQV9TRUVJX1NFRUkoeCkJKCh4KSAmIDB4MUYpCi0jZGVmaW5lIEVE TUFfQ0VFSV9DRUVJKHgpCSgoeCkgJiAweDFGKQotI2RlZmluZSBFRE1BX0NJTlRfQ0lOVCh4KQko KHgpICYgMHgxRikKLSNkZWZpbmUgRURNQV9DRVJSX0NFUlIoeCkJKCh4KSAmIDB4MUYpCi0KLSNk ZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRSh4KQkJKCgoeCkgJiAweDAwMDcpKQotI2RlZmluZSBF RE1BX1RDRF9BVFRSX0RNT0QoeCkJCSgoKHgpICYgMHgwMDFGKSA8PCAzKQotI2RlZmluZSBFRE1B X1RDRF9BVFRSX1NTSVpFKHgpCQkoKCh4KSAmIDB4MDAwNykgPDwgOCkKLSNkZWZpbmUgRURNQV9U Q0RfQVRUUl9TTU9EKHgpCQkoKCh4KSAmIDB4MDAxRikgPDwgMTEpCi0jZGVmaW5lIEVETUFfVENE X0FUVFJfU1NJWkVfOEJJVAkoMHgwMDAwKQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpFXzE2 QklUCSgweDAxMDApCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVfMzJCSVQJKDB4MDIwMCkK LSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV82NEJJVAkoMHgwMzAwKQotI2RlZmluZSBFRE1B X1RDRF9BVFRSX1NTSVpFXzMyQllURQkoMHgwNTAwKQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RT SVpFXzhCSVQJKDB4MDAwMCkKLSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJJVAkoMHgw MDAxKQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzMyQklUCSgweDAwMDIpCi0jZGVmaW5l IEVETUFfVENEX0FUVFJfRFNJWkVfNjRCSVQJKDB4MDAwMykKLSNkZWZpbmUgRURNQV9UQ0RfQVRU Ul9EU0laRV8zMkJZVEUJKDB4MDAwNSkKLQotI2RlZmluZSBFRE1BX1RDRF9TT0ZGX1NPRkYoeCkJ CSh4KQotI2RlZmluZSBFRE1BX1RDRF9OQllURVNfTkJZVEVTKHgpCSh4KQotI2RlZmluZSBFRE1B X1RDRF9TTEFTVF9TTEFTVCh4KQkJKHgpCi0jZGVmaW5lIEVETUFfVENEX0RBRERSX0RBRERSKHgp CQkoeCkKLSNkZWZpbmUgRURNQV9UQ0RfQ0lURVJfQ0lURVIoeCkJCSgoeCkgJiAweDdGRkYpCi0j ZGVmaW5lIEVETUFfVENEX0RPRkZfRE9GRih4KQkJKHgpCi0jZGVmaW5lIEVETUFfVENEX0RMQVNU X1NHQV9ETEFTVF9TR0EoeCkJKHgpCi0jZGVmaW5lIEVETUFfVENEX0JJVEVSX0JJVEVSKHgpCQko KHgpICYgMHg3RkZGKQotCi0jZGVmaW5lIEVETUFfVENEX0NTUl9TVEFSVAkJQklUKDApCi0jZGVm aW5lIEVETUFfVENEX0NTUl9JTlRfTUFKT1IJCUJJVCgxKQotI2RlZmluZSBFRE1BX1RDRF9DU1Jf SU5UX0hBTEYJCUJJVCgyKQotI2RlZmluZSBFRE1BX1RDRF9DU1JfRF9SRVEJCUJJVCgzKQotI2Rl ZmluZSBFRE1BX1RDRF9DU1JfRV9TRwkJQklUKDQpCi0jZGVmaW5lIEVETUFfVENEX0NTUl9FX0xJ TksJCUJJVCg1KQotI2RlZmluZSBFRE1BX1RDRF9DU1JfQUNUSVZFCQlCSVQoNikKLSNkZWZpbmUg RURNQV9UQ0RfQ1NSX0RPTkUJCUJJVCg3KQotCi0jZGVmaW5lIEVETUFNVVhfQ0hDRkdfRElTCQkw eDAKLSNkZWZpbmUgRURNQU1VWF9DSENGR19FTkJMCQkweDgwCi0jZGVmaW5lIEVETUFNVVhfQ0hD RkdfU09VUkNFKG4pCQkoKG4pICYgMHgzRikKLQotI2RlZmluZSBETUFNVVhfTlIJMgotCi0jZGVm aW5lIEZTTF9FRE1BX0JVU1dJRFRIUwlCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURSkgfCBc Ci0JCQkJQklUKERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTKSB8IFwKLQkJCQlCSVQoRE1BX1NM QVZFX0JVU1dJRFRIXzRfQllURVMpIHwgXAotCQkJCUJJVChETUFfU0xBVkVfQlVTV0lEVEhfOF9C WVRFUykKLWVudW0gZnNsX2VkbWFfcG1fc3RhdGUgewotCVJVTk5JTkcgPSAwLAotCVNVU1BFTkRF RCwKLX07Ci0KLXN0cnVjdCBmc2xfZWRtYV9od190Y2QgewotCV9fbGUzMglzYWRkcjsKLQlfX2xl MTYJc29mZjsKLQlfX2xlMTYJYXR0cjsKLQlfX2xlMzIJbmJ5dGVzOwotCV9fbGUzMglzbGFzdDsK LQlfX2xlMzIJZGFkZHI7Ci0JX19sZTE2CWRvZmY7Ci0JX19sZTE2CWNpdGVyOwotCV9fbGUzMglk bGFzdF9zZ2E7Ci0JX19sZTE2CWNzcjsKLQlfX2xlMTYJYml0ZXI7Ci19OwotCi1zdHJ1Y3QgZnNs X2VkbWFfc3dfdGNkIHsKLQlkbWFfYWRkcl90CQkJcHRjZDsKLQlzdHJ1Y3QgZnNsX2VkbWFfaHdf dGNkCQkqdnRjZDsKLX07Ci0KLXN0cnVjdCBmc2xfZWRtYV9zbGF2ZV9jb25maWcgewotCWVudW0g ZG1hX3RyYW5zZmVyX2RpcmVjdGlvbglkaXI7Ci0JZW51bSBkbWFfc2xhdmVfYnVzd2lkdGgJCWFk ZHJfd2lkdGg7Ci0JdTMyCQkJCWRldl9hZGRyOwotCXUzMgkJCQlidXJzdDsKLQl1MzIJCQkJYXR0 cjsKLX07Ci0KLXN0cnVjdCBmc2xfZWRtYV9jaGFuIHsKLQlzdHJ1Y3QgdmlydF9kbWFfY2hhbgkJ dmNoYW47Ci0JZW51bSBkbWFfc3RhdHVzCQkJc3RhdHVzOwotCWVudW0gZnNsX2VkbWFfcG1fc3Rh dGUJCXBtX3N0YXRlOwotCWJvb2wJCQkJaWRsZTsKLQl1MzIJCQkJc2xhdmVfaWQ7Ci0Jc3RydWN0 IGZzbF9lZG1hX2VuZ2luZQkJKmVkbWE7Ci0Jc3RydWN0IGZzbF9lZG1hX2Rlc2MJCSplZGVzYzsK LQlzdHJ1Y3QgZnNsX2VkbWFfc2xhdmVfY29uZmlnCWZzYzsKLQlzdHJ1Y3QgZG1hX3Bvb2wJCQkq dGNkX3Bvb2w7Ci19OwotCi1zdHJ1Y3QgZnNsX2VkbWFfZGVzYyB7Ci0Jc3RydWN0IHZpcnRfZG1h X2Rlc2MJCXZkZXNjOwotCXN0cnVjdCBmc2xfZWRtYV9jaGFuCQkqZWNoYW47Ci0JYm9vbAkJCQlp c2N5Y2xpYzsKLQl1bnNpZ25lZCBpbnQJCQluX3RjZHM7Ci0Jc3RydWN0IGZzbF9lZG1hX3N3X3Rj ZAkJdGNkW107Ci19OwotCi1zdHJ1Y3QgZnNsX2VkbWFfZW5naW5lIHsKLQlzdHJ1Y3QgZG1hX2Rl dmljZQlkbWFfZGV2OwotCXZvaWQgX19pb21lbQkJKm1lbWJhc2U7Ci0Jdm9pZCBfX2lvbWVtCQkq bXV4YmFzZVtETUFNVVhfTlJdOwotCXN0cnVjdCBjbGsJCSptdXhjbGtbRE1BTVVYX05SXTsKLQlz dHJ1Y3QgbXV0ZXgJCWZzbF9lZG1hX211dGV4OwotCXUzMgkJCW5fY2hhbnM7Ci0JaW50CQkJdHhp cnE7Ci0JaW50CQkJZXJyaXJxOwotCWJvb2wJCQliaWdfZW5kaWFuOwotCXN0cnVjdCBmc2xfZWRt YV9jaGFuCWNoYW5zW107Ci19OwotCi0vKgotICogUi9XIGZ1bmN0aW9ucyBmb3IgYmlnLSBvciBs aXR0bGUtZW5kaWFuIHJlZ2lzdGVyczoKLSAqIFRoZSBlRE1BIGNvbnRyb2xsZXIncyBlbmRpYW4g aXMgaW5kZXBlbmRlbnQgb2YgdGhlIENQVSBjb3JlJ3MgZW5kaWFuLgotICogRm9yIHRoZSBiaWct ZW5kaWFuIElQIG1vZHVsZSwgdGhlIG9mZnNldCBmb3IgOC1iaXQgb3IgMTYtYml0IHJlZ2lzdGVy cwotICogc2hvdWxkIGFsc28gYmUgc3dhcHBlZCBvcHBvc2l0ZSB0byB0aGF0IGluIGxpdHRsZS1l bmRpYW4gSVAuCi0gKi8KLQotc3RhdGljIHUzMiBlZG1hX3JlYWRsKHN0cnVjdCBmc2xfZWRtYV9l bmdpbmUgKmVkbWEsIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlpZiAoZWRtYS0+YmlnX2VuZGlh bikKLQkJcmV0dXJuIGlvcmVhZDMyYmUoYWRkcik7Ci0JZWxzZQotCQlyZXR1cm4gaW9yZWFkMzIo YWRkcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGVkbWFfd3JpdGViKHN0cnVjdCBmc2xfZWRtYV9lbmdp bmUgKmVkbWEsIHU4IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCS8qIHN3YXAgdGhlIHJl ZyBvZmZzZXQgZm9yIHRoZXNlIGluIGJpZy1lbmRpYW4gbW9kZSAqLwotCWlmIChlZG1hLT5iaWdf ZW5kaWFuKQotCQlpb3dyaXRlOCh2YWwsICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcp YWRkciBeIDB4MykpOwotCWVsc2UKLQkJaW93cml0ZTgodmFsLCBhZGRyKTsKLX0KLQotc3RhdGlj IHZvaWQgZWRtYV93cml0ZXcoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTE2IHZhbCwg dm9pZCBfX2lvbWVtICphZGRyKQotewotCS8qIHN3YXAgdGhlIHJlZyBvZmZzZXQgZm9yIHRoZXNl IGluIGJpZy1lbmRpYW4gbW9kZSAqLwotCWlmIChlZG1hLT5iaWdfZW5kaWFuKQotCQlpb3dyaXRl MTZiZSh2YWwsICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpYWRkciBeIDB4MikpOwot CWVsc2UKLQkJaW93cml0ZTE2KHZhbCwgYWRkcik7Ci19CisjaW5jbHVkZSAiZnNsLWVkbWEtY29t bW9uLmgiCiAKLXN0YXRpYyB2b2lkIGVkbWFfd3JpdGVsKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUg KmVkbWEsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlpZiAoZWRtYS0+YmlnX2Vu ZGlhbikKLQkJaW93cml0ZTMyYmUodmFsLCBhZGRyKTsKLQllbHNlCi0JCWlvd3JpdGUzMih2YWws IGFkZHIpOwotfQotCi1zdGF0aWMgc3RydWN0IGZzbF9lZG1hX2NoYW4gKnRvX2ZzbF9lZG1hX2No YW4oc3RydWN0IGRtYV9jaGFuICpjaGFuKQotewotCXJldHVybiBjb250YWluZXJfb2YoY2hhbiwg c3RydWN0IGZzbF9lZG1hX2NoYW4sIHZjaGFuLmNoYW4pOwotfQotCi1zdGF0aWMgc3RydWN0IGZz bF9lZG1hX2Rlc2MgKnRvX2ZzbF9lZG1hX2Rlc2Moc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkKQot ewotCXJldHVybiBjb250YWluZXJfb2YodmQsIHN0cnVjdCBmc2xfZWRtYV9kZXNjLCB2ZGVzYyk7 Ci19Ci0KLXN0YXRpYyB2b2lkIGZzbF9lZG1hX2VuYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRt YV9jaGFuICpmc2xfY2hhbikKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBmc2xfY2hhbi0+ZWRt YS0+bWVtYmFzZTsKLQl1MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFuX2lkOwotCi0J ZWRtYV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIEVETUFfU0VFSV9TRUVJKGNoKSwgYWRkciArIEVE TUFfU0VFSSk7Ci0JZWRtYV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIGNoLCBhZGRyICsgRURNQV9T RVJRKTsKLX0KLQotc3RhdGljIHZvaWQgZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KHN0cnVjdCBm c2xfZWRtYV9jaGFuICpmc2xfY2hhbikKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBmc2xfY2hh bi0+ZWRtYS0+bWVtYmFzZTsKLQl1MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFuX2lk OwotCi0JZWRtYV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIGNoLCBhZGRyICsgRURNQV9DRVJRKTsK LQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgRURNQV9DRUVJX0NFRUkoY2gpLCBhZGRyICsg RURNQV9DRUVJKTsKLX0KKyNkZWZpbmUgRURNQU1VWF9DSENGR19ESVMJCTAKKyNkZWZpbmUgRURN QU1VWF9DSENGR19FTkJMCQlCSVQoNykKKyNkZWZpbmUgRURNQU1VWF9DSENGR19TT1VSQ0UobikJ CSgobikgJiBHRU5NQVNLKDYsIDApKQogCiBzdGF0aWMgdm9pZCBmc2xfZWRtYV9jaGFuX211eChz dHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCiAJCQl1bnNpZ25lZCBpbnQgc2xvdCwgYm9v bCBlbmFibGUpCkBAIC0yNjgsNDE2ICszNSwyMCBAQCBzdGF0aWMgdm9pZCBmc2xfZWRtYV9jaGFu X211eChzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCiAJCWlvd3JpdGU4KEVETUFNVVhf Q0hDRkdfRElTLCBtdXhhZGRyICsgY2hfb2ZmKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBm c2xfZWRtYV9nZXRfdGNkX2F0dHIoZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggYWRkcl93aWR0aCkK LXsKLQlzd2l0Y2ggKGFkZHJfd2lkdGgpIHsKLQljYXNlIDE6Ci0JCXJldHVybiBFRE1BX1RDRF9B VFRSX1NTSVpFXzhCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzhCSVQ7Ci0JY2FzZSAyOgotCQly ZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV8xNkJJVCB8IEVETUFfVENEX0FUVFJfRFNJWkVfMTZC SVQ7Ci0JY2FzZSA0OgotCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVCB8IEVETUFf VENEX0FUVFJfRFNJWkVfMzJCSVQ7Ci0JY2FzZSA4OgotCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9T U0laRV82NEJJVCB8IEVETUFfVENEX0FUVFJfRFNJWkVfNjRCSVQ7Ci0JZGVmYXVsdDoKLQkJcmV0 dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfMzJCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzMyQklU OwotCX0KLX0KLQotc3RhdGljIHZvaWQgZnNsX2VkbWFfZnJlZV9kZXNjKHN0cnVjdCB2aXJ0X2Rt YV9kZXNjICp2ZGVzYykKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZnNsX2Rlc2M7Ci0JaW50 IGk7Ci0KLQlmc2xfZGVzYyA9IHRvX2ZzbF9lZG1hX2Rlc2ModmRlc2MpOwotCWZvciAoaSA9IDA7 IGkgPCBmc2xfZGVzYy0+bl90Y2RzOyBpKyspCi0JCWRtYV9wb29sX2ZyZWUoZnNsX2Rlc2MtPmVj aGFuLT50Y2RfcG9vbCwgZnNsX2Rlc2MtPnRjZFtpXS52dGNkLAotCQkJICAgICAgZnNsX2Rlc2Mt PnRjZFtpXS5wdGNkKTsKLQlrZnJlZShmc2xfZGVzYyk7Ci19Ci0KLXN0YXRpYyBpbnQgZnNsX2Vk bWFfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCi17Ci0Jc3RydWN0IGZzbF9l ZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKLQl1bnNpZ25lZCBs b25nIGZsYWdzOwotCUxJU1RfSEVBRChoZWFkKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xf Y2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCWZzbF9lZG1hX2Rpc2FibGVfcmVxdWVzdChmc2xf Y2hhbik7Ci0JZnNsX2NoYW4tPmVkZXNjID0gTlVMTDsKLQlmc2xfY2hhbi0+aWRsZSA9IHRydWU7 Ci0JdmNoYW5fZ2V0X2FsbF9kZXNjcmlwdG9ycygmZnNsX2NoYW4tPnZjaGFuLCAmaGVhZCk7Ci0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQl2 Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3QoJmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOwotCXJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IGZzbF9lZG1hX3BhdXNlKHN0cnVjdCBkbWFfY2hhbiAqY2hh bikKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFu KGNoYW4pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNs X2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQlpZiAoZnNsX2NoYW4tPmVkZXNjKSB7Ci0JCWZz bF9lZG1hX2Rpc2FibGVfcmVxdWVzdChmc2xfY2hhbik7Ci0JCWZzbF9jaGFuLT5zdGF0dXMgPSBE TUFfUEFVU0VEOwotCQlmc2xfY2hhbi0+aWRsZSA9IHRydWU7Ci0JfQotCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbnQgZnNsX2VkbWFfcmVzdW1lKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKLXsKLQlz dHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwot CXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZj aGFuLmxvY2ssIGZsYWdzKTsKLQlpZiAoZnNsX2NoYW4tPmVkZXNjKSB7Ci0JCWZzbF9lZG1hX2Vu YWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKLQkJZnNsX2NoYW4tPnN0YXR1cyA9IERNQV9JTl9QUk9H UkVTUzsKLQkJZnNsX2NoYW4tPmlkbGUgPSBmYWxzZTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCBmc2xfZWRtYV9zbGF2ZV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAotCQkJ CSBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY2ZnKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFu ICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0KLQlmc2xfY2hhbi0+ZnNjLmRp ciA9IGNmZy0+ZGlyZWN0aW9uOwotCWlmIChjZmctPmRpcmVjdGlvbiA9PSBETUFfREVWX1RPX01F TSkgewotCQlmc2xfY2hhbi0+ZnNjLmRldl9hZGRyID0gY2ZnLT5zcmNfYWRkcjsKLQkJZnNsX2No YW4tPmZzYy5hZGRyX3dpZHRoID0gY2ZnLT5zcmNfYWRkcl93aWR0aDsKLQkJZnNsX2NoYW4tPmZz Yy5idXJzdCA9IGNmZy0+c3JjX21heGJ1cnN0OwotCQlmc2xfY2hhbi0+ZnNjLmF0dHIgPSBmc2xf ZWRtYV9nZXRfdGNkX2F0dHIoY2ZnLT5zcmNfYWRkcl93aWR0aCk7Ci0JfSBlbHNlIGlmIChjZmct PmRpcmVjdGlvbiA9PSBETUFfTUVNX1RPX0RFVikgewotCQlmc2xfY2hhbi0+ZnNjLmRldl9hZGRy ID0gY2ZnLT5kc3RfYWRkcjsKLQkJZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoID0gY2ZnLT5kc3Rf YWRkcl93aWR0aDsKLQkJZnNsX2NoYW4tPmZzYy5idXJzdCA9IGNmZy0+ZHN0X21heGJ1cnN0Owot CQlmc2xfY2hhbi0+ZnNjLmF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0dHIoY2ZnLT5kc3RfYWRk cl93aWR0aCk7Ci0JfSBlbHNlIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIHNpemVfdCBmc2xfZWRtYV9kZXNjX3Jlc2lkdWUoc3RydWN0IGZzbF9lZG1h X2NoYW4gKmZzbF9jaGFuLAotCQlzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmRlc2MsIGJvb2wgaW5f cHJvZ3Jlc3MpCi17Ci0Jc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmVkZXNjID0gZnNsX2NoYW4tPmVk ZXNjOwotCXZvaWQgX19pb21lbSAqYWRkciA9IGZzbF9jaGFuLT5lZG1hLT5tZW1iYXNlOwotCXUz MiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7Ci0JZW51bSBkbWFfdHJhbnNmZXJf ZGlyZWN0aW9uIGRpciA9IGZzbF9jaGFuLT5mc2MuZGlyOwotCWRtYV9hZGRyX3QgY3VyX2FkZHIs IGRtYV9hZGRyOwotCXNpemVfdCBsZW4sIHNpemU7Ci0JaW50IGk7Ci0KLQkvKiBjYWxjdWxhdGUg dGhlIHRvdGFsIHNpemUgaW4gdGhpcyBkZXNjICovCi0JZm9yIChsZW4gPSBpID0gMDsgaSA8IGZz bF9jaGFuLT5lZGVzYy0+bl90Y2RzOyBpKyspCi0JCWxlbiArPSBsZTMyX3RvX2NwdShlZGVzYy0+ dGNkW2ldLnZ0Y2QtPm5ieXRlcykKLQkJCSogbGUxNl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNk LT5iaXRlcik7Ci0KLQlpZiAoIWluX3Byb2dyZXNzKQotCQlyZXR1cm4gbGVuOwotCi0JaWYgKGRp ciA9PSBETUFfTUVNX1RPX0RFVikKLQkJY3VyX2FkZHIgPSBlZG1hX3JlYWRsKGZzbF9jaGFuLT5l ZG1hLCBhZGRyICsgRURNQV9UQ0RfU0FERFIoY2gpKTsKLQllbHNlCi0JCWN1cl9hZGRyID0gZWRt YV9yZWFkbChmc2xfY2hhbi0+ZWRtYSwgYWRkciArIEVETUFfVENEX0RBRERSKGNoKSk7Ci0KLQkv KiBmaWd1cmUgb3V0IHRoZSBmaW5pc2hlZCBhbmQgY2FsY3VsYXRlIHRoZSByZXNpZHVlICovCi0J Zm9yIChpID0gMDsgaSA8IGZzbF9jaGFuLT5lZGVzYy0+bl90Y2RzOyBpKyspIHsKLQkJc2l6ZSA9 IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+bmJ5dGVzKQotCQkJKiBsZTE2X3RvX2Nw dShlZGVzYy0+dGNkW2ldLnZ0Y2QtPmJpdGVyKTsKLQkJaWYgKGRpciA9PSBETUFfTUVNX1RPX0RF VikKLQkJCWRtYV9hZGRyID0gbGUzMl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNkLT5zYWRkcik7 Ci0JCWVsc2UKLQkJCWRtYV9hZGRyID0gbGUzMl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNkLT5k YWRkcik7Ci0KLQkJbGVuIC09IHNpemU7Ci0JCWlmIChjdXJfYWRkciA+PSBkbWFfYWRkciAmJiBj dXJfYWRkciA8IGRtYV9hZGRyICsgc2l6ZSkgewotCQkJbGVuICs9IGRtYV9hZGRyICsgc2l6ZSAt IGN1cl9hZGRyOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0 aWMgZW51bSBkbWFfc3RhdHVzIGZzbF9lZG1hX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4sCi0JCWRtYV9jb29raWVfdCBjb29raWUsIHN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUp Ci17Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihj aGFuKTsKLQlzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmRlc2M7Ci0JZW51bSBkbWFfc3RhdHVzIHN0 YXR1czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3RhdHVzID0gZG1hX2Nvb2tpZV9zdGF0 dXMoY2hhbiwgY29va2llLCB0eHN0YXRlKTsKLQlpZiAoc3RhdHVzID09IERNQV9DT01QTEVURSkK LQkJcmV0dXJuIHN0YXR1czsKLQotCWlmICghdHhzdGF0ZSkKLQkJcmV0dXJuIGZzbF9jaGFuLT5z dGF0dXM7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdz KTsKLQl2ZGVzYyA9IHZjaGFuX2ZpbmRfZGVzYygmZnNsX2NoYW4tPnZjaGFuLCBjb29raWUpOwot CWlmIChmc2xfY2hhbi0+ZWRlc2MgJiYgY29va2llID09IGZzbF9jaGFuLT5lZGVzYy0+dmRlc2Mu dHguY29va2llKQotCQl0eHN0YXRlLT5yZXNpZHVlID0gZnNsX2VkbWFfZGVzY19yZXNpZHVlKGZz bF9jaGFuLCB2ZGVzYywgdHJ1ZSk7Ci0JZWxzZSBpZiAodmRlc2MpCi0JCXR4c3RhdGUtPnJlc2lk dWUgPSBmc2xfZWRtYV9kZXNjX3Jlc2lkdWUoZnNsX2NoYW4sIHZkZXNjLCBmYWxzZSk7Ci0JZWxz ZQotCQl0eHN0YXRlLT5yZXNpZHVlID0gMDsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZz bF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gZnNsX2NoYW4tPnN0YXR1czsK LX0KLQotc3RhdGljIHZvaWQgZnNsX2VkbWFfc2V0X3RjZF9yZWdzKHN0cnVjdCBmc2xfZWRtYV9j aGFuICpmc2xfY2hhbiwKLQkJCQkgIHN0cnVjdCBmc2xfZWRtYV9od190Y2QgKnRjZCkKLXsKLQlz dHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hID0gZnNsX2NoYW4tPmVkbWE7Ci0Jdm9pZCBfX2lv bWVtICphZGRyID0gZnNsX2NoYW4tPmVkbWEtPm1lbWJhc2U7Ci0JdTMyIGNoID0gZnNsX2NoYW4t PnZjaGFuLmNoYW4uY2hhbl9pZDsKLQotCS8qCi0JICogVENEIHBhcmFtZXRlcnMgYXJlIHN0b3Jl ZCBpbiBzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkIGluIGxpdHRsZQotCSAqIGVuZGlhbiBmb3JtYXQu IEhvd2V2ZXIsIHdlIG5lZWQgdG8gbG9hZCB0aGUgVENEIHJlZ2lzdGVycyBpbgotCSAqIGJpZy0g b3IgbGl0dGxlLWVuZGlhbiBvYmV5aW5nIHRoZSBlRE1BIGVuZ2luZSBtb2RlbCBlbmRpYW4uCi0J ICovCi0JZWRtYV93cml0ZXcoZWRtYSwgMCwgYWRkciArIEVETUFfVENEX0NTUihjaCkpOwotCWVk bWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+c2FkZHIpLCBhZGRyICsgRURNQV9UQ0Rf U0FERFIoY2gpKTsKLQllZG1hX3dyaXRlbChlZG1hLCBsZTMyX3RvX2NwdSh0Y2QtPmRhZGRyKSwg YWRkciArIEVETUFfVENEX0RBRERSKGNoKSk7Ci0KLQllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3Rv X2NwdSh0Y2QtPmF0dHIpLCBhZGRyICsgRURNQV9UQ0RfQVRUUihjaCkpOwotCWVkbWFfd3JpdGV3 KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+c29mZiksIGFkZHIgKyBFRE1BX1RDRF9TT0ZGKGNoKSk7 Ci0KLQllZG1hX3dyaXRlbChlZG1hLCBsZTMyX3RvX2NwdSh0Y2QtPm5ieXRlcyksIGFkZHIgKyBF RE1BX1RDRF9OQllURVMoY2gpKTsKLQllZG1hX3dyaXRlbChlZG1hLCBsZTMyX3RvX2NwdSh0Y2Qt PnNsYXN0KSwgYWRkciArIEVETUFfVENEX1NMQVNUKGNoKSk7Ci0KLQllZG1hX3dyaXRldyhlZG1h LCBsZTE2X3RvX2NwdSh0Y2QtPmNpdGVyKSwgYWRkciArIEVETUFfVENEX0NJVEVSKGNoKSk7Ci0J ZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5iaXRlciksIGFkZHIgKyBFRE1BX1RD RF9CSVRFUihjaCkpOwotCWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+ZG9mZiks IGFkZHIgKyBFRE1BX1RDRF9ET0ZGKGNoKSk7Ci0KLQllZG1hX3dyaXRlbChlZG1hLCBsZTMyX3Rv X2NwdSh0Y2QtPmRsYXN0X3NnYSksIGFkZHIgKyBFRE1BX1RDRF9ETEFTVF9TR0EoY2gpKTsKLQot CWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+Y3NyKSwgYWRkciArIEVETUFfVENE X0NTUihjaCkpOwotfQotCi1zdGF0aWMgaW5saW5lCi12b2lkIGZzbF9lZG1hX2ZpbGxfdGNkKHN0 cnVjdCBmc2xfZWRtYV9od190Y2QgKnRjZCwgdTMyIHNyYywgdTMyIGRzdCwKLQkJICAgICAgIHUx NiBhdHRyLCB1MTYgc29mZiwgdTMyIG5ieXRlcywgdTMyIHNsYXN0LCB1MTYgY2l0ZXIsCi0JCSAg ICAgICB1MTYgYml0ZXIsIHUxNiBkb2ZmLCB1MzIgZGxhc3Rfc2dhLCBib29sIG1ham9yX2ludCwK LQkJICAgICAgIGJvb2wgZGlzYWJsZV9yZXEsIGJvb2wgZW5hYmxlX3NnKQotewotCXUxNiBjc3Ig PSAwOwotCi0JLyoKLQkgKiBlRE1BIGhhcmR3YXJlIFNHcyByZXF1aXJlIHRoZSBUQ0RzIHRvIGJl IHN0b3JlZCBpbiBsaXR0bGUKLQkgKiBlbmRpYW4gZm9ybWF0IGlycmVzcGVjdGl2ZSBvZiB0aGUg cmVnaXN0ZXIgZW5kaWFuIG1vZGVsLgotCSAqIFNvIHdlIHB1dCB0aGUgdmFsdWUgaW4gbGl0dGxl IGVuZGlhbiBpbiBtZW1vcnksIHdhaXRpbmcKLQkgKiBmb3IgZnNsX2VkbWFfc2V0X3RjZF9yZWdz IGRvaW5nIHRoZSBzd2FwLgotCSAqLwotCXRjZC0+c2FkZHIgPSBjcHVfdG9fbGUzMihzcmMpOwot CXRjZC0+ZGFkZHIgPSBjcHVfdG9fbGUzMihkc3QpOwotCi0JdGNkLT5hdHRyID0gY3B1X3RvX2xl MTYoYXR0cik7Ci0KLQl0Y2QtPnNvZmYgPSBjcHVfdG9fbGUxNihFRE1BX1RDRF9TT0ZGX1NPRkYo c29mZikpOwotCi0JdGNkLT5uYnl0ZXMgPSBjcHVfdG9fbGUzMihFRE1BX1RDRF9OQllURVNfTkJZ VEVTKG5ieXRlcykpOwotCXRjZC0+c2xhc3QgPSBjcHVfdG9fbGUzMihFRE1BX1RDRF9TTEFTVF9T TEFTVChzbGFzdCkpOwotCi0JdGNkLT5jaXRlciA9IGNwdV90b19sZTE2KEVETUFfVENEX0NJVEVS X0NJVEVSKGNpdGVyKSk7Ci0JdGNkLT5kb2ZmID0gY3B1X3RvX2xlMTYoRURNQV9UQ0RfRE9GRl9E T0ZGKGRvZmYpKTsKLQotCXRjZC0+ZGxhc3Rfc2dhID0gY3B1X3RvX2xlMzIoRURNQV9UQ0RfRExB U1RfU0dBX0RMQVNUX1NHQShkbGFzdF9zZ2EpKTsKLQotCXRjZC0+Yml0ZXIgPSBjcHVfdG9fbGUx NihFRE1BX1RDRF9CSVRFUl9CSVRFUihiaXRlcikpOwotCWlmIChtYWpvcl9pbnQpCi0JCWNzciB8 PSBFRE1BX1RDRF9DU1JfSU5UX01BSk9SOwotCi0JaWYgKGRpc2FibGVfcmVxKQotCQljc3IgfD0g RURNQV9UQ0RfQ1NSX0RfUkVROwotCi0JaWYgKGVuYWJsZV9zZykKLQkJY3NyIHw9IEVETUFfVENE X0NTUl9FX1NHOwotCi0JdGNkLT5jc3IgPSBjcHVfdG9fbGUxNihjc3IpOwotfQotCi1zdGF0aWMg c3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9lZG1hX2FsbG9jX2Rlc2Moc3RydWN0IGZzbF9lZG1h X2NoYW4gKmZzbF9jaGFuLAotCQlpbnQgc2dfbGVuKQotewotCXN0cnVjdCBmc2xfZWRtYV9kZXNj ICpmc2xfZGVzYzsKLQlpbnQgaTsKLQotCWZzbF9kZXNjID0ga3phbGxvYyhzaXplb2YoKmZzbF9k ZXNjKSArIHNpemVvZihzdHJ1Y3QgZnNsX2VkbWFfc3dfdGNkKSAqIHNnX2xlbiwKLQkJCQlHRlBf Tk9XQUlUKTsKLQlpZiAoIWZzbF9kZXNjKQotCQlyZXR1cm4gTlVMTDsKLQotCWZzbF9kZXNjLT5l Y2hhbiA9IGZzbF9jaGFuOwotCWZzbF9kZXNjLT5uX3RjZHMgPSBzZ19sZW47Ci0JZm9yIChpID0g MDsgaSA8IHNnX2xlbjsgaSsrKSB7Ci0JCWZzbF9kZXNjLT50Y2RbaV0udnRjZCA9IGRtYV9wb29s X2FsbG9jKGZzbF9jaGFuLT50Y2RfcG9vbCwKLQkJCQkJR0ZQX05PV0FJVCwgJmZzbF9kZXNjLT50 Y2RbaV0ucHRjZCk7Ci0JCWlmICghZnNsX2Rlc2MtPnRjZFtpXS52dGNkKQotCQkJZ290byBlcnI7 Ci0JfQotCXJldHVybiBmc2xfZGVzYzsKLQotZXJyOgotCXdoaWxlICgtLWkgPj0gMCkKLQkJZG1h X3Bvb2xfZnJlZShmc2xfY2hhbi0+dGNkX3Bvb2wsIGZzbF9kZXNjLT50Y2RbaV0udnRjZCwKLQkJ CQlmc2xfZGVzYy0+dGNkW2ldLnB0Y2QpOwotCWtmcmVlKGZzbF9kZXNjKTsKLQlyZXR1cm4gTlVM TDsKLX0KLQotc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNsX2VkbWFf cHJlcF9kbWFfY3ljbGljKAotCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgZG1h X2FkZHIsIHNpemVfdCBidWZfbGVuLAotCQlzaXplX3QgcGVyaW9kX2xlbiwgZW51bSBkbWFfdHJh bnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlz dHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwot CXN0cnVjdCBmc2xfZWRtYV9kZXNjICpmc2xfZGVzYzsKLQlkbWFfYWRkcl90IGRtYV9idWZfbmV4 dDsKLQlpbnQgc2dfbGVuLCBpOwotCXUzMiBzcmNfYWRkciwgZHN0X2FkZHIsIGxhc3Rfc2csIG5i eXRlczsKLQl1MTYgc29mZiwgZG9mZiwgaXRlcjsKLQotCWlmICghaXNfc2xhdmVfZGlyZWN0aW9u KGZzbF9jaGFuLT5mc2MuZGlyKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzZ19sZW4gPSBidWZfbGVu IC8gcGVyaW9kX2xlbjsKLQlmc2xfZGVzYyA9IGZzbF9lZG1hX2FsbG9jX2Rlc2MoZnNsX2NoYW4s IHNnX2xlbik7Ci0JaWYgKCFmc2xfZGVzYykKLQkJcmV0dXJuIE5VTEw7Ci0JZnNsX2Rlc2MtPmlz Y3ljbGljID0gdHJ1ZTsKLQotCWRtYV9idWZfbmV4dCA9IGRtYV9hZGRyOwotCW5ieXRlcyA9IGZz bF9jaGFuLT5mc2MuYWRkcl93aWR0aCAqIGZzbF9jaGFuLT5mc2MuYnVyc3Q7Ci0JaXRlciA9IHBl cmlvZF9sZW4gLyBuYnl0ZXM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2dfbGVuOyBpKyspIHsKLQkJ aWYgKGRtYV9idWZfbmV4dCA+PSBkbWFfYWRkciArIGJ1Zl9sZW4pCi0JCQlkbWFfYnVmX25leHQg PSBkbWFfYWRkcjsKLQotCQkvKiBnZXQgbmV4dCBzZydzIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQkJ bGFzdF9zZyA9IGZzbF9kZXNjLT50Y2RbKGkgKyAxKSAlIHNnX2xlbl0ucHRjZDsKLQotCQlpZiAo ZnNsX2NoYW4tPmZzYy5kaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKLQkJCXNyY19hZGRyID0gZG1h X2J1Zl9uZXh0OwotCQkJZHN0X2FkZHIgPSBmc2xfY2hhbi0+ZnNjLmRldl9hZGRyOwotCQkJc29m ZiA9IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aDsKLQkJCWRvZmYgPSAwOwotCQl9IGVsc2Ugewot CQkJc3JjX2FkZHIgPSBmc2xfY2hhbi0+ZnNjLmRldl9hZGRyOwotCQkJZHN0X2FkZHIgPSBkbWFf YnVmX25leHQ7Ci0JCQlzb2ZmID0gMDsKLQkJCWRvZmYgPSBmc2xfY2hhbi0+ZnNjLmFkZHJfd2lk dGg7Ci0JCX0KLQotCQlmc2xfZWRtYV9maWxsX3RjZChmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QsIHNy Y19hZGRyLCBkc3RfYWRkciwKLQkJCQkgIGZzbF9jaGFuLT5mc2MuYXR0ciwgc29mZiwgbmJ5dGVz LCAwLCBpdGVyLAotCQkJCSAgaXRlciwgZG9mZiwgbGFzdF9zZywgdHJ1ZSwgZmFsc2UsIHRydWUp OwotCQlkbWFfYnVmX25leHQgKz0gcGVyaW9kX2xlbjsKLQl9Ci0KLQlyZXR1cm4gdmNoYW5fdHhf cHJlcCgmZnNsX2NoYW4tPnZjaGFuLCAmZnNsX2Rlc2MtPnZkZXNjLCBmbGFncyk7Ci19Ci0KLXN0 YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmZzbF9lZG1hX3ByZXBfc2xhdmVf c2coCi0JCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0J CXVuc2lnbmVkIGludCBzZ19sZW4sIGVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXJlY3Rp b24sCi0JCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNvbnRleHQpCi17Ci0Jc3RydWN0IGZz bF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKLQlzdHJ1Y3Qg ZnNsX2VkbWFfZGVzYyAqZnNsX2Rlc2M7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQl1MzIg c3JjX2FkZHIsIGRzdF9hZGRyLCBsYXN0X3NnLCBuYnl0ZXM7Ci0JdTE2IHNvZmYsIGRvZmYsIGl0 ZXI7Ci0JaW50IGk7Ci0KLQlpZiAoIWlzX3NsYXZlX2RpcmVjdGlvbihmc2xfY2hhbi0+ZnNjLmRp cikpCi0JCXJldHVybiBOVUxMOwotCi0JZnNsX2Rlc2MgPSBmc2xfZWRtYV9hbGxvY19kZXNjKGZz bF9jaGFuLCBzZ19sZW4pOwotCWlmICghZnNsX2Rlc2MpCi0JCXJldHVybiBOVUxMOwotCWZzbF9k ZXNjLT5pc2N5Y2xpYyA9IGZhbHNlOwotCi0JbmJ5dGVzID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dp ZHRoICogZnNsX2NoYW4tPmZzYy5idXJzdDsKLQlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ19sZW4s IGkpIHsKLQkJLyogZ2V0IG5leHQgc2cncyBwaHlzaWNhbCBhZGRyZXNzICovCi0JCWxhc3Rfc2cg PSBmc2xfZGVzYy0+dGNkWyhpICsgMSkgJSBzZ19sZW5dLnB0Y2Q7Ci0KLQkJaWYgKGZzbF9jaGFu LT5mc2MuZGlyID09IERNQV9NRU1fVE9fREVWKSB7Ci0JCQlzcmNfYWRkciA9IHNnX2RtYV9hZGRy ZXNzKHNnKTsKLQkJCWRzdF9hZGRyID0gZnNsX2NoYW4tPmZzYy5kZXZfYWRkcjsKLQkJCXNvZmYg PSBmc2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGg7Ci0JCQlkb2ZmID0gMDsKLQkJfSBlbHNlIHsKLQkJ CXNyY19hZGRyID0gZnNsX2NoYW4tPmZzYy5kZXZfYWRkcjsKLQkJCWRzdF9hZGRyID0gc2dfZG1h X2FkZHJlc3Moc2cpOwotCQkJc29mZiA9IDA7Ci0JCQlkb2ZmID0gZnNsX2NoYW4tPmZzYy5hZGRy X3dpZHRoOwotCQl9Ci0KLQkJaXRlciA9IHNnX2RtYV9sZW4oc2cpIC8gbmJ5dGVzOwotCQlpZiAo aSA8IHNnX2xlbiAtIDEpIHsKLQkJCWxhc3Rfc2cgPSBmc2xfZGVzYy0+dGNkWyhpICsgMSldLnB0 Y2Q7Ci0JCQlmc2xfZWRtYV9maWxsX3RjZChmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QsIHNyY19hZGRy LAotCQkJCQkgIGRzdF9hZGRyLCBmc2xfY2hhbi0+ZnNjLmF0dHIsIHNvZmYsCi0JCQkJCSAgbmJ5 dGVzLCAwLCBpdGVyLCBpdGVyLCBkb2ZmLCBsYXN0X3NnLAotCQkJCQkgIGZhbHNlLCBmYWxzZSwg dHJ1ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlsYXN0X3NnID0gMDsKLQkJCWZzbF9lZG1hX2ZpbGxfdGNk KGZzbF9kZXNjLT50Y2RbaV0udnRjZCwgc3JjX2FkZHIsCi0JCQkJCSAgZHN0X2FkZHIsIGZzbF9j aGFuLT5mc2MuYXR0ciwgc29mZiwKLQkJCQkJICBuYnl0ZXMsIDAsIGl0ZXIsIGl0ZXIsIGRvZmYs IGxhc3Rfc2csCi0JCQkJCSAgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOwotCQl9Ci0JfQotCi0JcmV0dXJu IHZjaGFuX3R4X3ByZXAoJmZzbF9jaGFuLT52Y2hhbiwgJmZzbF9kZXNjLT52ZGVzYywgZmxhZ3Mp OwotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV94ZmVyX2Rlc2Moc3RydWN0IGZzbF9lZG1hX2No YW4gKmZzbF9jaGFuKQotewotCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYzsKLQotCXZkZXNj ID0gdmNoYW5fbmV4dF9kZXNjKCZmc2xfY2hhbi0+dmNoYW4pOwotCWlmICghdmRlc2MpCi0JCXJl dHVybjsKLQlmc2xfY2hhbi0+ZWRlc2MgPSB0b19mc2xfZWRtYV9kZXNjKHZkZXNjKTsKLQlmc2xf ZWRtYV9zZXRfdGNkX3JlZ3MoZnNsX2NoYW4sIGZzbF9jaGFuLT5lZGVzYy0+dGNkWzBdLnZ0Y2Qp OwotCWZzbF9lZG1hX2VuYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKLQlmc2xfY2hhbi0+c3RhdHVz ID0gRE1BX0lOX1BST0dSRVNTOwotCWZzbF9jaGFuLT5pZGxlID0gZmFsc2U7Ci19Ci0KIHN0YXRp YyBpcnFyZXR1cm5fdCBmc2xfZWRtYV90eF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkK IHsKIAlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpmc2xfZWRtYSA9IGRldl9pZDsKIAl1bnNpZ25l ZCBpbnQgaW50ciwgY2g7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CiAJc3RydWN0IGZzbF9l ZG1hX2NoYW4gKmZzbF9jaGFuOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmZnNsX2VkbWEt PnJlZ3M7CiAKLQliYXNlX2FkZHIgPSBmc2xfZWRtYS0+bWVtYmFzZTsKLQotCWludHIgPSBlZG1h X3JlYWRsKGZzbF9lZG1hLCBiYXNlX2FkZHIgKyBFRE1BX0lOVFIpOworCWludHIgPSBlZG1hX3Jl YWRsKGZzbF9lZG1hLCByZWdzLT5pbnRsKTsKIAlpZiAoIWludHIpCiAJCXJldHVybiBJUlFfTk9O RTsKIAogCWZvciAoY2ggPSAwOyBjaCA8IGZzbF9lZG1hLT5uX2NoYW5zOyBjaCsrKSB7CiAJCWlm IChpbnRyICYgKDB4MSA8PCBjaCkpIHsKLQkJCWVkbWFfd3JpdGViKGZzbF9lZG1hLCBFRE1BX0NJ TlRfQ0lOVChjaCksCi0JCQkJYmFzZV9hZGRyICsgRURNQV9DSU5UKTsKKwkJCWVkbWFfd3JpdGVi KGZzbF9lZG1hLCBFRE1BX0NJTlRfQ0lOVChjaCksIHJlZ3MtPmNpbnQpOwogCiAJCQlmc2xfY2hh biA9ICZmc2xfZWRtYS0+Y2hhbnNbY2hdOwogCkBAIC03MDUsMTYgKzc2LDE2IEBAIHN0YXRpYyBp cnFyZXR1cm5fdCBmc2xfZWRtYV9lcnJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7 CiAJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEgPSBkZXZfaWQ7CiAJdW5zaWduZWQg aW50IGVyciwgY2g7CisJc3RydWN0IGVkbWFfcmVncyAqcmVncyA9ICZmc2xfZWRtYS0+cmVnczsK IAotCWVyciA9IGVkbWFfcmVhZGwoZnNsX2VkbWEsIGZzbF9lZG1hLT5tZW1iYXNlICsgRURNQV9F UlIpOworCWVyciA9IGVkbWFfcmVhZGwoZnNsX2VkbWEsIHJlZ3MtPmVycmwpOwogCWlmICghZXJy KQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlmb3IgKGNoID0gMDsgY2ggPCBmc2xfZWRtYS0+bl9j aGFuczsgY2grKykgewogCQlpZiAoZXJyICYgKDB4MSA8PCBjaCkpIHsKIAkJCWZzbF9lZG1hX2Rp c2FibGVfcmVxdWVzdCgmZnNsX2VkbWEtPmNoYW5zW2NoXSk7Ci0JCQllZG1hX3dyaXRlYihmc2xf ZWRtYSwgRURNQV9DRVJSX0NFUlIoY2gpLAotCQkJCWZzbF9lZG1hLT5tZW1iYXNlICsgRURNQV9D RVJSKTsKKwkJCWVkbWFfd3JpdGViKGZzbF9lZG1hLCBFRE1BX0NFUlJfQ0VSUihjaCksIHJlZ3Mt PmNlcnIpOwogCQkJZnNsX2VkbWEtPmNoYW5zW2NoXS5zdGF0dXMgPSBETUFfRVJST1I7CiAJCQlm c2xfZWRtYS0+Y2hhbnNbY2hdLmlkbGUgPSB0cnVlOwogCQl9CkBAIC03MzAsMjUgKzEwMSw2IEBA IHN0YXRpYyBpcnFyZXR1cm5fdCBmc2xfZWRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpk ZXZfaWQpCiAJcmV0dXJuIGZzbF9lZG1hX2Vycl9oYW5kbGVyKGlycSwgZGV2X2lkKTsKIH0KIAot c3RhdGljIHZvaWQgZnNsX2VkbWFfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4p Ci17Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihj aGFuKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9j aGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0KLQlpZiAodW5saWtlbHkoZnNsX2NoYW4tPnBtX3N0 YXRlICE9IFJVTk5JTkcpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52 Y2hhbi5sb2NrLCBmbGFncyk7Ci0JCS8qIGNhbm5vdCBzdWJtaXQgZHVlIHRvIHN1c3BlbmQgKi8K LQkJcmV0dXJuOwotCX0KLQotCWlmICh2Y2hhbl9pc3N1ZV9wZW5kaW5nKCZmc2xfY2hhbi0+dmNo YW4pICYmICFmc2xfY2hhbi0+ZWRlc2MpCi0JCWZzbF9lZG1hX3hmZXJfZGVzYyhmc2xfY2hhbik7 Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3Mp OwotfQotCiBzdGF0aWMgc3RydWN0IGRtYV9jaGFuICpmc2xfZWRtYV94bGF0ZShzdHJ1Y3Qgb2Zf cGhhbmRsZV9hcmdzICpkbWFfc3BlYywKIAkJc3RydWN0IG9mX2RtYSAqb2ZkbWEpCiB7CkBAIC03 NjEsNyArMTEzLDggQEAgc3RhdGljIHN0cnVjdCBkbWFfY2hhbiAqZnNsX2VkbWFfeGxhdGUoc3Ry dWN0IG9mX3BoYW5kbGVfYXJncyAqZG1hX3NwZWMsCiAJCXJldHVybiBOVUxMOwogCiAJbXV0ZXhf bG9jaygmZnNsX2VkbWEtPmZzbF9lZG1hX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUoY2hhbiwgX2NoYW4sICZmc2xfZWRtYS0+ZG1hX2Rldi5jaGFubmVscywgZGV2aWNlX25vZGUp IHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgX2NoYW4sCisJCQkmZnNsX2VkbWEt PmRtYV9kZXYuY2hhbm5lbHMsIGRldmljZV9ub2RlKSB7CiAJCWlmIChjaGFuLT5jbGllbnRfY291 bnQpCiAJCQljb250aW51ZTsKIAkJaWYgKChjaGFuLT5jaGFuX2lkIC8gY2hhbnNfcGVyX211eCkg PT0gZG1hX3NwZWMtPmFyZ3NbMF0pIHsKQEAgLTc3OCwzOSArMTMxLDEyIEBAIHN0YXRpYyBzdHJ1 Y3QgZG1hX2NoYW4gKmZzbF9lZG1hX3hsYXRlKHN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmRtYV9z cGVjLAogCQl9CiAJfQogCW11dGV4X3VubG9jaygmZnNsX2VkbWEtPmZzbF9lZG1hX211dGV4KTsK LQlyZXR1cm4gTlVMTDsKLX0KIAotc3RhdGljIGludCBmc2xfZWRtYV9hbGxvY19jaGFuX3Jlc291 cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCi17Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZz bF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKLQotCWZzbF9jaGFuLT50Y2RfcG9vbCA9 IGRtYV9wb29sX2NyZWF0ZSgidGNkX3Bvb2wiLCBjaGFuLT5kZXZpY2UtPmRldiwKLQkJCQlzaXpl b2Yoc3RydWN0IGZzbF9lZG1hX2h3X3RjZCksCi0JCQkJMzIsIDApOwotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgdm9pZCBmc2xfZWRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hh biAqY2hhbikKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRt YV9jaGFuKGNoYW4pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKGhlYWQpOwot Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0JZnNs X2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKLQlmc2xfZWRtYV9jaGFuX211eChmc2xf Y2hhbiwgMCwgZmFsc2UpOwotCWZzbF9jaGFuLT5lZGVzYyA9IE5VTEw7Ci0JdmNoYW5fZ2V0X2Fs bF9kZXNjcmlwdG9ycygmZnNsX2NoYW4tPnZjaGFuLCAmaGVhZCk7Ci0Jc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQotCXZjaGFuX2RtYV9kZXNj X2ZyZWVfbGlzdCgmZnNsX2NoYW4tPnZjaGFuLCAmaGVhZCk7Ci0JZG1hX3Bvb2xfZGVzdHJveShm c2xfY2hhbi0+dGNkX3Bvb2wpOwotCWZzbF9jaGFuLT50Y2RfcG9vbCA9IE5VTEw7CisJcmV0dXJu IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQKLWZzbF9lZG1hX2lycV9pbml0KHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1hKQorc3RhdGlj IGludCBmc2xfZWRtYV9pcnFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJ ICAgICBzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpmc2xfZWRtYSkKIHsKIAlpbnQgcmV0OwogCkBA IC04MjcsMjEgKzE1MywyMSBAQCBmc2xfZWRtYV9pcnFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2LCBzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpmc2xfZWRtYQogCX0KIAogCWlmIChm c2xfZWRtYS0+dHhpcnEgPT0gZnNsX2VkbWEtPmVycmlycSkgewotCQlyZXQgPSBkZXZtX3JlcXVl c3RfaXJxKCZwZGV2LT5kZXYsIGZzbF9lZG1hLT50eGlycSwKKwkJcmV0ID0gcmVxdWVzdF9pcnEo ZnNsX2VkbWEtPnR4aXJxLAogCQkJCWZzbF9lZG1hX2lycV9oYW5kbGVyLCAwLCAiZURNQSIsIGZz bF9lZG1hKTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgcmVn aXN0ZXIgZURNQSBJUlEuXG4iKTsKIAkJCSByZXR1cm4gIHJldDsKIAkJfQogCX0gZWxzZSB7Ci0J CXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgZnNsX2VkbWEtPnR4aXJxLAorCQly ZXQgPSByZXF1ZXN0X2lycShmc2xfZWRtYS0+dHhpcnEsCiAJCQkJZnNsX2VkbWFfdHhfaGFuZGxl ciwgMCwgImVETUEgdHgiLCBmc2xfZWRtYSk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoJnBk ZXYtPmRldiwgIkNhbid0IHJlZ2lzdGVyIGVETUEgdHggSVJRLlxuIik7CiAJCQlyZXR1cm4gIHJl dDsKIAkJfQogCi0JCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgZnNsX2VkbWEt PmVycmlycSwKKwkJcmV0ID0gcmVxdWVzdF9pcnEoZnNsX2VkbWEtPmVycmlycSwKIAkJCQlmc2xf ZWRtYV9lcnJfaGFuZGxlciwgMCwgImVETUEgZXJyIiwgZnNsX2VkbWEpOwogCQlpZiAocmV0KSB7 CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCByZWdpc3RlciBlRE1BIGVyciBJUlEuXG4i KTsKQEAgLTg1MiwxNCArMTc4LDE1IEBAIGZzbF9lZG1hX2lycV9pbml0KHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1hCiAJcmV0dXJu IDA7CiB9CiAKKwogc3RhdGljIHZvaWQgZnNsX2VkbWFfaXJxX2V4aXQoCiAJCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1hKQogewog CWlmIChmc2xfZWRtYS0+dHhpcnEgPT0gZnNsX2VkbWEtPmVycmlycSkgewotCQlkZXZtX2ZyZWVf aXJxKCZwZGV2LT5kZXYsIGZzbF9lZG1hLT50eGlycSwgZnNsX2VkbWEpOworCQlmcmVlX2lycShm c2xfZWRtYS0+dHhpcnEsIGZzbF9lZG1hKTsKIAl9IGVsc2UgewotCQlkZXZtX2ZyZWVfaXJxKCZw ZGV2LT5kZXYsIGZzbF9lZG1hLT50eGlycSwgZnNsX2VkbWEpOwotCQlkZXZtX2ZyZWVfaXJxKCZw ZGV2LT5kZXYsIGZzbF9lZG1hLT5lcnJpcnEsIGZzbF9lZG1hKTsKKwkJZnJlZV9pcnEoZnNsX2Vk bWEtPnR4aXJxLCBmc2xfZWRtYSk7CisJCWZyZWVfaXJxKGZzbF9lZG1hLT5lcnJpcnEsIGZzbF9l ZG1hKTsKIAl9CiB9CiAKQEAgLTg3Niw2ICsyMDMsNyBAQCBzdGF0aWMgaW50IGZzbF9lZG1hX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJc3RydWN0IGRldmljZV9ub2RlICpu cCA9IHBkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1h OwogCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbjsKKwlzdHJ1Y3QgZWRtYV9yZWdzICpy ZWdzOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCBsZW4sIGNoYW5zOwogCWludCByZXQs IGk7CkBAIC04OTEsNiArMjE5LDggQEAgc3RhdGljIGludCBmc2xfZWRtYV9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmICghZnNsX2VkbWEpCiAJCXJldHVybiAtRU5PTUVN OwogCisJZnNsX2VkbWEtPnZlcnNpb24gPSB2MTsKKwogCWZzbF9lZG1hLT5uX2NoYW5zID0gY2hh bnM7CiAJbXV0ZXhfaW5pdCgmZnNsX2VkbWEtPmZzbF9lZG1hX211dGV4KTsKIApAQCAtODk5LDYg KzIyOSw5IEBAIHN0YXRpYyBpbnQgZnNsX2VkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKIAlpZiAoSVNfRVJSKGZzbF9lZG1hLT5tZW1iYXNlKSkKIAkJcmV0dXJuIFBUUl9F UlIoZnNsX2VkbWEtPm1lbWJhc2UpOwogCisJZnNsX2VkbWFfc2V0dXBfcmVncyhmc2xfZWRtYSk7 CisJcmVncyA9ICZmc2xfZWRtYS0+cmVnczsKKwogCWZvciAoaSA9IDA7IGkgPCBETUFNVVhfTlI7 IGkrKykgewogCQljaGFyIGNsa25hbWVbMzJdOwogCkBAIC05MzksMTEgKzI3MiwxMSBAQCBzdGF0 aWMgaW50IGZzbF9lZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWZz bF9jaGFuLT52Y2hhbi5kZXNjX2ZyZWUgPSBmc2xfZWRtYV9mcmVlX2Rlc2M7CiAJCXZjaGFuX2lu aXQoJmZzbF9jaGFuLT52Y2hhbiwgJmZzbF9lZG1hLT5kbWFfZGV2KTsKIAotCQllZG1hX3dyaXRl dyhmc2xfZWRtYSwgMHgwLCBmc2xfZWRtYS0+bWVtYmFzZSArIEVETUFfVENEX0NTUihpKSk7CisJ CWVkbWFfd3JpdGV3KGZzbF9lZG1hLCAweDAsICZyZWdzLT50Y2RbaV0uY3NyKTsKIAkJZnNsX2Vk bWFfY2hhbl9tdXgoZnNsX2NoYW4sIDAsIGZhbHNlKTsKIAl9CiAKLQllZG1hX3dyaXRlbChmc2xf ZWRtYSwgfjAsIGZzbF9lZG1hLT5tZW1iYXNlICsgRURNQV9JTlRSKTsKKwllZG1hX3dyaXRlbChm c2xfZWRtYSwgfjAsIHJlZ3MtPmludGwpOwogCXJldCA9IGZzbF9lZG1hX2lycV9pbml0KHBkZXYs IGZzbF9lZG1hKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtOTkwLDIyICszMjMsMTEg QEAgc3RhdGljIGludCBmc2xfZWRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQogCX0KIAogCS8qIGVuYWJsZSByb3VuZCByb2JpbiBhcmJpdHJhdGlvbiAqLwotCWVkbWFfd3Jp dGVsKGZzbF9lZG1hLCBFRE1BX0NSX0VSR0EgfCBFRE1BX0NSX0VSQ0EsIGZzbF9lZG1hLT5tZW1i YXNlICsgRURNQV9DUik7CisJZWRtYV93cml0ZWwoZnNsX2VkbWEsIEVETUFfQ1JfRVJHQSB8IEVE TUFfQ1JfRVJDQSwgcmVncy0+Y3IpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZz bF9lZG1hX2NsZWFudXBfdmNoYW4oc3RydWN0IGRtYV9kZXZpY2UgKmRtYWRldikKLXsKLQlzdHJ1 Y3QgZnNsX2VkbWFfY2hhbiAqY2hhbiwgKl9jaGFuOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKGNoYW4sIF9jaGFuLAotCQkJCSZkbWFkZXYtPmNoYW5uZWxzLCB2Y2hhbi5jaGFuLmRldmlj ZV9ub2RlKSB7Ci0JCWxpc3RfZGVsKCZjaGFuLT52Y2hhbi5jaGFuLmRldmljZV9ub2RlKTsKLQkJ dGFza2xldF9raWxsKCZjaGFuLT52Y2hhbi50YXNrKTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgZnNs X2VkbWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRl dmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwpAQCAtMTA0OCwxOCArMzcwLDE5IEBA IHN0YXRpYyBpbnQgZnNsX2VkbWFfcmVzdW1lX2Vhcmx5KHN0cnVjdCBkZXZpY2UgKmRldikKIHsK IAlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpmc2xfZWRtYSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp OwogCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbjsKKwlzdHJ1Y3QgZWRtYV9yZWdzICpy ZWdzID0gJmZzbF9lZG1hLT5yZWdzOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGZzbF9l ZG1hLT5uX2NoYW5zOyBpKyspIHsKIAkJZnNsX2NoYW4gPSAmZnNsX2VkbWEtPmNoYW5zW2ldOwog CQlmc2xfY2hhbi0+cG1fc3RhdGUgPSBSVU5OSU5HOwotCQllZG1hX3dyaXRldyhmc2xfZWRtYSwg MHgwLCBmc2xfZWRtYS0+bWVtYmFzZSArIEVETUFfVENEX0NTUihpKSk7CisJCWVkbWFfd3JpdGV3 KGZzbF9lZG1hLCAweDAsICZyZWdzLT50Y2RbaV0uY3NyKTsKKwogCQlpZiAoZnNsX2NoYW4tPnNs YXZlX2lkICE9IDApCiAJCQlmc2xfZWRtYV9jaGFuX211eChmc2xfY2hhbiwgZnNsX2NoYW4tPnNs YXZlX2lkLCB0cnVlKTsKIAl9CiAKLQllZG1hX3dyaXRlbChmc2xfZWRtYSwgRURNQV9DUl9FUkdB IHwgRURNQV9DUl9FUkNBLAotCQkJZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1BX0NSKTsKKwllZG1h X3dyaXRlbChmc2xfZWRtYSwgRURNQV9DUl9FUkdBIHwgRURNQV9DUl9FUkNBLCByZWdzLT5jcik7 CiAKIAlyZXR1cm4gMDsKIH0K