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: [v3,3/4] dmaengine: fsl-edma: remove all the edma common code From: Angelo Dureghello Message-Id: <20180612163505.GA12116@jerusalem> Date: Tue, 12 Jun 2018 18:35:06 +0200 To: dmaengine@vger.kernel.org, vkoul@kernel.org Cc: linux-m68k@vger.kernel.org List-ID: VGhpcyBwYXRjaCBzaW1wbGlmeSBmc2wtZWRtYSByZW1vdmluZyBhbGwgdGhlIGNvZGUgdGhhdCBo YXMKYmVlbiBjb2xsZWN0ZWQgaW4gYSBzZXBhcmF0ZWQgY29tbW9uIG1vZHVsZSAoc2VlIHBhdGNo IDIvNCkuCgpTaWduZWQtb2ZmLWJ5OiBBbmdlbG8gRHVyZWdoZWxsbyA8YW5nZWxvQHN5c2FtLml0 PgotLS0KQ2hhbmdlcyBmb3IgdjI6Ci0gcGF0Y2ggc3BsaXR0ZWQgaW50byA0Ci0gcmVtb3ZlIGFs bCB0aGUgY29kZSBnb25lIGludG8gZnNsLWVkbWEtY29tbW9uCgpDaGFuZ2VzIGZvciB2MzoKbm9u ZQotLS0KIGRyaXZlcnMvZG1hL2ZzbC1lZG1hLmMgfCA3MzkgKystLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA3 MDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsLWVkbWEuYyBiL2Ry aXZlcnMvZG1hL2ZzbC1lZG1hLmMKaW5kZXggYzc1Njg4NjkyODRlLi4yZjZlNGE2NWQwNTQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvZnNsLWVk bWEuYwpAQCAtMSw4ICsxLDggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w CisvLyBDb3B5cmlnaHQgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAv KgogICogZHJpdmVycy9kbWEvZnNsLWVkbWEuYwogICoKLSAqIENvcHlyaWdodCAyMDEzLTIwMTQg RnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCiAgKiBEcml2ZXIgZm9yIHRoZSBGcmVl c2NhbGUgZURNQSBlbmdpbmUgd2l0aCBmbGV4aWJsZSBjaGFubmVsIG11bHRpcGxleGluZwogICog Y2FwYWJpbGl0eSBmb3IgRE1BIHJlcXVlc3Qgc291cmNlcy4gVGhlIGVETUEgYmxvY2sgY2FuIGJl IGZvdW5kIG9uIHNvbWUKICAqIFZ5YnJpZCBhbmQgTGF5ZXJzY2FwZSBTb0NzLgpAQCAtMTMsMjQy ICsxMywyMCBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVk ZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxp bnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4 L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgotI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4 L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2Zf YWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L29m X2RtYS5oPgogCi0jaW5jbHVkZSAidmlydC1kbWEuaCIKLQotI2RlZmluZSBFRE1BX0NSCQkJMHgw MAotI2RlZmluZSBFRE1BX0VTCQkJMHgwNAotI2RlZmluZSBFRE1BX0VSUQkJMHgwQwotI2RlZmlu ZSBFRE1BX0VFSQkJMHgxNAotI2RlZmluZSBFRE1BX1NFUlEJCTB4MUIKLSNkZWZpbmUgRURNQV9D RVJRCQkweDFBCi0jZGVmaW5lIEVETUFfU0VFSQkJMHgxOQotI2RlZmluZSBFRE1BX0NFRUkJCTB4 MTgKLSNkZWZpbmUgRURNQV9DSU5UCQkweDFGCi0jZGVmaW5lIEVETUFfQ0VSUgkJMHgxRQotI2Rl ZmluZSBFRE1BX1NTUlQJCTB4MUQKLSNkZWZpbmUgRURNQV9DRE5FCQkweDFDCi0jZGVmaW5lIEVE TUFfSU5UUgkJMHgyNAotI2RlZmluZSBFRE1BX0VSUgkJMHgyQwotCi0jZGVmaW5lIEVETUFfVENE X1NBRERSKHgpCSgweDEwMDAgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfU09GRih4KQko MHgxMDA0ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX0FUVFIoeCkJKDB4MTAwNiArIDMy ICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9OQllURVMoeCkJKDB4MTAwOCArIDMyICogKHgpKQot I2RlZmluZSBFRE1BX1RDRF9TTEFTVCh4KQkoMHgxMDBDICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVE TUFfVENEX0RBRERSKHgpCSgweDEwMTAgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfRE9G Rih4KQkoMHgxMDE0ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX0NJVEVSX0VMSU5LKHgp CSgweDEwMTYgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfQ0lURVIoeCkJKDB4MTAxNiAr IDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9ETEFTVF9TR0EoeCkJKDB4MTAxOCArIDMyICog KHgpKQotI2RlZmluZSBFRE1BX1RDRF9DU1IoeCkJCSgweDEwMUMgKyAzMiAqICh4KSkKLSNkZWZp bmUgRURNQV9UQ0RfQklURVJfRUxJTksoeCkJKDB4MTAxRSArIDMyICogKHgpKQotI2RlZmluZSBF RE1BX1RDRF9CSVRFUih4KQkoMHgxMDFFICsgMzIgKiAoeCkpCi0KLSNkZWZpbmUgRURNQV9DUl9F REJHCQlCSVQoMSkKLSNkZWZpbmUgRURNQV9DUl9FUkNBCQlCSVQoMikKLSNkZWZpbmUgRURNQV9D Ul9FUkdBCQlCSVQoMykKLSNkZWZpbmUgRURNQV9DUl9IT0UJCUJJVCg0KQotI2RlZmluZSBFRE1B X0NSX0hBTFQJCUJJVCg1KQotI2RlZmluZSBFRE1BX0NSX0NMTQkJQklUKDYpCi0jZGVmaW5lIEVE TUFfQ1JfRU1MTQkJQklUKDcpCi0jZGVmaW5lIEVETUFfQ1JfRUNYCQlCSVQoMTYpCi0jZGVmaW5l IEVETUFfQ1JfQ1gJCUJJVCgxNykKLQotI2RlZmluZSBFRE1BX1NFRUlfU0VFSSh4KQkoKHgpICYg MHgxRikKLSNkZWZpbmUgRURNQV9DRUVJX0NFRUkoeCkJKCh4KSAmIDB4MUYpCi0jZGVmaW5lIEVE TUFfQ0lOVF9DSU5UKHgpCSgoeCkgJiAweDFGKQotI2RlZmluZSBFRE1BX0NFUlJfQ0VSUih4KQko KHgpICYgMHgxRikKLQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFKHgpCQkoKCh4KSAmIDB4 MDAwNykpCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfRE1PRCh4KQkJKCgoeCkgJiAweDAwMUYpIDw8 IDMpCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkUoeCkJCSgoKHgpICYgMHgwMDA3KSA8PCA4 KQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NNT0QoeCkJCSgoKHgpICYgMHgwMDFGKSA8PCAxMSkK LSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV84QklUCSgweDAwMDApCi0jZGVmaW5lIEVETUFf VENEX0FUVFJfU1NJWkVfMTZCSVQJKDB4MDEwMCkKLSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0la RV8zMkJJVAkoMHgwMjAwKQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpFXzY0QklUCSgweDAz MDApCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVfMzJCWVRFCSgweDA1MDApCi0jZGVmaW5l IEVETUFfVENEX0FUVFJfRFNJWkVfOEJJVAkoMHgwMDAwKQotI2RlZmluZSBFRE1BX1RDRF9BVFRS X0RTSVpFXzE2QklUCSgweDAwMDEpCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJWkVfMzJCSVQJ KDB4MDAwMikKLSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV82NEJJVAkoMHgwMDAzKQotI2Rl ZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzMyQllURQkoMHgwMDA1KQotCi0jZGVmaW5lIEVETUFf VENEX1NPRkZfU09GRih4KQkJKHgpCi0jZGVmaW5lIEVETUFfVENEX05CWVRFU19OQllURVMoeCkJ KHgpCi0jZGVmaW5lIEVETUFfVENEX1NMQVNUX1NMQVNUKHgpCQkoeCkKLSNkZWZpbmUgRURNQV9U Q0RfREFERFJfREFERFIoeCkJCSh4KQotI2RlZmluZSBFRE1BX1RDRF9DSVRFUl9DSVRFUih4KQkJ KCh4KSAmIDB4N0ZGRikKLSNkZWZpbmUgRURNQV9UQ0RfRE9GRl9ET0ZGKHgpCQkoeCkKLSNkZWZp bmUgRURNQV9UQ0RfRExBU1RfU0dBX0RMQVNUX1NHQSh4KQkoeCkKLSNkZWZpbmUgRURNQV9UQ0Rf QklURVJfQklURVIoeCkJCSgoeCkgJiAweDdGRkYpCi0KLSNkZWZpbmUgRURNQV9UQ0RfQ1NSX1NU QVJUCQlCSVQoMCkKLSNkZWZpbmUgRURNQV9UQ0RfQ1NSX0lOVF9NQUpPUgkJQklUKDEpCi0jZGVm aW5lIEVETUFfVENEX0NTUl9JTlRfSEFMRgkJQklUKDIpCi0jZGVmaW5lIEVETUFfVENEX0NTUl9E X1JFUQkJQklUKDMpCi0jZGVmaW5lIEVETUFfVENEX0NTUl9FX1NHCQlCSVQoNCkKLSNkZWZpbmUg RURNQV9UQ0RfQ1NSX0VfTElOSwkJQklUKDUpCi0jZGVmaW5lIEVETUFfVENEX0NTUl9BQ1RJVkUJ CUJJVCg2KQotI2RlZmluZSBFRE1BX1RDRF9DU1JfRE9ORQkJQklUKDcpCi0KLSNkZWZpbmUgRURN QU1VWF9DSENGR19ESVMJCTB4MAotI2RlZmluZSBFRE1BTVVYX0NIQ0ZHX0VOQkwJCTB4ODAKLSNk ZWZpbmUgRURNQU1VWF9DSENGR19TT1VSQ0UobikJCSgobikgJiAweDNGKQotCi0jZGVmaW5lIERN QU1VWF9OUgkyCi0KLSNkZWZpbmUgRlNMX0VETUFfQlVTV0lEVEhTCUJJVChETUFfU0xBVkVfQlVT V0lEVEhfMV9CWVRFKSB8IFwKLQkJCQlCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVMpIHwg XAotCQkJCUJJVChETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUykgfCBcCi0JCQkJQklUKERNQV9T TEFWRV9CVVNXSURUSF84X0JZVEVTKQotZW51bSBmc2xfZWRtYV9wbV9zdGF0ZSB7Ci0JUlVOTklO RyA9IDAsCi0JU1VTUEVOREVELAotfTsKLQotc3RydWN0IGZzbF9lZG1hX2h3X3RjZCB7Ci0JX19s ZTMyCXNhZGRyOwotCV9fbGUxNglzb2ZmOwotCV9fbGUxNglhdHRyOwotCV9fbGUzMgluYnl0ZXM7 Ci0JX19sZTMyCXNsYXN0OwotCV9fbGUzMglkYWRkcjsKLQlfX2xlMTYJZG9mZjsKLQlfX2xlMTYJ Y2l0ZXI7Ci0JX19sZTMyCWRsYXN0X3NnYTsKLQlfX2xlMTYJY3NyOwotCV9fbGUxNgliaXRlcjsK LX07Ci0KLXN0cnVjdCBmc2xfZWRtYV9zd190Y2QgewotCWRtYV9hZGRyX3QJCQlwdGNkOwotCXN0 cnVjdCBmc2xfZWRtYV9od190Y2QJCSp2dGNkOwotfTsKLQotc3RydWN0IGZzbF9lZG1hX3NsYXZl X2NvbmZpZyB7Ci0JZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uCWRpcjsKLQllbnVtIGRtYV9z bGF2ZV9idXN3aWR0aAkJYWRkcl93aWR0aDsKLQl1MzIJCQkJZGV2X2FkZHI7Ci0JdTMyCQkJCWJ1 cnN0OwotCXUzMgkJCQlhdHRyOwotfTsKLQotc3RydWN0IGZzbF9lZG1hX2NoYW4gewotCXN0cnVj dCB2aXJ0X2RtYV9jaGFuCQl2Y2hhbjsKLQllbnVtIGRtYV9zdGF0dXMJCQlzdGF0dXM7Ci0JZW51 bSBmc2xfZWRtYV9wbV9zdGF0ZQkJcG1fc3RhdGU7Ci0JYm9vbAkJCQlpZGxlOwotCXUzMgkJCQlz bGF2ZV9pZDsKLQlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lCQkqZWRtYTsKLQlzdHJ1Y3QgZnNsX2Vk bWFfZGVzYwkJKmVkZXNjOwotCXN0cnVjdCBmc2xfZWRtYV9zbGF2ZV9jb25maWcJZnNjOwotCXN0 cnVjdCBkbWFfcG9vbAkJCSp0Y2RfcG9vbDsKLX07Ci0KLXN0cnVjdCBmc2xfZWRtYV9kZXNjIHsK LQlzdHJ1Y3QgdmlydF9kbWFfZGVzYwkJdmRlc2M7Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4JCSpl Y2hhbjsKLQlib29sCQkJCWlzY3ljbGljOwotCXVuc2lnbmVkIGludAkJCW5fdGNkczsKLQlzdHJ1 Y3QgZnNsX2VkbWFfc3dfdGNkCQl0Y2RbXTsKLX07Ci0KLXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUg ewotCXN0cnVjdCBkbWFfZGV2aWNlCWRtYV9kZXY7Ci0Jdm9pZCBfX2lvbWVtCQkqbWVtYmFzZTsK LQl2b2lkIF9faW9tZW0JCSptdXhiYXNlW0RNQU1VWF9OUl07Ci0Jc3RydWN0IGNsawkJKm11eGNs a1tETUFNVVhfTlJdOwotCXN0cnVjdCBtdXRleAkJZnNsX2VkbWFfbXV0ZXg7Ci0JdTMyCQkJbl9j aGFuczsKLQlpbnQJCQl0eGlycTsKLQlpbnQJCQllcnJpcnE7Ci0JYm9vbAkJCWJpZ19lbmRpYW47 Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4JY2hhbnNbXTsKLX07Ci0KLS8qCi0gKiBSL1cgZnVuY3Rp b25zIGZvciBiaWctIG9yIGxpdHRsZS1lbmRpYW4gcmVnaXN0ZXJzOgotICogVGhlIGVETUEgY29u dHJvbGxlcidzIGVuZGlhbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgQ1BVIGNvcmUncyBlbmRpYW4u Ci0gKiBGb3IgdGhlIGJpZy1lbmRpYW4gSVAgbW9kdWxlLCB0aGUgb2Zmc2V0IGZvciA4LWJpdCBv ciAxNi1iaXQgcmVnaXN0ZXJzCi0gKiBzaG91bGQgYWxzbyBiZSBzd2FwcGVkIG9wcG9zaXRlIHRv IHRoYXQgaW4gbGl0dGxlLWVuZGlhbiBJUC4KLSAqLworI2luY2x1ZGUgImZzbC1lZG1hLWNvbW1v bi5oIgogCi1zdGF0aWMgdTMyIGVkbWFfcmVhZGwoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRt YSwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWlmIChlZG1hLT5iaWdfZW5kaWFuKQotCQlyZXR1 cm4gaW9yZWFkMzJiZShhZGRyKTsKLQllbHNlCi0JCXJldHVybiBpb3JlYWQzMihhZGRyKTsKLX0K LQotc3RhdGljIHZvaWQgZWRtYV93cml0ZWIoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwg dTggdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JLyogc3dhcCB0aGUgcmVnIG9mZnNldCBm b3IgdGhlc2UgaW4gYmlnLWVuZGlhbiBtb2RlICovCi0JaWYgKGVkbWEtPmJpZ19lbmRpYW4pCi0J CWlvd3JpdGU4KHZhbCwgKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZylhZGRyIF4gMHgz KSk7Ci0JZWxzZQotCQlpb3dyaXRlOCh2YWwsIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBlZG1h X3dyaXRldyhzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1MTYgdmFsLCB2b2lkIF9faW9t ZW0gKmFkZHIpCi17Ci0JLyogc3dhcCB0aGUgcmVnIG9mZnNldCBmb3IgdGhlc2UgaW4gYmlnLWVu ZGlhbiBtb2RlICovCi0JaWYgKGVkbWEtPmJpZ19lbmRpYW4pCi0JCWlvd3JpdGUxNmJlKHZhbCwg KHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZylhZGRyIF4gMHgyKSk7Ci0JZWxzZQotCQlp b3dyaXRlMTYodmFsLCBhZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgZWRtYV93cml0ZWwoc3RydWN0 IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQotewot CWlmIChlZG1hLT5iaWdfZW5kaWFuKQotCQlpb3dyaXRlMzJiZSh2YWwsIGFkZHIpOwotCWVsc2UK LQkJaW93cml0ZTMyKHZhbCwgYWRkcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZnNsX2VkbWFfY2hh biAqdG9fZnNsX2VkbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCi17Ci0JcmV0dXJuIGNv bnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZnNsX2VkbWFfY2hhbiwgdmNoYW4uY2hhbik7Ci19Ci0K LXN0YXRpYyBzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqdG9fZnNsX2VkbWFfZGVzYyhzdHJ1Y3Qgdmly dF9kbWFfZGVzYyAqdmQpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IGZzbF9l ZG1hX2Rlc2MsIHZkZXNjKTsKLX0KLQotc3RhdGljIHZvaWQgZnNsX2VkbWFfZW5hYmxlX3JlcXVl c3Qoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQotewotCXZvaWQgX19pb21lbSAqYWRk ciA9IGZzbF9jaGFuLT5lZG1hLT5tZW1iYXNlOwotCXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5j aGFuLmNoYW5faWQ7Ci0KLQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgRURNQV9TRUVJX1NF RUkoY2gpLCBhZGRyICsgRURNQV9TRUVJKTsKLQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwg Y2gsIGFkZHIgKyBFRE1BX1NFUlEpOwotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9kaXNhYmxl X3JlcXVlc3Qoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQotewotCXZvaWQgX19pb21l bSAqYWRkciA9IGZzbF9jaGFuLT5lZG1hLT5tZW1iYXNlOwotCXUzMiBjaCA9IGZzbF9jaGFuLT52 Y2hhbi5jaGFuLmNoYW5faWQ7Ci0KLQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgY2gsIGFk ZHIgKyBFRE1BX0NFUlEpOwotCWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1hLCBFRE1BX0NFRUlf Q0VFSShjaCksIGFkZHIgKyBFRE1BX0NFRUkpOwotfQorI2RlZmluZSBFRE1BTVVYX0NIQ0ZHX0RJ UwkJMAorI2RlZmluZSBFRE1BTVVYX0NIQ0ZHX0VOQkwJCUJJVCg3KQorI2RlZmluZSBFRE1BTVVY X0NIQ0ZHX1NPVVJDRShuKQkJKChuKSAmIEdFTk1BU0soNiwgMCkpCiAKIHN0YXRpYyB2b2lkIGZz bF9lZG1hX2NoYW5fbXV4KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiwKIAkJCXVuc2ln bmVkIGludCBzbG90LCBib29sIGVuYWJsZSkKQEAgLTI2OCw0MTYgKzQ2LDIwIEBAIHN0YXRpYyB2 b2lkIGZzbF9lZG1hX2NoYW5fbXV4KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiwKIAkJ aW93cml0ZTgoRURNQU1VWF9DSENGR19ESVMsIG11eGFkZHIgKyBjaF9vZmYpOwogfQogCi1zdGF0 aWMgdW5zaWduZWQgaW50IGZzbF9lZG1hX2dldF90Y2RfYXR0cihlbnVtIGRtYV9zbGF2ZV9idXN3 aWR0aCBhZGRyX3dpZHRoKQotewotCXN3aXRjaCAoYWRkcl93aWR0aCkgewotCWNhc2UgMToKLQkJ cmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfOEJJVCB8IEVETUFfVENEX0FUVFJfRFNJWkVfOEJJ VDsKLQljYXNlIDI6Ci0JCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzE2QklUIHwgRURNQV9U Q0RfQVRUUl9EU0laRV8xNkJJVDsKLQljYXNlIDQ6Ci0JCXJldHVybiBFRE1BX1RDRF9BVFRSX1NT SVpFXzMyQklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJJVDsKLQljYXNlIDg6Ci0JCXJldHVy biBFRE1BX1RDRF9BVFRSX1NTSVpFXzY0QklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV82NEJJVDsK LQlkZWZhdWx0OgotCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVCB8IEVETUFfVENE X0FUVFJfRFNJWkVfMzJCSVQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9mcmVlX2Rl c2Moc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjKQotewotCXN0cnVjdCBmc2xfZWRtYV9kZXNj ICpmc2xfZGVzYzsKLQlpbnQgaTsKLQotCWZzbF9kZXNjID0gdG9fZnNsX2VkbWFfZGVzYyh2ZGVz Yyk7Ci0JZm9yIChpID0gMDsgaSA8IGZzbF9kZXNjLT5uX3RjZHM7IGkrKykKLQkJZG1hX3Bvb2xf ZnJlZShmc2xfZGVzYy0+ZWNoYW4tPnRjZF9wb29sLCBmc2xfZGVzYy0+dGNkW2ldLnZ0Y2QsCi0J CQkgICAgICBmc2xfZGVzYy0+dGNkW2ldLnB0Y2QpOwotCWtmcmVlKGZzbF9kZXNjKTsKLX0KLQot c3RhdGljIGludCBmc2xfZWRtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikK LXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNo YW4pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKGhlYWQpOwotCi0Jc3Bpbl9s b2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0JZnNsX2VkbWFfZGlz YWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKLQlmc2xfY2hhbi0+ZWRlc2MgPSBOVUxMOwotCWZzbF9j aGFuLT5pZGxlID0gdHJ1ZTsKLQl2Y2hhbl9nZXRfYWxsX2Rlc2NyaXB0b3JzKCZmc2xfY2hhbi0+ dmNoYW4sICZoZWFkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4u bG9jaywgZmxhZ3MpOwotCXZjaGFuX2RtYV9kZXNjX2ZyZWVfbGlzdCgmZnNsX2NoYW4tPnZjaGFu LCAmaGVhZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZnNsX2VkbWFfcGF1c2Uoc3Ry dWN0IGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9 IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5f bG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCWlmIChmc2xfY2hh bi0+ZWRlc2MpIHsKLQkJZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKLQkJZnNs X2NoYW4tPnN0YXR1cyA9IERNQV9QQVVTRUQ7Ci0JCWZzbF9jaGFuLT5pZGxlID0gdHJ1ZTsKLQl9 Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsK LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBmc2xfZWRtYV9yZXN1bWUoc3RydWN0IGRtYV9j aGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9l ZG1hX2NoYW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFz YXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCWlmIChmc2xfY2hhbi0+ZWRlc2Mp IHsKLQkJZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3QoZnNsX2NoYW4pOwotCQlmc2xfY2hhbi0+c3Rh dHVzID0gRE1BX0lOX1BST0dSRVNTOwotCQlmc2xfY2hhbi0+aWRsZSA9IGZhbHNlOwotCX0KLQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZzbF9lZG1hX3NsYXZlX2NvbmZpZyhzdHJ1Y3QgZG1h X2NoYW4gKmNoYW4sCi0JCQkJIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjZmcpCi17Ci0Jc3Ry dWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKLQot CWZzbF9jaGFuLT5mc2MuZGlyID0gY2ZnLT5kaXJlY3Rpb247Ci0JaWYgKGNmZy0+ZGlyZWN0aW9u ID09IERNQV9ERVZfVE9fTUVNKSB7Ci0JCWZzbF9jaGFuLT5mc2MuZGV2X2FkZHIgPSBjZmctPnNy Y19hZGRyOwotCQlmc2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGggPSBjZmctPnNyY19hZGRyX3dpZHRo OwotCQlmc2xfY2hhbi0+ZnNjLmJ1cnN0ID0gY2ZnLT5zcmNfbWF4YnVyc3Q7Ci0JCWZzbF9jaGFu LT5mc2MuYXR0ciA9IGZzbF9lZG1hX2dldF90Y2RfYXR0cihjZmctPnNyY19hZGRyX3dpZHRoKTsK LQl9IGVsc2UgaWYgKGNmZy0+ZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSB7Ci0JCWZzbF9j aGFuLT5mc2MuZGV2X2FkZHIgPSBjZmctPmRzdF9hZGRyOwotCQlmc2xfY2hhbi0+ZnNjLmFkZHJf d2lkdGggPSBjZmctPmRzdF9hZGRyX3dpZHRoOwotCQlmc2xfY2hhbi0+ZnNjLmJ1cnN0ID0gY2Zn LT5kc3RfbWF4YnVyc3Q7Ci0JCWZzbF9jaGFuLT5mc2MuYXR0ciA9IGZzbF9lZG1hX2dldF90Y2Rf YXR0cihjZmctPmRzdF9hZGRyX3dpZHRoKTsKLQl9IGVsc2UgewotCQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc2l6ZV90IGZzbF9lZG1hX2Rlc2NfcmVzaWR1 ZShzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCi0JCXN0cnVjdCB2aXJ0X2RtYV9kZXNj ICp2ZGVzYywgYm9vbCBpbl9wcm9ncmVzcykKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZWRl c2MgPSBmc2xfY2hhbi0+ZWRlc2M7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gZnNsX2NoYW4tPmVk bWEtPm1lbWJhc2U7Ci0JdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hhbl9pZDsKLQll bnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyID0gZnNsX2NoYW4tPmZzYy5kaXI7Ci0JZG1h X2FkZHJfdCBjdXJfYWRkciwgZG1hX2FkZHI7Ci0Jc2l6ZV90IGxlbiwgc2l6ZTsKLQlpbnQgaTsK LQotCS8qIGNhbGN1bGF0ZSB0aGUgdG90YWwgc2l6ZSBpbiB0aGlzIGRlc2MgKi8KLQlmb3IgKGxl biA9IGkgPSAwOyBpIDwgZnNsX2NoYW4tPmVkZXNjLT5uX3RjZHM7IGkrKykKLQkJbGVuICs9IGxl MzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+bmJ5dGVzKQotCQkJKiBsZTE2X3RvX2NwdShl ZGVzYy0+dGNkW2ldLnZ0Y2QtPmJpdGVyKTsKLQotCWlmICghaW5fcHJvZ3Jlc3MpCi0JCXJldHVy biBsZW47Ci0KLQlpZiAoZGlyID09IERNQV9NRU1fVE9fREVWKQotCQljdXJfYWRkciA9IGVkbWFf cmVhZGwoZnNsX2NoYW4tPmVkbWEsIGFkZHIgKyBFRE1BX1RDRF9TQUREUihjaCkpOwotCWVsc2UK LQkJY3VyX2FkZHIgPSBlZG1hX3JlYWRsKGZzbF9jaGFuLT5lZG1hLCBhZGRyICsgRURNQV9UQ0Rf REFERFIoY2gpKTsKLQotCS8qIGZpZ3VyZSBvdXQgdGhlIGZpbmlzaGVkIGFuZCBjYWxjdWxhdGUg dGhlIHJlc2lkdWUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZnNsX2NoYW4tPmVkZXNjLT5uX3RjZHM7 IGkrKykgewotCQlzaXplID0gbGUzMl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNkLT5uYnl0ZXMp Ci0JCQkqIGxlMTZfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+Yml0ZXIpOwotCQlpZiAoZGly ID09IERNQV9NRU1fVE9fREVWKQotCQkJZG1hX2FkZHIgPSBsZTMyX3RvX2NwdShlZGVzYy0+dGNk W2ldLnZ0Y2QtPnNhZGRyKTsKLQkJZWxzZQotCQkJZG1hX2FkZHIgPSBsZTMyX3RvX2NwdShlZGVz Yy0+dGNkW2ldLnZ0Y2QtPmRhZGRyKTsKLQotCQlsZW4gLT0gc2l6ZTsKLQkJaWYgKGN1cl9hZGRy ID49IGRtYV9hZGRyICYmIGN1cl9hZGRyIDwgZG1hX2FkZHIgKyBzaXplKSB7Ci0JCQlsZW4gKz0g ZG1hX2FkZHIgKyBzaXplIC0gY3VyX2FkZHI7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVy biBsZW47Ci19Ci0KLXN0YXRpYyBlbnVtIGRtYV9zdGF0dXMgZnNsX2VkbWFfdHhfc3RhdHVzKHN0 cnVjdCBkbWFfY2hhbiAqY2hhbiwKLQkJZG1hX2Nvb2tpZV90IGNvb2tpZSwgc3RydWN0IGRtYV90 eF9zdGF0ZSAqdHhzdGF0ZSkKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0 b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYzsKLQll bnVtIGRtYV9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzdGF0dXMg PSBkbWFfY29va2llX3N0YXR1cyhjaGFuLCBjb29raWUsIHR4c3RhdGUpOwotCWlmIChzdGF0dXMg PT0gRE1BX0NPTVBMRVRFKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JaWYgKCF0eHN0YXRlKQotCQly ZXR1cm4gZnNsX2NoYW4tPnN0YXR1czsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+ dmNoYW4ubG9jaywgZmxhZ3MpOwotCXZkZXNjID0gdmNoYW5fZmluZF9kZXNjKCZmc2xfY2hhbi0+ dmNoYW4sIGNvb2tpZSk7Ci0JaWYgKGZzbF9jaGFuLT5lZGVzYyAmJiBjb29raWUgPT0gZnNsX2No YW4tPmVkZXNjLT52ZGVzYy50eC5jb29raWUpCi0JCXR4c3RhdGUtPnJlc2lkdWUgPSBmc2xfZWRt YV9kZXNjX3Jlc2lkdWUoZnNsX2NoYW4sIHZkZXNjLCB0cnVlKTsKLQllbHNlIGlmICh2ZGVzYykK LQkJdHhzdGF0ZS0+cmVzaWR1ZSA9IGZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShmc2xfY2hhbiwgdmRl c2MsIGZhbHNlKTsKLQllbHNlCi0JCXR4c3RhdGUtPnJlc2lkdWUgPSAwOwotCi0Jc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiBm c2xfY2hhbi0+c3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9zZXRfdGNkX3JlZ3Mo c3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuLAotCQkJCSAgc3RydWN0IGZzbF9lZG1hX2h3 X3RjZCAqdGNkKQotewotCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEgPSBmc2xfY2hhbi0+ ZWRtYTsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBmc2xfY2hhbi0+ZWRtYS0+bWVtYmFzZTsKLQl1 MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFuX2lkOwotCi0JLyoKLQkgKiBUQ0QgcGFy YW1ldGVycyBhcmUgc3RvcmVkIGluIHN0cnVjdCBmc2xfZWRtYV9od190Y2QgaW4gbGl0dGxlCi0J ICogZW5kaWFuIGZvcm1hdC4gSG93ZXZlciwgd2UgbmVlZCB0byBsb2FkIHRoZSBUQ0QgcmVnaXN0 ZXJzIGluCi0JICogYmlnLSBvciBsaXR0bGUtZW5kaWFuIG9iZXlpbmcgdGhlIGVETUEgZW5naW5l IG1vZGVsIGVuZGlhbi4KLQkgKi8KLQllZG1hX3dyaXRldyhlZG1hLCAwLCBhZGRyICsgRURNQV9U Q0RfQ1NSKGNoKSk7Ci0JZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNkLT5zYWRkciks IGFkZHIgKyBFRE1BX1RDRF9TQUREUihjaCkpOwotCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9f Y3B1KHRjZC0+ZGFkZHIpLCBhZGRyICsgRURNQV9UQ0RfREFERFIoY2gpKTsKLQotCWVkbWFfd3Jp dGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+YXR0ciksIGFkZHIgKyBFRE1BX1RDRF9BVFRSKGNo KSk7Ci0JZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5zb2ZmKSwgYWRkciArIEVE TUFfVENEX1NPRkYoY2gpKTsKLQotCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+ bmJ5dGVzKSwgYWRkciArIEVETUFfVENEX05CWVRFUyhjaCkpOwotCWVkbWFfd3JpdGVsKGVkbWEs IGxlMzJfdG9fY3B1KHRjZC0+c2xhc3QpLCBhZGRyICsgRURNQV9UQ0RfU0xBU1QoY2gpKTsKLQot CWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+Y2l0ZXIpLCBhZGRyICsgRURNQV9U Q0RfQ0lURVIoY2gpKTsKLQllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmJpdGVy KSwgYWRkciArIEVETUFfVENEX0JJVEVSKGNoKSk7Ci0JZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90 b19jcHUodGNkLT5kb2ZmKSwgYWRkciArIEVETUFfVENEX0RPRkYoY2gpKTsKLQotCWVkbWFfd3Jp dGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+ZGxhc3Rfc2dhKSwgYWRkciArIEVETUFfVENEX0RM QVNUX1NHQShjaCkpOwotCi0JZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5jc3Ip LCBhZGRyICsgRURNQV9UQ0RfQ1NSKGNoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgZnNs X2VkbWFfZmlsbF90Y2Qoc3RydWN0IGZzbF9lZG1hX2h3X3RjZCAqdGNkLCB1MzIgc3JjLCB1MzIg ZHN0LAotCQkgICAgICAgdTE2IGF0dHIsIHUxNiBzb2ZmLCB1MzIgbmJ5dGVzLCB1MzIgc2xhc3Qs IHUxNiBjaXRlciwKLQkJICAgICAgIHUxNiBiaXRlciwgdTE2IGRvZmYsIHUzMiBkbGFzdF9zZ2Es IGJvb2wgbWFqb3JfaW50LAotCQkgICAgICAgYm9vbCBkaXNhYmxlX3JlcSwgYm9vbCBlbmFibGVf c2cpCi17Ci0JdTE2IGNzciA9IDA7Ci0KLQkvKgotCSAqIGVETUEgaGFyZHdhcmUgU0dzIHJlcXVp cmUgdGhlIFRDRHMgdG8gYmUgc3RvcmVkIGluIGxpdHRsZQotCSAqIGVuZGlhbiBmb3JtYXQgaXJy ZXNwZWN0aXZlIG9mIHRoZSByZWdpc3RlciBlbmRpYW4gbW9kZWwuCi0JICogU28gd2UgcHV0IHRo ZSB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGluIG1lbW9yeSwgd2FpdGluZwotCSAqIGZvciBmc2xf ZWRtYV9zZXRfdGNkX3JlZ3MgZG9pbmcgdGhlIHN3YXAuCi0JICovCi0JdGNkLT5zYWRkciA9IGNw dV90b19sZTMyKHNyYyk7Ci0JdGNkLT5kYWRkciA9IGNwdV90b19sZTMyKGRzdCk7Ci0KLQl0Y2Qt PmF0dHIgPSBjcHVfdG9fbGUxNihhdHRyKTsKLQotCXRjZC0+c29mZiA9IGNwdV90b19sZTE2KEVE TUFfVENEX1NPRkZfU09GRihzb2ZmKSk7Ci0KLQl0Y2QtPm5ieXRlcyA9IGNwdV90b19sZTMyKEVE TUFfVENEX05CWVRFU19OQllURVMobmJ5dGVzKSk7Ci0JdGNkLT5zbGFzdCA9IGNwdV90b19sZTMy KEVETUFfVENEX1NMQVNUX1NMQVNUKHNsYXN0KSk7Ci0KLQl0Y2QtPmNpdGVyID0gY3B1X3RvX2xl MTYoRURNQV9UQ0RfQ0lURVJfQ0lURVIoY2l0ZXIpKTsKLQl0Y2QtPmRvZmYgPSBjcHVfdG9fbGUx NihFRE1BX1RDRF9ET0ZGX0RPRkYoZG9mZikpOwotCi0JdGNkLT5kbGFzdF9zZ2EgPSBjcHVfdG9f bGUzMihFRE1BX1RDRF9ETEFTVF9TR0FfRExBU1RfU0dBKGRsYXN0X3NnYSkpOwotCi0JdGNkLT5i aXRlciA9IGNwdV90b19sZTE2KEVETUFfVENEX0JJVEVSX0JJVEVSKGJpdGVyKSk7Ci0JaWYgKG1h am9yX2ludCkKLQkJY3NyIHw9IEVETUFfVENEX0NTUl9JTlRfTUFKT1I7Ci0KLQlpZiAoZGlzYWJs ZV9yZXEpCi0JCWNzciB8PSBFRE1BX1RDRF9DU1JfRF9SRVE7Ci0KLQlpZiAoZW5hYmxlX3NnKQot CQljc3IgfD0gRURNQV9UQ0RfQ1NSX0VfU0c7Ci0KLQl0Y2QtPmNzciA9IGNwdV90b19sZTE2KGNz cik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZnNsX2VkbWFfYWxsb2NfZGVz YyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCi0JCWludCBzZ19sZW4pCi17Ci0Jc3Ry dWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOwotCWludCBpOwotCi0JZnNsX2Rlc2MgPSBremFs bG9jKHNpemVvZigqZnNsX2Rlc2MpICsgc2l6ZW9mKHN0cnVjdCBmc2xfZWRtYV9zd190Y2QpICog c2dfbGVuLAotCQkJCUdGUF9OT1dBSVQpOwotCWlmICghZnNsX2Rlc2MpCi0JCXJldHVybiBOVUxM OwotCi0JZnNsX2Rlc2MtPmVjaGFuID0gZnNsX2NoYW47Ci0JZnNsX2Rlc2MtPm5fdGNkcyA9IHNn X2xlbjsKLQlmb3IgKGkgPSAwOyBpIDwgc2dfbGVuOyBpKyspIHsKLQkJZnNsX2Rlc2MtPnRjZFtp XS52dGNkID0gZG1hX3Bvb2xfYWxsb2MoZnNsX2NoYW4tPnRjZF9wb29sLAotCQkJCQlHRlBfTk9X QUlULCAmZnNsX2Rlc2MtPnRjZFtpXS5wdGNkKTsKLQkJaWYgKCFmc2xfZGVzYy0+dGNkW2ldLnZ0 Y2QpCi0JCQlnb3RvIGVycjsKLQl9Ci0JcmV0dXJuIGZzbF9kZXNjOwotCi1lcnI6Ci0Jd2hpbGUg KC0taSA+PSAwKQotCQlkbWFfcG9vbF9mcmVlKGZzbF9jaGFuLT50Y2RfcG9vbCwgZnNsX2Rlc2Mt PnRjZFtpXS52dGNkLAotCQkJCWZzbF9kZXNjLT50Y2RbaV0ucHRjZCk7Ci0Ja2ZyZWUoZnNsX2Rl c2MpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNj cmlwdG9yICpmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWMoCi0JCXN0cnVjdCBkbWFfY2hhbiAqY2hh biwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCi0JCXNpemVfdCBwZXJpb2Rf bGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQl1bnNpZ25lZCBs b25nIGZsYWdzKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9l ZG1hX2NoYW4oY2hhbik7Ci0Jc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOwotCWRtYV9h ZGRyX3QgZG1hX2J1Zl9uZXh0OwotCWludCBzZ19sZW4sIGk7Ci0JdTMyIHNyY19hZGRyLCBkc3Rf YWRkciwgbGFzdF9zZywgbmJ5dGVzOwotCXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOwotCi0JaWYgKCFp c19zbGF2ZV9kaXJlY3Rpb24oZnNsX2NoYW4tPmZzYy5kaXIpKQotCQlyZXR1cm4gTlVMTDsKLQot CXNnX2xlbiA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOwotCWZzbF9kZXNjID0gZnNsX2VkbWFfYWxs b2NfZGVzYyhmc2xfY2hhbiwgc2dfbGVuKTsKLQlpZiAoIWZzbF9kZXNjKQotCQlyZXR1cm4gTlVM TDsKLQlmc2xfZGVzYy0+aXNjeWNsaWMgPSB0cnVlOwotCi0JZG1hX2J1Zl9uZXh0ID0gZG1hX2Fk ZHI7Ci0JbmJ5dGVzID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoICogZnNsX2NoYW4tPmZzYy5i dXJzdDsKLQlpdGVyID0gcGVyaW9kX2xlbiAvIG5ieXRlczsKLQotCWZvciAoaSA9IDA7IGkgPCBz Z19sZW47IGkrKykgewotCQlpZiAoZG1hX2J1Zl9uZXh0ID49IGRtYV9hZGRyICsgYnVmX2xlbikK LQkJCWRtYV9idWZfbmV4dCA9IGRtYV9hZGRyOwotCi0JCS8qIGdldCBuZXh0IHNnJ3MgcGh5c2lj YWwgYWRkcmVzcyAqLwotCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpICUgc2dfbGVu XS5wdGNkOwotCi0JCWlmIChmc2xfY2hhbi0+ZnNjLmRpciA9PSBETUFfTUVNX1RPX0RFVikgewot CQkJc3JjX2FkZHIgPSBkbWFfYnVmX25leHQ7Ci0JCQlkc3RfYWRkciA9IGZzbF9jaGFuLT5mc2Mu ZGV2X2FkZHI7Ci0JCQlzb2ZmID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoOwotCQkJZG9mZiA9 IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzcmNfYWRkciA9IGZzbF9jaGFuLT5mc2MuZGV2X2FkZHI7Ci0J CQlkc3RfYWRkciA9IGRtYV9idWZfbmV4dDsKLQkJCXNvZmYgPSAwOwotCQkJZG9mZiA9IGZzbF9j aGFuLT5mc2MuYWRkcl93aWR0aDsKLQkJfQotCi0JCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNj LT50Y2RbaV0udnRjZCwgc3JjX2FkZHIsIGRzdF9hZGRyLAotCQkJCSAgZnNsX2NoYW4tPmZzYy5h dHRyLCBzb2ZmLCBuYnl0ZXMsIDAsIGl0ZXIsCi0JCQkJICBpdGVyLCBkb2ZmLCBsYXN0X3NnLCB0 cnVlLCBmYWxzZSwgdHJ1ZSk7Ci0JCWRtYV9idWZfbmV4dCArPSBwZXJpb2RfbGVuOwotCX0KLQot CXJldHVybiB2Y2hhbl90eF9wcmVwKCZmc2xfY2hhbi0+dmNoYW4sICZmc2xfZGVzYy0+dmRlc2Ms IGZsYWdzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNs X2VkbWFfcHJlcF9zbGF2ZV9zZygKLQkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2Nh dHRlcmxpc3QgKnNnbCwKLQkJdW5zaWduZWQgaW50IHNnX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJf ZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY29udGV4 dCkKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFu KGNoYW4pOwotCXN0cnVjdCBmc2xfZWRtYV9kZXNjICpmc2xfZGVzYzsKLQlzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnNnOwotCXUzMiBzcmNfYWRkciwgZHN0X2FkZHIsIGxhc3Rfc2csIG5ieXRlczsKLQl1 MTYgc29mZiwgZG9mZiwgaXRlcjsKLQlpbnQgaTsKLQotCWlmICghaXNfc2xhdmVfZGlyZWN0aW9u KGZzbF9jaGFuLT5mc2MuZGlyKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmc2xfZGVzYyA9IGZzbF9l ZG1hX2FsbG9jX2Rlc2MoZnNsX2NoYW4sIHNnX2xlbik7Ci0JaWYgKCFmc2xfZGVzYykKLQkJcmV0 dXJuIE5VTEw7Ci0JZnNsX2Rlc2MtPmlzY3ljbGljID0gZmFsc2U7Ci0KLQluYnl0ZXMgPSBmc2xf Y2hhbi0+ZnNjLmFkZHJfd2lkdGggKiBmc2xfY2hhbi0+ZnNjLmJ1cnN0OwotCWZvcl9lYWNoX3Nn KHNnbCwgc2csIHNnX2xlbiwgaSkgewotCQkvKiBnZXQgbmV4dCBzZydzIHBoeXNpY2FsIGFkZHJl c3MgKi8KLQkJbGFzdF9zZyA9IGZzbF9kZXNjLT50Y2RbKGkgKyAxKSAlIHNnX2xlbl0ucHRjZDsK LQotCQlpZiAoZnNsX2NoYW4tPmZzYy5kaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKLQkJCXNyY19h ZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwotCQkJZHN0X2FkZHIgPSBmc2xfY2hhbi0+ZnNjLmRl dl9hZGRyOwotCQkJc29mZiA9IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aDsKLQkJCWRvZmYgPSAw OwotCQl9IGVsc2UgewotCQkJc3JjX2FkZHIgPSBmc2xfY2hhbi0+ZnNjLmRldl9hZGRyOwotCQkJ ZHN0X2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7Ci0JCQlzb2ZmID0gMDsKLQkJCWRvZmYgPSBm c2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGg7Ci0JCX0KLQotCQlpdGVyID0gc2dfZG1hX2xlbihzZykg LyBuYnl0ZXM7Ci0JCWlmIChpIDwgc2dfbGVuIC0gMSkgewotCQkJbGFzdF9zZyA9IGZzbF9kZXNj LT50Y2RbKGkgKyAxKV0ucHRjZDsKLQkJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2Rb aV0udnRjZCwgc3JjX2FkZHIsCi0JCQkJCSAgZHN0X2FkZHIsIGZzbF9jaGFuLT5mc2MuYXR0ciwg c29mZiwKLQkJCQkJICBuYnl0ZXMsIDAsIGl0ZXIsIGl0ZXIsIGRvZmYsIGxhc3Rfc2csCi0JCQkJ CSAgZmFsc2UsIGZhbHNlLCB0cnVlKTsKLQkJfSBlbHNlIHsKLQkJCWxhc3Rfc2cgPSAwOwotCQkJ ZnNsX2VkbWFfZmlsbF90Y2QoZnNsX2Rlc2MtPnRjZFtpXS52dGNkLCBzcmNfYWRkciwKLQkJCQkJ ICBkc3RfYWRkciwgZnNsX2NoYW4tPmZzYy5hdHRyLCBzb2ZmLAotCQkJCQkgIG5ieXRlcywgMCwg aXRlciwgaXRlciwgZG9mZiwgbGFzdF9zZywKLQkJCQkJICB0cnVlLCB0cnVlLCBmYWxzZSk7Ci0J CX0KLQl9Ci0KLQlyZXR1cm4gdmNoYW5fdHhfcHJlcCgmZnNsX2NoYW4tPnZjaGFuLCAmZnNsX2Rl c2MtPnZkZXNjLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZzbF9lZG1hX3hmZXJfZGVzYyhz dHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4pCi17Ci0Jc3RydWN0IHZpcnRfZG1hX2Rlc2Mg KnZkZXNjOwotCi0JdmRlc2MgPSB2Y2hhbl9uZXh0X2Rlc2MoJmZzbF9jaGFuLT52Y2hhbik7Ci0J aWYgKCF2ZGVzYykKLQkJcmV0dXJuOwotCWZzbF9jaGFuLT5lZGVzYyA9IHRvX2ZzbF9lZG1hX2Rl c2ModmRlc2MpOwotCWZzbF9lZG1hX3NldF90Y2RfcmVncyhmc2xfY2hhbiwgZnNsX2NoYW4tPmVk ZXNjLT50Y2RbMF0udnRjZCk7Ci0JZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3QoZnNsX2NoYW4pOwot CWZzbF9jaGFuLT5zdGF0dXMgPSBETUFfSU5fUFJPR1JFU1M7Ci0JZnNsX2NoYW4tPmlkbGUgPSBm YWxzZTsKLX0KLQogc3RhdGljIGlycXJldHVybl90IGZzbF9lZG1hX3R4X2hhbmRsZXIoaW50IGly cSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1hID0g ZGV2X2lkOwogCXVuc2lnbmVkIGludCBpbnRyLCBjaDsKLQl2b2lkIF9faW9tZW0gKmJhc2VfYWRk cjsKIAlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW47CisJc3RydWN0IGVkbWFfcmVncyAq cmVncyA9ICZmc2xfZWRtYS0+cmVnczsKIAotCWJhc2VfYWRkciA9IGZzbF9lZG1hLT5tZW1iYXNl OwotCi0JaW50ciA9IGVkbWFfcmVhZGwoZnNsX2VkbWEsIGJhc2VfYWRkciArIEVETUFfSU5UUik7 CisJaW50ciA9IGVkbWFfcmVhZGwoZnNsX2VkbWEsIHJlZ3MtPmludGwpOwogCWlmICghaW50cikK IAkJcmV0dXJuIElSUV9OT05FOwogCiAJZm9yIChjaCA9IDA7IGNoIDwgZnNsX2VkbWEtPm5fY2hh bnM7IGNoKyspIHsKIAkJaWYgKGludHIgJiAoMHgxIDw8IGNoKSkgewotCQkJZWRtYV93cml0ZWIo ZnNsX2VkbWEsIEVETUFfQ0lOVF9DSU5UKGNoKSwKLQkJCQliYXNlX2FkZHIgKyBFRE1BX0NJTlQp OworCQkJZWRtYV93cml0ZWIoZnNsX2VkbWEsIEVETUFfQ0lOVF9DSU5UKGNoKSwgcmVncy0+Y2lu dCk7CiAKIAkJCWZzbF9jaGFuID0gJmZzbF9lZG1hLT5jaGFuc1tjaF07CiAKQEAgLTcwNSwxNiAr ODcsMTYgQEAgc3RhdGljIGlycXJldHVybl90IGZzbF9lZG1hX2Vycl9oYW5kbGVyKGludCBpcnEs IHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICpmc2xfZWRtYSA9IGRl dl9pZDsKIAl1bnNpZ25lZCBpbnQgZXJyLCBjaDsKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0g JmZzbF9lZG1hLT5yZWdzOwogCi0JZXJyID0gZWRtYV9yZWFkbChmc2xfZWRtYSwgZnNsX2VkbWEt Pm1lbWJhc2UgKyBFRE1BX0VSUik7CisJZXJyID0gZWRtYV9yZWFkbChmc2xfZWRtYSwgcmVncy0+ ZXJybCk7CiAJaWYgKCFlcnIpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWZvciAoY2ggPSAwOyBj aCA8IGZzbF9lZG1hLT5uX2NoYW5zOyBjaCsrKSB7CiAJCWlmIChlcnIgJiAoMHgxIDw8IGNoKSkg ewogCQkJZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KCZmc2xfZWRtYS0+Y2hhbnNbY2hdKTsKLQkJ CWVkbWFfd3JpdGViKGZzbF9lZG1hLCBFRE1BX0NFUlJfQ0VSUihjaCksCi0JCQkJZnNsX2VkbWEt Pm1lbWJhc2UgKyBFRE1BX0NFUlIpOworCQkJZWRtYV93cml0ZWIoZnNsX2VkbWEsIEVETUFfQ0VS Ul9DRVJSKGNoKSwgcmVncy0+Y2Vycik7CiAJCQlmc2xfZWRtYS0+Y2hhbnNbY2hdLnN0YXR1cyA9 IERNQV9FUlJPUjsKIAkJCWZzbF9lZG1hLT5jaGFuc1tjaF0uaWRsZSA9IHRydWU7CiAJCX0KQEAg LTczMCwyNSArMTEyLDYgQEAgc3RhdGljIGlycXJldHVybl90IGZzbF9lZG1hX2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIAlyZXR1cm4gZnNsX2VkbWFfZXJyX2hhbmRsZXIoaXJx LCBkZXZfaWQpOwogfQogCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9pc3N1ZV9wZW5kaW5nKHN0cnVj dCBkbWFfY2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0 b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xv Y2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQotCWlmICh1bmxpa2Vs eShmc2xfY2hhbi0+cG1fc3RhdGUgIT0gUlVOTklORykpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQkJLyogY2Fubm90IHN1Ym1pdCBk dWUgdG8gc3VzcGVuZCAqLwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHZjaGFuX2lzc3VlX3BlbmRp bmcoJmZzbF9jaGFuLT52Y2hhbikgJiYgIWZzbF9jaGFuLT5lZGVzYykKLQkJZnNsX2VkbWFfeGZl cl9kZXNjKGZzbF9jaGFuKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT52 Y2hhbi5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZG1hX2NoYW4gKmZzbF9lZG1h X3hsYXRlKHN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmRtYV9zcGVjLAogCQlzdHJ1Y3Qgb2ZfZG1h ICpvZmRtYSkKIHsKQEAgLTc2MSw3ICsxMjQsOCBAQCBzdGF0aWMgc3RydWN0IGRtYV9jaGFuICpm c2xfZWRtYV94bGF0ZShzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpkbWFfc3BlYywKIAkJcmV0dXJu IE5VTEw7CiAKIAltdXRleF9sb2NrKCZmc2xfZWRtYS0+ZnNsX2VkbWFfbXV0ZXgpOwotCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hhbiwgJmZzbF9lZG1hLT5kbWFfZGV2LmNoYW5u ZWxzLCBkZXZpY2Vfbm9kZSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hh biwKKwkJCSZmc2xfZWRtYS0+ZG1hX2Rldi5jaGFubmVscywgZGV2aWNlX25vZGUpIHsKIAkJaWYg KGNoYW4tPmNsaWVudF9jb3VudCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGNoYW4tPmNoYW5faWQg LyBjaGFuc19wZXJfbXV4KSA9PSBkbWFfc3BlYy0+YXJnc1swXSkgewpAQCAtNzc4LDM5ICsxNDIs MTIgQEAgc3RhdGljIHN0cnVjdCBkbWFfY2hhbiAqZnNsX2VkbWFfeGxhdGUoc3RydWN0IG9mX3Bo YW5kbGVfYXJncyAqZG1hX3NwZWMsCiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZmc2xfZWRtYS0+ ZnNsX2VkbWFfbXV0ZXgpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IGZzbF9lZG1h X2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3Qg ZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCi0JZnNs X2NoYW4tPnRjZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJ0Y2RfcG9vbCIsIGNoYW4tPmRldmlj ZS0+ZGV2LAotCQkJCXNpemVvZihzdHJ1Y3QgZnNsX2VkbWFfaHdfdGNkKSwKLQkJCQkzMiwgMCk7 Ci0JcmV0dXJuIDA7Ci19CiAKLXN0YXRpYyB2b2lkIGZzbF9lZG1hX2ZyZWVfY2hhbl9yZXNvdXJj ZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xf Y2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlM SVNUX0hFQUQoaGVhZCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZjaGFuLmxv Y2ssIGZsYWdzKTsKLQlmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3QoZnNsX2NoYW4pOwotCWZzbF9l ZG1hX2NoYW5fbXV4KGZzbF9jaGFuLCAwLCBmYWxzZSk7Ci0JZnNsX2NoYW4tPmVkZXNjID0gTlVM TDsKLQl2Y2hhbl9nZXRfYWxsX2Rlc2NyaXB0b3JzKCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsK LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwot Ci0JdmNoYW5fZG1hX2Rlc2NfZnJlZV9saXN0KCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKLQlk bWFfcG9vbF9kZXN0cm95KGZzbF9jaGFuLT50Y2RfcG9vbCk7Ci0JZnNsX2NoYW4tPnRjZF9wb29s ID0gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludAotZnNsX2VkbWFfaXJxX2lu aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAq ZnNsX2VkbWEpCitzdGF0aWMgaW50IGZzbF9lZG1hX2lycV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsCisJCQkgICAgIHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1hKQog ewogCWludCByZXQ7CiAKQEAgLTg1MiwxNyArMTg5LDYgQEAgZnNsX2VkbWFfaXJxX2luaXQoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2Vk bWEKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZnNsX2VkbWFfaXJxX2V4aXQoCi0JCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmZzbF9l ZG1hKQotewotCWlmIChmc2xfZWRtYS0+dHhpcnEgPT0gZnNsX2VkbWEtPmVycmlycSkgewotCQlk ZXZtX2ZyZWVfaXJxKCZwZGV2LT5kZXYsIGZzbF9lZG1hLT50eGlycSwgZnNsX2VkbWEpOwotCX0g ZWxzZSB7Ci0JCWRldm1fZnJlZV9pcnEoJnBkZXYtPmRldiwgZnNsX2VkbWEtPnR4aXJxLCBmc2xf ZWRtYSk7Ci0JCWRldm1fZnJlZV9pcnEoJnBkZXYtPmRldiwgZnNsX2VkbWEtPmVycmlycSwgZnNs X2VkbWEpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgZnNsX2Rpc2FibGVfY2xvY2tzKHN0cnVjdCBm c2xfZWRtYV9lbmdpbmUgKmZzbF9lZG1hLCBpbnQgbnJfY2xvY2tzKQogewogCWludCBpOwpAQCAt ODc2LDYgKzIwMiw3IEBAIHN0YXRpYyBpbnQgZnNsX2VkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25v ZGU7CiAJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWE7CiAJc3RydWN0IGZzbF9lZG1h X2NoYW4gKmZzbF9jaGFuOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3M7CiAJc3RydWN0IHJlc291 cmNlICpyZXM7CiAJaW50IGxlbiwgY2hhbnM7CiAJaW50IHJldCwgaTsKQEAgLTg5MSw2ICsyMTgs OCBAQCBzdGF0aWMgaW50IGZzbF9lZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCiAJaWYgKCFmc2xfZWRtYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlmc2xfZWRtYS0+dmVy c2lvbiA9IHYxOworCiAJZnNsX2VkbWEtPm5fY2hhbnMgPSBjaGFuczsKIAltdXRleF9pbml0KCZm c2xfZWRtYS0+ZnNsX2VkbWFfbXV0ZXgpOwogCkBAIC04OTksNiArMjI4LDkgQEAgc3RhdGljIGlu dCBmc2xfZWRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChJU19F UlIoZnNsX2VkbWEtPm1lbWJhc2UpKQogCQlyZXR1cm4gUFRSX0VSUihmc2xfZWRtYS0+bWVtYmFz ZSk7CiAKKwlmc2xfZWRtYV9zZXR1cF9yZWdzKGZzbF9lZG1hKTsKKwlyZWdzID0gJmZzbF9lZG1h LT5yZWdzOworCiAJZm9yIChpID0gMDsgaSA8IERNQU1VWF9OUjsgaSsrKSB7CiAJCWNoYXIgY2xr bmFtZVszMl07CiAKQEAgLTkzOSwxMSArMjcxLDExIEBAIHN0YXRpYyBpbnQgZnNsX2VkbWFfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJZnNsX2NoYW4tPnZjaGFuLmRlc2Nf ZnJlZSA9IGZzbF9lZG1hX2ZyZWVfZGVzYzsKIAkJdmNoYW5faW5pdCgmZnNsX2NoYW4tPnZjaGFu LCAmZnNsX2VkbWEtPmRtYV9kZXYpOwogCi0JCWVkbWFfd3JpdGV3KGZzbF9lZG1hLCAweDAsIGZz bF9lZG1hLT5tZW1iYXNlICsgRURNQV9UQ0RfQ1NSKGkpKTsKKwkJZWRtYV93cml0ZXcoZnNsX2Vk bWEsIDB4MCwgJnJlZ3MtPnRjZFtpXS5jc3IpOwogCQlmc2xfZWRtYV9jaGFuX211eChmc2xfY2hh biwgMCwgZmFsc2UpOwogCX0KIAotCWVkbWFfd3JpdGVsKGZzbF9lZG1hLCB+MCwgZnNsX2VkbWEt Pm1lbWJhc2UgKyBFRE1BX0lOVFIpOworCWVkbWFfd3JpdGVsKGZzbF9lZG1hLCB+MCwgcmVncy0+ aW50bCk7CiAJcmV0ID0gZnNsX2VkbWFfaXJxX2luaXQocGRldiwgZnNsX2VkbWEpOwogCWlmIChy ZXQpCiAJCXJldHVybiByZXQ7CkBAIC05OTAsMjggKzMyMiwxNiBAQCBzdGF0aWMgaW50IGZzbF9l ZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJfQogCiAJLyogZW5hYmxl IHJvdW5kIHJvYmluIGFyYml0cmF0aW9uICovCi0JZWRtYV93cml0ZWwoZnNsX2VkbWEsIEVETUFf Q1JfRVJHQSB8IEVETUFfQ1JfRVJDQSwgZnNsX2VkbWEtPm1lbWJhc2UgKyBFRE1BX0NSKTsKKwll ZG1hX3dyaXRlbChmc2xfZWRtYSwgRURNQV9DUl9FUkdBIHwgRURNQV9DUl9FUkNBLCByZWdzLT5j cik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZnNsX2VkbWFfY2xlYW51cF92Y2hh bihzdHJ1Y3QgZG1hX2RldmljZSAqZG1hZGV2KQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpj aGFuLCAqX2NoYW47Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgX2NoYW4sCi0J CQkJJmRtYWRldi0+Y2hhbm5lbHMsIHZjaGFuLmNoYW4uZGV2aWNlX25vZGUpIHsKLQkJbGlzdF9k ZWwoJmNoYW4tPnZjaGFuLmNoYW4uZGV2aWNlX25vZGUpOwotCQl0YXNrbGV0X2tpbGwoJmNoYW4t PnZjaGFuLnRhc2spOwotCX0KLX0KLQogc3RhdGljIGludCBmc2xfZWRtYV9yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRl di0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWZzbF9lZG1hX2lycV9leGl0KHBkZXYsIGZzbF9l ZG1hKTsKIAlmc2xfZWRtYV9jbGVhbnVwX3ZjaGFuKCZmc2xfZWRtYS0+ZG1hX2Rldik7CiAJb2Zf ZG1hX2NvbnRyb2xsZXJfZnJlZShucCk7CiAJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZm c2xfZWRtYS0+ZG1hX2Rldik7CkBAIC0xMDQ4LDE4ICszNjgsMTkgQEAgc3RhdGljIGludCBmc2xf ZWRtYV9yZXN1bWVfZWFybHkoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBmc2xfZWRt YV9lbmdpbmUgKmZzbF9lZG1hID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGZzbF9l ZG1hX2NoYW4gKmZzbF9jaGFuOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmZnNsX2VkbWEt PnJlZ3M7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZnNsX2VkbWEtPm5fY2hhbnM7IGkr KykgewogCQlmc2xfY2hhbiA9ICZmc2xfZWRtYS0+Y2hhbnNbaV07CiAJCWZzbF9jaGFuLT5wbV9z dGF0ZSA9IFJVTk5JTkc7Ci0JCWVkbWFfd3JpdGV3KGZzbF9lZG1hLCAweDAsIGZzbF9lZG1hLT5t ZW1iYXNlICsgRURNQV9UQ0RfQ1NSKGkpKTsKKwkJZWRtYV93cml0ZXcoZnNsX2VkbWEsIDB4MCwg JnJlZ3MtPnRjZFtpXS5jc3IpOworCiAJCWlmIChmc2xfY2hhbi0+c2xhdmVfaWQgIT0gMCkKIAkJ CWZzbF9lZG1hX2NoYW5fbXV4KGZzbF9jaGFuLCBmc2xfY2hhbi0+c2xhdmVfaWQsIHRydWUpOwog CX0KIAotCWVkbWFfd3JpdGVsKGZzbF9lZG1hLCBFRE1BX0NSX0VSR0EgfCBFRE1BX0NSX0VSQ0Es Ci0JCQlmc2xfZWRtYS0+bWVtYmFzZSArIEVETUFfQ1IpOworCWVkbWFfd3JpdGVsKGZzbF9lZG1h LCBFRE1BX0NSX0VSR0EgfCBFRE1BX0NSX0VSQ0EsIHJlZ3MtPmNyKTsKIAogCXJldHVybiAwOwog fQo=