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: [v2,3/4] dmaengine: fsl-edma: remove all the edma common code From: Angelo Dureghello Message-Id: <20180605214556.GA2184@jerusalem> Date: Tue, 5 Jun 2018 23:45:57 +0200 To: dmaengine@vger.kernel.org, vkoul@kernel.org Cc: linux-m68k@vger.kernel.org List-ID: VGhpcyBwYXRjaCBzaW1wbGlmeSBmc2wtZWRtYSByZW1vdmluZyBhbGwgdGhlIGNvZGUgdGhhdCBo YXMKYmVlbiBjb2xsZWN0ZWQgaW4gYSBzZXBhcmF0ZWQgY29tbW9uIG1vZHVsZSAoc2VlIHBhdGNo IDIvNCkuCgpTaWduZWQtb2ZmLWJ5OiBBbmdlbG8gRHVyZWdoZWxsbyA8YW5nZWxvQHN5c2FtLml0 PgotLS0KQ2hhbmdlcyBmb3IgdjI6Ci0gcGF0Y2ggc3BsaXR0ZWQgaW50byA0Ci0gcmVtb3ZlIGFs bCB0aGUgY29kZSBnb25lIGludG8gZnNsLWVkbWEtY29tbW9uCi0tLQogZHJpdmVycy9kbWEvZnNs LWVkbWEuYyB8IDczOSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDcwOSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2RtYS9mc2wtZWRtYS5jIGIvZHJpdmVycy9kbWEvZnNsLWVkbWEuYwpp bmRleCBjNzU2ODg2OTI4NGUuLjJmNmU0YTY1ZDA1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEv ZnNsLWVkbWEuYworKysgYi9kcml2ZXJzL2RtYS9mc2wtZWRtYS5jCkBAIC0xLDggKzEsOCBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8vIENvcHlyaWdodCAyMDEzLTIw MTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KIC8qCiAgKiBkcml2ZXJzL2RtYS9mc2wt ZWRtYS5jCiAgKgotICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rv ciwgSW5jLgotICoKICAqIERyaXZlciBmb3IgdGhlIEZyZWVzY2FsZSBlRE1BIGVuZ2luZSB3aXRo IGZsZXhpYmxlIGNoYW5uZWwgbXVsdGlwbGV4aW5nCiAgKiBjYXBhYmlsaXR5IGZvciBETUEgcmVx dWVzdCBzb3VyY2VzLiBUaGUgZURNQSBibG9jayBjYW4gYmUgZm91bmQgb24gc29tZQogICogVnli cmlkIGFuZCBMYXllcnNjYXBlIFNvQ3MuCkBAIC0xMywyNDIgKzEzLDIwIEBACiAgKiBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5j bHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNs dWRlIDxsaW51eC9kbWFwb29sLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUg PGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51 eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8 bGludXgvb2ZfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZG1hLmg+CiAKLSNpbmNsdWRlICJ2 aXJ0LWRtYS5oIgotCi0jZGVmaW5lIEVETUFfQ1IJCQkweDAwCi0jZGVmaW5lIEVETUFfRVMJCQkw eDA0Ci0jZGVmaW5lIEVETUFfRVJRCQkweDBDCi0jZGVmaW5lIEVETUFfRUVJCQkweDE0Ci0jZGVm aW5lIEVETUFfU0VSUQkJMHgxQgotI2RlZmluZSBFRE1BX0NFUlEJCTB4MUEKLSNkZWZpbmUgRURN QV9TRUVJCQkweDE5Ci0jZGVmaW5lIEVETUFfQ0VFSQkJMHgxOAotI2RlZmluZSBFRE1BX0NJTlQJ CTB4MUYKLSNkZWZpbmUgRURNQV9DRVJSCQkweDFFCi0jZGVmaW5lIEVETUFfU1NSVAkJMHgxRAot I2RlZmluZSBFRE1BX0NETkUJCTB4MUMKLSNkZWZpbmUgRURNQV9JTlRSCQkweDI0Ci0jZGVmaW5l IEVETUFfRVJSCQkweDJDCi0KLSNkZWZpbmUgRURNQV9UQ0RfU0FERFIoeCkJKDB4MTAwMCArIDMy ICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9TT0ZGKHgpCSgweDEwMDQgKyAzMiAqICh4KSkKLSNk ZWZpbmUgRURNQV9UQ0RfQVRUUih4KQkoMHgxMDA2ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFf VENEX05CWVRFUyh4KQkoMHgxMDA4ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX1NMQVNU KHgpCSgweDEwMEMgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfREFERFIoeCkJKDB4MTAx MCArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9ET0ZGKHgpCSgweDEwMTQgKyAzMiAqICh4 KSkKLSNkZWZpbmUgRURNQV9UQ0RfQ0lURVJfRUxJTksoeCkJKDB4MTAxNiArIDMyICogKHgpKQot I2RlZmluZSBFRE1BX1RDRF9DSVRFUih4KQkoMHgxMDE2ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVE TUFfVENEX0RMQVNUX1NHQSh4KQkoMHgxMDE4ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENE X0NTUih4KQkJKDB4MTAxQyArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9CSVRFUl9FTElO Syh4KQkoMHgxMDFFICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX0JJVEVSKHgpCSgweDEw MUUgKyAzMiAqICh4KSkKLQotI2RlZmluZSBFRE1BX0NSX0VEQkcJCUJJVCgxKQotI2RlZmluZSBF RE1BX0NSX0VSQ0EJCUJJVCgyKQotI2RlZmluZSBFRE1BX0NSX0VSR0EJCUJJVCgzKQotI2RlZmlu ZSBFRE1BX0NSX0hPRQkJQklUKDQpCi0jZGVmaW5lIEVETUFfQ1JfSEFMVAkJQklUKDUpCi0jZGVm aW5lIEVETUFfQ1JfQ0xNCQlCSVQoNikKLSNkZWZpbmUgRURNQV9DUl9FTUxNCQlCSVQoNykKLSNk ZWZpbmUgRURNQV9DUl9FQ1gJCUJJVCgxNikKLSNkZWZpbmUgRURNQV9DUl9DWAkJQklUKDE3KQot Ci0jZGVmaW5lIEVETUFfU0VFSV9TRUVJKHgpCSgoeCkgJiAweDFGKQotI2RlZmluZSBFRE1BX0NF RUlfQ0VFSSh4KQkoKHgpICYgMHgxRikKLSNkZWZpbmUgRURNQV9DSU5UX0NJTlQoeCkJKCh4KSAm IDB4MUYpCi0jZGVmaW5lIEVETUFfQ0VSUl9DRVJSKHgpCSgoeCkgJiAweDFGKQotCi0jZGVmaW5l IEVETUFfVENEX0FUVFJfRFNJWkUoeCkJCSgoKHgpICYgMHgwMDA3KSkKLSNkZWZpbmUgRURNQV9U Q0RfQVRUUl9ETU9EKHgpCQkoKCh4KSAmIDB4MDAxRikgPDwgMykKLSNkZWZpbmUgRURNQV9UQ0Rf QVRUUl9TU0laRSh4KQkJKCgoeCkgJiAweDAwMDcpIDw8IDgpCi0jZGVmaW5lIEVETUFfVENEX0FU VFJfU01PRCh4KQkJKCgoeCkgJiAweDAwMUYpIDw8IDExKQotI2RlZmluZSBFRE1BX1RDRF9BVFRS X1NTSVpFXzhCSVQJKDB4MDAwMCkKLSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV8xNkJJVAko MHgwMTAwKQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpFXzMyQklUCSgweDAyMDApCi0jZGVm aW5lIEVETUFfVENEX0FUVFJfU1NJWkVfNjRCSVQJKDB4MDMwMCkKLSNkZWZpbmUgRURNQV9UQ0Rf QVRUUl9TU0laRV8zMkJZVEUJKDB4MDUwMCkKLSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV84 QklUCSgweDAwMDApCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJWkVfMTZCSVQJKDB4MDAwMSkK LSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJJVAkoMHgwMDAyKQotI2RlZmluZSBFRE1B X1RDRF9BVFRSX0RTSVpFXzY0QklUCSgweDAwMDMpCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJ WkVfMzJCWVRFCSgweDAwMDUpCi0KLSNkZWZpbmUgRURNQV9UQ0RfU09GRl9TT0ZGKHgpCQkoeCkK LSNkZWZpbmUgRURNQV9UQ0RfTkJZVEVTX05CWVRFUyh4KQkoeCkKLSNkZWZpbmUgRURNQV9UQ0Rf U0xBU1RfU0xBU1QoeCkJCSh4KQotI2RlZmluZSBFRE1BX1RDRF9EQUREUl9EQUREUih4KQkJKHgp Ci0jZGVmaW5lIEVETUFfVENEX0NJVEVSX0NJVEVSKHgpCQkoKHgpICYgMHg3RkZGKQotI2RlZmlu ZSBFRE1BX1RDRF9ET0ZGX0RPRkYoeCkJCSh4KQotI2RlZmluZSBFRE1BX1RDRF9ETEFTVF9TR0Ff RExBU1RfU0dBKHgpCSh4KQotI2RlZmluZSBFRE1BX1RDRF9CSVRFUl9CSVRFUih4KQkJKCh4KSAm IDB4N0ZGRikKLQotI2RlZmluZSBFRE1BX1RDRF9DU1JfU1RBUlQJCUJJVCgwKQotI2RlZmluZSBF RE1BX1RDRF9DU1JfSU5UX01BSk9SCQlCSVQoMSkKLSNkZWZpbmUgRURNQV9UQ0RfQ1NSX0lOVF9I QUxGCQlCSVQoMikKLSNkZWZpbmUgRURNQV9UQ0RfQ1NSX0RfUkVRCQlCSVQoMykKLSNkZWZpbmUg RURNQV9UQ0RfQ1NSX0VfU0cJCUJJVCg0KQotI2RlZmluZSBFRE1BX1RDRF9DU1JfRV9MSU5LCQlC SVQoNSkKLSNkZWZpbmUgRURNQV9UQ0RfQ1NSX0FDVElWRQkJQklUKDYpCi0jZGVmaW5lIEVETUFf VENEX0NTUl9ET05FCQlCSVQoNykKLQotI2RlZmluZSBFRE1BTVVYX0NIQ0ZHX0RJUwkJMHgwCi0j ZGVmaW5lIEVETUFNVVhfQ0hDRkdfRU5CTAkJMHg4MAotI2RlZmluZSBFRE1BTVVYX0NIQ0ZHX1NP VVJDRShuKQkJKChuKSAmIDB4M0YpCi0KLSNkZWZpbmUgRE1BTVVYX05SCTIKLQotI2RlZmluZSBG U0xfRURNQV9CVVNXSURUSFMJQklUKERNQV9TTEFWRV9CVVNXSURUSF8xX0JZVEUpIHwgXAotCQkJ CUJJVChETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUykgfCBcCi0JCQkJQklUKERNQV9TTEFWRV9C VVNXSURUSF80X0JZVEVTKSB8IFwKLQkJCQlCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzhfQllURVMp Ci1lbnVtIGZzbF9lZG1hX3BtX3N0YXRlIHsKLQlSVU5OSU5HID0gMCwKLQlTVVNQRU5ERUQsCi19 OwotCi1zdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkIHsKLQlfX2xlMzIJc2FkZHI7Ci0JX19sZTE2CXNv ZmY7Ci0JX19sZTE2CWF0dHI7Ci0JX19sZTMyCW5ieXRlczsKLQlfX2xlMzIJc2xhc3Q7Ci0JX19s ZTMyCWRhZGRyOwotCV9fbGUxNglkb2ZmOwotCV9fbGUxNgljaXRlcjsKLQlfX2xlMzIJZGxhc3Rf c2dhOwotCV9fbGUxNgljc3I7Ci0JX19sZTE2CWJpdGVyOwotfTsKLQotc3RydWN0IGZzbF9lZG1h X3N3X3RjZCB7Ci0JZG1hX2FkZHJfdAkJCXB0Y2Q7Ci0Jc3RydWN0IGZzbF9lZG1hX2h3X3RjZAkJ KnZ0Y2Q7Ci19OwotCi1zdHJ1Y3QgZnNsX2VkbWFfc2xhdmVfY29uZmlnIHsKLQllbnVtIGRtYV90 cmFuc2Zlcl9kaXJlY3Rpb24JZGlyOwotCWVudW0gZG1hX3NsYXZlX2J1c3dpZHRoCQlhZGRyX3dp ZHRoOwotCXUzMgkJCQlkZXZfYWRkcjsKLQl1MzIJCQkJYnVyc3Q7Ci0JdTMyCQkJCWF0dHI7Ci19 OwotCi1zdHJ1Y3QgZnNsX2VkbWFfY2hhbiB7Ci0Jc3RydWN0IHZpcnRfZG1hX2NoYW4JCXZjaGFu OwotCWVudW0gZG1hX3N0YXR1cwkJCXN0YXR1czsKLQllbnVtIGZzbF9lZG1hX3BtX3N0YXRlCQlw bV9zdGF0ZTsKLQlib29sCQkJCWlkbGU7Ci0JdTMyCQkJCXNsYXZlX2lkOwotCXN0cnVjdCBmc2xf ZWRtYV9lbmdpbmUJCSplZG1hOwotCXN0cnVjdCBmc2xfZWRtYV9kZXNjCQkqZWRlc2M7Ci0Jc3Ry dWN0IGZzbF9lZG1hX3NsYXZlX2NvbmZpZwlmc2M7Ci0Jc3RydWN0IGRtYV9wb29sCQkJKnRjZF9w b29sOwotfTsKLQotc3RydWN0IGZzbF9lZG1hX2Rlc2MgewotCXN0cnVjdCB2aXJ0X2RtYV9kZXNj CQl2ZGVzYzsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbgkJKmVjaGFuOwotCWJvb2wJCQkJaXNjeWNs aWM7Ci0JdW5zaWduZWQgaW50CQkJbl90Y2RzOwotCXN0cnVjdCBmc2xfZWRtYV9zd190Y2QJCXRj ZFtdOwotfTsKLQotc3RydWN0IGZzbF9lZG1hX2VuZ2luZSB7Ci0Jc3RydWN0IGRtYV9kZXZpY2UJ ZG1hX2RldjsKLQl2b2lkIF9faW9tZW0JCSptZW1iYXNlOwotCXZvaWQgX19pb21lbQkJKm11eGJh c2VbRE1BTVVYX05SXTsKLQlzdHJ1Y3QgY2xrCQkqbXV4Y2xrW0RNQU1VWF9OUl07Ci0Jc3RydWN0 IG11dGV4CQlmc2xfZWRtYV9tdXRleDsKLQl1MzIJCQluX2NoYW5zOwotCWludAkJCXR4aXJxOwot CWludAkJCWVycmlycTsKLQlib29sCQkJYmlnX2VuZGlhbjsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hh bgljaGFuc1tdOwotfTsKLQotLyoKLSAqIFIvVyBmdW5jdGlvbnMgZm9yIGJpZy0gb3IgbGl0dGxl LWVuZGlhbiByZWdpc3RlcnM6Ci0gKiBUaGUgZURNQSBjb250cm9sbGVyJ3MgZW5kaWFuIGlzIGlu ZGVwZW5kZW50IG9mIHRoZSBDUFUgY29yZSdzIGVuZGlhbi4KLSAqIEZvciB0aGUgYmlnLWVuZGlh biBJUCBtb2R1bGUsIHRoZSBvZmZzZXQgZm9yIDgtYml0IG9yIDE2LWJpdCByZWdpc3RlcnMKLSAq IHNob3VsZCBhbHNvIGJlIHN3YXBwZWQgb3Bwb3NpdGUgdG8gdGhhdCBpbiBsaXR0bGUtZW5kaWFu IElQLgotICovCisjaW5jbHVkZSAiZnNsLWVkbWEtY29tbW9uLmgiCiAKLXN0YXRpYyB1MzIgZWRt YV9yZWFkbChzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB2b2lkIF9faW9tZW0gKmFkZHIp Ci17Ci0JaWYgKGVkbWEtPmJpZ19lbmRpYW4pCi0JCXJldHVybiBpb3JlYWQzMmJlKGFkZHIpOwot CWVsc2UKLQkJcmV0dXJuIGlvcmVhZDMyKGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBlZG1hX3dy aXRlYihzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1OCB2YWwsIHZvaWQgX19pb21lbSAq YWRkcikKLXsKLQkvKiBzd2FwIHRoZSByZWcgb2Zmc2V0IGZvciB0aGVzZSBpbiBiaWctZW5kaWFu IG1vZGUgKi8KLQlpZiAoZWRtYS0+YmlnX2VuZGlhbikKLQkJaW93cml0ZTgodmFsLCAodm9pZCBf X2lvbWVtICopKCh1bnNpZ25lZCBsb25nKWFkZHIgXiAweDMpKTsKLQllbHNlCi0JCWlvd3JpdGU4 KHZhbCwgYWRkcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGVkbWFfd3JpdGV3KHN0cnVjdCBmc2xfZWRt YV9lbmdpbmUgKmVkbWEsIHUxNiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQkvKiBzd2Fw IHRoZSByZWcgb2Zmc2V0IGZvciB0aGVzZSBpbiBiaWctZW5kaWFuIG1vZGUgKi8KLQlpZiAoZWRt YS0+YmlnX2VuZGlhbikKLQkJaW93cml0ZTE2YmUodmFsLCAodm9pZCBfX2lvbWVtICopKCh1bnNp Z25lZCBsb25nKWFkZHIgXiAweDIpKTsKLQllbHNlCi0JCWlvd3JpdGUxNih2YWwsIGFkZHIpOwot fQotCi1zdGF0aWMgdm9pZCBlZG1hX3dyaXRlbChzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1h LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JaWYgKGVkbWEtPmJpZ19lbmRpYW4p Ci0JCWlvd3JpdGUzMmJlKHZhbCwgYWRkcik7Ci0JZWxzZQotCQlpb3dyaXRlMzIodmFsLCBhZGRy KTsKLX0KLQotc3RhdGljIHN0cnVjdCBmc2xfZWRtYV9jaGFuICp0b19mc2xfZWRtYV9jaGFuKHN0 cnVjdCBkbWFfY2hhbiAqY2hhbikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVj dCBmc2xfZWRtYV9jaGFuLCB2Y2hhbi5jaGFuKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmc2xfZWRt YV9kZXNjICp0b19mc2xfZWRtYV9kZXNjKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCkKLXsKLQly ZXR1cm4gY29udGFpbmVyX29mKHZkLCBzdHJ1Y3QgZnNsX2VkbWFfZGVzYywgdmRlc2MpOwotfQot Ci1zdGF0aWMgdm9pZCBmc2xfZWRtYV9lbmFibGVfcmVxdWVzdChzdHJ1Y3QgZnNsX2VkbWFfY2hh biAqZnNsX2NoYW4pCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gZnNsX2NoYW4tPmVkbWEtPm1l bWJhc2U7Ci0JdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hhbl9pZDsKLQotCWVkbWFf d3JpdGViKGZzbF9jaGFuLT5lZG1hLCBFRE1BX1NFRUlfU0VFSShjaCksIGFkZHIgKyBFRE1BX1NF RUkpOwotCWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1hLCBjaCwgYWRkciArIEVETUFfU0VSUSk7 Ci19Ci0KLXN0YXRpYyB2b2lkIGZzbF9lZG1hX2Rpc2FibGVfcmVxdWVzdChzdHJ1Y3QgZnNsX2Vk bWFfY2hhbiAqZnNsX2NoYW4pCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gZnNsX2NoYW4tPmVk bWEtPm1lbWJhc2U7Ci0JdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hhbl9pZDsKLQot CWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1hLCBjaCwgYWRkciArIEVETUFfQ0VSUSk7Ci0JZWRt YV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIEVETUFfQ0VFSV9DRUVJKGNoKSwgYWRkciArIEVETUFf Q0VFSSk7Ci19CisjZGVmaW5lIEVETUFNVVhfQ0hDRkdfRElTCQkwCisjZGVmaW5lIEVETUFNVVhf Q0hDRkdfRU5CTAkJQklUKDcpCisjZGVmaW5lIEVETUFNVVhfQ0hDRkdfU09VUkNFKG4pCQkoKG4p ICYgR0VOTUFTSyg2LCAwKSkKIAogc3RhdGljIHZvaWQgZnNsX2VkbWFfY2hhbl9tdXgoc3RydWN0 IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuLAogCQkJdW5zaWduZWQgaW50IHNsb3QsIGJvb2wgZW5h YmxlKQpAQCAtMjY4LDQxNiArNDYsMjAgQEAgc3RhdGljIHZvaWQgZnNsX2VkbWFfY2hhbl9tdXgo c3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuLAogCQlpb3dyaXRlOChFRE1BTVVYX0NIQ0ZH X0RJUywgbXV4YWRkciArIGNoX29mZik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnNsX2Vk bWFfZ2V0X3RjZF9hdHRyKGVudW0gZG1hX3NsYXZlX2J1c3dpZHRoIGFkZHJfd2lkdGgpCi17Ci0J c3dpdGNoIChhZGRyX3dpZHRoKSB7Ci0JY2FzZSAxOgotCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9T U0laRV84QklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV84QklUOwotCWNhc2UgMjoKLQkJcmV0dXJu IEVETUFfVENEX0FUVFJfU1NJWkVfMTZCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzE2QklUOwot CWNhc2UgNDoKLQkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfMzJCSVQgfCBFRE1BX1RDRF9B VFRSX0RTSVpFXzMyQklUOwotCWNhc2UgODoKLQkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVf NjRCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzY0QklUOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBF RE1BX1RDRF9BVFRSX1NTSVpFXzMyQklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJJVDsKLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkIGZzbF9lZG1hX2ZyZWVfZGVzYyhzdHJ1Y3QgdmlydF9kbWFfZGVz YyAqdmRlc2MpCi17Ci0Jc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOwotCWludCBpOwot Ci0JZnNsX2Rlc2MgPSB0b19mc2xfZWRtYV9kZXNjKHZkZXNjKTsKLQlmb3IgKGkgPSAwOyBpIDwg ZnNsX2Rlc2MtPm5fdGNkczsgaSsrKQotCQlkbWFfcG9vbF9mcmVlKGZzbF9kZXNjLT5lY2hhbi0+ dGNkX3Bvb2wsIGZzbF9kZXNjLT50Y2RbaV0udnRjZCwKLQkJCSAgICAgIGZzbF9kZXNjLT50Y2Rb aV0ucHRjZCk7Ci0Ja2ZyZWUoZnNsX2Rlc2MpOwotfQotCi1zdGF0aWMgaW50IGZzbF9lZG1hX3Rl cm1pbmF0ZV9hbGwoc3RydWN0IGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9j aGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBm bGFnczsKLQlMSVNUX0hFQUQoaGVhZCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4t PnZjaGFuLmxvY2ssIGZsYWdzKTsKLQlmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3QoZnNsX2NoYW4p OwotCWZzbF9jaGFuLT5lZGVzYyA9IE5VTEw7Ci0JZnNsX2NoYW4tPmlkbGUgPSB0cnVlOwotCXZj aGFuX2dldF9hbGxfZGVzY3JpcHRvcnMoJmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOwotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0JdmNoYW5f ZG1hX2Rlc2NfZnJlZV9saXN0KCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBmc2xfZWRtYV9wYXVzZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCi17 Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFu KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFu LT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0JaWYgKGZzbF9jaGFuLT5lZGVzYykgewotCQlmc2xfZWRt YV9kaXNhYmxlX3JlcXVlc3QoZnNsX2NoYW4pOwotCQlmc2xfY2hhbi0+c3RhdHVzID0gRE1BX1BB VVNFRDsKLQkJZnNsX2NoYW4tPmlkbGUgPSB0cnVlOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IGZzbF9lZG1hX3Jlc3VtZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCi17Ci0Jc3RydWN0 IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKLQl1bnNp Z25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5s b2NrLCBmbGFncyk7Ci0JaWYgKGZzbF9jaGFuLT5lZGVzYykgewotCQlmc2xfZWRtYV9lbmFibGVf cmVxdWVzdChmc2xfY2hhbik7Ci0JCWZzbF9jaGFuLT5zdGF0dXMgPSBETUFfSU5fUFJPR1JFU1M7 Ci0JCWZzbF9jaGFuLT5pZGxlID0gZmFsc2U7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgZnNsX2VkbWFfc2xhdmVfY29uZmlnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKLQkJCQkgc3Ry dWN0IGRtYV9zbGF2ZV9jb25maWcgKmNmZykKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNs X2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCi0JZnNsX2NoYW4tPmZzYy5kaXIgPSBj ZmctPmRpcmVjdGlvbjsKLQlpZiAoY2ZnLT5kaXJlY3Rpb24gPT0gRE1BX0RFVl9UT19NRU0pIHsK LQkJZnNsX2NoYW4tPmZzYy5kZXZfYWRkciA9IGNmZy0+c3JjX2FkZHI7Ci0JCWZzbF9jaGFuLT5m c2MuYWRkcl93aWR0aCA9IGNmZy0+c3JjX2FkZHJfd2lkdGg7Ci0JCWZzbF9jaGFuLT5mc2MuYnVy c3QgPSBjZmctPnNyY19tYXhidXJzdDsKLQkJZnNsX2NoYW4tPmZzYy5hdHRyID0gZnNsX2VkbWFf Z2V0X3RjZF9hdHRyKGNmZy0+c3JjX2FkZHJfd2lkdGgpOwotCX0gZWxzZSBpZiAoY2ZnLT5kaXJl Y3Rpb24gPT0gRE1BX01FTV9UT19ERVYpIHsKLQkJZnNsX2NoYW4tPmZzYy5kZXZfYWRkciA9IGNm Zy0+ZHN0X2FkZHI7Ci0JCWZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aCA9IGNmZy0+ZHN0X2FkZHJf d2lkdGg7Ci0JCWZzbF9jaGFuLT5mc2MuYnVyc3QgPSBjZmctPmRzdF9tYXhidXJzdDsKLQkJZnNs X2NoYW4tPmZzYy5hdHRyID0gZnNsX2VkbWFfZ2V0X3RjZF9hdHRyKGNmZy0+ZHN0X2FkZHJfd2lk dGgpOwotCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBzaXplX3QgZnNsX2VkbWFfZGVzY19yZXNpZHVlKHN0cnVjdCBmc2xfZWRtYV9jaGFu ICpmc2xfY2hhbiwKLQkJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjLCBib29sIGluX3Byb2dy ZXNzKQotewotCXN0cnVjdCBmc2xfZWRtYV9kZXNjICplZGVzYyA9IGZzbF9jaGFuLT5lZGVzYzsK LQl2b2lkIF9faW9tZW0gKmFkZHIgPSBmc2xfY2hhbi0+ZWRtYS0+bWVtYmFzZTsKLQl1MzIgY2gg PSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFuX2lkOwotCWVudW0gZG1hX3RyYW5zZmVyX2RpcmVj dGlvbiBkaXIgPSBmc2xfY2hhbi0+ZnNjLmRpcjsKLQlkbWFfYWRkcl90IGN1cl9hZGRyLCBkbWFf YWRkcjsKLQlzaXplX3QgbGVuLCBzaXplOwotCWludCBpOwotCi0JLyogY2FsY3VsYXRlIHRoZSB0 b3RhbCBzaXplIGluIHRoaXMgZGVzYyAqLwotCWZvciAobGVuID0gaSA9IDA7IGkgPCBmc2xfY2hh bi0+ZWRlc2MtPm5fdGNkczsgaSsrKQotCQlsZW4gKz0gbGUzMl90b19jcHUoZWRlc2MtPnRjZFtp XS52dGNkLT5uYnl0ZXMpCi0JCQkqIGxlMTZfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+Yml0 ZXIpOwotCi0JaWYgKCFpbl9wcm9ncmVzcykKLQkJcmV0dXJuIGxlbjsKLQotCWlmIChkaXIgPT0g RE1BX01FTV9UT19ERVYpCi0JCWN1cl9hZGRyID0gZWRtYV9yZWFkbChmc2xfY2hhbi0+ZWRtYSwg YWRkciArIEVETUFfVENEX1NBRERSKGNoKSk7Ci0JZWxzZQotCQljdXJfYWRkciA9IGVkbWFfcmVh ZGwoZnNsX2NoYW4tPmVkbWEsIGFkZHIgKyBFRE1BX1RDRF9EQUREUihjaCkpOwotCi0JLyogZmln dXJlIG91dCB0aGUgZmluaXNoZWQgYW5kIGNhbGN1bGF0ZSB0aGUgcmVzaWR1ZSAqLwotCWZvciAo aSA9IDA7IGkgPCBmc2xfY2hhbi0+ZWRlc2MtPm5fdGNkczsgaSsrKSB7Ci0JCXNpemUgPSBsZTMy X3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPm5ieXRlcykKLQkJCSogbGUxNl90b19jcHUoZWRl c2MtPnRjZFtpXS52dGNkLT5iaXRlcik7Ci0JCWlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYpCi0J CQlkbWFfYWRkciA9IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+c2FkZHIpOwotCQll bHNlCi0JCQlkbWFfYWRkciA9IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+ZGFkZHIp OwotCi0JCWxlbiAtPSBzaXplOwotCQlpZiAoY3VyX2FkZHIgPj0gZG1hX2FkZHIgJiYgY3VyX2Fk ZHIgPCBkbWFfYWRkciArIHNpemUpIHsKLQkJCWxlbiArPSBkbWFfYWRkciArIHNpemUgLSBjdXJf YWRkcjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGVu dW0gZG1hX3N0YXR1cyBmc2xfZWRtYV90eF9zdGF0dXMoc3RydWN0IGRtYV9jaGFuICpjaGFuLAot CQlkbWFfY29va2llX3QgY29va2llLCBzdHJ1Y3QgZG1hX3R4X3N0YXRlICp0eHN0YXRlKQotewot CXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7 Ci0Jc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjOwotCWVudW0gZG1hX3N0YXR1cyBzdGF0dXM7 Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXN0YXR1cyA9IGRtYV9jb29raWVfc3RhdHVzKGNo YW4sIGNvb2tpZSwgdHhzdGF0ZSk7Ci0JaWYgKHN0YXR1cyA9PSBETUFfQ09NUExFVEUpCi0JCXJl dHVybiBzdGF0dXM7Ci0KLQlpZiAoIXR4c3RhdGUpCi0JCXJldHVybiBmc2xfY2hhbi0+c3RhdHVz OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0J dmRlc2MgPSB2Y2hhbl9maW5kX2Rlc2MoJmZzbF9jaGFuLT52Y2hhbiwgY29va2llKTsKLQlpZiAo ZnNsX2NoYW4tPmVkZXNjICYmIGNvb2tpZSA9PSBmc2xfY2hhbi0+ZWRlc2MtPnZkZXNjLnR4LmNv b2tpZSkKLQkJdHhzdGF0ZS0+cmVzaWR1ZSA9IGZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShmc2xfY2hh biwgdmRlc2MsIHRydWUpOwotCWVsc2UgaWYgKHZkZXNjKQotCQl0eHN0YXRlLT5yZXNpZHVlID0g ZnNsX2VkbWFfZGVzY19yZXNpZHVlKGZzbF9jaGFuLCB2ZGVzYywgZmFsc2UpOwotCWVsc2UKLQkJ dHhzdGF0ZS0+cmVzaWR1ZSA9IDA7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hh bi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIGZzbF9jaGFuLT5zdGF0dXM7Ci19Ci0K LXN0YXRpYyB2b2lkIGZzbF9lZG1hX3NldF90Y2RfcmVncyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAq ZnNsX2NoYW4sCi0JCQkJICBzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkICp0Y2QpCi17Ci0Jc3RydWN0 IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSA9IGZzbF9jaGFuLT5lZG1hOwotCXZvaWQgX19pb21lbSAq YWRkciA9IGZzbF9jaGFuLT5lZG1hLT5tZW1iYXNlOwotCXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hh bi5jaGFuLmNoYW5faWQ7Ci0KLQkvKgotCSAqIFRDRCBwYXJhbWV0ZXJzIGFyZSBzdG9yZWQgaW4g c3RydWN0IGZzbF9lZG1hX2h3X3RjZCBpbiBsaXR0bGUKLQkgKiBlbmRpYW4gZm9ybWF0LiBIb3dl dmVyLCB3ZSBuZWVkIHRvIGxvYWQgdGhlIFRDRCByZWdpc3RlcnMgaW4KLQkgKiBiaWctIG9yIGxp dHRsZS1lbmRpYW4gb2JleWluZyB0aGUgZURNQSBlbmdpbmUgbW9kZWwgZW5kaWFuLgotCSAqLwot CWVkbWFfd3JpdGV3KGVkbWEsIDAsIGFkZHIgKyBFRE1BX1RDRF9DU1IoY2gpKTsKLQllZG1hX3dy aXRlbChlZG1hLCBsZTMyX3RvX2NwdSh0Y2QtPnNhZGRyKSwgYWRkciArIEVETUFfVENEX1NBRERS KGNoKSk7Ci0JZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNkLT5kYWRkciksIGFkZHIg KyBFRE1BX1RDRF9EQUREUihjaCkpOwotCi0JZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUo dGNkLT5hdHRyKSwgYWRkciArIEVETUFfVENEX0FUVFIoY2gpKTsKLQllZG1hX3dyaXRldyhlZG1h LCBsZTE2X3RvX2NwdSh0Y2QtPnNvZmYpLCBhZGRyICsgRURNQV9UQ0RfU09GRihjaCkpOwotCi0J ZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNkLT5uYnl0ZXMpLCBhZGRyICsgRURNQV9U Q0RfTkJZVEVTKGNoKSk7Ci0JZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNkLT5zbGFz dCksIGFkZHIgKyBFRE1BX1RDRF9TTEFTVChjaCkpOwotCi0JZWRtYV93cml0ZXcoZWRtYSwgbGUx Nl90b19jcHUodGNkLT5jaXRlciksIGFkZHIgKyBFRE1BX1RDRF9DSVRFUihjaCkpOwotCWVkbWFf d3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+Yml0ZXIpLCBhZGRyICsgRURNQV9UQ0RfQklU RVIoY2gpKTsKLQllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmRvZmYpLCBhZGRy ICsgRURNQV9UQ0RfRE9GRihjaCkpOwotCi0JZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUo dGNkLT5kbGFzdF9zZ2EpLCBhZGRyICsgRURNQV9UQ0RfRExBU1RfU0dBKGNoKSk7Ci0KLQllZG1h X3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmNzciksIGFkZHIgKyBFRE1BX1RDRF9DU1Io Y2gpKTsKLX0KLQotc3RhdGljIGlubGluZQotdm9pZCBmc2xfZWRtYV9maWxsX3RjZChzdHJ1Y3Qg ZnNsX2VkbWFfaHdfdGNkICp0Y2QsIHUzMiBzcmMsIHUzMiBkc3QsCi0JCSAgICAgICB1MTYgYXR0 ciwgdTE2IHNvZmYsIHUzMiBuYnl0ZXMsIHUzMiBzbGFzdCwgdTE2IGNpdGVyLAotCQkgICAgICAg dTE2IGJpdGVyLCB1MTYgZG9mZiwgdTMyIGRsYXN0X3NnYSwgYm9vbCBtYWpvcl9pbnQsCi0JCSAg ICAgICBib29sIGRpc2FibGVfcmVxLCBib29sIGVuYWJsZV9zZykKLXsKLQl1MTYgY3NyID0gMDsK LQotCS8qCi0JICogZURNQSBoYXJkd2FyZSBTR3MgcmVxdWlyZSB0aGUgVENEcyB0byBiZSBzdG9y ZWQgaW4gbGl0dGxlCi0JICogZW5kaWFuIGZvcm1hdCBpcnJlc3BlY3RpdmUgb2YgdGhlIHJlZ2lz dGVyIGVuZGlhbiBtb2RlbC4KLQkgKiBTbyB3ZSBwdXQgdGhlIHZhbHVlIGluIGxpdHRsZSBlbmRp YW4gaW4gbWVtb3J5LCB3YWl0aW5nCi0JICogZm9yIGZzbF9lZG1hX3NldF90Y2RfcmVncyBkb2lu ZyB0aGUgc3dhcC4KLQkgKi8KLQl0Y2QtPnNhZGRyID0gY3B1X3RvX2xlMzIoc3JjKTsKLQl0Y2Qt PmRhZGRyID0gY3B1X3RvX2xlMzIoZHN0KTsKLQotCXRjZC0+YXR0ciA9IGNwdV90b19sZTE2KGF0 dHIpOwotCi0JdGNkLT5zb2ZmID0gY3B1X3RvX2xlMTYoRURNQV9UQ0RfU09GRl9TT0ZGKHNvZmYp KTsKLQotCXRjZC0+bmJ5dGVzID0gY3B1X3RvX2xlMzIoRURNQV9UQ0RfTkJZVEVTX05CWVRFUyhu Ynl0ZXMpKTsKLQl0Y2QtPnNsYXN0ID0gY3B1X3RvX2xlMzIoRURNQV9UQ0RfU0xBU1RfU0xBU1Qo c2xhc3QpKTsKLQotCXRjZC0+Y2l0ZXIgPSBjcHVfdG9fbGUxNihFRE1BX1RDRF9DSVRFUl9DSVRF UihjaXRlcikpOwotCXRjZC0+ZG9mZiA9IGNwdV90b19sZTE2KEVETUFfVENEX0RPRkZfRE9GRihk b2ZmKSk7Ci0KLQl0Y2QtPmRsYXN0X3NnYSA9IGNwdV90b19sZTMyKEVETUFfVENEX0RMQVNUX1NH QV9ETEFTVF9TR0EoZGxhc3Rfc2dhKSk7Ci0KLQl0Y2QtPmJpdGVyID0gY3B1X3RvX2xlMTYoRURN QV9UQ0RfQklURVJfQklURVIoYml0ZXIpKTsKLQlpZiAobWFqb3JfaW50KQotCQljc3IgfD0gRURN QV9UQ0RfQ1NSX0lOVF9NQUpPUjsKLQotCWlmIChkaXNhYmxlX3JlcSkKLQkJY3NyIHw9IEVETUFf VENEX0NTUl9EX1JFUTsKLQotCWlmIChlbmFibGVfc2cpCi0JCWNzciB8PSBFRE1BX1RDRF9DU1Jf RV9TRzsKLQotCXRjZC0+Y3NyID0gY3B1X3RvX2xlMTYoY3NyKTsKLX0KLQotc3RhdGljIHN0cnVj dCBmc2xfZWRtYV9kZXNjICpmc2xfZWRtYV9hbGxvY19kZXNjKHN0cnVjdCBmc2xfZWRtYV9jaGFu ICpmc2xfY2hhbiwKLQkJaW50IHNnX2xlbikKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZnNs X2Rlc2M7Ci0JaW50IGk7Ci0KLQlmc2xfZGVzYyA9IGt6YWxsb2Moc2l6ZW9mKCpmc2xfZGVzYykg KyBzaXplb2Yoc3RydWN0IGZzbF9lZG1hX3N3X3RjZCkgKiBzZ19sZW4sCi0JCQkJR0ZQX05PV0FJ VCk7Ci0JaWYgKCFmc2xfZGVzYykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmc2xfZGVzYy0+ZWNoYW4g PSBmc2xfY2hhbjsKLQlmc2xfZGVzYy0+bl90Y2RzID0gc2dfbGVuOwotCWZvciAoaSA9IDA7IGkg PCBzZ19sZW47IGkrKykgewotCQlmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QgPSBkbWFfcG9vbF9hbGxv Yyhmc2xfY2hhbi0+dGNkX3Bvb2wsCi0JCQkJCUdGUF9OT1dBSVQsICZmc2xfZGVzYy0+dGNkW2ld LnB0Y2QpOwotCQlpZiAoIWZzbF9kZXNjLT50Y2RbaV0udnRjZCkKLQkJCWdvdG8gZXJyOwotCX0K LQlyZXR1cm4gZnNsX2Rlc2M7Ci0KLWVycjoKLQl3aGlsZSAoLS1pID49IDApCi0JCWRtYV9wb29s X2ZyZWUoZnNsX2NoYW4tPnRjZF9wb29sLCBmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QsCi0JCQkJZnNs X2Rlc2MtPnRjZFtpXS5wdGNkKTsKLQlrZnJlZShmc2xfZGVzYyk7Ci0JcmV0dXJuIE5VTEw7Ci19 Ci0KLXN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmZzbF9lZG1hX3ByZXBf ZG1hX2N5Y2xpYygKLQkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9hZGRy LCBzaXplX3QgYnVmX2xlbiwKLQkJc2l6ZV90IHBlcmlvZF9sZW4sIGVudW0gZG1hX3RyYW5zZmVy X2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc3RydWN0 IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKLQlzdHJ1 Y3QgZnNsX2VkbWFfZGVzYyAqZnNsX2Rlc2M7Ci0JZG1hX2FkZHJfdCBkbWFfYnVmX25leHQ7Ci0J aW50IHNnX2xlbiwgaTsKLQl1MzIgc3JjX2FkZHIsIGRzdF9hZGRyLCBsYXN0X3NnLCBuYnl0ZXM7 Ci0JdTE2IHNvZmYsIGRvZmYsIGl0ZXI7Ci0KLQlpZiAoIWlzX3NsYXZlX2RpcmVjdGlvbihmc2xf Y2hhbi0+ZnNjLmRpcikpCi0JCXJldHVybiBOVUxMOwotCi0Jc2dfbGVuID0gYnVmX2xlbiAvIHBl cmlvZF9sZW47Ci0JZnNsX2Rlc2MgPSBmc2xfZWRtYV9hbGxvY19kZXNjKGZzbF9jaGFuLCBzZ19s ZW4pOwotCWlmICghZnNsX2Rlc2MpCi0JCXJldHVybiBOVUxMOwotCWZzbF9kZXNjLT5pc2N5Y2xp YyA9IHRydWU7Ci0KLQlkbWFfYnVmX25leHQgPSBkbWFfYWRkcjsKLQluYnl0ZXMgPSBmc2xfY2hh bi0+ZnNjLmFkZHJfd2lkdGggKiBmc2xfY2hhbi0+ZnNjLmJ1cnN0OwotCWl0ZXIgPSBwZXJpb2Rf bGVuIC8gbmJ5dGVzOwotCi0JZm9yIChpID0gMDsgaSA8IHNnX2xlbjsgaSsrKSB7Ci0JCWlmIChk bWFfYnVmX25leHQgPj0gZG1hX2FkZHIgKyBidWZfbGVuKQotCQkJZG1hX2J1Zl9uZXh0ID0gZG1h X2FkZHI7Ci0KLQkJLyogZ2V0IG5leHQgc2cncyBwaHlzaWNhbCBhZGRyZXNzICovCi0JCWxhc3Rf c2cgPSBmc2xfZGVzYy0+dGNkWyhpICsgMSkgJSBzZ19sZW5dLnB0Y2Q7Ci0KLQkJaWYgKGZzbF9j aGFuLT5mc2MuZGlyID09IERNQV9NRU1fVE9fREVWKSB7Ci0JCQlzcmNfYWRkciA9IGRtYV9idWZf bmV4dDsKLQkJCWRzdF9hZGRyID0gZnNsX2NoYW4tPmZzYy5kZXZfYWRkcjsKLQkJCXNvZmYgPSBm c2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGg7Ci0JCQlkb2ZmID0gMDsKLQkJfSBlbHNlIHsKLQkJCXNy Y19hZGRyID0gZnNsX2NoYW4tPmZzYy5kZXZfYWRkcjsKLQkJCWRzdF9hZGRyID0gZG1hX2J1Zl9u ZXh0OwotCQkJc29mZiA9IDA7Ci0JCQlkb2ZmID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoOwot CQl9Ci0KLQkJZnNsX2VkbWFfZmlsbF90Y2QoZnNsX2Rlc2MtPnRjZFtpXS52dGNkLCBzcmNfYWRk ciwgZHN0X2FkZHIsCi0JCQkJICBmc2xfY2hhbi0+ZnNjLmF0dHIsIHNvZmYsIG5ieXRlcywgMCwg aXRlciwKLQkJCQkgIGl0ZXIsIGRvZmYsIGxhc3Rfc2csIHRydWUsIGZhbHNlLCB0cnVlKTsKLQkJ ZG1hX2J1Zl9uZXh0ICs9IHBlcmlvZF9sZW47Ci0JfQotCi0JcmV0dXJuIHZjaGFuX3R4X3ByZXAo JmZzbF9jaGFuLT52Y2hhbiwgJmZzbF9kZXNjLT52ZGVzYywgZmxhZ3MpOwotfQotCi1zdGF0aWMg c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX3NsYXZlX3NnKAot CQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAotCQl1bnNp Z25lZCBpbnQgc2dfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAot CQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjb250ZXh0KQotewotCXN0cnVjdCBmc2xfZWRt YV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0Jc3RydWN0IGZzbF9l ZG1hX2Rlc2MgKmZzbF9kZXNjOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JdTMyIHNyY19h ZGRyLCBkc3RfYWRkciwgbGFzdF9zZywgbmJ5dGVzOwotCXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOwot CWludCBpOwotCi0JaWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24oZnNsX2NoYW4tPmZzYy5kaXIpKQot CQlyZXR1cm4gTlVMTDsKLQotCWZzbF9kZXNjID0gZnNsX2VkbWFfYWxsb2NfZGVzYyhmc2xfY2hh biwgc2dfbGVuKTsKLQlpZiAoIWZzbF9kZXNjKQotCQlyZXR1cm4gTlVMTDsKLQlmc2xfZGVzYy0+ aXNjeWNsaWMgPSBmYWxzZTsKLQotCW5ieXRlcyA9IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aCAq IGZzbF9jaGFuLT5mc2MuYnVyc3Q7Ci0JZm9yX2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKSB7 Ci0JCS8qIGdldCBuZXh0IHNnJ3MgcGh5c2ljYWwgYWRkcmVzcyAqLwotCQlsYXN0X3NnID0gZnNs X2Rlc2MtPnRjZFsoaSArIDEpICUgc2dfbGVuXS5wdGNkOwotCi0JCWlmIChmc2xfY2hhbi0+ZnNj LmRpciA9PSBETUFfTUVNX1RPX0RFVikgewotCQkJc3JjX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhz Zyk7Ci0JCQlkc3RfYWRkciA9IGZzbF9jaGFuLT5mc2MuZGV2X2FkZHI7Ci0JCQlzb2ZmID0gZnNs X2NoYW4tPmZzYy5hZGRyX3dpZHRoOwotCQkJZG9mZiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzcmNf YWRkciA9IGZzbF9jaGFuLT5mc2MuZGV2X2FkZHI7Ci0JCQlkc3RfYWRkciA9IHNnX2RtYV9hZGRy ZXNzKHNnKTsKLQkJCXNvZmYgPSAwOwotCQkJZG9mZiA9IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0 aDsKLQkJfQotCi0JCWl0ZXIgPSBzZ19kbWFfbGVuKHNnKSAvIG5ieXRlczsKLQkJaWYgKGkgPCBz Z19sZW4gLSAxKSB7Ci0JCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpXS5wdGNkOwot CQkJZnNsX2VkbWFfZmlsbF90Y2QoZnNsX2Rlc2MtPnRjZFtpXS52dGNkLCBzcmNfYWRkciwKLQkJ CQkJICBkc3RfYWRkciwgZnNsX2NoYW4tPmZzYy5hdHRyLCBzb2ZmLAotCQkJCQkgIG5ieXRlcywg MCwgaXRlciwgaXRlciwgZG9mZiwgbGFzdF9zZywKLQkJCQkJICBmYWxzZSwgZmFsc2UsIHRydWUp OwotCQl9IGVsc2UgewotCQkJbGFzdF9zZyA9IDA7Ci0JCQlmc2xfZWRtYV9maWxsX3RjZChmc2xf ZGVzYy0+dGNkW2ldLnZ0Y2QsIHNyY19hZGRyLAotCQkJCQkgIGRzdF9hZGRyLCBmc2xfY2hhbi0+ ZnNjLmF0dHIsIHNvZmYsCi0JCQkJCSAgbmJ5dGVzLCAwLCBpdGVyLCBpdGVyLCBkb2ZmLCBsYXN0 X3NnLAotCQkJCQkgIHRydWUsIHRydWUsIGZhbHNlKTsKLQkJfQotCX0KLQotCXJldHVybiB2Y2hh bl90eF9wcmVwKCZmc2xfY2hhbi0+dmNoYW4sICZmc2xfZGVzYy0+dmRlc2MsIGZsYWdzKTsKLX0K LQotc3RhdGljIHZvaWQgZnNsX2VkbWFfeGZlcl9kZXNjKHN0cnVjdCBmc2xfZWRtYV9jaGFuICpm c2xfY2hhbikKLXsKLQlzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmRlc2M7Ci0KLQl2ZGVzYyA9IHZj aGFuX25leHRfZGVzYygmZnNsX2NoYW4tPnZjaGFuKTsKLQlpZiAoIXZkZXNjKQotCQlyZXR1cm47 Ci0JZnNsX2NoYW4tPmVkZXNjID0gdG9fZnNsX2VkbWFfZGVzYyh2ZGVzYyk7Ci0JZnNsX2VkbWFf c2V0X3RjZF9yZWdzKGZzbF9jaGFuLCBmc2xfY2hhbi0+ZWRlc2MtPnRjZFswXS52dGNkKTsKLQlm c2xfZWRtYV9lbmFibGVfcmVxdWVzdChmc2xfY2hhbik7Ci0JZnNsX2NoYW4tPnN0YXR1cyA9IERN QV9JTl9QUk9HUkVTUzsKLQlmc2xfY2hhbi0+aWRsZSA9IGZhbHNlOwotfQotCiBzdGF0aWMgaXJx cmV0dXJuX3QgZnNsX2VkbWFfdHhfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJ c3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEgPSBkZXZfaWQ7CiAJdW5zaWduZWQgaW50 IGludHIsIGNoOwotCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwogCXN0cnVjdCBmc2xfZWRtYV9j aGFuICpmc2xfY2hhbjsKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0gJmZzbF9lZG1hLT5yZWdz OwogCi0JYmFzZV9hZGRyID0gZnNsX2VkbWEtPm1lbWJhc2U7Ci0KLQlpbnRyID0gZWRtYV9yZWFk bChmc2xfZWRtYSwgYmFzZV9hZGRyICsgRURNQV9JTlRSKTsKKwlpbnRyID0gZWRtYV9yZWFkbChm c2xfZWRtYSwgcmVncy0+aW50bCk7CiAJaWYgKCFpbnRyKQogCQlyZXR1cm4gSVJRX05PTkU7CiAK IAlmb3IgKGNoID0gMDsgY2ggPCBmc2xfZWRtYS0+bl9jaGFuczsgY2grKykgewogCQlpZiAoaW50 ciAmICgweDEgPDwgY2gpKSB7Ci0JCQllZG1hX3dyaXRlYihmc2xfZWRtYSwgRURNQV9DSU5UX0NJ TlQoY2gpLAotCQkJCWJhc2VfYWRkciArIEVETUFfQ0lOVCk7CisJCQllZG1hX3dyaXRlYihmc2xf ZWRtYSwgRURNQV9DSU5UX0NJTlQoY2gpLCByZWdzLT5jaW50KTsKIAogCQkJZnNsX2NoYW4gPSAm ZnNsX2VkbWEtPmNoYW5zW2NoXTsKIApAQCAtNzA1LDE2ICs4NywxNiBAQCBzdGF0aWMgaXJxcmV0 dXJuX3QgZnNsX2VkbWFfZXJyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0 cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1hID0gZGV2X2lkOwogCXVuc2lnbmVkIGludCBl cnIsIGNoOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmZnNsX2VkbWEtPnJlZ3M7CiAKLQll cnIgPSBlZG1hX3JlYWRsKGZzbF9lZG1hLCBmc2xfZWRtYS0+bWVtYmFzZSArIEVETUFfRVJSKTsK KwllcnIgPSBlZG1hX3JlYWRsKGZzbF9lZG1hLCByZWdzLT5lcnJsKTsKIAlpZiAoIWVycikKIAkJ cmV0dXJuIElSUV9OT05FOwogCiAJZm9yIChjaCA9IDA7IGNoIDwgZnNsX2VkbWEtPm5fY2hhbnM7 IGNoKyspIHsKIAkJaWYgKGVyciAmICgweDEgPDwgY2gpKSB7CiAJCQlmc2xfZWRtYV9kaXNhYmxl X3JlcXVlc3QoJmZzbF9lZG1hLT5jaGFuc1tjaF0pOwotCQkJZWRtYV93cml0ZWIoZnNsX2VkbWEs IEVETUFfQ0VSUl9DRVJSKGNoKSwKLQkJCQlmc2xfZWRtYS0+bWVtYmFzZSArIEVETUFfQ0VSUik7 CisJCQllZG1hX3dyaXRlYihmc2xfZWRtYSwgRURNQV9DRVJSX0NFUlIoY2gpLCByZWdzLT5jZXJy KTsKIAkJCWZzbF9lZG1hLT5jaGFuc1tjaF0uc3RhdHVzID0gRE1BX0VSUk9SOwogCQkJZnNsX2Vk bWEtPmNoYW5zW2NoXS5pZGxlID0gdHJ1ZTsKIAkJfQpAQCAtNzMwLDI1ICsxMTIsNiBAQCBzdGF0 aWMgaXJxcmV0dXJuX3QgZnNsX2VkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lk KQogCXJldHVybiBmc2xfZWRtYV9lcnJfaGFuZGxlcihpcnEsIGRldl9pZCk7CiB9CiAKLXN0YXRp YyB2b2lkIGZzbF9lZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQotewot CXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7 Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+ dmNoYW4ubG9jaywgZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KGZzbF9jaGFuLT5wbV9zdGF0ZSAh PSBSVU5OSU5HKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4u bG9jaywgZmxhZ3MpOwotCQkvKiBjYW5ub3Qgc3VibWl0IGR1ZSB0byBzdXNwZW5kICovCi0JCXJl dHVybjsKLQl9Ci0KLQlpZiAodmNoYW5faXNzdWVfcGVuZGluZygmZnNsX2NoYW4tPnZjaGFuKSAm JiAhZnNsX2NoYW4tPmVkZXNjKQotCQlmc2xfZWRtYV94ZmVyX2Rlc2MoZnNsX2NoYW4pOwotCi0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLX0K LQogc3RhdGljIHN0cnVjdCBkbWFfY2hhbiAqZnNsX2VkbWFfeGxhdGUoc3RydWN0IG9mX3BoYW5k bGVfYXJncyAqZG1hX3NwZWMsCiAJCXN0cnVjdCBvZl9kbWEgKm9mZG1hKQogewpAQCAtNzYxLDcg KzEyNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2NoYW4gKmZzbF9lZG1hX3hsYXRlKHN0cnVjdCBv Zl9waGFuZGxlX2FyZ3MgKmRtYV9zcGVjLAogCQlyZXR1cm4gTlVMTDsKIAogCW11dGV4X2xvY2so JmZzbF9lZG1hLT5mc2xfZWRtYV9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNo YW4sIF9jaGFuLCAmZnNsX2VkbWEtPmRtYV9kZXYuY2hhbm5lbHMsIGRldmljZV9ub2RlKSB7CisJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoYW4sIF9jaGFuLAorCQkJJmZzbF9lZG1hLT5kbWFf ZGV2LmNoYW5uZWxzLCBkZXZpY2Vfbm9kZSkgewogCQlpZiAoY2hhbi0+Y2xpZW50X2NvdW50KQog CQkJY29udGludWU7CiAJCWlmICgoY2hhbi0+Y2hhbl9pZCAvIGNoYW5zX3Blcl9tdXgpID09IGRt YV9zcGVjLT5hcmdzWzBdKSB7CkBAIC03NzgsMzkgKzE0MiwxMiBAQCBzdGF0aWMgc3RydWN0IGRt YV9jaGFuICpmc2xfZWRtYV94bGF0ZShzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpkbWFfc3BlYywK IAkJfQogCX0KIAltdXRleF91bmxvY2soJmZzbF9lZG1hLT5mc2xfZWRtYV9tdXRleCk7Ci0JcmV0 dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgZnNsX2VkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMo c3RydWN0IGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hh biA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0KLQlmc2xfY2hhbi0+dGNkX3Bvb2wgPSBkbWFf cG9vbF9jcmVhdGUoInRjZF9wb29sIiwgY2hhbi0+ZGV2aWNlLT5kZXYsCi0JCQkJc2l6ZW9mKHN0 cnVjdCBmc2xfZWRtYV9od190Y2QpLAotCQkJCTMyLCAwKTsKLQlyZXR1cm4gMDsKLX0KIAotc3Rh dGljIHZvaWQgZnNsX2VkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4pCi17Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hh bihjaGFuKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCUxJU1RfSEVBRChoZWFkKTsKLQotCXNw aW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCWZzbF9lZG1h X2Rpc2FibGVfcmVxdWVzdChmc2xfY2hhbik7Ci0JZnNsX2VkbWFfY2hhbl9tdXgoZnNsX2NoYW4s IDAsIGZhbHNlKTsKLQlmc2xfY2hhbi0+ZWRlc2MgPSBOVUxMOwotCXZjaGFuX2dldF9hbGxfZGVz Y3JpcHRvcnMoJmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0KLQl2Y2hhbl9kbWFfZGVzY19mcmVl X2xpc3QoJmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOwotCWRtYV9wb29sX2Rlc3Ryb3koZnNsX2No YW4tPnRjZF9wb29sKTsKLQlmc2xfY2hhbi0+dGNkX3Bvb2wgPSBOVUxMOworCXJldHVybiBOVUxM OwogfQogCi1zdGF0aWMgaW50Ci1mc2xfZWRtYV9pcnFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2LCBzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpmc2xfZWRtYSkKK3N0YXRpYyBpbnQg ZnNsX2VkbWFfaXJxX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgICAg c3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEpCiB7CiAJaW50IHJldDsKIApAQCAtODUy LDE3ICsxODksNiBAQCBmc2xfZWRtYV9pcnFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LCBzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpmc2xfZWRtYQogCXJldHVybiAwOwogfQogCi1z dGF0aWMgdm9pZCBmc2xfZWRtYV9pcnFfZXhpdCgKLQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiwgc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEpCi17Ci0JaWYgKGZzbF9lZG1h LT50eGlycSA9PSBmc2xfZWRtYS0+ZXJyaXJxKSB7Ci0JCWRldm1fZnJlZV9pcnEoJnBkZXYtPmRl diwgZnNsX2VkbWEtPnR4aXJxLCBmc2xfZWRtYSk7Ci0JfSBlbHNlIHsKLQkJZGV2bV9mcmVlX2ly cSgmcGRldi0+ZGV2LCBmc2xfZWRtYS0+dHhpcnEsIGZzbF9lZG1hKTsKLQkJZGV2bV9mcmVlX2ly cSgmcGRldi0+ZGV2LCBmc2xfZWRtYS0+ZXJyaXJxLCBmc2xfZWRtYSk7Ci0JfQotfQotCiBzdGF0 aWMgdm9pZCBmc2xfZGlzYWJsZV9jbG9ja3Moc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2Vk bWEsIGludCBucl9jbG9ja3MpCiB7CiAJaW50IGk7CkBAIC04NzYsNiArMjAyLDcgQEAgc3RhdGlj IGludCBmc2xfZWRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgZnNsX2VkbWFf ZW5naW5lICpmc2xfZWRtYTsKIAlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW47CisJc3Ry dWN0IGVkbWFfcmVncyAqcmVnczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgbGVuLCBj aGFuczsKIAlpbnQgcmV0LCBpOwpAQCAtODkxLDYgKzIxOCw4IEBAIHN0YXRpYyBpbnQgZnNsX2Vk bWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoIWZzbF9lZG1hKQog CQlyZXR1cm4gLUVOT01FTTsKIAorCWZzbF9lZG1hLT52ZXJzaW9uID0gdjE7CisKIAlmc2xfZWRt YS0+bl9jaGFucyA9IGNoYW5zOwogCW11dGV4X2luaXQoJmZzbF9lZG1hLT5mc2xfZWRtYV9tdXRl eCk7CiAKQEAgLTg5OSw2ICsyMjgsOSBAQCBzdGF0aWMgaW50IGZzbF9lZG1hX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaWYgKElTX0VSUihmc2xfZWRtYS0+bWVtYmFzZSkp CiAJCXJldHVybiBQVFJfRVJSKGZzbF9lZG1hLT5tZW1iYXNlKTsKIAorCWZzbF9lZG1hX3NldHVw X3JlZ3MoZnNsX2VkbWEpOworCXJlZ3MgPSAmZnNsX2VkbWEtPnJlZ3M7CisKIAlmb3IgKGkgPSAw OyBpIDwgRE1BTVVYX05SOyBpKyspIHsKIAkJY2hhciBjbGtuYW1lWzMyXTsKIApAQCAtOTM5LDEx ICsyNzEsMTEgQEAgc3RhdGljIGludCBmc2xfZWRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQogCQlmc2xfY2hhbi0+dmNoYW4uZGVzY19mcmVlID0gZnNsX2VkbWFfZnJlZV9k ZXNjOwogCQl2Y2hhbl9pbml0KCZmc2xfY2hhbi0+dmNoYW4sICZmc2xfZWRtYS0+ZG1hX2Rldik7 CiAKLQkJZWRtYV93cml0ZXcoZnNsX2VkbWEsIDB4MCwgZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1B X1RDRF9DU1IoaSkpOworCQllZG1hX3dyaXRldyhmc2xfZWRtYSwgMHgwLCAmcmVncy0+dGNkW2ld LmNzcik7CiAJCWZzbF9lZG1hX2NoYW5fbXV4KGZzbF9jaGFuLCAwLCBmYWxzZSk7CiAJfQogCi0J ZWRtYV93cml0ZWwoZnNsX2VkbWEsIH4wLCBmc2xfZWRtYS0+bWVtYmFzZSArIEVETUFfSU5UUik7 CisJZWRtYV93cml0ZWwoZnNsX2VkbWEsIH4wLCByZWdzLT5pbnRsKTsKIAlyZXQgPSBmc2xfZWRt YV9pcnFfaW5pdChwZGV2LCBmc2xfZWRtYSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAg LTk5MCwyOCArMzIyLDE2IEBAIHN0YXRpYyBpbnQgZnNsX2VkbWFfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKIAl9CiAKIAkvKiBlbmFibGUgcm91bmQgcm9iaW4gYXJiaXRyYXRp b24gKi8KLQllZG1hX3dyaXRlbChmc2xfZWRtYSwgRURNQV9DUl9FUkdBIHwgRURNQV9DUl9FUkNB LCBmc2xfZWRtYS0+bWVtYmFzZSArIEVETUFfQ1IpOworCWVkbWFfd3JpdGVsKGZzbF9lZG1hLCBF RE1BX0NSX0VSR0EgfCBFRE1BX0NSX0VSQ0EsIHJlZ3MtPmNyKTsKIAogCXJldHVybiAwOwogfQog Ci1zdGF0aWMgdm9pZCBmc2xfZWRtYV9jbGVhbnVwX3ZjaGFuKHN0cnVjdCBkbWFfZGV2aWNlICpk bWFkZXYpCi17Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4gKmNoYW4sICpfY2hhbjsKLQotCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hhbiwKLQkJCQkmZG1hZGV2LT5jaGFubmVscywg dmNoYW4uY2hhbi5kZXZpY2Vfbm9kZSkgewotCQlsaXN0X2RlbCgmY2hhbi0+dmNoYW4uY2hhbi5k ZXZpY2Vfbm9kZSk7Ci0JCXRhc2tsZXRfa2lsbCgmY2hhbi0+dmNoYW4udGFzayk7Ci0JfQotfQot CiBzdGF0aWMgaW50IGZzbF9lZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1 Y3QgZnNsX2VkbWFfZW5naW5lICpmc2xfZWRtYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp OwogCi0JZnNsX2VkbWFfaXJxX2V4aXQocGRldiwgZnNsX2VkbWEpOwogCWZzbF9lZG1hX2NsZWFu dXBfdmNoYW4oJmZzbF9lZG1hLT5kbWFfZGV2KTsKIAlvZl9kbWFfY29udHJvbGxlcl9mcmVlKG5w KTsKIAlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJmZzbF9lZG1hLT5kbWFfZGV2KTsKQEAg LTEwNDgsMTggKzM2OCwxOSBAQCBzdGF0aWMgaW50IGZzbF9lZG1hX3Jlc3VtZV9lYXJseShzdHJ1 Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW47CisJ c3RydWN0IGVkbWFfcmVncyAqcmVncyA9ICZmc2xfZWRtYS0+cmVnczsKIAlpbnQgaTsKIAogCWZv ciAoaSA9IDA7IGkgPCBmc2xfZWRtYS0+bl9jaGFuczsgaSsrKSB7CiAJCWZzbF9jaGFuID0gJmZz bF9lZG1hLT5jaGFuc1tpXTsKIAkJZnNsX2NoYW4tPnBtX3N0YXRlID0gUlVOTklORzsKLQkJZWRt YV93cml0ZXcoZnNsX2VkbWEsIDB4MCwgZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1BX1RDRF9DU1Io aSkpOworCQllZG1hX3dyaXRldyhmc2xfZWRtYSwgMHgwLCAmcmVncy0+dGNkW2ldLmNzcik7CisK IAkJaWYgKGZzbF9jaGFuLT5zbGF2ZV9pZCAhPSAwKQogCQkJZnNsX2VkbWFfY2hhbl9tdXgoZnNs X2NoYW4sIGZzbF9jaGFuLT5zbGF2ZV9pZCwgdHJ1ZSk7CiAJfQogCi0JZWRtYV93cml0ZWwoZnNs X2VkbWEsIEVETUFfQ1JfRVJHQSB8IEVETUFfQ1JfRVJDQSwKLQkJCWZzbF9lZG1hLT5tZW1iYXNl ICsgRURNQV9DUik7CisJZWRtYV93cml0ZWwoZnNsX2VkbWEsIEVETUFfQ1JfRVJHQSB8IEVETUFf Q1JfRVJDQSwgcmVncy0+Y3IpOwogCiAJcmV0dXJuIDA7CiB9Cg==