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: [v6,1/2] dmaengine: fsl-edma: extract common fsl-edma code (no changes in behavior intended) From: Angelo Dureghello Message-Id: <20180701163327.13640-1-angelo@sysam.it> Date: Sun, 1 Jul 2018 18:33:26 +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 LS0tCiBkcml2ZXJzL2RtYS9NYWtlZmlsZSAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9kbWEv ZnNsLWVkbWEtY29tbW9uLmMgfCA2NzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uaCB8IDE2MiArKysrKysrKwogZHJpdmVycy9kbWEv ZnNsLWVkbWEuYyAgICAgICAgfCA3NTMgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogNCBmaWxlcyBjaGFuZ2VkLCA4NzEgaW5zZXJ0aW9ucygrKSwgNzE2IGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmgKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2RtYS9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL01ha2VmaWxlCmluZGV4IDIwM2E5OWQ2 ODMxNS4uNjYwMjJmNTlmY2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtMzEsNyArMzEsNyBAQCBvYmotJChDT05GSUdfRFdf QVhJX0RNQUMpICs9IGR3LWF4aS1kbWFjLwogb2JqLSQoQ09ORklHX0RXX0RNQUNfQ09SRSkgKz0g ZHcvCiBvYmotJChDT05GSUdfRVA5M1hYX0RNQSkgKz0gZXA5M3h4X2RtYS5vCiBvYmotJChDT05G SUdfRlNMX0RNQSkgKz0gZnNsZG1hLm8KLW9iai0kKENPTkZJR19GU0xfRURNQSkgKz0gZnNsLWVk bWEubworb2JqLSQoQ09ORklHX0ZTTF9FRE1BKSArPSBmc2wtZWRtYS5vIGZzbC1lZG1hLWNvbW1v bi5vCiBvYmotJChDT05GSUdfRlNMX1JBSUQpICs9IGZzbF9yYWlkLm8KIG9iai0kKENPTkZJR19I U1VfRE1BKSArPSBoc3UvCiBvYmotJChDT05GSUdfSU1HX01EQ19ETUEpICs9IGltZy1tZGMtZG1h Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5jIGIvZHJpdmVycy9k bWEvZnNsLWVkbWEtY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi4xN2Q2NzdiZDExZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9mc2wtZWRt YS1jb21tb24uYwpAQCAtMCwwICsxLDY3MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNv bmR1Y3RvciwgSW5jCisvLyBDb3B5cmlnaHQgKGMpIDIwMTcgU3lzYW0sIEFuZ2VsbyBEdXJlZ2hl bGxvICA8YW5nZWxvQHN5c2FtLml0PgorCisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgImZzbC1lZG1hLWNvbW1vbi5oIgorCisj ZGVmaW5lIEVETUFfQ1IJCQkweDAwCisjZGVmaW5lIEVETUFfRVMJCQkweDA0CisjZGVmaW5lIEVE TUFfRVJRCQkweDBDCisjZGVmaW5lIEVETUFfRUVJCQkweDE0CisjZGVmaW5lIEVETUFfQ0VFSQkJ MHgxOAorI2RlZmluZSBFRE1BX1NFRUkJCTB4MTkKKyNkZWZpbmUgRURNQV9DRVJRCQkweDFBCisj ZGVmaW5lIEVETUFfU0VSUQkJMHgxQgorI2RlZmluZSBFRE1BX0NJTlQJCTB4MUYKKyNkZWZpbmUg RURNQV9DRVJSCQkweDFFCisjZGVmaW5lIEVETUFfU1NSVAkJMHgxRAorI2RlZmluZSBFRE1BX0NE TkUJCTB4MUMKKyNkZWZpbmUgRURNQV9JTlRSCQkweDI0CisjZGVmaW5lIEVETUFfRVJSCQkweDJD CisKKyNkZWZpbmUgRURNQTY0X0VSUUgJCTB4MDgKKyNkZWZpbmUgRURNQTY0X0VFSUgJCTB4MTAK KyNkZWZpbmUgRURNQTY0X1NFUlEJCTB4MTgKKyNkZWZpbmUgRURNQTY0X0NFUlEJCTB4MTkKKyNk ZWZpbmUgRURNQTY0X1NFRUkJCTB4MWEKKyNkZWZpbmUgRURNQTY0X0NFRUkJCTB4MWIKKyNkZWZp bmUgRURNQTY0X0NJTlQJCTB4MWMKKyNkZWZpbmUgRURNQTY0X0NFUlIJCTB4MWQKKyNkZWZpbmUg RURNQTY0X1NTUlQJCTB4MWUKKyNkZWZpbmUgRURNQTY0X0NETkUJCTB4MWYKKyNkZWZpbmUgRURN QTY0X0lOVEgJCTB4MjAKKyNkZWZpbmUgRURNQTY0X0lOVEwJCTB4MjQKKyNkZWZpbmUgRURNQTY0 X0VSUkgJCTB4MjgKKyNkZWZpbmUgRURNQTY0X0VSUkwJCTB4MmMKKworI2RlZmluZSBFRE1BX1RD RAkJMHgxMDAwCisjZGVmaW5lIEVETUFfVENEX1NJWkUJCTMyCisjZGVmaW5lIEVETUFfVENEX01F TV9BTElHTglFRE1BX1RDRF9TSVpFCisKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV84QklU CTAKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV8xNkJJVAlCSVQoMCkKKyNkZWZpbmUgRURN QV9UQ0RfQVRUUl9TU0laRV8zMkJJVAlCSVQoMSkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0la RV82NEJJVAkoQklUKDEpIHwgQklUKDApKQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpFXzE2 QllURQlCSVQoMikKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJZVEUJKEJJVCgyKSB8 IEJJVCgwKSkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV84QklUCShFRE1BX1RDRF9BVFRS X1NTSVpFXzhCSVQgPDwgOCkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJJVAkoRURN QV9UQ0RfQVRUUl9TU0laRV8xNkJJVCA8PCA4KQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpF XzMyQklUCShFRE1BX1RDRF9BVFRSX1NTSVpFXzMyQklUIDw8IDgpCisjZGVmaW5lIEVETUFfVENE X0FUVFJfRFNJWkVfNjRCSVQJKEVETUFfVENEX0FUVFJfU1NJWkVfNjRCSVQgPDwgOCkKKyNkZWZp bmUgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJZVEUJKEVETUFfVENEX0FUVFJfU1NJWkVfMTZCWVRF IDw8IDgpCisjZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJWkVfMzJCWVRFCShFRE1BX1RDRF9BVFRS X1NTSVpFXzMyQllURSA8PCA4KQorCisjZGVmaW5lIEVETUFfVENEX0NJVEVSX0NJVEVSKHgpCQko KHgpICYgR0VOTUFTSygxNCwgMCkpCisjZGVmaW5lIEVETUFfVENEX0JJVEVSX0JJVEVSKHgpCQko KHgpICYgR0VOTUFTSygxNCwgMCkpCisKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX1NUQVJUCQlCSVQo MCkKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSX0lOVF9NQUpPUgkJQklUKDEpCisjZGVmaW5lIEVETUFf VENEX0NTUl9JTlRfSEFMRgkJQklUKDIpCisjZGVmaW5lIEVETUFfVENEX0NTUl9EX1JFUQkJQklU KDMpCisjZGVmaW5lIEVETUFfVENEX0NTUl9FX1NHCQlCSVQoNCkKKyNkZWZpbmUgRURNQV9UQ0Rf Q1NSX0VfTElOSwkJQklUKDUpCisjZGVmaW5lIEVETUFfVENEX0NTUl9BQ1RJVkUJCUJJVCg2KQor I2RlZmluZSBFRE1BX1RDRF9DU1JfRE9ORQkJQklUKDcpCisKK3N0cnVjdCBmc2xfZWRtYV9jaGFu ICp0b19mc2xfZWRtYV9jaGFuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlyZXR1cm4gY29u dGFpbmVyX29mKGNoYW4sIHN0cnVjdCBmc2xfZWRtYV9jaGFuLCB2Y2hhbi5jaGFuKTsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKHRvX2ZzbF9lZG1hX2NoYW4pOworCitzdHJ1Y3QgZnNsX2VkbWFfZGVz YyAqdG9fZnNsX2VkbWFfZGVzYyhzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQpCit7CisJcmV0dXJu IGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IGZzbF9lZG1hX2Rlc2MsIHZkZXNjKTsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKHRvX2ZzbF9lZG1hX2Rlc2MpOworCisvKgorICogUi9XIGZ1bmN0aW9ucyBm b3IgYmlnLSBvciBsaXR0bGUtZW5kaWFuIHJlZ2lzdGVyczoKKyAqIFRoZSBlRE1BIGNvbnRyb2xs ZXIncyBlbmRpYW4gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIENQVSBjb3JlJ3MgZW5kaWFuLgorICog Rm9yIHRoZSBiaWctZW5kaWFuIElQIG1vZHVsZSwgdGhlIG9mZnNldCBmb3IgOC1iaXQgb3IgMTYt Yml0IHJlZ2lzdGVycworICogc2hvdWxkIGFsc28gYmUgc3dhcHBlZCBvcHBvc2l0ZSB0byB0aGF0 IGluIGxpdHRsZS1lbmRpYW4gSVAuCisgKi8KK3UzMiBlZG1hX3JlYWRsKHN0cnVjdCBmc2xfZWRt YV9lbmdpbmUgKmVkbWEsCisJCQl2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKGVkbWEtPmJp Z19lbmRpYW4pCisJCXJldHVybiBpb3JlYWQzMmJlKGFkZHIpOworCWVsc2UKKwkJcmV0dXJuIGlv cmVhZDMyKGFkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZWRtYV9yZWFkbCk7CisKK3ZvaWQg ZWRtYV93cml0ZWIoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTggdmFsLAorCQkJdm9p ZCBfX2lvbWVtICphZGRyKQoreworCS8qIHN3YXAgdGhlIHJlZyBvZmZzZXQgZm9yIHRoZXNlIGlu IGJpZy1lbmRpYW4gbW9kZSAqLworCWlmIChlZG1hLT5iaWdfZW5kaWFuKQorCQlpb3dyaXRlOCh2 YWwsICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpYWRkciBeIDB4MykpOworCWVsc2UK KwkJaW93cml0ZTgodmFsLCBhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGVkbWFfd3JpdGVi KTsKKwordm9pZCBlZG1hX3dyaXRldyhzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1MTYg dmFsLAorCQkJdm9pZCBfX2lvbWVtICphZGRyKQoreworCS8qIHN3YXAgdGhlIHJlZyBvZmZzZXQg Zm9yIHRoZXNlIGluIGJpZy1lbmRpYW4gbW9kZSAqLworCWlmIChlZG1hLT5iaWdfZW5kaWFuKQor CQlpb3dyaXRlMTZiZSh2YWwsICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpYWRkciBe IDB4MikpOworCWVsc2UKKwkJaW93cml0ZTE2KHZhbCwgYWRkcik7Cit9CitFWFBPUlRfU1lNQk9M X0dQTChlZG1hX3dyaXRldyk7CisKK3ZvaWQgZWRtYV93cml0ZWwoc3RydWN0IGZzbF9lZG1hX2Vu Z2luZSAqZWRtYSwgdTMyIHZhbCwKKwkJCXZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAoZWRt YS0+YmlnX2VuZGlhbikKKwkJaW93cml0ZTMyYmUodmFsLCBhZGRyKTsKKwllbHNlCisJCWlvd3Jp dGUzMih2YWwsIGFkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZWRtYV93cml0ZWwpOworCitz dGF0aWMgdm9pZCBmc2xfZWRtYV9maWxsX3RjZChzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkICp0Y2Qs CisJCQl1MzIgc3JjLCB1MzIgZHN0LCB1MTYgYXR0ciwgdTE2IHNvZmYsCisJCQl1MzIgbmJ5dGVz LCB1MzIgc2xhc3QsIHUxNiBjaXRlciwgdTE2IGJpdGVyLAorCQkJdTE2IGRvZmYsIHUzMiBkbGFz dF9zZ2EsIGJvb2wgbWFqb3JfaW50LAorCQkJYm9vbCBkaXNhYmxlX3JlcSwgYm9vbCBlbmFibGVf c2cpCit7CisJdTE2IGNzciA9IDA7CisKKwkvKgorCSAqIGVETUEgaGFyZHdhcmUgU0dzIHJlcXVp cmUgdGhlIFRDRHMgdG8gYmUgc3RvcmVkIGluIGxpdHRsZQorCSAqIGVuZGlhbiBmb3JtYXQgaXJy ZXNwZWN0aXZlIG9mIHRoZSByZWdpc3RlciBlbmRpYW4gbW9kZWwuCisJICogU28gd2UgcHV0IHRo ZSB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGluIG1lbW9yeSwgd2FpdGluZworCSAqIGZvciBmc2xf ZWRtYV9zZXRfdGNkX3JlZ3MgZG9pbmcgdGhlIHN3YXAuCisJICovCisJdGNkLT5zYWRkciA9IGNw dV90b19sZTMyKHNyYyk7CisJdGNkLT5kYWRkciA9IGNwdV90b19sZTMyKGRzdCk7CisJdGNkLT5h dHRyID0gY3B1X3RvX2xlMTYoYXR0cik7CisJdGNkLT5zb2ZmID0gY3B1X3RvX2xlMTYoc29mZik7 CisJdGNkLT5uYnl0ZXMgPSBjcHVfdG9fbGUzMihuYnl0ZXMpOworCXRjZC0+c2xhc3QgPSBjcHVf dG9fbGUzMihzbGFzdCk7CisJdGNkLT5jaXRlciA9IGNwdV90b19sZTE2KEVETUFfVENEX0NJVEVS X0NJVEVSKGNpdGVyKSk7CisJdGNkLT5kb2ZmID0gY3B1X3RvX2xlMTYoZG9mZik7CisJdGNkLT5k bGFzdF9zZ2EgPSBjcHVfdG9fbGUzMihkbGFzdF9zZ2EpOworCXRjZC0+Yml0ZXIgPSBjcHVfdG9f bGUxNihFRE1BX1RDRF9CSVRFUl9CSVRFUihiaXRlcikpOworCisJaWYgKG1ham9yX2ludCkKKwkJ Y3NyIHw9IEVETUFfVENEX0NTUl9JTlRfTUFKT1I7CisJaWYgKGRpc2FibGVfcmVxKQorCQljc3Ig fD0gRURNQV9UQ0RfQ1NSX0RfUkVROworCWlmIChlbmFibGVfc2cpCisJCWNzciB8PSBFRE1BX1RD RF9DU1JfRV9TRzsKKworCXRjZC0+Y3NyID0gY3B1X3RvX2xlMTYoY3NyKTsKK30KKworc3RhdGlj IHZvaWQgZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3Qoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9j aGFuKQoreworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmZnNsX2NoYW4tPmVkbWEtPnJlZ3M7 CisJdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hhbl9pZDsKKworCWlmIChmc2xfY2hh bi0+ZWRtYS0+dmVyc2lvbiA9PSB2MSkgeworCQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwg RURNQV9TRUVJX1NFRUkoY2gpLCByZWdzLT5zZWVpKTsKKwkJZWRtYV93cml0ZWIoZnNsX2NoYW4t PmVkbWEsIGNoLCByZWdzLT5zZXJxKTsKKwl9IGVsc2UgeworCQkvKiBDb2xkRmlyZSBpcyBiaWcg ZW5kaWFuLCBhbmQgYWNjZXNzZXMgbmF0aXZlbHkKKwkJICogYmlnIGVuZGlhbiBJL08gcGVyaXBo ZXJhbHMKKwkJICovCisJCWlvd3JpdGU4KEVETUFfU0VFSV9TRUVJKGNoKSwgcmVncy0+c2VlaSk7 CisJCWlvd3JpdGU4KGNoLCByZWdzLT5zZXJxKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBp bnQgZnNsX2VkbWFfZ2V0X3RjZF9hdHRyKGVudW0gZG1hX3NsYXZlX2J1c3dpZHRoIGFkZHJfd2lk dGgpCit7CisJc3dpdGNoIChhZGRyX3dpZHRoKSB7CisJY2FzZSAxOgorCQlyZXR1cm4gRURNQV9U Q0RfQVRUUl9TU0laRV84QklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV84QklUOworCWNhc2UgMjoK KwkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfMTZCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpF XzE2QklUOworCWNhc2UgNDoKKwkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfMzJCSVQgfCBF RE1BX1RDRF9BVFRSX0RTSVpFXzMyQklUOworCWNhc2UgODoKKwkJcmV0dXJuIEVETUFfVENEX0FU VFJfU1NJWkVfNjRCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzY0QklUOworCWRlZmF1bHQ6CisJ CXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzMyQklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8z MkJJVDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZnNsX2VkbWFfYWxs b2NfZGVzYyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCisJCWludCBzZ19sZW4pCit7 CisJc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOworCWludCBpOworCisJZnNsX2Rlc2Mg PSBremFsbG9jKHNpemVvZigqZnNsX2Rlc2MpICsKKwkJCXNpemVvZihzdHJ1Y3QgZnNsX2VkbWFf c3dfdGNkKSAqIHNnX2xlbiwgR0ZQX05PV0FJVCk7CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0dXJu IE5VTEw7CisKKwlmc2xfZGVzYy0+ZWNoYW4gPSBmc2xfY2hhbjsKKwlmc2xfZGVzYy0+bl90Y2Rz ID0gc2dfbGVuOworCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKykgeworCQlmc2xfZGVzYy0+ dGNkW2ldLnZ0Y2QgPSBkbWFfcG9vbF9hbGxvYyhmc2xfY2hhbi0+dGNkX3Bvb2wsCisJCQkJCUdG UF9OT1dBSVQsICZmc2xfZGVzYy0+dGNkW2ldLnB0Y2QpOworCQlpZiAoIWZzbF9kZXNjLT50Y2Rb aV0udnRjZCkKKwkJCWdvdG8gZXJyOworCX0KKwlyZXR1cm4gZnNsX2Rlc2M7CisKK2VycjoKKwl3 aGlsZSAoLS1pID49IDApCisJCWRtYV9wb29sX2ZyZWUoZnNsX2NoYW4tPnRjZF9wb29sLCBmc2xf ZGVzYy0+dGNkW2ldLnZ0Y2QsCisJCQkJZnNsX2Rlc2MtPnRjZFtpXS5wdGNkKTsKKwlrZnJlZShm c2xfZGVzYyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGZzbF9lZG1hX3NldF90 Y2RfcmVncyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCisJCQkgICBzdHJ1Y3QgZnNs X2VkbWFfaHdfdGNkICp0Y2QpCit7CisJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSA9IGZz bF9jaGFuLT5lZG1hOworCXN0cnVjdCBmc2xfZWRtYV9od190Y2QgKm10Y2QgPSBlZG1hLT5yZWdz LnRjZAorCQkJCQkrIGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7CisKKwkvKgorCSAqIFRD RCBwYXJhbWV0ZXJzIGFyZSBzdG9yZWQgaW4gc3RydWN0IGZzbF9lZG1hX2h3X3RjZCBpbiBsaXR0 bGUKKwkgKiBlbmRpYW4gZm9ybWF0LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGxvYWQgdGhlIFRDRCBy ZWdpc3RlcnMgaW4KKwkgKiBiaWctIG9yIGxpdHRsZS1lbmRpYW4gb2JleWluZyB0aGUgZURNQSBl bmdpbmUgbW9kZWwgZW5kaWFuLgorCSAqLworCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1 KHRjZC0+c2FkZHIpLCAmbXRjZC0+c2FkZHIpOworCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9f Y3B1KHRjZC0+ZGFkZHIpLCAmbXRjZC0+ZGFkZHIpOworCWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZf dG9fY3B1KHRjZC0+YXR0ciksICZtdGNkLT5hdHRyKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2 X3RvX2NwdSh0Y2QtPnNvZmYpLCAmbXRjZC0+c29mZik7CisJZWRtYV93cml0ZWwoZWRtYSwgbGUz Ml90b19jcHUodGNkLT5uYnl0ZXMpLCAmbXRjZC0+bmJ5dGVzKTsKKwllZG1hX3dyaXRlbChlZG1h LCBsZTMyX3RvX2NwdSh0Y2QtPnNsYXN0KSwgJm10Y2QtPnNsYXN0KTsKKwllZG1hX3dyaXRldyhl ZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmNpdGVyKSwgJm10Y2QtPmNpdGVyKTsKKwllZG1hX3dyaXRl dyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmJpdGVyKSwgJm10Y2QtPmJpdGVyKTsKKwllZG1hX3dy aXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmRvZmYpLCAmbXRjZC0+ZG9mZik7CisJZWRtYV93 cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNkLT5kbGFzdF9zZ2EpLCAmbXRjZC0+ZGxhc3Rfc2dh KTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmNzciksICZtdGNkLT5jc3Ip OworfQorCitzdGF0aWMgc2l6ZV90IGZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShzdHJ1Y3QgZnNsX2Vk bWFfY2hhbiAqZnNsX2NoYW4sCisJCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYywgYm9vbCBp bl9wcm9ncmVzcykKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZWRlc2MgPSBmc2xfY2hhbi0+ ZWRlc2M7CisJc3RydWN0IGVkbWFfcmVncyAqcmVncyA9ICZmc2xfY2hhbi0+ZWRtYS0+cmVnczsK Kwl1MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFuX2lkOworCWVudW0gZG1hX3RyYW5z ZmVyX2RpcmVjdGlvbiBkaXIgPSBmc2xfY2hhbi0+ZGlyOworCWRtYV9hZGRyX3QgY3VyX2FkZHIs IGRtYV9hZGRyOworCXNpemVfdCBsZW4sIHNpemU7CisJaW50IGk7CisKKwkvKiBjYWxjdWxhdGUg dGhlIHRvdGFsIHNpemUgaW4gdGhpcyBkZXNjICovCisJZm9yIChsZW4gPSBpID0gMDsgaSA8IGZz bF9jaGFuLT5lZGVzYy0+bl90Y2RzOyBpKyspCisJCWxlbiArPSBsZTMyX3RvX2NwdShlZGVzYy0+ dGNkW2ldLnZ0Y2QtPm5ieXRlcykKKwkJCSogbGUxNl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNk LT5iaXRlcik7CisKKwlpZiAoIWluX3Byb2dyZXNzKQorCQlyZXR1cm4gbGVuOworCisJaWYgKGRp ciA9PSBETUFfTUVNX1RPX0RFVikKKwkJY3VyX2FkZHIgPSBlZG1hX3JlYWRsKGZzbF9jaGFuLT5l ZG1hLCAmcmVncy0+dGNkW2NoXS5zYWRkcik7CisJZWxzZQorCQljdXJfYWRkciA9IGVkbWFfcmVh ZGwoZnNsX2NoYW4tPmVkbWEsICZyZWdzLT50Y2RbY2hdLmRhZGRyKTsKKworCS8qIGZpZ3VyZSBv dXQgdGhlIGZpbmlzaGVkIGFuZCBjYWxjdWxhdGUgdGhlIHJlc2lkdWUgKi8KKwlmb3IgKGkgPSAw OyBpIDwgZnNsX2NoYW4tPmVkZXNjLT5uX3RjZHM7IGkrKykgeworCQlzaXplID0gbGUzMl90b19j cHUoZWRlc2MtPnRjZFtpXS52dGNkLT5uYnl0ZXMpCisJCQkqIGxlMTZfdG9fY3B1KGVkZXNjLT50 Y2RbaV0udnRjZC0+Yml0ZXIpOworCQlpZiAoZGlyID09IERNQV9NRU1fVE9fREVWKQorCQkJZG1h X2FkZHIgPSBsZTMyX3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPnNhZGRyKTsKKwkJZWxzZQor CQkJZG1hX2FkZHIgPSBsZTMyX3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPmRhZGRyKTsKKwor CQlsZW4gLT0gc2l6ZTsKKwkJaWYgKGN1cl9hZGRyID49IGRtYV9hZGRyICYmIGN1cl9hZGRyIDwg ZG1hX2FkZHIgKyBzaXplKSB7CisJCQlsZW4gKz0gZG1hX2FkZHIgKyBzaXplIC0gY3VyX2FkZHI7 CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBsZW47Cit9CisKK3ZvaWQgZnNsX2VkbWFf ZGlzYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbikKK3sKKwlzdHJ1 Y3QgZWRtYV9yZWdzICpyZWdzID0gJmZzbF9jaGFuLT5lZG1hLT5yZWdzOworCXUzMiBjaCA9IGZz bF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7CisKKwlpZiAoZnNsX2NoYW4tPmVkbWEtPnZlcnNp b24gPT0gdjEpIHsKKwkJZWRtYV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIGNoLCByZWdzLT5jZXJx KTsKKwkJZWRtYV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIEVETUFfQ0VFSV9DRUVJKGNoKSwgcmVn cy0+Y2VlaSk7CisJfSBlbHNlIHsKKwkJLyogQ29sZEZpcmUgaXMgYmlnIGVuZGlhbiwgYW5kIGFj Y2Vzc2VzIG5hdGl2ZWx5CisJCSAqIGJpZyBlbmRpYW4gSS9PIHBlcmlwaGVyYWxzCisJCSAqLwor CQlpb3dyaXRlOChjaCwgcmVncy0+Y2VycSk7CisJCWlvd3JpdGU4KEVETUFfQ0VFSV9DRUVJKGNo KSwgcmVncy0+Y2VlaSk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfZGlzYWJs ZV9yZXF1ZXN0KTsKKwordm9pZCBmc2xfZWRtYV9jbGVhbnVwX3ZjaGFuKHN0cnVjdCBkbWFfZGV2 aWNlICpkbWFkZXYpCit7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmNoYW4sICpfY2hhbjsKKwor CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hhbiwKKwkJCQkmZG1hZGV2LT5jaGFu bmVscywgdmNoYW4uY2hhbi5kZXZpY2Vfbm9kZSkgeworCQlsaXN0X2RlbCgmY2hhbi0+dmNoYW4u Y2hhbi5kZXZpY2Vfbm9kZSk7CisJCXRhc2tsZXRfa2lsbCgmY2hhbi0+dmNoYW4udGFzayk7CisJ fQorfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfY2xlYW51cF92Y2hhbik7CisKK3ZvaWQg ZnNsX2VkbWFfZnJlZV9kZXNjKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYykKK3sKKwlzdHJ1 Y3QgZnNsX2VkbWFfZGVzYyAqbWNmX2Rlc2M7CisJaW50IGk7CisKKwltY2ZfZGVzYyA9IHRvX2Zz bF9lZG1hX2Rlc2ModmRlc2MpOworCisJZm9yIChpID0gMDsgaSA8IG1jZl9kZXNjLT5uX3RjZHM7 IGkrKykKKwkJZG1hX3Bvb2xfZnJlZShtY2ZfZGVzYy0+ZWNoYW4tPnRjZF9wb29sLCBtY2ZfZGVz Yy0+dGNkW2ldLnZ0Y2QsCisJCQkJbWNmX2Rlc2MtPnRjZFtpXS5wdGNkKTsKKwlrZnJlZShtY2Zf ZGVzYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfZWRtYV9mcmVlX2Rlc2MpOworCitpbnQg ZnNsX2VkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQorewor CXN0cnVjdCBmc2xfZWRtYV9jaGFuICptY2ZfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7 CisKKwltY2ZfY2hhbi0+dGNkX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoInRjZF9wb29sIiwgY2hh bi0+ZGV2aWNlLT5kZXYsCisJCQlzaXplb2Yoc3RydWN0IGZzbF9lZG1hX2h3X3RjZCksIEVETUFf VENEX01FTV9BTElHTiwgMCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZz bF9lZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKTsKKwordm9pZCBmc2xfZWRtYV9mcmVlX2NoYW5f cmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hh biAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CisJTElTVF9IRUFEKGhlYWQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52 Y2hhbi5sb2NrLCBmbGFncyk7CisJZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsK Kwlmc2xfY2hhbi0+ZWRlc2MgPSBOVUxMOworCXZjaGFuX2dldF9hbGxfZGVzY3JpcHRvcnMoJmZz bF9jaGFuLT52Y2hhbiwgJmhlYWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFu LT52Y2hhbi5sb2NrLCBmbGFncyk7CisKKwl2Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3QoJmZzbF9j aGFuLT52Y2hhbiwgJmhlYWQpOworCWRtYV9wb29sX2Rlc3Ryb3koZnNsX2NoYW4tPnRjZF9wb29s KTsKKwlmc2xfY2hhbi0+dGNkX3Bvb2wgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNs X2VkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyk7CisKK2ludCBmc2xfZWRtYV9zbGF2ZV9jb25maWco c3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY29u ZmlnKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2No YW4oY2hhbik7CisKKwltZW1jcHkoJmZzbF9jaGFuLT5jZmcsIGNvbmZpZywgc2l6ZW9mKCpjb25m aWcpKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfc2xhdmVf Y29uZmlnKTsKKworc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVw X2RtYV9jeWNsaWMoCisJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfYWRk ciwgc2l6ZV90IGJ1Zl9sZW4sCisJCXNpemVfdCBwZXJpb2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zl cl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVj dCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJc3Ry dWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOworCWRtYV9hZGRyX3QgZG1hX2J1Zl9uZXh0Owor CWludCBzZ19sZW4sIGk7CisJdTMyIHNyY19hZGRyLCBkc3RfYWRkciwgbGFzdF9zZywgbmJ5dGVz LCBhdHRyOworCXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOworCisJaWYgKCFpc19zbGF2ZV9kaXJlY3Rp b24oZGlyZWN0aW9uKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZ19sZW4gPSBidWZfbGVuIC8gcGVy aW9kX2xlbjsKKwlmc2xfZGVzYyA9IGZzbF9lZG1hX2FsbG9jX2Rlc2MoZnNsX2NoYW4sIHNnX2xl bik7CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0dXJuIE5VTEw7CisKKwlmc2xfZGVzYy0+aXNjeWNs aWMgPSB0cnVlOworCWZzbF9jaGFuLT5kaXIgPSBkaXJlY3Rpb247CisKKwlkbWFfYnVmX25leHQg PSBkbWFfYWRkcjsKKworCWZvciAoaSA9IDA7IGkgPCBzZ19sZW47IGkrKykgeworCQlpZiAoZG1h X2J1Zl9uZXh0ID49IGRtYV9hZGRyICsgYnVmX2xlbikKKwkJCWRtYV9idWZfbmV4dCA9IGRtYV9h ZGRyOworCisJCS8qIGdldCBuZXh0IHNnJ3MgcGh5c2ljYWwgYWRkcmVzcyAqLworCQlsYXN0X3Nn ID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpICUgc2dfbGVuXS5wdGNkOworCisJCWlmIChkaXJlY3Rp b24gPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJCW5ieXRlcyA9IGZzbF9jaGFuLT5jZmcuZHN0X2Fk ZHJfd2lkdGggKgorCQkJCSBmc2xfY2hhbi0+Y2ZnLmRzdF9tYXhidXJzdDsKKwkJCXNyY19hZGRy ID0gZG1hX2J1Zl9uZXh0OworCQkJZHN0X2FkZHIgPSBmc2xfY2hhbi0+Y2ZnLmRzdF9hZGRyOwor CQkJc29mZiA9IGZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGg7CisJCQlkb2ZmID0gMDsKKwkJ CWF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0dHIoCisJCQkJZnNsX2NoYW4tPmNmZy5kc3RfYWRk cl93aWR0aCk7CisJCX0gZWxzZSB7CisJCQluYnl0ZXMgPSBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRy X3dpZHRoICoKKwkJCQkgZnNsX2NoYW4tPmNmZy5zcmNfbWF4YnVyc3Q7CisJCQlzcmNfYWRkciA9 ICBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyOworCQkJZHN0X2FkZHIgPSBkbWFfYnVmX25leHQ7CisJ CQlzb2ZmID0gMDsKKwkJCWRvZmYgPSBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoOworCQkJ YXR0ciA9IGZzbF9lZG1hX2dldF90Y2RfYXR0cigKKwkJCQlmc2xfY2hhbi0+Y2ZnLnNyY19hZGRy X3dpZHRoKTsKKwkJfQorCisJCWl0ZXIgPSBwZXJpb2RfbGVuIC8gbmJ5dGVzOworCisJCWZzbF9l ZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2RbaV0udnRjZCwKKwkJCQkgIHNyY19hZGRyLCBkc3Rf YWRkciwKKwkJCQkgIGF0dHIsIHNvZmYsIG5ieXRlcywgMCwgaXRlciwKKwkJCQkgIGl0ZXIsIGRv ZmYsIGxhc3Rfc2csIHRydWUsIGZhbHNlLCB0cnVlKTsKKwkJZG1hX2J1Zl9uZXh0ICs9IHBlcmlv ZF9sZW47CisJfQorCisJcmV0dXJuIHZjaGFuX3R4X3ByZXAoJmZzbF9jaGFuLT52Y2hhbiwgJmZz bF9kZXNjLT52ZGVzYywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfcHJl cF9kbWFfY3ljbGljKTsKKworc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpmc2xfZWRt YV9wcmVwX3NsYXZlX3NnKAorCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVy bGlzdCAqc2dsLAorCQl1bnNpZ25lZCBpbnQgc2dfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJl Y3Rpb24gZGlyZWN0aW9uLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjb250ZXh0KQor eworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hh bik7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOworCXN0cnVjdCBzY2F0dGVybGlz dCAqc2c7CisJdTMyIHNyY19hZGRyLCBkc3RfYWRkciwgbGFzdF9zZywgbmJ5dGVzLCBhdHRyOwor CXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOworCWludCBpOworCisJaWYgKCFpc19zbGF2ZV9kaXJlY3Rp b24oZGlyZWN0aW9uKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmc2xfZGVzYyA9IGZzbF9lZG1hX2Fs bG9jX2Rlc2MoZnNsX2NoYW4sIHNnX2xlbik7CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0dXJuIE5V TEw7CisKKwlmc2xfZGVzYy0+aXNjeWNsaWMgPSBmYWxzZTsKKwlmc2xfY2hhbi0+ZGlyID0gZGly ZWN0aW9uOworCisJZm9yX2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKSB7CisJCS8qIGdldCBu ZXh0IHNnJ3MgcGh5c2ljYWwgYWRkcmVzcyAqLworCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFso aSArIDEpICUgc2dfbGVuXS5wdGNkOworCisJCWlmIChkaXJlY3Rpb24gPT0gRE1BX01FTV9UT19E RVYpIHsKKwkJCW5ieXRlcyA9IGZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGggKgorCQkJCSBm c2xfY2hhbi0+Y2ZnLmRzdF9tYXhidXJzdDsKKwkJCXNyY19hZGRyID0gc2dfZG1hX2FkZHJlc3Mo c2cpOworCQkJZHN0X2FkZHIgPSBmc2xfY2hhbi0+Y2ZnLmRzdF9hZGRyOworCQkJc29mZiA9IGZz bF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGg7CisJCQlkb2ZmID0gMDsKKwkJCWF0dHIgPSBmc2xf ZWRtYV9nZXRfdGNkX2F0dHIoCisJCQkJCWZzbF9jaGFuLT5jZmcuZHN0X2FkZHJfd2lkdGgpOwor CisJCX0gZWxzZSB7CisJCQluYnl0ZXMgPSBmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dpZHRoICoK KwkJCQkgZnNsX2NoYW4tPmNmZy5zcmNfbWF4YnVyc3Q7CisJCQlzcmNfYWRkciA9IGZzbF9jaGFu LT5jZmcuc3JjX2FkZHI7CisJCQlkc3RfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCXNv ZmYgPSAwOworCQkJZG9mZiA9IGZzbF9jaGFuLT5jZmcuc3JjX2FkZHJfd2lkdGg7CisJCQlhdHRy ID0gZnNsX2VkbWFfZ2V0X3RjZF9hdHRyKAorCQkJCQlmc2xfY2hhbi0+Y2ZnLnNyY19hZGRyX3dp ZHRoKTsKKwkJfQorCisJCWl0ZXIgPSBzZ19kbWFfbGVuKHNnKSAvIG5ieXRlczsKKworCQlpZiAo aSA8IHNnX2xlbiAtIDEpIHsKKwkJCWxhc3Rfc2cgPSBmc2xfZGVzYy0+dGNkWyhpICsgMSldLnB0 Y2Q7CisJCQlmc2xfZWRtYV9maWxsX3RjZChmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QsCisJCQkJCSAg c3JjX2FkZHIsCisJCQkJCSAgZHN0X2FkZHIsIGF0dHIsIHNvZmYsCisJCQkJCSAgbmJ5dGVzLCAw LCBpdGVyLCBpdGVyLCBkb2ZmLCBsYXN0X3NnLAorCQkJCQkgIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7 CisJCX0gZWxzZSB7CisJCQlsYXN0X3NnID0gMDsKKwkJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9k ZXNjLT50Y2RbaV0udnRjZCwKKwkJCQkJICBzcmNfYWRkciwKKwkJCQkJICBkc3RfYWRkciwgYXR0 ciwgc29mZiwKKwkJCQkJICBuYnl0ZXMsIDAsIGl0ZXIsIGl0ZXIsIGRvZmYsIGxhc3Rfc2csCisJ CQkJCSAgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOworCQl9CisJfQorCisJcmV0dXJuIHZjaGFuX3R4X3By ZXAoJmZzbF9jaGFuLT52Y2hhbiwgJmZzbF9kZXNjLT52ZGVzYywgZmxhZ3MpOworfQorRVhQT1JU X1NZTUJPTF9HUEwoZnNsX2VkbWFfcHJlcF9zbGF2ZV9zZyk7CisKK2VudW0gZG1hX3N0YXR1cyBm c2xfZWRtYV90eF9zdGF0dXMoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQlkbWFfY29va2llX3Qg Y29va2llLCBzdHJ1Y3QgZG1hX3R4X3N0YXRlICp0eHN0YXRlKQoreworCXN0cnVjdCBmc2xfZWRt YV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IHZpcnRf ZG1hX2Rlc2MgKnZkZXNjOworCWVudW0gZG1hX3N0YXR1cyBzdGF0dXM7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKworCXN0YXR1cyA9IGRtYV9jb29raWVfc3RhdHVzKGNoYW4sIGNvb2tpZSwgdHhz dGF0ZSk7CisJaWYgKHN0YXR1cyA9PSBETUFfQ09NUExFVEUpCisJCXJldHVybiBzdGF0dXM7CisK KwlpZiAoIXR4c3RhdGUpCisJCXJldHVybiBmc2xfY2hhbi0+c3RhdHVzOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJdmRlc2MgPSB2Y2hhbl9m aW5kX2Rlc2MoJmZzbF9jaGFuLT52Y2hhbiwgY29va2llKTsKKwlpZiAoZnNsX2NoYW4tPmVkZXNj ICYmIGNvb2tpZSA9PSBmc2xfY2hhbi0+ZWRlc2MtPnZkZXNjLnR4LmNvb2tpZSkKKwkJdHhzdGF0 ZS0+cmVzaWR1ZSA9CisJCQkJZnNsX2VkbWFfZGVzY19yZXNpZHVlKGZzbF9jaGFuLCB2ZGVzYywg dHJ1ZSk7CisJZWxzZSBpZiAodmRlc2MpCisJCXR4c3RhdGUtPnJlc2lkdWUgPQorCQkJCWZzbF9l ZG1hX2Rlc2NfcmVzaWR1ZShmc2xfY2hhbiwgdmRlc2MsIGZhbHNlKTsKKwllbHNlCisJCXR4c3Rh dGUtPnJlc2lkdWUgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZj aGFuLmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBmc2xfY2hhbi0+c3RhdHVzOworfQorRVhQT1JU X1NZTUJPTF9HUEwoZnNsX2VkbWFfdHhfc3RhdHVzKTsKKworaW50IGZzbF9lZG1hX3BhdXNlKHN0 cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4g PSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGlu X2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKwlpZiAoZnNsX2No YW4tPmVkZXNjKSB7CisJCWZzbF9lZG1hX2Rpc2FibGVfcmVxdWVzdChmc2xfY2hhbik7CisJCWZz bF9jaGFuLT5zdGF0dXMgPSBETUFfUEFVU0VEOworCQlmc2xfY2hhbi0+aWRsZSA9IHRydWU7CisJ fQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7 CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfZWRtYV9wYXVzZSk7CisKK2lu dCBmc2xfZWRtYV9yZXN1bWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xf ZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQg bG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywg ZmxhZ3MpOworCWlmIChmc2xfY2hhbi0+ZWRlc2MpIHsKKwkJZnNsX2VkbWFfZW5hYmxlX3JlcXVl c3QoZnNsX2NoYW4pOworCQlmc2xfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOworCQlm c2xfY2hhbi0+aWRsZSA9IGZhbHNlOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xf Y2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9H UEwoZnNsX2VkbWFfcmVzdW1lKTsKKworaW50IGZzbF9lZG1hX3Rlcm1pbmF0ZV9hbGwoc3RydWN0 IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRv X2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQo aGVhZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdz KTsKKwlmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3QoZnNsX2NoYW4pOworCWZzbF9jaGFuLT5lZGVz YyA9IE5VTEw7CisJZnNsX2NoYW4tPmlkbGUgPSB0cnVlOworCXZjaGFuX2dldF9hbGxfZGVzY3Jp cHRvcnMoJmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7CisJdmNoYW5fZG1hX2Rlc2NfZnJlZV9saXN0 KCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKGZzbF9lZG1hX3Rlcm1pbmF0ZV9hbGwpOworCit2b2lkIGZzbF9lZG1hX2lzc3VlX3BlbmRp bmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICptY2Zf Y2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZtY2ZfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCisJaWYg KHZjaGFuX2lzc3VlX3BlbmRpbmcoJm1jZl9jaGFuLT52Y2hhbikgJiYgIW1jZl9jaGFuLT5lZGVz YykKKwkJZnNsX2VkbWFfeGZlcl9kZXNjKG1jZl9jaGFuKTsKKworCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJm1jZl9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TChmc2xfZWRtYV9pc3N1ZV9wZW5kaW5nKTsKKwordm9pZCBmc2xfZWRtYV94ZmVyX2Rlc2Moc3Ry dWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQoreworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2 ZGVzYzsKKworCXZkZXNjID0gdmNoYW5fbmV4dF9kZXNjKCZmc2xfY2hhbi0+dmNoYW4pOworCWlm ICghdmRlc2MpCisJCXJldHVybjsKKwlmc2xfY2hhbi0+ZWRlc2MgPSB0b19mc2xfZWRtYV9kZXNj KHZkZXNjKTsKKwlmc2xfZWRtYV9zZXRfdGNkX3JlZ3MoZnNsX2NoYW4sIGZzbF9jaGFuLT5lZGVz Yy0+dGNkWzBdLnZ0Y2QpOworCWZzbF9lZG1hX2VuYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKKwlm c2xfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOworCWZzbF9jaGFuLT5pZGxlID0gZmFs c2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfZWRtYV94ZmVyX2Rlc2MpOworCisvKgorICog T24gdGhlIDMyIGNoYW5uZWxzIFZ5YnJpZC9tcGM1Nzd4IGVkbWEgdmVyc2lvbiAoaGVyZSBjYWxs ZWQgInYxIiksCisgKiByZWdpc3RlciBvZmZzZXRzIGFyZSBkaWZmZXJlbnQgY29tcGFyZWQgdG8g Q29sZEZpcmUgbWNmNTQ0MXggNjQgY2hhbm5lbHMKKyAqIGVkbWEgKGhlcmUgY2FsbGVkICJ2MiIp LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCByZWdpc3RlciBvZmZzZXRzIGFzIHBlciBw cm9wZXIgZGVjbGFyZWQgdmVyc2lvbgorICogc28gbXVzdCBiZSBjYWxsZWQgaW4geHh4X2VkbWFf cHJvYmUoKSBqdXN0IGFmdGVyIHNldHRpbmcgdGhlCisgKiBlZG1hICJ2ZXJzaW9uIiBhbmQgIm1l bWJhc2UiIGFwcHJvcHJpYXRlbHkuCisgKi8KK3ZvaWQgZnNsX2VkbWFfc2V0dXBfcmVncyhzdHJ1 Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hKQoreworCWVkbWEtPnJlZ3MuY3IgPSBlZG1hLT5tZW1i YXNlICsgRURNQV9DUjsKKwllZG1hLT5yZWdzLmVzID0gZWRtYS0+bWVtYmFzZSArIEVETUFfRVM7 CisJZWRtYS0+cmVncy5lcnFsID0gZWRtYS0+bWVtYmFzZSArIEVETUFfRVJROworCWVkbWEtPnJl Z3MuZWVpbCA9IGVkbWEtPm1lbWJhc2UgKyBFRE1BX0VFSTsKKworCWVkbWEtPnJlZ3Muc2VycSA9 IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFfU0VSUSA6 IEVETUE2NF9TRVJRKTsKKwllZG1hLT5yZWdzLmNlcnEgPSBlZG1hLT5tZW1iYXNlICsgKChlZG1h LT52ZXJzaW9uID09IHYxKSA/CisJCQlFRE1BX0NFUlEgOiBFRE1BNjRfQ0VSUSk7CisJZWRtYS0+ cmVncy5zZWVpID0gZWRtYS0+bWVtYmFzZSArICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkgPworCQkJ RURNQV9TRUVJIDogRURNQTY0X1NFRUkpOworCWVkbWEtPnJlZ3MuY2VlaSA9IGVkbWEtPm1lbWJh c2UgKyAoKGVkbWEtPnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFfQ0VFSSA6IEVETUE2NF9DRUVJ KTsKKwllZG1hLT5yZWdzLmNpbnQgPSBlZG1hLT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09 IHYxKSA/CisJCQlFRE1BX0NJTlQgOiBFRE1BNjRfQ0lOVCk7CisJZWRtYS0+cmVncy5jZXJyID0g ZWRtYS0+bWVtYmFzZSArICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkgPworCQkJRURNQV9DRVJSIDog RURNQTY0X0NFUlIpOworCWVkbWEtPnJlZ3Muc3NydCA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEt PnZlcnNpb24gPT0gdjEpID8KKwkJCUVETUFfU1NSVCA6IEVETUE2NF9TU1JUKTsKKwllZG1hLT5y ZWdzLmNkbmUgPSBlZG1hLT5tZW1iYXNlICsgKChlZG1hLT52ZXJzaW9uID09IHYxKSA/CisJCQlF RE1BX0NETkUgOiBFRE1BNjRfQ0RORSk7CisJZWRtYS0+cmVncy5pbnRsID0gZWRtYS0+bWVtYmFz ZSArICgoZWRtYS0+dmVyc2lvbiA9PSB2MSkgPworCQkJRURNQV9JTlRSIDogRURNQTY0X0lOVEwp OworCWVkbWEtPnJlZ3MuZXJybCA9IGVkbWEtPm1lbWJhc2UgKyAoKGVkbWEtPnZlcnNpb24gPT0g djEpID8KKwkJCUVETUFfRVJSIDogRURNQTY0X0VSUkwpOworCisJaWYgKGVkbWEtPnZlcnNpb24g PT0gdjIpIHsKKwkJZWRtYS0+cmVncy5lcnFoID0gZWRtYS0+bWVtYmFzZSArIEVETUE2NF9FUlFI OworCQllZG1hLT5yZWdzLmVlaWggPSBlZG1hLT5tZW1iYXNlICsgRURNQTY0X0VFSUg7CisJCWVk bWEtPnJlZ3MuZXJyaCA9IGVkbWEtPm1lbWJhc2UgKyBFRE1BNjRfRVJSSDsKKwkJZWRtYS0+cmVn cy5pbnRoID0gZWRtYS0+bWVtYmFzZSArIEVETUE2NF9JTlRIOworCX0KKworCWVkbWEtPnJlZ3Mu dGNkID0gZWRtYS0+bWVtYmFzZSArIEVETUFfVENEOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNs X2VkbWFfc2V0dXBfcmVncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21t b24uaCBiL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uZTg3YzJiZWM4ODJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogQ29weXJpZ2h0IDIwMTMtMjAxNCBG cmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTggQW5nZWxvIER1 cmVnaGVsbG8gPGFuZ2Vsb0BzeXNhbS5pdD4KKyAqLworI2lmbmRlZiBfRlNMX0VETUFfQ09NTU9O X0hfCisjZGVmaW5lIF9GU0xfRURNQV9DT01NT05fSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+CisKKyNpbmNsdWRlICJ2aXJ0LWRtYS5oIgorCisjZGVmaW5lIERNQU1VWF9OUgkJMgorCisj ZGVmaW5lIEVETUFfQ1JfRURCRwkJQklUKDEpCisjZGVmaW5lIEVETUFfQ1JfRVJDQQkJQklUKDIp CisjZGVmaW5lIEVETUFfQ1JfRVJHQQkJQklUKDMpCisjZGVmaW5lIEVETUFfQ1JfSE9FCQlCSVQo NCkKKyNkZWZpbmUgRURNQV9DUl9IQUxUCQlCSVQoNSkKKyNkZWZpbmUgRURNQV9DUl9DTE0JCUJJ VCg2KQorI2RlZmluZSBFRE1BX0NSX0VNTE0JCUJJVCg3KQorI2RlZmluZSBFRE1BX0NSX0VDWAkJ QklUKDE2KQorI2RlZmluZSBFRE1BX0NSX0NYCQlCSVQoMTcpCisKKyNkZWZpbmUgRURNQV9TRUVJ X1NFRUkoeCkJKCh4KSAmIEdFTk1BU0soNiwgMCkpCisjZGVmaW5lIEVETUFfQ0VFSV9DRUVJKHgp CSgoeCkgJiBHRU5NQVNLKDYsIDApKQorI2RlZmluZSBFRE1BX0NJTlRfQ0lOVCh4KQkoKHgpICYg R0VOTUFTSyg2LCAwKSkKKyNkZWZpbmUgRURNQV9DRVJSX0NFUlIoeCkJKCh4KSAmIEdFTk1BU0so NiwgMCkpCisKKyNkZWZpbmUgRlNMX0VETUFfQlVTV0lEVEhTCShCSVQoRE1BX1NMQVZFX0JVU1dJ RFRIXzFfQllURSkgfCBcCisJCQkJIEJJVChETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUykgfCBc CisJCQkJIEJJVChETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUykgfCBcCisJCQkJIEJJVChETUFf U0xBVkVfQlVTV0lEVEhfOF9CWVRFUykpCisKK2VudW0gZnNsX2VkbWFfcG1fc3RhdGUgeworCVJV Tk5JTkcgPSAwLAorCVNVU1BFTkRFRCwKK307CisKKy8qCisgKiBUaGlzIGFyZSB0Y2QgcmVncywg ZXF1YWwgZm9yIGJvdGggdjMyIGFuZCB2NjQKKyAqLworc3RydWN0IGZzbF9lZG1hX2h3X3RjZCB7 CisJX19sZTMyCXNhZGRyOworCV9fbGUxNglzb2ZmOworCV9fbGUxNglhdHRyOworCV9fbGUzMglu Ynl0ZXM7CisJX19sZTMyCXNsYXN0OworCV9fbGUzMglkYWRkcjsKKwlfX2xlMTYJZG9mZjsKKwlf X2xlMTYJY2l0ZXI7CisJX19sZTMyCWRsYXN0X3NnYTsKKwlfX2xlMTYJY3NyOworCV9fbGUxNgli aXRlcjsKK307CisKKy8qCisgKiBUaGlzIGFyZSBpb21lbSBwb2ludGVycywgZm9yIGJvdGggdjMy IGFuZCB2NjQuCisgKi8KK3N0cnVjdCBlZG1hX3JlZ3MgeworCXZvaWQgX19pb21lbSAqY3I7CisJ dm9pZCBfX2lvbWVtICplczsKKwl2b2lkIF9faW9tZW0gKmVycTsKKwl2b2lkIF9faW9tZW0gKmVy cWg7CisJdm9pZCBfX2lvbWVtICplcnFsOwkvKiBha2EgZXJxIG9uIHYzMiAqLworCXZvaWQgX19p b21lbSAqZWVpaDsKKwl2b2lkIF9faW9tZW0gKmVlaWw7CS8qIGFrYSBlZWkgb24gdjMyICovCisJ dm9pZCBfX2lvbWVtICpzZWVpOworCXZvaWQgX19pb21lbSAqY2VlaTsKKwl2b2lkIF9faW9tZW0g KnNlcnE7CisJdm9pZCBfX2lvbWVtICpjZXJxOworCXZvaWQgX19pb21lbSAqY2ludDsKKwl2b2lk IF9faW9tZW0gKmNlcnI7CisJdm9pZCBfX2lvbWVtICpzc3J0OworCXZvaWQgX19pb21lbSAqY2Ru ZTsKKwl2b2lkIF9faW9tZW0gKmludGg7CisJdm9pZCBfX2lvbWVtICppbnRsOworCXZvaWQgX19p b21lbSAqZXJyaDsKKwl2b2lkIF9faW9tZW0gKmVycmw7CisJc3RydWN0IGZzbF9lZG1hX2h3X3Rj ZCBfX2lvbWVtICp0Y2Q7Cit9OworCitzdHJ1Y3QgZnNsX2VkbWFfc3dfdGNkIHsKKwlkbWFfYWRk cl90IHB0Y2Q7CisJc3RydWN0IGZzbF9lZG1hX2h3X3RjZCAqdnRjZDsKK307CisKK3N0cnVjdCBm c2xfZWRtYV9jaGFuIHsKKwlzdHJ1Y3QgdmlydF9kbWFfY2hhbiB2Y2hhbjsKKwllbnVtIGRtYV9z dGF0dXMgc3RhdHVzOworCWVudW0gZnNsX2VkbWFfcG1fc3RhdGUgcG1fc3RhdGU7CisJYm9vbCBp ZGxlOworCXUzMiBzbGF2ZV9pZDsKKwlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hOworCXN0 cnVjdCBmc2xfZWRtYV9kZXNjICplZGVzYzsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnRjZF9wb29sOwor CXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnIGNmZzsKKwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rp b24gZGlyOworfTsKKworc3RydWN0IGZzbF9lZG1hX2Rlc2MgeworCXN0cnVjdCB2aXJ0X2RtYV9k ZXNjIHZkZXNjOworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICplY2hhbjsKKwlib29sIGlzY3ljbGlj OworCXVuc2lnbmVkIGludCBuX3RjZHM7CisJc3RydWN0IGZzbF9lZG1hX3N3X3RjZCB0Y2RbXTsK K307CisKK2VudW0gZWRtYV92ZXJzaW9uIHsKKwl2MSwgLyogMzJjaCwgVnliZGlyLCBtcGM1N3gs IGV0YyAqLworCXYyLCAvKiA2NGNoIENvbGRmaXJlICovCit9OworCitzdHJ1Y3QgZnNsX2VkbWFf ZW5naW5lIHsKKwlzdHJ1Y3QgZG1hX2RldmljZSBkbWFfZGV2OworCXN0cnVjdCBlZG1hX3JlZ3Mg cmVnczsKKwl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CisJdm9pZCBfX2lvbWVtICptdXhiYXNlW0RN QU1VWF9OUl07CisJc3RydWN0IGNsayAqbXV4Y2xrW0RNQU1VWF9OUl07CisJc3RydWN0IG11dGV4 IGZzbF9lZG1hX211dGV4OworCXUzMiBuX2NoYW5zOworCWludCB0eGlycTsKKwlpbnQgZXJyaXJx OworCWJvb2wgYmlnX2VuZGlhbjsKKwllbnVtIGVkbWFfdmVyc2lvbiB2ZXJzaW9uOworCXN0cnVj dCBmc2xfZWRtYV9jaGFuIGNoYW5zW107Cit9OworCit1MzIgZWRtYV9yZWFkbChzdHJ1Y3QgZnNs X2VkbWFfZW5naW5lICplZG1hLCB2b2lkIF9faW9tZW0gKmFkZHIpOwordm9pZCBlZG1hX3dyaXRl YihzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRk cik7Cit2b2lkIGVkbWFfd3JpdGV3KHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEsIHUxNiB2 YWwsIHZvaWQgX19pb21lbSAqYWRkcik7Cit2b2lkIGVkbWFfd3JpdGVsKHN0cnVjdCBmc2xfZWRt YV9lbmdpbmUgKmVkbWEsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7CitzdHJ1Y3QgZnNs X2VkbWFfY2hhbiAqdG9fZnNsX2VkbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworc3Ry dWN0IGZzbF9lZG1hX2Rlc2MgKnRvX2ZzbF9lZG1hX2Rlc2Moc3RydWN0IHZpcnRfZG1hX2Rlc2Mg KnZkKTsKK3ZvaWQgZnNsX2VkbWFfc2V0dXBfcmVncyhzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpl ZG1hKTsKK3ZvaWQgZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRtYV9jaGFu ICpmc2xfY2hhbik7Cit2b2lkIGZzbF9lZG1hX2ZyZWVfZGVzYyhzdHJ1Y3QgdmlydF9kbWFfZGVz YyAqdmRlc2MpOwordm9pZCBmc2xfZWRtYV94ZmVyX2Rlc2Moc3RydWN0IGZzbF9lZG1hX2NoYW4g KmZzbF9jaGFuKTsKK3ZvaWQgZnNsX2VkbWFfY2xlYW51cF92Y2hhbihzdHJ1Y3QgZG1hX2Rldmlj ZSAqZG1hZGV2KTsKKworLyogT3BlcmF0aW9ucyAqLworaW50IGZzbF9lZG1hX2FsbG9jX2NoYW5f cmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7Cit2b2lkIGZzbF9lZG1hX2ZyZWVfY2hh bl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK2ludCBmc2xfZWRtYV9zbGF2ZV9j b25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZp ZyAqY29uZmlnKTsKK3N0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNsX2VkbWFfcHJl cF9kbWFfY3ljbGljKAorCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgZG1hX2Fk ZHIsIHNpemVfdCBidWZfbGVuLAorCQlzaXplX3QgcGVyaW9kX2xlbiwgZW51bSBkbWFfdHJhbnNm ZXJfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJdW5zaWduZWQgbG9uZyBmbGFncyk7CitzdHJ1Y3Qg ZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmZzbF9lZG1hX3ByZXBfc2xhdmVfc2coCisJCXN0cnVj dCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCXVuc2lnbmVkIGlu dCBzZ19sZW4sIGVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCXVuc2ln bmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNvbnRleHQpOworZW51bSBkbWFfc3RhdHVzIGZzbF9lZG1h X3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCWRtYV9jb29raWVfdCBjb29raWUs IHN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUpOworaW50IGZzbF9lZG1hX3BhdXNlKHN0cnVj dCBkbWFfY2hhbiAqY2hhbik7CitpbnQgZnNsX2VkbWFfcmVzdW1lKHN0cnVjdCBkbWFfY2hhbiAq Y2hhbik7CitpbnQgZnNsX2VkbWFfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4p Owordm9pZCBmc2xfZWRtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisK KyNlbmRpZiAvKiBfRlNMX0VETUFfQ09NTU9OX0hfICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMv ZG1hL2ZzbC1lZG1hLmMgYi9kcml2ZXJzL2RtYS9mc2wtZWRtYS5jCmluZGV4IGM3NTY4ODY5Mjg0 ZS4uNWE0MTY2ZTQ4NWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9mc2wtZWRtYS5jCisrKyBi L2RyaXZlcnMvZG1hL2ZzbC1lZG1hLmMKQEAgLTEsMjU0ICsxLDIxIEBACi0vKgotICogZHJpdmVy cy9kbWEvZnNsLWVkbWEuYwotICoKLSAqIENvcHlyaWdodCAyMDEzLTIwMTQgRnJlZXNjYWxlIFNl bWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBEcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUgZURNQSBl bmdpbmUgd2l0aCBmbGV4aWJsZSBjaGFubmVsIG11bHRpcGxleGluZwotICogY2FwYWJpbGl0eSBm b3IgRE1BIHJlcXVlc3Qgc291cmNlcy4gVGhlIGVETUEgYmxvY2sgY2FuIGJlIGZvdW5kIG9uIHNv bWUKLSAqIFZ5YnJpZCBhbmQgTGF5ZXJzY2FwZSBTb0NzLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBp dAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCi0gKi8KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w CisvLworLy8gQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5j LgogCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgog I2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2lu Y2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgot I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2lu Y2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVk ZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1 ZGUgPGxpbnV4L29mX2RtYS5oPgogCi0jaW5jbHVkZSAidmlydC1kbWEuaCIKLQotI2RlZmluZSBF RE1BX0NSCQkJMHgwMAotI2RlZmluZSBFRE1BX0VTCQkJMHgwNAotI2RlZmluZSBFRE1BX0VSUQkJ MHgwQwotI2RlZmluZSBFRE1BX0VFSQkJMHgxNAotI2RlZmluZSBFRE1BX1NFUlEJCTB4MUIKLSNk ZWZpbmUgRURNQV9DRVJRCQkweDFBCi0jZGVmaW5lIEVETUFfU0VFSQkJMHgxOQotI2RlZmluZSBF RE1BX0NFRUkJCTB4MTgKLSNkZWZpbmUgRURNQV9DSU5UCQkweDFGCi0jZGVmaW5lIEVETUFfQ0VS UgkJMHgxRQotI2RlZmluZSBFRE1BX1NTUlQJCTB4MUQKLSNkZWZpbmUgRURNQV9DRE5FCQkweDFD Ci0jZGVmaW5lIEVETUFfSU5UUgkJMHgyNAotI2RlZmluZSBFRE1BX0VSUgkJMHgyQwotCi0jZGVm aW5lIEVETUFfVENEX1NBRERSKHgpCSgweDEwMDAgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9U Q0RfU09GRih4KQkoMHgxMDA0ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX0FUVFIoeCkJ KDB4MTAwNiArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9OQllURVMoeCkJKDB4MTAwOCAr IDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9TTEFTVCh4KQkoMHgxMDBDICsgMzIgKiAoeCkp Ci0jZGVmaW5lIEVETUFfVENEX0RBRERSKHgpCSgweDEwMTAgKyAzMiAqICh4KSkKLSNkZWZpbmUg RURNQV9UQ0RfRE9GRih4KQkoMHgxMDE0ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX0NJ VEVSX0VMSU5LKHgpCSgweDEwMTYgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfQ0lURVIo eCkJKDB4MTAxNiArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9ETEFTVF9TR0EoeCkJKDB4 MTAxOCArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9DU1IoeCkJCSgweDEwMUMgKyAzMiAq ICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfQklURVJfRUxJTksoeCkJKDB4MTAxRSArIDMyICogKHgp KQotI2RlZmluZSBFRE1BX1RDRF9CSVRFUih4KQkoMHgxMDFFICsgMzIgKiAoeCkpCi0KLSNkZWZp bmUgRURNQV9DUl9FREJHCQlCSVQoMSkKLSNkZWZpbmUgRURNQV9DUl9FUkNBCQlCSVQoMikKLSNk ZWZpbmUgRURNQV9DUl9FUkdBCQlCSVQoMykKLSNkZWZpbmUgRURNQV9DUl9IT0UJCUJJVCg0KQot I2RlZmluZSBFRE1BX0NSX0hBTFQJCUJJVCg1KQotI2RlZmluZSBFRE1BX0NSX0NMTQkJQklUKDYp Ci0jZGVmaW5lIEVETUFfQ1JfRU1MTQkJQklUKDcpCi0jZGVmaW5lIEVETUFfQ1JfRUNYCQlCSVQo MTYpCi0jZGVmaW5lIEVETUFfQ1JfQ1gJCUJJVCgxNykKLQotI2RlZmluZSBFRE1BX1NFRUlfU0VF SSh4KQkoKHgpICYgMHgxRikKLSNkZWZpbmUgRURNQV9DRUVJX0NFRUkoeCkJKCh4KSAmIDB4MUYp Ci0jZGVmaW5lIEVETUFfQ0lOVF9DSU5UKHgpCSgoeCkgJiAweDFGKQotI2RlZmluZSBFRE1BX0NF UlJfQ0VSUih4KQkoKHgpICYgMHgxRikKLQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFKHgp CQkoKCh4KSAmIDB4MDAwNykpCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfRE1PRCh4KQkJKCgoeCkg JiAweDAwMUYpIDw8IDMpCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkUoeCkJCSgoKHgpICYg MHgwMDA3KSA8PCA4KQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NNT0QoeCkJCSgoKHgpICYgMHgw MDFGKSA8PCAxMSkKLSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV84QklUCSgweDAwMDApCi0j ZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVfMTZCSVQJKDB4MDEwMCkKLSNkZWZpbmUgRURNQV9U Q0RfQVRUUl9TU0laRV8zMkJJVAkoMHgwMjAwKQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpF XzY0QklUCSgweDAzMDApCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVfMzJCWVRFCSgweDA1 MDApCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJWkVfOEJJVAkoMHgwMDAwKQotI2RlZmluZSBF RE1BX1RDRF9BVFRSX0RTSVpFXzE2QklUCSgweDAwMDEpCi0jZGVmaW5lIEVETUFfVENEX0FUVFJf RFNJWkVfMzJCSVQJKDB4MDAwMikKLSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV82NEJJVAko MHgwMDAzKQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzMyQllURQkoMHgwMDA1KQotCi0j ZGVmaW5lIEVETUFfVENEX1NPRkZfU09GRih4KQkJKHgpCi0jZGVmaW5lIEVETUFfVENEX05CWVRF U19OQllURVMoeCkJKHgpCi0jZGVmaW5lIEVETUFfVENEX1NMQVNUX1NMQVNUKHgpCQkoeCkKLSNk ZWZpbmUgRURNQV9UQ0RfREFERFJfREFERFIoeCkJCSh4KQotI2RlZmluZSBFRE1BX1RDRF9DSVRF Ul9DSVRFUih4KQkJKCh4KSAmIDB4N0ZGRikKLSNkZWZpbmUgRURNQV9UQ0RfRE9GRl9ET0ZGKHgp CQkoeCkKLSNkZWZpbmUgRURNQV9UQ0RfRExBU1RfU0dBX0RMQVNUX1NHQSh4KQkoeCkKLSNkZWZp bmUgRURNQV9UQ0RfQklURVJfQklURVIoeCkJCSgoeCkgJiAweDdGRkYpCi0KLSNkZWZpbmUgRURN QV9UQ0RfQ1NSX1NUQVJUCQlCSVQoMCkKLSNkZWZpbmUgRURNQV9UQ0RfQ1NSX0lOVF9NQUpPUgkJ QklUKDEpCi0jZGVmaW5lIEVETUFfVENEX0NTUl9JTlRfSEFMRgkJQklUKDIpCi0jZGVmaW5lIEVE TUFfVENEX0NTUl9EX1JFUQkJQklUKDMpCi0jZGVmaW5lIEVETUFfVENEX0NTUl9FX1NHCQlCSVQo NCkKLSNkZWZpbmUgRURNQV9UQ0RfQ1NSX0VfTElOSwkJQklUKDUpCi0jZGVmaW5lIEVETUFfVENE X0NTUl9BQ1RJVkUJCUJJVCg2KQotI2RlZmluZSBFRE1BX1RDRF9DU1JfRE9ORQkJQklUKDcpCi0K LSNkZWZpbmUgRURNQU1VWF9DSENGR19ESVMJCTB4MAotI2RlZmluZSBFRE1BTVVYX0NIQ0ZHX0VO QkwJCTB4ODAKLSNkZWZpbmUgRURNQU1VWF9DSENGR19TT1VSQ0UobikJCSgobikgJiAweDNGKQot Ci0jZGVmaW5lIERNQU1VWF9OUgkyCi0KLSNkZWZpbmUgRlNMX0VETUFfQlVTV0lEVEhTCUJJVChE TUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFKSB8IFwKLQkJCQlCSVQoRE1BX1NMQVZFX0JVU1dJRFRI XzJfQllURVMpIHwgXAotCQkJCUJJVChETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUykgfCBcCi0J CQkJQklUKERNQV9TTEFWRV9CVVNXSURUSF84X0JZVEVTKQotZW51bSBmc2xfZWRtYV9wbV9zdGF0 ZSB7Ci0JUlVOTklORyA9IDAsCi0JU1VTUEVOREVELAotfTsKLQotc3RydWN0IGZzbF9lZG1hX2h3 X3RjZCB7Ci0JX19sZTMyCXNhZGRyOwotCV9fbGUxNglzb2ZmOwotCV9fbGUxNglhdHRyOwotCV9f bGUzMgluYnl0ZXM7Ci0JX19sZTMyCXNsYXN0OwotCV9fbGUzMglkYWRkcjsKLQlfX2xlMTYJZG9m ZjsKLQlfX2xlMTYJY2l0ZXI7Ci0JX19sZTMyCWRsYXN0X3NnYTsKLQlfX2xlMTYJY3NyOwotCV9f bGUxNgliaXRlcjsKLX07Ci0KLXN0cnVjdCBmc2xfZWRtYV9zd190Y2QgewotCWRtYV9hZGRyX3QJ CQlwdGNkOwotCXN0cnVjdCBmc2xfZWRtYV9od190Y2QJCSp2dGNkOwotfTsKLQotc3RydWN0IGZz bF9lZG1hX3NsYXZlX2NvbmZpZyB7Ci0JZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uCWRpcjsK LQllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aAkJYWRkcl93aWR0aDsKLQl1MzIJCQkJZGV2X2FkZHI7 Ci0JdTMyCQkJCWJ1cnN0OwotCXUzMgkJCQlhdHRyOwotfTsKLQotc3RydWN0IGZzbF9lZG1hX2No YW4gewotCXN0cnVjdCB2aXJ0X2RtYV9jaGFuCQl2Y2hhbjsKLQllbnVtIGRtYV9zdGF0dXMJCQlz dGF0dXM7Ci0JZW51bSBmc2xfZWRtYV9wbV9zdGF0ZQkJcG1fc3RhdGU7Ci0JYm9vbAkJCQlpZGxl OwotCXUzMgkJCQlzbGF2ZV9pZDsKLQlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lCQkqZWRtYTsKLQlz dHJ1Y3QgZnNsX2VkbWFfZGVzYwkJKmVkZXNjOwotCXN0cnVjdCBmc2xfZWRtYV9zbGF2ZV9jb25m aWcJZnNjOwotCXN0cnVjdCBkbWFfcG9vbAkJCSp0Y2RfcG9vbDsKLX07Ci0KLXN0cnVjdCBmc2xf ZWRtYV9kZXNjIHsKLQlzdHJ1Y3QgdmlydF9kbWFfZGVzYwkJdmRlc2M7Ci0Jc3RydWN0IGZzbF9l ZG1hX2NoYW4JCSplY2hhbjsKLQlib29sCQkJCWlzY3ljbGljOwotCXVuc2lnbmVkIGludAkJCW5f dGNkczsKLQlzdHJ1Y3QgZnNsX2VkbWFfc3dfdGNkCQl0Y2RbXTsKLX07Ci0KLXN0cnVjdCBmc2xf ZWRtYV9lbmdpbmUgewotCXN0cnVjdCBkbWFfZGV2aWNlCWRtYV9kZXY7Ci0Jdm9pZCBfX2lvbWVt CQkqbWVtYmFzZTsKLQl2b2lkIF9faW9tZW0JCSptdXhiYXNlW0RNQU1VWF9OUl07Ci0Jc3RydWN0 IGNsawkJKm11eGNsa1tETUFNVVhfTlJdOwotCXN0cnVjdCBtdXRleAkJZnNsX2VkbWFfbXV0ZXg7 Ci0JdTMyCQkJbl9jaGFuczsKLQlpbnQJCQl0eGlycTsKLQlpbnQJCQllcnJpcnE7Ci0JYm9vbAkJ CWJpZ19lbmRpYW47Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4JY2hhbnNbXTsKLX07Ci0KLS8qCi0g KiBSL1cgZnVuY3Rpb25zIGZvciBiaWctIG9yIGxpdHRsZS1lbmRpYW4gcmVnaXN0ZXJzOgotICog VGhlIGVETUEgY29udHJvbGxlcidzIGVuZGlhbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgQ1BVIGNv cmUncyBlbmRpYW4uCi0gKiBGb3IgdGhlIGJpZy1lbmRpYW4gSVAgbW9kdWxlLCB0aGUgb2Zmc2V0 IGZvciA4LWJpdCBvciAxNi1iaXQgcmVnaXN0ZXJzCi0gKiBzaG91bGQgYWxzbyBiZSBzd2FwcGVk IG9wcG9zaXRlIHRvIHRoYXQgaW4gbGl0dGxlLWVuZGlhbiBJUC4KLSAqLwotCi1zdGF0aWMgdTMy IGVkbWFfcmVhZGwoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdm9pZCBfX2lvbWVtICph ZGRyKQotewotCWlmIChlZG1hLT5iaWdfZW5kaWFuKQotCQlyZXR1cm4gaW9yZWFkMzJiZShhZGRy KTsKLQllbHNlCi0JCXJldHVybiBpb3JlYWQzMihhZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgZWRt YV93cml0ZWIoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTggdmFsLCB2b2lkIF9faW9t ZW0gKmFkZHIpCi17Ci0JLyogc3dhcCB0aGUgcmVnIG9mZnNldCBmb3IgdGhlc2UgaW4gYmlnLWVu ZGlhbiBtb2RlICovCi0JaWYgKGVkbWEtPmJpZ19lbmRpYW4pCi0JCWlvd3JpdGU4KHZhbCwgKHZv aWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZylhZGRyIF4gMHgzKSk7Ci0JZWxzZQotCQlpb3dy aXRlOCh2YWwsIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBlZG1hX3dyaXRldyhzdHJ1Y3QgZnNs X2VkbWFfZW5naW5lICplZG1hLCB1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JLyog c3dhcCB0aGUgcmVnIG9mZnNldCBmb3IgdGhlc2UgaW4gYmlnLWVuZGlhbiBtb2RlICovCi0JaWYg KGVkbWEtPmJpZ19lbmRpYW4pCi0JCWlvd3JpdGUxNmJlKHZhbCwgKHZvaWQgX19pb21lbSAqKSgo dW5zaWduZWQgbG9uZylhZGRyIF4gMHgyKSk7Ci0JZWxzZQotCQlpb3dyaXRlMTYodmFsLCBhZGRy KTsKLX0KKyNpbmNsdWRlICJmc2wtZWRtYS1jb21tb24uaCIKIAotc3RhdGljIHZvaWQgZWRtYV93 cml0ZWwoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTMyIHZhbCwgdm9pZCBfX2lvbWVt ICphZGRyKQotewotCWlmIChlZG1hLT5iaWdfZW5kaWFuKQotCQlpb3dyaXRlMzJiZSh2YWwsIGFk ZHIpOwotCWVsc2UKLQkJaW93cml0ZTMyKHZhbCwgYWRkcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qg ZnNsX2VkbWFfY2hhbiAqdG9fZnNsX2VkbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCi17 Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZnNsX2VkbWFfY2hhbiwgdmNoYW4u Y2hhbik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqdG9fZnNsX2VkbWFfZGVz YyhzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZih2ZCwg c3RydWN0IGZzbF9lZG1hX2Rlc2MsIHZkZXNjKTsKLX0KLQotc3RhdGljIHZvaWQgZnNsX2VkbWFf ZW5hYmxlX3JlcXVlc3Qoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQotewotCXZvaWQg X19pb21lbSAqYWRkciA9IGZzbF9jaGFuLT5lZG1hLT5tZW1iYXNlOwotCXUzMiBjaCA9IGZzbF9j aGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7Ci0KLQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwg RURNQV9TRUVJX1NFRUkoY2gpLCBhZGRyICsgRURNQV9TRUVJKTsKLQllZG1hX3dyaXRlYihmc2xf Y2hhbi0+ZWRtYSwgY2gsIGFkZHIgKyBFRE1BX1NFUlEpOwotfQotCi1zdGF0aWMgdm9pZCBmc2xf ZWRtYV9kaXNhYmxlX3JlcXVlc3Qoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQotewot CXZvaWQgX19pb21lbSAqYWRkciA9IGZzbF9jaGFuLT5lZG1hLT5tZW1iYXNlOwotCXUzMiBjaCA9 IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7Ci0KLQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ ZWRtYSwgY2gsIGFkZHIgKyBFRE1BX0NFUlEpOwotCWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1h LCBFRE1BX0NFRUlfQ0VFSShjaCksIGFkZHIgKyBFRE1BX0NFRUkpOwotfQorI2RlZmluZSBFRE1B TVVYX0NIQ0ZHX0RJUwkJMAorI2RlZmluZSBFRE1BTVVYX0NIQ0ZHX0VOQkwJCUJJVCg3KQorI2Rl ZmluZSBFRE1BTVVYX0NIQ0ZHX1NPVVJDRShuKQkJKChuKSAmIEdFTk1BU0soNiwgMCkpCiAKIHN0 YXRpYyB2b2lkIGZzbF9lZG1hX2NoYW5fbXV4KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hh biwKIAkJCXVuc2lnbmVkIGludCBzbG90LCBib29sIGVuYWJsZSkKQEAgLTI2OCw0MTYgKzM1LDIw IEBAIHN0YXRpYyB2b2lkIGZzbF9lZG1hX2NoYW5fbXV4KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpm c2xfY2hhbiwKIAkJaW93cml0ZTgoRURNQU1VWF9DSENGR19ESVMsIG11eGFkZHIgKyBjaF9vZmYp OwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGZzbF9lZG1hX2dldF90Y2RfYXR0cihlbnVtIGRt YV9zbGF2ZV9idXN3aWR0aCBhZGRyX3dpZHRoKQotewotCXN3aXRjaCAoYWRkcl93aWR0aCkgewot CWNhc2UgMToKLQkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfOEJJVCB8IEVETUFfVENEX0FU VFJfRFNJWkVfOEJJVDsKLQljYXNlIDI6Ci0JCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzE2 QklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJJVDsKLQljYXNlIDQ6Ci0JCXJldHVybiBFRE1B X1RDRF9BVFRSX1NTSVpFXzMyQklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJJVDsKLQljYXNl IDg6Ci0JCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzY0QklUIHwgRURNQV9UQ0RfQVRUUl9E U0laRV82NEJJVDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJ VCB8IEVETUFfVENEX0FUVFJfRFNJWkVfMzJCSVQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBmc2xf ZWRtYV9mcmVlX2Rlc2Moc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjKQotewotCXN0cnVjdCBm c2xfZWRtYV9kZXNjICpmc2xfZGVzYzsKLQlpbnQgaTsKLQotCWZzbF9kZXNjID0gdG9fZnNsX2Vk bWFfZGVzYyh2ZGVzYyk7Ci0JZm9yIChpID0gMDsgaSA8IGZzbF9kZXNjLT5uX3RjZHM7IGkrKykK LQkJZG1hX3Bvb2xfZnJlZShmc2xfZGVzYy0+ZWNoYW4tPnRjZF9wb29sLCBmc2xfZGVzYy0+dGNk W2ldLnZ0Y2QsCi0JCQkgICAgICBmc2xfZGVzYy0+dGNkW2ldLnB0Y2QpOwotCWtmcmVlKGZzbF9k ZXNjKTsKLX0KLQotc3RhdGljIGludCBmc2xfZWRtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFf Y2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xf ZWRtYV9jaGFuKGNoYW4pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKGhlYWQp OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0J ZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKLQlmc2xfY2hhbi0+ZWRlc2MgPSBO VUxMOwotCWZzbF9jaGFuLT5pZGxlID0gdHJ1ZTsKLQl2Y2hhbl9nZXRfYWxsX2Rlc2NyaXB0b3Jz KCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xf Y2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCXZjaGFuX2RtYV9kZXNjX2ZyZWVfbGlzdCgmZnNs X2NoYW4tPnZjaGFuLCAmaGVhZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZnNsX2Vk bWFfcGF1c2Uoc3RydWN0IGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFu ICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFn czsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwot CWlmIChmc2xfY2hhbi0+ZWRlc2MpIHsKLQkJZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9j aGFuKTsKLQkJZnNsX2NoYW4tPnN0YXR1cyA9IERNQV9QQVVTRUQ7Ci0JCWZzbF9jaGFuLT5pZGxl ID0gdHJ1ZTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxv Y2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBmc2xfZWRtYV9yZXN1bWUo c3RydWN0IGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hh biA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNw aW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCWlmIChmc2xf Y2hhbi0+ZWRlc2MpIHsKLQkJZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3QoZnNsX2NoYW4pOwotCQlm c2xfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOwotCQlmc2xfY2hhbi0+aWRsZSA9IGZh bHNlOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywg ZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZzbF9lZG1hX3NsYXZlX2NvbmZp ZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCi0JCQkJIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpj ZmcpCi17Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hh bihjaGFuKTsKLQotCWZzbF9jaGFuLT5mc2MuZGlyID0gY2ZnLT5kaXJlY3Rpb247Ci0JaWYgKGNm Zy0+ZGlyZWN0aW9uID09IERNQV9ERVZfVE9fTUVNKSB7Ci0JCWZzbF9jaGFuLT5mc2MuZGV2X2Fk ZHIgPSBjZmctPnNyY19hZGRyOwotCQlmc2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGggPSBjZmctPnNy Y19hZGRyX3dpZHRoOwotCQlmc2xfY2hhbi0+ZnNjLmJ1cnN0ID0gY2ZnLT5zcmNfbWF4YnVyc3Q7 Ci0JCWZzbF9jaGFuLT5mc2MuYXR0ciA9IGZzbF9lZG1hX2dldF90Y2RfYXR0cihjZmctPnNyY19h ZGRyX3dpZHRoKTsKLQl9IGVsc2UgaWYgKGNmZy0+ZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVW KSB7Ci0JCWZzbF9jaGFuLT5mc2MuZGV2X2FkZHIgPSBjZmctPmRzdF9hZGRyOwotCQlmc2xfY2hh bi0+ZnNjLmFkZHJfd2lkdGggPSBjZmctPmRzdF9hZGRyX3dpZHRoOwotCQlmc2xfY2hhbi0+ZnNj LmJ1cnN0ID0gY2ZnLT5kc3RfbWF4YnVyc3Q7Ci0JCWZzbF9jaGFuLT5mc2MuYXR0ciA9IGZzbF9l ZG1hX2dldF90Y2RfYXR0cihjZmctPmRzdF9hZGRyX3dpZHRoKTsKLQl9IGVsc2UgewotCQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc2l6ZV90IGZzbF9lZG1h X2Rlc2NfcmVzaWR1ZShzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCi0JCXN0cnVjdCB2 aXJ0X2RtYV9kZXNjICp2ZGVzYywgYm9vbCBpbl9wcm9ncmVzcykKLXsKLQlzdHJ1Y3QgZnNsX2Vk bWFfZGVzYyAqZWRlc2MgPSBmc2xfY2hhbi0+ZWRlc2M7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0g ZnNsX2NoYW4tPmVkbWEtPm1lbWJhc2U7Ci0JdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4u Y2hhbl9pZDsKLQllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyID0gZnNsX2NoYW4tPmZz Yy5kaXI7Ci0JZG1hX2FkZHJfdCBjdXJfYWRkciwgZG1hX2FkZHI7Ci0Jc2l6ZV90IGxlbiwgc2l6 ZTsKLQlpbnQgaTsKLQotCS8qIGNhbGN1bGF0ZSB0aGUgdG90YWwgc2l6ZSBpbiB0aGlzIGRlc2Mg Ki8KLQlmb3IgKGxlbiA9IGkgPSAwOyBpIDwgZnNsX2NoYW4tPmVkZXNjLT5uX3RjZHM7IGkrKykK LQkJbGVuICs9IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+bmJ5dGVzKQotCQkJKiBs ZTE2X3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPmJpdGVyKTsKLQotCWlmICghaW5fcHJvZ3Jl c3MpCi0JCXJldHVybiBsZW47Ci0KLQlpZiAoZGlyID09IERNQV9NRU1fVE9fREVWKQotCQljdXJf YWRkciA9IGVkbWFfcmVhZGwoZnNsX2NoYW4tPmVkbWEsIGFkZHIgKyBFRE1BX1RDRF9TQUREUihj aCkpOwotCWVsc2UKLQkJY3VyX2FkZHIgPSBlZG1hX3JlYWRsKGZzbF9jaGFuLT5lZG1hLCBhZGRy ICsgRURNQV9UQ0RfREFERFIoY2gpKTsKLQotCS8qIGZpZ3VyZSBvdXQgdGhlIGZpbmlzaGVkIGFu ZCBjYWxjdWxhdGUgdGhlIHJlc2lkdWUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZnNsX2NoYW4tPmVk ZXNjLT5uX3RjZHM7IGkrKykgewotCQlzaXplID0gbGUzMl90b19jcHUoZWRlc2MtPnRjZFtpXS52 dGNkLT5uYnl0ZXMpCi0JCQkqIGxlMTZfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+Yml0ZXIp OwotCQlpZiAoZGlyID09IERNQV9NRU1fVE9fREVWKQotCQkJZG1hX2FkZHIgPSBsZTMyX3RvX2Nw dShlZGVzYy0+dGNkW2ldLnZ0Y2QtPnNhZGRyKTsKLQkJZWxzZQotCQkJZG1hX2FkZHIgPSBsZTMy X3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPmRhZGRyKTsKLQotCQlsZW4gLT0gc2l6ZTsKLQkJ aWYgKGN1cl9hZGRyID49IGRtYV9hZGRyICYmIGN1cl9hZGRyIDwgZG1hX2FkZHIgKyBzaXplKSB7 Ci0JCQlsZW4gKz0gZG1hX2FkZHIgKyBzaXplIC0gY3VyX2FkZHI7Ci0JCQlicmVhazsKLQkJfQot CX0KLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBlbnVtIGRtYV9zdGF0dXMgZnNsX2VkbWFf dHhfc3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKLQkJZG1hX2Nvb2tpZV90IGNvb2tpZSwg c3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAq ZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCXN0cnVjdCB2aXJ0X2RtYV9kZXNj ICp2ZGVzYzsKLQllbnVtIGRtYV9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0KLQlzdGF0dXMgPSBkbWFfY29va2llX3N0YXR1cyhjaGFuLCBjb29raWUsIHR4c3RhdGUpOwot CWlmIChzdGF0dXMgPT0gRE1BX0NPTVBMRVRFKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JaWYgKCF0 eHN0YXRlKQotCQlyZXR1cm4gZnNsX2NoYW4tPnN0YXR1czsKLQotCXNwaW5fbG9ja19pcnFzYXZl KCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCXZkZXNjID0gdmNoYW5fZmluZF9kZXNj KCZmc2xfY2hhbi0+dmNoYW4sIGNvb2tpZSk7Ci0JaWYgKGZzbF9jaGFuLT5lZGVzYyAmJiBjb29r aWUgPT0gZnNsX2NoYW4tPmVkZXNjLT52ZGVzYy50eC5jb29raWUpCi0JCXR4c3RhdGUtPnJlc2lk dWUgPSBmc2xfZWRtYV9kZXNjX3Jlc2lkdWUoZnNsX2NoYW4sIHZkZXNjLCB0cnVlKTsKLQllbHNl IGlmICh2ZGVzYykKLQkJdHhzdGF0ZS0+cmVzaWR1ZSA9IGZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShm c2xfY2hhbiwgdmRlc2MsIGZhbHNlKTsKLQllbHNlCi0JCXR4c3RhdGUtPnJlc2lkdWUgPSAwOwot Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsK LQotCXJldHVybiBmc2xfY2hhbi0+c3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9z ZXRfdGNkX3JlZ3Moc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuLAotCQkJCSAgc3RydWN0 IGZzbF9lZG1hX2h3X3RjZCAqdGNkKQotewotCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEg PSBmc2xfY2hhbi0+ZWRtYTsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBmc2xfY2hhbi0+ZWRtYS0+ bWVtYmFzZTsKLQl1MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFuX2lkOwotCi0JLyoK LQkgKiBUQ0QgcGFyYW1ldGVycyBhcmUgc3RvcmVkIGluIHN0cnVjdCBmc2xfZWRtYV9od190Y2Qg aW4gbGl0dGxlCi0JICogZW5kaWFuIGZvcm1hdC4gSG93ZXZlciwgd2UgbmVlZCB0byBsb2FkIHRo ZSBUQ0QgcmVnaXN0ZXJzIGluCi0JICogYmlnLSBvciBsaXR0bGUtZW5kaWFuIG9iZXlpbmcgdGhl IGVETUEgZW5naW5lIG1vZGVsIGVuZGlhbi4KLQkgKi8KLQllZG1hX3dyaXRldyhlZG1hLCAwLCBh ZGRyICsgRURNQV9UQ0RfQ1NSKGNoKSk7Ci0JZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUo dGNkLT5zYWRkciksIGFkZHIgKyBFRE1BX1RDRF9TQUREUihjaCkpOwotCWVkbWFfd3JpdGVsKGVk bWEsIGxlMzJfdG9fY3B1KHRjZC0+ZGFkZHIpLCBhZGRyICsgRURNQV9UQ0RfREFERFIoY2gpKTsK LQotCWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+YXR0ciksIGFkZHIgKyBFRE1B X1RDRF9BVFRSKGNoKSk7Ci0JZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5zb2Zm KSwgYWRkciArIEVETUFfVENEX1NPRkYoY2gpKTsKLQotCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJf dG9fY3B1KHRjZC0+bmJ5dGVzKSwgYWRkciArIEVETUFfVENEX05CWVRFUyhjaCkpOwotCWVkbWFf d3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+c2xhc3QpLCBhZGRyICsgRURNQV9UQ0RfU0xB U1QoY2gpKTsKLQotCWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+Y2l0ZXIpLCBh ZGRyICsgRURNQV9UQ0RfQ0lURVIoY2gpKTsKLQllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2Nw dSh0Y2QtPmJpdGVyKSwgYWRkciArIEVETUFfVENEX0JJVEVSKGNoKSk7Ci0JZWRtYV93cml0ZXco ZWRtYSwgbGUxNl90b19jcHUodGNkLT5kb2ZmKSwgYWRkciArIEVETUFfVENEX0RPRkYoY2gpKTsK LQotCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+ZGxhc3Rfc2dhKSwgYWRkciAr IEVETUFfVENEX0RMQVNUX1NHQShjaCkpOwotCi0JZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19j cHUodGNkLT5jc3IpLCBhZGRyICsgRURNQV9UQ0RfQ1NSKGNoKSk7Ci19Ci0KLXN0YXRpYyBpbmxp bmUKLXZvaWQgZnNsX2VkbWFfZmlsbF90Y2Qoc3RydWN0IGZzbF9lZG1hX2h3X3RjZCAqdGNkLCB1 MzIgc3JjLCB1MzIgZHN0LAotCQkgICAgICAgdTE2IGF0dHIsIHUxNiBzb2ZmLCB1MzIgbmJ5dGVz LCB1MzIgc2xhc3QsIHUxNiBjaXRlciwKLQkJICAgICAgIHUxNiBiaXRlciwgdTE2IGRvZmYsIHUz MiBkbGFzdF9zZ2EsIGJvb2wgbWFqb3JfaW50LAotCQkgICAgICAgYm9vbCBkaXNhYmxlX3JlcSwg Ym9vbCBlbmFibGVfc2cpCi17Ci0JdTE2IGNzciA9IDA7Ci0KLQkvKgotCSAqIGVETUEgaGFyZHdh cmUgU0dzIHJlcXVpcmUgdGhlIFRDRHMgdG8gYmUgc3RvcmVkIGluIGxpdHRsZQotCSAqIGVuZGlh biBmb3JtYXQgaXJyZXNwZWN0aXZlIG9mIHRoZSByZWdpc3RlciBlbmRpYW4gbW9kZWwuCi0JICog U28gd2UgcHV0IHRoZSB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGluIG1lbW9yeSwgd2FpdGluZwot CSAqIGZvciBmc2xfZWRtYV9zZXRfdGNkX3JlZ3MgZG9pbmcgdGhlIHN3YXAuCi0JICovCi0JdGNk LT5zYWRkciA9IGNwdV90b19sZTMyKHNyYyk7Ci0JdGNkLT5kYWRkciA9IGNwdV90b19sZTMyKGRz dCk7Ci0KLQl0Y2QtPmF0dHIgPSBjcHVfdG9fbGUxNihhdHRyKTsKLQotCXRjZC0+c29mZiA9IGNw dV90b19sZTE2KEVETUFfVENEX1NPRkZfU09GRihzb2ZmKSk7Ci0KLQl0Y2QtPm5ieXRlcyA9IGNw dV90b19sZTMyKEVETUFfVENEX05CWVRFU19OQllURVMobmJ5dGVzKSk7Ci0JdGNkLT5zbGFzdCA9 IGNwdV90b19sZTMyKEVETUFfVENEX1NMQVNUX1NMQVNUKHNsYXN0KSk7Ci0KLQl0Y2QtPmNpdGVy ID0gY3B1X3RvX2xlMTYoRURNQV9UQ0RfQ0lURVJfQ0lURVIoY2l0ZXIpKTsKLQl0Y2QtPmRvZmYg PSBjcHVfdG9fbGUxNihFRE1BX1RDRF9ET0ZGX0RPRkYoZG9mZikpOwotCi0JdGNkLT5kbGFzdF9z Z2EgPSBjcHVfdG9fbGUzMihFRE1BX1RDRF9ETEFTVF9TR0FfRExBU1RfU0dBKGRsYXN0X3NnYSkp OwotCi0JdGNkLT5iaXRlciA9IGNwdV90b19sZTE2KEVETUFfVENEX0JJVEVSX0JJVEVSKGJpdGVy KSk7Ci0JaWYgKG1ham9yX2ludCkKLQkJY3NyIHw9IEVETUFfVENEX0NTUl9JTlRfTUFKT1I7Ci0K LQlpZiAoZGlzYWJsZV9yZXEpCi0JCWNzciB8PSBFRE1BX1RDRF9DU1JfRF9SRVE7Ci0KLQlpZiAo ZW5hYmxlX3NnKQotCQljc3IgfD0gRURNQV9UQ0RfQ1NSX0VfU0c7Ci0KLQl0Y2QtPmNzciA9IGNw dV90b19sZTE2KGNzcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZnNsX2Vk bWFfYWxsb2NfZGVzYyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCi0JCWludCBzZ19s ZW4pCi17Ci0Jc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOwotCWludCBpOwotCi0JZnNs X2Rlc2MgPSBremFsbG9jKHNpemVvZigqZnNsX2Rlc2MpICsgc2l6ZW9mKHN0cnVjdCBmc2xfZWRt YV9zd190Y2QpICogc2dfbGVuLAotCQkJCUdGUF9OT1dBSVQpOwotCWlmICghZnNsX2Rlc2MpCi0J CXJldHVybiBOVUxMOwotCi0JZnNsX2Rlc2MtPmVjaGFuID0gZnNsX2NoYW47Ci0JZnNsX2Rlc2Mt Pm5fdGNkcyA9IHNnX2xlbjsKLQlmb3IgKGkgPSAwOyBpIDwgc2dfbGVuOyBpKyspIHsKLQkJZnNs X2Rlc2MtPnRjZFtpXS52dGNkID0gZG1hX3Bvb2xfYWxsb2MoZnNsX2NoYW4tPnRjZF9wb29sLAot CQkJCQlHRlBfTk9XQUlULCAmZnNsX2Rlc2MtPnRjZFtpXS5wdGNkKTsKLQkJaWYgKCFmc2xfZGVz Yy0+dGNkW2ldLnZ0Y2QpCi0JCQlnb3RvIGVycjsKLQl9Ci0JcmV0dXJuIGZzbF9kZXNjOwotCi1l cnI6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlkbWFfcG9vbF9mcmVlKGZzbF9jaGFuLT50Y2RfcG9v bCwgZnNsX2Rlc2MtPnRjZFtpXS52dGNkLAotCQkJCWZzbF9kZXNjLT50Y2RbaV0ucHRjZCk7Ci0J a2ZyZWUoZnNsX2Rlc2MpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGRtYV9h c3luY190eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWMoCi0JCXN0cnVjdCBk bWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCi0JCXNp emVfdCBwZXJpb2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAot CQl1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hh biA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0Jc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9k ZXNjOwotCWRtYV9hZGRyX3QgZG1hX2J1Zl9uZXh0OwotCWludCBzZ19sZW4sIGk7Ci0JdTMyIHNy Y19hZGRyLCBkc3RfYWRkciwgbGFzdF9zZywgbmJ5dGVzOwotCXUxNiBzb2ZmLCBkb2ZmLCBpdGVy OwotCi0JaWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24oZnNsX2NoYW4tPmZzYy5kaXIpKQotCQlyZXR1 cm4gTlVMTDsKLQotCXNnX2xlbiA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOwotCWZzbF9kZXNjID0g ZnNsX2VkbWFfYWxsb2NfZGVzYyhmc2xfY2hhbiwgc2dfbGVuKTsKLQlpZiAoIWZzbF9kZXNjKQot CQlyZXR1cm4gTlVMTDsKLQlmc2xfZGVzYy0+aXNjeWNsaWMgPSB0cnVlOwotCi0JZG1hX2J1Zl9u ZXh0ID0gZG1hX2FkZHI7Ci0JbmJ5dGVzID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoICogZnNs X2NoYW4tPmZzYy5idXJzdDsKLQlpdGVyID0gcGVyaW9kX2xlbiAvIG5ieXRlczsKLQotCWZvciAo aSA9IDA7IGkgPCBzZ19sZW47IGkrKykgewotCQlpZiAoZG1hX2J1Zl9uZXh0ID49IGRtYV9hZGRy ICsgYnVmX2xlbikKLQkJCWRtYV9idWZfbmV4dCA9IGRtYV9hZGRyOwotCi0JCS8qIGdldCBuZXh0 IHNnJ3MgcGh5c2ljYWwgYWRkcmVzcyAqLwotCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSAr IDEpICUgc2dfbGVuXS5wdGNkOwotCi0JCWlmIChmc2xfY2hhbi0+ZnNjLmRpciA9PSBETUFfTUVN X1RPX0RFVikgewotCQkJc3JjX2FkZHIgPSBkbWFfYnVmX25leHQ7Ci0JCQlkc3RfYWRkciA9IGZz bF9jaGFuLT5mc2MuZGV2X2FkZHI7Ci0JCQlzb2ZmID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRo OwotCQkJZG9mZiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzcmNfYWRkciA9IGZzbF9jaGFuLT5mc2Mu ZGV2X2FkZHI7Ci0JCQlkc3RfYWRkciA9IGRtYV9idWZfbmV4dDsKLQkJCXNvZmYgPSAwOwotCQkJ ZG9mZiA9IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aDsKLQkJfQotCi0JCWZzbF9lZG1hX2ZpbGxf dGNkKGZzbF9kZXNjLT50Y2RbaV0udnRjZCwgc3JjX2FkZHIsIGRzdF9hZGRyLAotCQkJCSAgZnNs X2NoYW4tPmZzYy5hdHRyLCBzb2ZmLCBuYnl0ZXMsIDAsIGl0ZXIsCi0JCQkJICBpdGVyLCBkb2Zm LCBsYXN0X3NnLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7Ci0JCWRtYV9idWZfbmV4dCArPSBwZXJpb2Rf bGVuOwotCX0KLQotCXJldHVybiB2Y2hhbl90eF9wcmVwKCZmc2xfY2hhbi0+dmNoYW4sICZmc2xf ZGVzYy0+dmRlc2MsIGZsYWdzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVz Y3JpcHRvciAqZnNsX2VkbWFfcHJlcF9zbGF2ZV9zZygKLQkJc3RydWN0IGRtYV9jaGFuICpjaGFu LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJdW5zaWduZWQgaW50IHNnX2xlbiwgZW51bSBk bWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJdW5zaWduZWQgbG9uZyBmbGFncywg dm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19m c2xfZWRtYV9jaGFuKGNoYW4pOwotCXN0cnVjdCBmc2xfZWRtYV9kZXNjICpmc2xfZGVzYzsKLQlz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXUzMiBzcmNfYWRkciwgZHN0X2FkZHIsIGxhc3Rfc2cs IG5ieXRlczsKLQl1MTYgc29mZiwgZG9mZiwgaXRlcjsKLQlpbnQgaTsKLQotCWlmICghaXNfc2xh dmVfZGlyZWN0aW9uKGZzbF9jaGFuLT5mc2MuZGlyKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmc2xf ZGVzYyA9IGZzbF9lZG1hX2FsbG9jX2Rlc2MoZnNsX2NoYW4sIHNnX2xlbik7Ci0JaWYgKCFmc2xf ZGVzYykKLQkJcmV0dXJuIE5VTEw7Ci0JZnNsX2Rlc2MtPmlzY3ljbGljID0gZmFsc2U7Ci0KLQlu Ynl0ZXMgPSBmc2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGggKiBmc2xfY2hhbi0+ZnNjLmJ1cnN0Owot CWZvcl9lYWNoX3NnKHNnbCwgc2csIHNnX2xlbiwgaSkgewotCQkvKiBnZXQgbmV4dCBzZydzIHBo eXNpY2FsIGFkZHJlc3MgKi8KLQkJbGFzdF9zZyA9IGZzbF9kZXNjLT50Y2RbKGkgKyAxKSAlIHNn X2xlbl0ucHRjZDsKLQotCQlpZiAoZnNsX2NoYW4tPmZzYy5kaXIgPT0gRE1BX01FTV9UT19ERVYp IHsKLQkJCXNyY19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwotCQkJZHN0X2FkZHIgPSBmc2xf Y2hhbi0+ZnNjLmRldl9hZGRyOwotCQkJc29mZiA9IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aDsK LQkJCWRvZmYgPSAwOwotCQl9IGVsc2UgewotCQkJc3JjX2FkZHIgPSBmc2xfY2hhbi0+ZnNjLmRl dl9hZGRyOwotCQkJZHN0X2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7Ci0JCQlzb2ZmID0gMDsK LQkJCWRvZmYgPSBmc2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGg7Ci0JCX0KLQotCQlpdGVyID0gc2df ZG1hX2xlbihzZykgLyBuYnl0ZXM7Ci0JCWlmIChpIDwgc2dfbGVuIC0gMSkgewotCQkJbGFzdF9z ZyA9IGZzbF9kZXNjLT50Y2RbKGkgKyAxKV0ucHRjZDsKLQkJCWZzbF9lZG1hX2ZpbGxfdGNkKGZz bF9kZXNjLT50Y2RbaV0udnRjZCwgc3JjX2FkZHIsCi0JCQkJCSAgZHN0X2FkZHIsIGZzbF9jaGFu LT5mc2MuYXR0ciwgc29mZiwKLQkJCQkJICBuYnl0ZXMsIDAsIGl0ZXIsIGl0ZXIsIGRvZmYsIGxh c3Rfc2csCi0JCQkJCSAgZmFsc2UsIGZhbHNlLCB0cnVlKTsKLQkJfSBlbHNlIHsKLQkJCWxhc3Rf c2cgPSAwOwotCQkJZnNsX2VkbWFfZmlsbF90Y2QoZnNsX2Rlc2MtPnRjZFtpXS52dGNkLCBzcmNf YWRkciwKLQkJCQkJICBkc3RfYWRkciwgZnNsX2NoYW4tPmZzYy5hdHRyLCBzb2ZmLAotCQkJCQkg IG5ieXRlcywgMCwgaXRlciwgaXRlciwgZG9mZiwgbGFzdF9zZywKLQkJCQkJICB0cnVlLCB0cnVl LCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdmNoYW5fdHhfcHJlcCgmZnNsX2NoYW4tPnZj aGFuLCAmZnNsX2Rlc2MtPnZkZXNjLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZzbF9lZG1h X3hmZXJfZGVzYyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4pCi17Ci0Jc3RydWN0IHZp cnRfZG1hX2Rlc2MgKnZkZXNjOwotCi0JdmRlc2MgPSB2Y2hhbl9uZXh0X2Rlc2MoJmZzbF9jaGFu LT52Y2hhbik7Ci0JaWYgKCF2ZGVzYykKLQkJcmV0dXJuOwotCWZzbF9jaGFuLT5lZGVzYyA9IHRv X2ZzbF9lZG1hX2Rlc2ModmRlc2MpOwotCWZzbF9lZG1hX3NldF90Y2RfcmVncyhmc2xfY2hhbiwg ZnNsX2NoYW4tPmVkZXNjLT50Y2RbMF0udnRjZCk7Ci0JZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3Qo ZnNsX2NoYW4pOwotCWZzbF9jaGFuLT5zdGF0dXMgPSBETUFfSU5fUFJPR1JFU1M7Ci0JZnNsX2No YW4tPmlkbGUgPSBmYWxzZTsKLX0KLQogc3RhdGljIGlycXJldHVybl90IGZzbF9lZG1hX3R4X2hh bmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUg KmZzbF9lZG1hID0gZGV2X2lkOwogCXVuc2lnbmVkIGludCBpbnRyLCBjaDsKLQl2b2lkIF9faW9t ZW0gKmJhc2VfYWRkcjsKIAlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW47CisJc3RydWN0 IGVkbWFfcmVncyAqcmVncyA9ICZmc2xfZWRtYS0+cmVnczsKIAotCWJhc2VfYWRkciA9IGZzbF9l ZG1hLT5tZW1iYXNlOwotCi0JaW50ciA9IGVkbWFfcmVhZGwoZnNsX2VkbWEsIGJhc2VfYWRkciAr IEVETUFfSU5UUik7CisJaW50ciA9IGVkbWFfcmVhZGwoZnNsX2VkbWEsIHJlZ3MtPmludGwpOwog CWlmICghaW50cikKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJZm9yIChjaCA9IDA7IGNoIDwgZnNs X2VkbWEtPm5fY2hhbnM7IGNoKyspIHsKIAkJaWYgKGludHIgJiAoMHgxIDw8IGNoKSkgewotCQkJ ZWRtYV93cml0ZWIoZnNsX2VkbWEsIEVETUFfQ0lOVF9DSU5UKGNoKSwKLQkJCQliYXNlX2FkZHIg KyBFRE1BX0NJTlQpOworCQkJZWRtYV93cml0ZWIoZnNsX2VkbWEsIEVETUFfQ0lOVF9DSU5UKGNo KSwgcmVncy0+Y2ludCk7CiAKIAkJCWZzbF9jaGFuID0gJmZzbF9lZG1hLT5jaGFuc1tjaF07CiAK QEAgLTcwNSwxNiArNzYsMTYgQEAgc3RhdGljIGlycXJldHVybl90IGZzbF9lZG1hX2Vycl9oYW5k bGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpm c2xfZWRtYSA9IGRldl9pZDsKIAl1bnNpZ25lZCBpbnQgZXJyLCBjaDsKKwlzdHJ1Y3QgZWRtYV9y ZWdzICpyZWdzID0gJmZzbF9lZG1hLT5yZWdzOwogCi0JZXJyID0gZWRtYV9yZWFkbChmc2xfZWRt YSwgZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1BX0VSUik7CisJZXJyID0gZWRtYV9yZWFkbChmc2xf ZWRtYSwgcmVncy0+ZXJybCk7CiAJaWYgKCFlcnIpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWZv ciAoY2ggPSAwOyBjaCA8IGZzbF9lZG1hLT5uX2NoYW5zOyBjaCsrKSB7CiAJCWlmIChlcnIgJiAo MHgxIDw8IGNoKSkgewogCQkJZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KCZmc2xfZWRtYS0+Y2hh bnNbY2hdKTsKLQkJCWVkbWFfd3JpdGViKGZzbF9lZG1hLCBFRE1BX0NFUlJfQ0VSUihjaCksCi0J CQkJZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1BX0NFUlIpOworCQkJZWRtYV93cml0ZWIoZnNsX2Vk bWEsIEVETUFfQ0VSUl9DRVJSKGNoKSwgcmVncy0+Y2Vycik7CiAJCQlmc2xfZWRtYS0+Y2hhbnNb Y2hdLnN0YXR1cyA9IERNQV9FUlJPUjsKIAkJCWZzbF9lZG1hLT5jaGFuc1tjaF0uaWRsZSA9IHRy dWU7CiAJCX0KQEAgLTczMCwyNSArMTAxLDYgQEAgc3RhdGljIGlycXJldHVybl90IGZzbF9lZG1h X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIAlyZXR1cm4gZnNsX2VkbWFfZXJy X2hhbmRsZXIoaXJxLCBkZXZfaWQpOwogfQogCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9pc3N1ZV9w ZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAq ZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQot CWlmICh1bmxpa2VseShmc2xfY2hhbi0+cG1fc3RhdGUgIT0gUlVOTklORykpIHsKLQkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQkJLyogY2Fu bm90IHN1Ym1pdCBkdWUgdG8gc3VzcGVuZCAqLwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHZjaGFu X2lzc3VlX3BlbmRpbmcoJmZzbF9jaGFuLT52Y2hhbikgJiYgIWZzbF9jaGFuLT5lZGVzYykKLQkJ ZnNsX2VkbWFfeGZlcl9kZXNjKGZzbF9jaGFuKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZG1hX2No YW4gKmZzbF9lZG1hX3hsYXRlKHN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmRtYV9zcGVjLAogCQlz dHJ1Y3Qgb2ZfZG1hICpvZmRtYSkKIHsKQEAgLTc2MSw3ICsxMTMsOCBAQCBzdGF0aWMgc3RydWN0 IGRtYV9jaGFuICpmc2xfZWRtYV94bGF0ZShzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpkbWFfc3Bl YywKIAkJcmV0dXJuIE5VTEw7CiAKIAltdXRleF9sb2NrKCZmc2xfZWRtYS0+ZnNsX2VkbWFfbXV0 ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hhbiwgJmZzbF9lZG1hLT5k bWFfZGV2LmNoYW5uZWxzLCBkZXZpY2Vfbm9kZSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2Fm ZShjaGFuLCBfY2hhbiwKKwkJCSZmc2xfZWRtYS0+ZG1hX2Rldi5jaGFubmVscywgZGV2aWNlX25v ZGUpIHsKIAkJaWYgKGNoYW4tPmNsaWVudF9jb3VudCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGNo YW4tPmNoYW5faWQgLyBjaGFuc19wZXJfbXV4KSA9PSBkbWFfc3BlYy0+YXJnc1swXSkgewpAQCAt Nzc4LDM5ICsxMzEsMTIgQEAgc3RhdGljIHN0cnVjdCBkbWFfY2hhbiAqZnNsX2VkbWFfeGxhdGUo c3RydWN0IG9mX3BoYW5kbGVfYXJncyAqZG1hX3NwZWMsCiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2Nr KCZmc2xfZWRtYS0+ZnNsX2VkbWFfbXV0ZXgpOwotCXJldHVybiBOVUxMOwotfQogCi1zdGF0aWMg aW50IGZzbF9lZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikK LXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNo YW4pOwotCi0JZnNsX2NoYW4tPnRjZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJ0Y2RfcG9vbCIs IGNoYW4tPmRldmljZS0+ZGV2LAotCQkJCXNpemVvZihzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkKSwK LQkJCQkzMiwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZzbF9lZG1hX2ZyZWVf Y2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRt YV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0JdW5zaWduZWQgbG9u ZyBmbGFnczsKLQlMSVNUX0hFQUQoaGVhZCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2No YW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQlmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3QoZnNsX2No YW4pOwotCWZzbF9lZG1hX2NoYW5fbXV4KGZzbF9jaGFuLCAwLCBmYWxzZSk7Ci0JZnNsX2NoYW4t PmVkZXNjID0gTlVMTDsKLQl2Y2hhbl9nZXRfYWxsX2Rlc2NyaXB0b3JzKCZmc2xfY2hhbi0+dmNo YW4sICZoZWFkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9j aywgZmxhZ3MpOwotCi0JdmNoYW5fZG1hX2Rlc2NfZnJlZV9saXN0KCZmc2xfY2hhbi0+dmNoYW4s ICZoZWFkKTsKLQlkbWFfcG9vbF9kZXN0cm95KGZzbF9jaGFuLT50Y2RfcG9vbCk7Ci0JZnNsX2No YW4tPnRjZF9wb29sID0gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludAotZnNs X2VkbWFfaXJxX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGZzbF9l ZG1hX2VuZ2luZSAqZnNsX2VkbWEpCitzdGF0aWMgaW50IGZzbF9lZG1hX2lycV9pbml0KHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICAgIHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUg KmZzbF9lZG1hKQogewogCWludCByZXQ7CiAKQEAgLTgyNywyMSArMTUzLDIxIEBAIGZzbF9lZG1h X2lycV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBmc2xfZWRtYV9l bmdpbmUgKmZzbF9lZG1hCiAJfQogCiAJaWYgKGZzbF9lZG1hLT50eGlycSA9PSBmc2xfZWRtYS0+ ZXJyaXJxKSB7Ci0JCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgZnNsX2VkbWEt PnR4aXJxLAorCQlyZXQgPSByZXF1ZXN0X2lycShmc2xfZWRtYS0+dHhpcnEsCiAJCQkJZnNsX2Vk bWFfaXJxX2hhbmRsZXIsIDAsICJlRE1BIiwgZnNsX2VkbWEpOwogCQlpZiAocmV0KSB7CiAJCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCByZWdpc3RlciBlRE1BIElSUS5cbiIpOwogCQkJIHJl dHVybiAgcmV0OwogCQl9CiAJfSBlbHNlIHsKLQkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRl di0+ZGV2LCBmc2xfZWRtYS0+dHhpcnEsCisJCXJldCA9IHJlcXVlc3RfaXJxKGZzbF9lZG1hLT50 eGlycSwKIAkJCQlmc2xfZWRtYV90eF9oYW5kbGVyLCAwLCAiZURNQSB0eCIsIGZzbF9lZG1hKTsK IAkJaWYgKHJldCkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgcmVnaXN0ZXIgZURN QSB0eCBJUlEuXG4iKTsKIAkJCXJldHVybiAgcmV0OwogCQl9CiAKLQkJcmV0ID0gZGV2bV9yZXF1 ZXN0X2lycSgmcGRldi0+ZGV2LCBmc2xfZWRtYS0+ZXJyaXJxLAorCQlyZXQgPSByZXF1ZXN0X2ly cShmc2xfZWRtYS0+ZXJyaXJxLAogCQkJCWZzbF9lZG1hX2Vycl9oYW5kbGVyLCAwLCAiZURNQSBl cnIiLCBmc2xfZWRtYSk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNh bid0IHJlZ2lzdGVyIGVETUEgZXJyIElSUS5cbiIpOwpAQCAtODUyLDE0ICsxNzgsMTUgQEAgZnNs X2VkbWFfaXJxX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGZzbF9l ZG1hX2VuZ2luZSAqZnNsX2VkbWEKIAlyZXR1cm4gMDsKIH0KIAorCiBzdGF0aWMgdm9pZCBmc2xf ZWRtYV9pcnFfZXhpdCgKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGZz bF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEpCiB7CiAJaWYgKGZzbF9lZG1hLT50eGlycSA9PSBmc2xf ZWRtYS0+ZXJyaXJxKSB7Ci0JCWRldm1fZnJlZV9pcnEoJnBkZXYtPmRldiwgZnNsX2VkbWEtPnR4 aXJxLCBmc2xfZWRtYSk7CisJCWZyZWVfaXJxKGZzbF9lZG1hLT50eGlycSwgZnNsX2VkbWEpOwog CX0gZWxzZSB7Ci0JCWRldm1fZnJlZV9pcnEoJnBkZXYtPmRldiwgZnNsX2VkbWEtPnR4aXJxLCBm c2xfZWRtYSk7Ci0JCWRldm1fZnJlZV9pcnEoJnBkZXYtPmRldiwgZnNsX2VkbWEtPmVycmlycSwg ZnNsX2VkbWEpOworCQlmcmVlX2lycShmc2xfZWRtYS0+dHhpcnEsIGZzbF9lZG1hKTsKKwkJZnJl ZV9pcnEoZnNsX2VkbWEtPmVycmlycSwgZnNsX2VkbWEpOwogCX0KIH0KIApAQCAtODc2LDYgKzIw Myw3IEBAIHN0YXRpYyBpbnQgZnNsX2VkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CiAJc3Ry dWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWE7CiAJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZz bF9jaGFuOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3M7CiAJc3RydWN0IHJlc291cmNlICpyZXM7 CiAJaW50IGxlbiwgY2hhbnM7CiAJaW50IHJldCwgaTsKQEAgLTg5MSw2ICsyMTksOCBAQCBzdGF0 aWMgaW50IGZzbF9lZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaWYg KCFmc2xfZWRtYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlmc2xfZWRtYS0+dmVyc2lvbiA9IHYx OworCiAJZnNsX2VkbWEtPm5fY2hhbnMgPSBjaGFuczsKIAltdXRleF9pbml0KCZmc2xfZWRtYS0+ ZnNsX2VkbWFfbXV0ZXgpOwogCkBAIC04OTksNiArMjI5LDkgQEAgc3RhdGljIGludCBmc2xfZWRt YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChJU19FUlIoZnNsX2Vk bWEtPm1lbWJhc2UpKQogCQlyZXR1cm4gUFRSX0VSUihmc2xfZWRtYS0+bWVtYmFzZSk7CiAKKwlm c2xfZWRtYV9zZXR1cF9yZWdzKGZzbF9lZG1hKTsKKwlyZWdzID0gJmZzbF9lZG1hLT5yZWdzOwor CiAJZm9yIChpID0gMDsgaSA8IERNQU1VWF9OUjsgaSsrKSB7CiAJCWNoYXIgY2xrbmFtZVszMl07 CiAKQEAgLTkzOSwxMSArMjcyLDExIEBAIHN0YXRpYyBpbnQgZnNsX2VkbWFfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJZnNsX2NoYW4tPnZjaGFuLmRlc2NfZnJlZSA9IGZz bF9lZG1hX2ZyZWVfZGVzYzsKIAkJdmNoYW5faW5pdCgmZnNsX2NoYW4tPnZjaGFuLCAmZnNsX2Vk bWEtPmRtYV9kZXYpOwogCi0JCWVkbWFfd3JpdGV3KGZzbF9lZG1hLCAweDAsIGZzbF9lZG1hLT5t ZW1iYXNlICsgRURNQV9UQ0RfQ1NSKGkpKTsKKwkJZWRtYV93cml0ZXcoZnNsX2VkbWEsIDB4MCwg JnJlZ3MtPnRjZFtpXS5jc3IpOwogCQlmc2xfZWRtYV9jaGFuX211eChmc2xfY2hhbiwgMCwgZmFs c2UpOwogCX0KIAotCWVkbWFfd3JpdGVsKGZzbF9lZG1hLCB+MCwgZnNsX2VkbWEtPm1lbWJhc2Ug KyBFRE1BX0lOVFIpOworCWVkbWFfd3JpdGVsKGZzbF9lZG1hLCB+MCwgcmVncy0+aW50bCk7CiAJ cmV0ID0gZnNsX2VkbWFfaXJxX2luaXQocGRldiwgZnNsX2VkbWEpOwogCWlmIChyZXQpCiAJCXJl dHVybiByZXQ7CkBAIC05OTAsMjIgKzMyMywxMSBAQCBzdGF0aWMgaW50IGZzbF9lZG1hX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJfQogCiAJLyogZW5hYmxlIHJvdW5kIHJv YmluIGFyYml0cmF0aW9uICovCi0JZWRtYV93cml0ZWwoZnNsX2VkbWEsIEVETUFfQ1JfRVJHQSB8 IEVETUFfQ1JfRVJDQSwgZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1BX0NSKTsKKwllZG1hX3dyaXRl bChmc2xfZWRtYSwgRURNQV9DUl9FUkdBIHwgRURNQV9DUl9FUkNBLCByZWdzLT5jcik7CiAKIAly ZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZnNsX2VkbWFfY2xlYW51cF92Y2hhbihzdHJ1Y3Qg ZG1hX2RldmljZSAqZG1hZGV2KQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpjaGFuLCAqX2No YW47Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgX2NoYW4sCi0JCQkJJmRtYWRl di0+Y2hhbm5lbHMsIHZjaGFuLmNoYW4uZGV2aWNlX25vZGUpIHsKLQkJbGlzdF9kZWwoJmNoYW4t PnZjaGFuLmNoYW4uZGV2aWNlX25vZGUpOwotCQl0YXNrbGV0X2tpbGwoJmNoYW4tPnZjaGFuLnRh c2spOwotCX0KLX0KLQogc3RhdGljIGludCBmc2xfZWRtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9m X25vZGU7CkBAIC0xMDQ4LDE4ICszNzAsMTkgQEAgc3RhdGljIGludCBmc2xfZWRtYV9yZXN1bWVf ZWFybHkoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZz bF9lZG1hID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZz bF9jaGFuOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmZnNsX2VkbWEtPnJlZ3M7CiAJaW50 IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZnNsX2VkbWEtPm5fY2hhbnM7IGkrKykgewogCQlmc2xf Y2hhbiA9ICZmc2xfZWRtYS0+Y2hhbnNbaV07CiAJCWZzbF9jaGFuLT5wbV9zdGF0ZSA9IFJVTk5J Tkc7Ci0JCWVkbWFfd3JpdGV3KGZzbF9lZG1hLCAweDAsIGZzbF9lZG1hLT5tZW1iYXNlICsgRURN QV9UQ0RfQ1NSKGkpKTsKKwkJZWRtYV93cml0ZXcoZnNsX2VkbWEsIDB4MCwgJnJlZ3MtPnRjZFtp XS5jc3IpOworCiAJCWlmIChmc2xfY2hhbi0+c2xhdmVfaWQgIT0gMCkKIAkJCWZzbF9lZG1hX2No YW5fbXV4KGZzbF9jaGFuLCBmc2xfY2hhbi0+c2xhdmVfaWQsIHRydWUpOwogCX0KIAotCWVkbWFf d3JpdGVsKGZzbF9lZG1hLCBFRE1BX0NSX0VSR0EgfCBFRE1BX0NSX0VSQ0EsCi0JCQlmc2xfZWRt YS0+bWVtYmFzZSArIEVETUFfQ1IpOworCWVkbWFfd3JpdGVsKGZzbF9lZG1hLCBFRE1BX0NSX0VS R0EgfCBFRE1BX0NSX0VSQ0EsIHJlZ3MtPmNyKTsKIAogCXJldHVybiAwOwogfQo=