From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Fri, 11 Sep 2020 21:03:06 +0200 From: Vasily Gorbik Subject: [PATCH] mm/gup: fix gup_fast with dynamic page table folding Message-ID: References: <20200911070939.GB1362448@hirez.programming.kicks-ass.net> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200911070939.GB1362448@hirez.programming.kicks-ass.net> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-um" Errors-To: linux-um-bounces+geert=linux-m68k.org@lists.infradead.org To: Jason Gunthorpe , John Hubbard , Linus Torvalds Cc: Peter Zijlstra , Benjamin Herrenschmidt , Dave Hansen , linux-mm , Paul Mackerras , linux-sparc , Alexander Gordeev , Claudio Imbrenda , Will Deacon , linux-arch , linux-s390 , Richard Weinberger , linux-x86 , Russell King , Christian Borntraeger , Ingo Molnar , Catalin Marinas , Andrey Ryabinin , Gerald Schaefer , Heiko Carstens , Arnd Bergmann , Jeff Dike , linux-um , Borislav Petkov , Andy Lutomirski , Thomas Gleixner , linux-arm , Dave Hansen , LKML , Michael Ellerman , Andrew Morton , linux-power , Mike Rapoport Q3VycmVudGx5IHRvIG1ha2Ugc3VyZSB0aGF0IGV2ZXJ5IHBhZ2UgdGFibGUgZW50cnkgaXMgcmVh ZCBqdXN0IG9uY2UKZ3VwX2Zhc3Qgd2Fsa3MgcGVyZm9ybSBSRUFEX09OQ0UgYW5kIHBhc3MgcFhk IHZhbHVlIGRvd24gdG8gdGhlIG5leHQKZ3VwX3BYZF9yYW5nZSBmdW5jdGlvbiBieSB2YWx1ZSBl LmcuOgoKc3RhdGljIGludCBndXBfcHVkX3JhbmdlKHA0ZF90IHA0ZCwgdW5zaWduZWQgbG9uZyBh ZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBmbGFncywgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucikKLi4uCiAgICAgICAgcHVk cCA9IHB1ZF9vZmZzZXQoJnA0ZCwgYWRkcik7CgpUaGlzIGZ1bmN0aW9uIHBhc3NlcyBhIHJlZmVy ZW5jZSBvbiB0aGF0IGxvY2FsIHZhbHVlIGNvcHkgdG8gcFhkX29mZnNldCwKYW5kIG1pZ2h0IGdl dCB0aGUgdmVyeSBzYW1lIHBvaW50ZXIgaW4gcmV0dXJuLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUK bGV2ZWwgaXMgZm9sZGVkIChvbiBtb3N0IGFyY2hlcyksIGFuZCB0aGF0IHBvaW50ZXIgc2hvdWxk IG5vdCBiZSBpdGVyYXRlZC4KCk9uIHMzOTAgZHVlIHRvIHRoZSBmYWN0IHRoYXQgZWFjaCB0YXNr IG1pZ2h0IGhhdmUgZGlmZmVyZW50IDUsNCBvcgozLWxldmVsIGFkZHJlc3MgdHJhbnNsYXRpb24g YW5kIGhlbmNlIGRpZmZlcmVudCBsZXZlbHMgZm9sZGVkIHRoZSBsb2dpYwppcyBtb3JlIGNvbXBs ZXggYW5kIG5vbi1pdGVyYXRhYmxlIHBvaW50ZXIgdG8gYSBsb2NhbCBjb3B5IGxlYWRzIHRvCnNl dmVyZSBwcm9ibGVtcy4KCkhlcmUgaXMgYW4gZXhhbXBsZSBvZiB3aGF0IGhhcHBlbnMgd2l0aCBn dXBfZmFzdCBvbiBzMzkwLCBmb3IgYSB0YXNrCndpdGggMy1sZXZlbHMgcGFnaW5nLCBjcm9zc2lu ZyBhIDIgR0IgcHVkIGJvdW5kYXJ5OgoKLy8gYWRkciA9IDB4MTAwN2ZmZmYwMDAsIGVuZCA9IDB4 MTAwODAwMDEwMDAKc3RhdGljIGludCBndXBfcHVkX3JhbmdlKHA0ZF90IHA0ZCwgdW5zaWduZWQg bG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBmbGFncywgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucikKewogICAgICAg IHVuc2lnbmVkIGxvbmcgbmV4dDsKICAgICAgICBwdWRfdCAqcHVkcDsKCiAgICAgICAgLy8gcHVk X29mZnNldCByZXR1cm5zICZwNGQgaXRzZWxmIChhIHBvaW50ZXIgdG8gYSB2YWx1ZSBvbiBzdGFj aykKICAgICAgICBwdWRwID0gcHVkX29mZnNldCgmcDRkLCBhZGRyKTsKICAgICAgICBkbyB7CiAg ICAgICAgICAgICAgICAvLyBvbiBzZWNvbmQgaXRlcmF0YXRpb24gcmVhZGluZyAicmFuZG9tIiBz dGFjayB2YWx1ZQogICAgICAgICAgICAgICAgcHVkX3QgcHVkID0gUkVBRF9PTkNFKCpwdWRwKTsK CiAgICAgICAgICAgICAgICAvLyBuZXh0ID0gMHgxMDA4MDAwMDAwMCwgZHVlIHRvIFBVRF9TSVpF L01BU0sgIT0gUEdESVJfU0laRS9NQVNLIG9uIHMzOTAKICAgICAgICAgICAgICAgIG5leHQgPSBw dWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKICAgICAgICAgICAgICAgIC4uLgogICAgICAgIH0gd2hp bGUgKHB1ZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsgLy8gcHVkcCsrIGl0ZXJhdGlu ZyBvdmVyIHN0YWNrCgogICAgICAgIHJldHVybiAxOwp9CgpUaGlzIGhhcHBlbnMgc2luY2UgczM5 MCBtb3ZlZCB0byBjb21tb24gZ3VwIGNvZGUgd2l0aApjb21taXQgZDE4NzRhMGMyODA1ICgiczM5 MC9tbTogbWFrZSB0aGUgcHhkX29mZnNldCBmdW5jdGlvbnMgbW9yZSByb2J1c3QiKQphbmQgY29t bWl0IDFhNDIwMTBjZGMyNiAoInMzOTAvbW06IGNvbnZlcnQgdG8gdGhlIGdlbmVyaWMKZ2V0X3Vz ZXJfcGFnZXNfZmFzdCBjb2RlIikuIHMzOTAgdHJpZWQgdG8gbWltaWMgc3RhdGljIGxldmVsIGZv bGRpbmcgYnkKY2hhbmdpbmcgcFhkX29mZnNldCBwcmltaXRpdmVzIHRvIGFsd2F5cyBjYWxjdWxh dGUgdG9wIGxldmVsIHBhZ2UgdGFibGUKb2Zmc2V0IGluIHBnZF9vZmZzZXQgYW5kIGp1c3QgcmV0 dXJuIHRoZSB2YWx1ZSBwYXNzZWQgd2hlbiBwWGRfb2Zmc2V0CmhhcyB0byBhY3QgYXMgZm9sZGVk LgoKV2hhdCBpcyBjcnVjaWFsIGZvciBndXBfZmFzdCBhbmQgd2hhdCBoYXMgYmVlbiBvdmVybG9v a2VkIGlzCnRoYXQgUHhEX1NJWkUvTUFTSyBhbmQgdGh1cyBwWGRfYWRkcl9lbmQgc2hvdWxkIGFs c28gY2hhbmdlCmNvcnJlc3BvbmRpbmdseS4gQW5kIHRoZSBsYXR0ZXIgaXMgbm90IHBvc3NpYmxl IHdpdGggZHluYW1pYyBmb2xkaW5nLgoKVG8gZml4IHRoZSBpc3N1ZSBpbiBhZGRpdGlvbiB0byBw WGQgdmFsdWVzIHBhc3Mgb3JpZ2luYWwKcFhkcCBwb2ludGVycyBkb3duIHRvIGd1cF9wWGRfcmFu Z2UgZnVuY3Rpb25zLiBBbmQgaW50cm9kdWNlCnBYZF9vZmZzZXRfbG9ja2xlc3MgaGVscGVycywg d2hpY2ggdGFrZSBhbiBhZGRpdGlvbmFsIHBYZAplbnRyeSB2YWx1ZSBwYXJhbWV0ZXIuIFRoaXMg aGFzIGFscmVhZHkgYmVlbiBkaXNjdXNzZWQgaW4KaHR0cHM6Ly9sa21sLmtlcm5lbC5vcmcvci8y MDE5MDQxODEwMDIxOC4wYTRhZmQ1MUBtc2Nod2lkZVgxCgpDYzogPHN0YWJsZUB2Z2VyLmtlcm5l bC5vcmc+ICMgNS4yKwpGaXhlczogMWE0MjAxMGNkYzI2ICgiczM5MC9tbTogY29udmVydCB0byB0 aGUgZ2VuZXJpYyBnZXRfdXNlcl9wYWdlc19mYXN0IGNvZGUiKQpSZXZpZXdlZC1ieTogR2VyYWxk IFNjaGFlZmVyIDxnZXJhbGQuc2NoYWVmZXJAbGludXguaWJtLmNvbT4KUmV2aWV3ZWQtYnk6IEFs ZXhhbmRlciBHb3JkZWV2IDxhZ29yZGVldkBsaW51eC5pYm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBW YXNpbHkgR29yYmlrIDxnb3JAbGludXguaWJtLmNvbT4KLS0tCiBhcmNoL3MzOTAvaW5jbHVkZS9h c20vcGd0YWJsZS5oIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBpbmNs dWRlL2xpbnV4L3BndGFibGUuaCAgICAgICAgIHwgMTAgKysrKysrKysKIG1tL2d1cC5jICAgICAg ICAgICAgICAgICAgICAgICAgfCAxOCArKysrKysrLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA0 OSBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAv aW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaApp bmRleCA3ZWIwMWE1NDU5Y2QuLmI1NTU2MWNjODc4NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2lu Y2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5o CkBAIC0xMjYwLDI2ICsxMjYwLDQ0IEBAIHN0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9vZmZzZXRf cmF3KHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIAogI2RlZmluZSBwZ2Rfb2Zm c2V0KG1tLCBhZGRyZXNzKSBwZ2Rfb2Zmc2V0X3JhdyhSRUFEX09OQ0UoKG1tKS0+cGdkKSwgYWRk cmVzcykKIAotc3RhdGljIGlubGluZSBwNGRfdCAqcDRkX29mZnNldChwZ2RfdCAqcGdkLCB1bnNp Z25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHA0ZF90ICpwNGRfb2Zmc2V0X2xvY2ts ZXNzKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlp ZiAoKHBnZF92YWwoKnBnZCkgJiBfUkVHSU9OX0VOVFJZX1RZUEVfTUFTSykgPj0gX1JFR0lPTl9F TlRSWV9UWVBFX1IxKQotCQlyZXR1cm4gKHA0ZF90ICopIHBnZF9kZXJlZigqcGdkKSArIHA0ZF9p bmRleChhZGRyZXNzKTsKLQlyZXR1cm4gKHA0ZF90ICopIHBnZDsKKwlpZiAoKHBnZF92YWwocGdk KSAmIF9SRUdJT05fRU5UUllfVFlQRV9NQVNLKSA+PSBfUkVHSU9OX0VOVFJZX1RZUEVfUjEpCisJ CXJldHVybiAocDRkX3QgKikgcGdkX2RlcmVmKHBnZCkgKyBwNGRfaW5kZXgoYWRkcmVzcyk7CisJ cmV0dXJuIChwNGRfdCAqKSBwZ2RwOwogfQorI2RlZmluZSBwNGRfb2Zmc2V0X2xvY2tsZXNzIHA0 ZF9vZmZzZXRfbG9ja2xlc3MKIAotc3RhdGljIGlubGluZSBwdWRfdCAqcHVkX29mZnNldChwNGRf dCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHA0ZF90ICpwNGRf b2Zmc2V0KHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JaWYgKChwNGRf dmFsKCpwNGQpICYgX1JFR0lPTl9FTlRSWV9UWVBFX01BU0spID49IF9SRUdJT05fRU5UUllfVFlQ RV9SMikKLQkJcmV0dXJuIChwdWRfdCAqKSBwNGRfZGVyZWYoKnA0ZCkgKyBwdWRfaW5kZXgoYWRk cmVzcyk7Ci0JcmV0dXJuIChwdWRfdCAqKSBwNGQ7CisJcmV0dXJuIHA0ZF9vZmZzZXRfbG9ja2xl c3MocGdkcCwgKnBnZHAsIGFkZHJlc3MpOworfQorCitzdGF0aWMgaW5saW5lIHB1ZF90ICpwdWRf b2Zmc2V0X2xvY2tsZXNzKHA0ZF90ICpwNGRwLCBwNGRfdCBwNGQsIHVuc2lnbmVkIGxvbmcgYWRk cmVzcykKK3sKKwlpZiAoKHA0ZF92YWwocDRkKSAmIF9SRUdJT05fRU5UUllfVFlQRV9NQVNLKSA+ PSBfUkVHSU9OX0VOVFJZX1RZUEVfUjIpCisJCXJldHVybiAocHVkX3QgKikgcDRkX2RlcmVmKHA0 ZCkgKyBwdWRfaW5kZXgoYWRkcmVzcyk7CisJcmV0dXJuIChwdWRfdCAqKSBwNGRwOworfQorI2Rl ZmluZSBwdWRfb2Zmc2V0X2xvY2tsZXNzIHB1ZF9vZmZzZXRfbG9ja2xlc3MKKworc3RhdGljIGlu bGluZSBwdWRfdCAqcHVkX29mZnNldChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyZXNz KQoreworCXJldHVybiBwdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsICpwNGRwLCBhZGRyZXNzKTsK IH0KICNkZWZpbmUgcHVkX29mZnNldCBwdWRfb2Zmc2V0CiAKLXN0YXRpYyBpbmxpbmUgcG1kX3Qg KnBtZF9vZmZzZXQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGlu bGluZSBwbWRfdCAqcG1kX29mZnNldF9sb2NrbGVzcyhwdWRfdCAqcHVkcCwgcHVkX3QgcHVkLCB1 bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJaWYgKChwdWRfdmFsKHB1ZCkgJiBfUkVHSU9OX0VO VFJZX1RZUEVfTUFTSykgPj0gX1JFR0lPTl9FTlRSWV9UWVBFX1IzKQorCQlyZXR1cm4gKHBtZF90 ICopIHB1ZF9kZXJlZihwdWQpICsgcG1kX2luZGV4KGFkZHJlc3MpOworCXJldHVybiAocG1kX3Qg KikgcHVkcDsKK30KKyNkZWZpbmUgcG1kX29mZnNldF9sb2NrbGVzcyBwbWRfb2Zmc2V0X2xvY2ts ZXNzCisKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9vZmZzZXQocHVkX3QgKnB1ZHAsIHVuc2ln bmVkIGxvbmcgYWRkcmVzcykKIHsKLQlpZiAoKHB1ZF92YWwoKnB1ZCkgJiBfUkVHSU9OX0VOVFJZ X1RZUEVfTUFTSykgPj0gX1JFR0lPTl9FTlRSWV9UWVBFX1IzKQotCQlyZXR1cm4gKHBtZF90ICop IHB1ZF9kZXJlZigqcHVkKSArIHBtZF9pbmRleChhZGRyZXNzKTsKLQlyZXR1cm4gKHBtZF90ICop IHB1ZDsKKwlyZXR1cm4gcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCAqcHVkcCwgYWRkcmVzcyk7 CiB9CiAjZGVmaW5lIHBtZF9vZmZzZXQgcG1kX29mZnNldAogCmRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCmluZGV4IGU4Y2JjMmU3 OTVkNS4uZTg5OWQzNTA2NjcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAor KysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaApAQCAtMTQyNyw2ICsxNDI3LDE2IEBAIHR5cGVk ZWYgdW5zaWduZWQgaW50IHBndGJsX21vZF9tYXNrOwogI2RlZmluZSBtbV9wbWRfZm9sZGVkKG1t KQlfX2lzX2RlZmluZWQoX19QQUdFVEFCTEVfUE1EX0ZPTERFRCkKICNlbmRpZgogCisjaWZuZGVm IHA0ZF9vZmZzZXRfbG9ja2xlc3MKKyNkZWZpbmUgcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBw Z2QsIGFkZHJlc3MpIHA0ZF9vZmZzZXQoJnBnZCwgYWRkcmVzcykKKyNlbmRpZgorI2lmbmRlZiBw dWRfb2Zmc2V0X2xvY2tsZXNzCisjZGVmaW5lIHB1ZF9vZmZzZXRfbG9ja2xlc3MocDRkcCwgcDRk LCBhZGRyZXNzKSBwdWRfb2Zmc2V0KCZwNGQsIGFkZHJlc3MpCisjZW5kaWYKKyNpZm5kZWYgcG1k X29mZnNldF9sb2NrbGVzcworI2RlZmluZSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwg YWRkcmVzcykgcG1kX29mZnNldCgmcHVkLCBhZGRyZXNzKQorI2VuZGlmCisKIC8qCiAgKiBwP2Rf bGVhZigpIC0gdHJ1ZSBpZiB0aGlzIGVudHJ5IGlzIGEgZmluYWwgbWFwcGluZyB0byBhIHBoeXNp Y2FsIGFkZHJlc3MuCiAgKiBUaGlzIGRpZmZlcnMgZnJvbSBwP2RfaHVnZSgpIGJ5IHRoZSBmYWN0 IHRoYXQgdGhleSBhcmUgYWx3YXlzIGF2YWlsYWJsZSAoaWYKZGlmZiAtLWdpdCBhL21tL2d1cC5j IGIvbW0vZ3VwLmMKaW5kZXggZTU3MzlhMTk3NGQ1Li41NzhiZjViZDhiZjggMTAwNjQ0Ci0tLSBh L21tL2d1cC5jCisrKyBiL21tL2d1cC5jCkBAIC0yNDg1LDEzICsyNDg1LDEzIEBAIHN0YXRpYyBp bnQgZ3VwX2h1Z2VfcGdkKHBnZF90IG9yaWcsIHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFk ZHIsCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgZ3VwX3BtZF9yYW5nZShwdWRfdCBwdWQs IHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCitzdGF0aWMgaW50IGd1cF9w bWRfcmFuZ2UocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNp Z25lZCBsb25nIGVuZCwKIAkJdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2Vz LCBpbnQgKm5yKQogewogCXVuc2lnbmVkIGxvbmcgbmV4dDsKIAlwbWRfdCAqcG1kcDsKIAotCXBt ZHAgPSBwbWRfb2Zmc2V0KCZwdWQsIGFkZHIpOworCXBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNz KHB1ZHAsIHB1ZCwgYWRkcik7CiAJZG8gewogCQlwbWRfdCBwbWQgPSBSRUFEX09OQ0UoKnBtZHAp OwogCkBAIC0yNTI4LDEzICsyNTI4LDEzIEBAIHN0YXRpYyBpbnQgZ3VwX3BtZF9yYW5nZShwdWRf dCBwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJcmV0dXJuIDE7 CiB9CiAKLXN0YXRpYyBpbnQgZ3VwX3B1ZF9yYW5nZShwNGRfdCBwNGQsIHVuc2lnbmVkIGxvbmcg YWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCitzdGF0aWMgaW50IGd1cF9wdWRfcmFuZ2UocDRkX3Qg KnA0ZHAsIHA0ZF90IHA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwK IAkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIpCiB7 CiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCXB1ZF90ICpwdWRwOwogCi0JcHVkcCA9IHB1ZF9vZmZz ZXQoJnA0ZCwgYWRkcik7CisJcHVkcCA9IHB1ZF9vZmZzZXRfbG9ja2xlc3MocDRkcCwgcDRkLCBh ZGRyKTsKIAlkbyB7CiAJCXB1ZF90IHB1ZCA9IFJFQURfT05DRSgqcHVkcCk7CiAKQEAgLTI1NDks MjAgKzI1NDksMjAgQEAgc3RhdGljIGludCBndXBfcHVkX3JhbmdlKHA0ZF90IHA0ZCwgdW5zaWdu ZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWlmICghZ3VwX2h1Z2VfcGQoX19o dWdlcGQocHVkX3ZhbChwdWQpKSwgYWRkciwKIAkJCQkJIFBVRF9TSElGVCwgbmV4dCwgZmxhZ3Ms IHBhZ2VzLCBucikpCiAJCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSBpZiAoIWd1cF9wbWRfcmFuZ2Uo cHVkLCBhZGRyLCBuZXh0LCBmbGFncywgcGFnZXMsIG5yKSkKKwkJfSBlbHNlIGlmICghZ3VwX3Bt ZF9yYW5nZShwdWRwLCBwdWQsIGFkZHIsIG5leHQsIGZsYWdzLCBwYWdlcywgbnIpKQogCQkJcmV0 dXJuIDA7CiAJfSB3aGlsZSAocHVkcCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCiAJ cmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgZ3VwX3A0ZF9yYW5nZShwZ2RfdCBwZ2QsIHVuc2ln bmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCitzdGF0aWMgaW50IGd1cF9wNGRfcmFu Z2UocGdkX3QgKnBnZHAsIHBnZF90IHBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBs b25nIGVuZCwKIAkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGlu dCAqbnIpCiB7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCXA0ZF90ICpwNGRwOwogCi0JcDRkcCA9 IHA0ZF9vZmZzZXQoJnBnZCwgYWRkcik7CisJcDRkcCA9IHA0ZF9vZmZzZXRfbG9ja2xlc3MocGdk cCwgcGdkLCBhZGRyKTsKIAlkbyB7CiAJCXA0ZF90IHA0ZCA9IFJFQURfT05DRSgqcDRkcCk7CiAK QEAgLTI1NzQsNyArMjU3NCw3IEBAIHN0YXRpYyBpbnQgZ3VwX3A0ZF9yYW5nZShwZ2RfdCBwZ2Qs IHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQlpZiAoIWd1cF9odWdl X3BkKF9faHVnZXBkKHA0ZF92YWwocDRkKSksIGFkZHIsCiAJCQkJCSBQNERfU0hJRlQsIG5leHQs IGZsYWdzLCBwYWdlcywgbnIpKQogCQkJCXJldHVybiAwOwotCQl9IGVsc2UgaWYgKCFndXBfcHVk X3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgZmxhZ3MsIHBhZ2VzLCBucikpCisJCX0gZWxzZSBpZiAo IWd1cF9wdWRfcmFuZ2UocDRkcCwgcDRkLCBhZGRyLCBuZXh0LCBmbGFncywgcGFnZXMsIG5yKSkK IAkJCXJldHVybiAwOwogCX0gd2hpbGUgKHA0ZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5k KTsKIApAQCAtMjYwMiw3ICsyNjAyLDcgQEAgc3RhdGljIHZvaWQgZ3VwX3BnZF9yYW5nZSh1bnNp Z25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJaWYgKCFndXBfaHVnZV9wZChf X2h1Z2VwZChwZ2RfdmFsKHBnZCkpLCBhZGRyLAogCQkJCQkgUEdESVJfU0hJRlQsIG5leHQsIGZs YWdzLCBwYWdlcywgbnIpKQogCQkJCXJldHVybjsKLQkJfSBlbHNlIGlmICghZ3VwX3A0ZF9yYW5n ZShwZ2QsIGFkZHIsIG5leHQsIGZsYWdzLCBwYWdlcywgbnIpKQorCQl9IGVsc2UgaWYgKCFndXBf cDRkX3JhbmdlKHBnZHAsIHBnZCwgYWRkciwgbmV4dCwgZmxhZ3MsIHBhZ2VzLCBucikpCiAJCQly ZXR1cm47CiAJfSB3aGlsZSAocGdkcCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQot LSAK4qO/4qO/4qO/4qO/4qKL4qGA4qOA4qC54qO/4qO/4qO/4qO/CuKjv+Kjv+Kjv+Kjv+KgoOKj tuKhpuKggOKjv+Kjv+Kjv+Kjvwrio7/io7/io7/ioI/io7Tio67io7Tio6fioIjior/io7/io78K 4qO/4qO/4qGP4qKw4qO/4qCW4qOg4qO/4qGG4qCI4qO/4qO/CuKjv+Kim+KjteKjhOKgmeKjtuKj tuKhn+KjheKjoOKgueKjvwrio7/io5zio5vioLvioo7io4nio4nio4DioL/io6vio7Xio78KCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXVtIG1h aWxpbmcgbGlzdApsaW51eC11bUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtdW0K