From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH 16/20] drm/i915/selftests: huge page tests Date: Tue, 27 Jun 2017 15:54:40 +0100 Message-ID: <20170627145444.20491-17-matthew.auld@intel.com> References: <20170627145444.20491-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id DB5776E3E4 for ; Tue, 27 Jun 2017 14:55:11 +0000 (UTC) In-Reply-To: <20170627145444.20491-1-matthew.auld@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org djI6IG1vY2sgdGVzdCBwYWdlIHN1cHBvcnQgY29uZmlndXJhdGlvbnMgYW5kIGFkZCBNSV9TVE9S RV9EV09SRCB0ZXN0CgpTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBp bnRlbC5jb20+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRl bC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICAgICAgICB8ICAgMSAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jICAgICAgICB8IDg4 NiArKysrKysrKysrKysrKysrKysrKysKIC4uLi9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVf bGl2ZV9zZWxmdGVzdHMuaCAgIHwgICAxICsKIC4uLi9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5 MTVfbW9ja19zZWxmdGVzdHMuaCAgIHwgICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgODg5IGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaHVnZV9wYWdlcy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggMzFhN2MwZDg5ZWY0 Li5mM2NiODYwMDM1OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNTQwMiw2ICs1NDAy LDcgQEAgaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAogI2luY2x1ZGUgInNlbGZ0ZXN0cy9zY2F0dGVybGlzdC5jIgogI2luY2x1 ZGUgInNlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYyIKICNpbmNsdWRlICJzZWxmdGVzdHMvaHVn ZV9nZW1fb2JqZWN0LmMiCisjaW5jbHVkZSAic2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyIKICNpbmNs dWRlICJzZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0LmMiCiAjaW5jbHVkZSAic2VsZnRlc3RzL2k5 MTVfZ2VtX2NvaGVyZW5jeS5jIgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2h1Z2VfcGFnZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjcyYTIwYTQyMzAzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9odWdlX3BhZ2VzLmMKQEAgLTAsMCArMSw4ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIK KworI2luY2x1ZGUgPGxpbnV4L3ByaW1lX251bWJlcnMuaD4KKworI2luY2x1ZGUgIm1vY2tfZHJt LmgiCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGFnZV9zaXplc1tdID0geworCUk5MTVf R1RUX1BBR0VfU0laRV8xRywKKwlJOTE1X0dUVF9QQUdFX1NJWkVfMk0sCisJSTkxNV9HVFRfUEFH RV9TSVpFXzY0SywKKwlJOTE1X0dUVF9QQUdFX1NJWkVfNEssCit9OworCitzdGF0aWMgdW5zaWdu ZWQgaW50IGdldF9sYXJnZXN0X3BhZ2Vfc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKKwkJCQkJICBzaXplX3QgcmVtKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUocGFnZV9zaXplcyk7ICsraSkgeworCQl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0g cGFnZV9zaXplc1tpXTsKKworCQlpZiAoSEFTX1BBR0VfU0laRShpOTE1LCBwYWdlX3NpemUpICYm IHJlbSA+PSBwYWdlX3NpemUpCisJCQlyZXR1cm4gcGFnZV9zaXplOworCX0KKworCUdFTV9CVUdf T04oMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKgorZmFrZV9nZXRfaHVnZV9wYWdl cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkgICAgdW5zaWduZWQgaW50ICpz Z19tYXNrKQoreworI2RlZmluZSBHRlAgKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4gfCBfX0dG UF9OT1JFVFJZKQorCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmot PmJhc2UuZGV2KTsKKwljb25zdCB1bnNpZ25lZCBsb25nIG1heCA9IG9iai0+YmFzZS5zaXplID4+ IFBBR0VfU0hJRlQ7CisJc3RydWN0IHNnX3RhYmxlICpzdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qg KnNnOworCXNpemVfdCByZW07CisKKwlzdCA9IGttYWxsb2Moc2l6ZW9mKCpzdCksIEdGUCk7CisJ aWYgKCFzdCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpZiAoc2dfYWxsb2NfdGFi bGUoc3QsIG1heCwgR0ZQKSkgeworCQlrZnJlZShzdCk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOworCX0KKworCS8qIFVzZSBvcHRpbWFsIHBhZ2Ugc2l6ZWQgY2h1bmtzIHRvIGZpbGwgaW4g dGhlIHNnIHRhYmxlICovCisJcmVtID0gb2JqLT5iYXNlLnNpemU7CisJc2cgPSBzdC0+c2dsOwor CXN0LT5uZW50cyA9IDA7CisJZG8geworCQl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gZ2V0X2xh cmdlc3RfcGFnZV9zaXplKGk5MTUsIHJlbSk7CisJCXVuc2lnbmVkIGludCBsZW4gPSBwYWdlX3Np emUgKiAocmVtIC8gcGFnZV9zaXplKTsKKworCQlzZy0+b2Zmc2V0ID0gMDsKKwkJc2ctPmxlbmd0 aCA9IGxlbjsKKwkJc2dfZG1hX2xlbihzZykgPSBsZW47CisJCXNnX2RtYV9hZGRyZXNzKHNnKSA9 IHBhZ2Vfc2l6ZTsKKworCQkqc2dfbWFzayB8PSBsZW47CisKKwkJc3QtPm5lbnRzKys7CisKKwkJ cmVtIC09IGxlbjsKKwkJaWYgKCFyZW0pIHsKKwkJCXNnX21hcmtfZW5kKHNnKTsKKwkJCWJyZWFr OworCQl9CisKKwkJc2cgPSBzZ19uZXh0KHNnKTsKKwl9IHdoaWxlICgxKTsKKworCW9iai0+bW0u bWFkdiA9IEk5MTVfTUFEVl9ET05UTkVFRDsKKworCXJldHVybiBzdDsKKyN1bmRlZiBHRlAKK30K Kworc3RhdGljIHZvaWQgZmFrZV9mcmVlX2h1Z2VfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwKKwkJCQkgc3RydWN0IHNnX3RhYmxlICpwYWdlcykKK3sKKwlzZ19mcmVlX3Rh YmxlKHBhZ2VzKTsKKwlrZnJlZShwYWdlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGZha2VfcHV0X2h1 Z2VfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQlzdHJ1Y3Qgc2df dGFibGUgKnBhZ2VzKQoreworCWZha2VfZnJlZV9odWdlX3BhZ2VzKG9iaiwgcGFnZXMpOworCW9i ai0+bW0uZGlydHkgPSBmYWxzZTsKKwlvYmotPm1tLm1hZHYgPSBJOTE1X01BRFZfV0lMTE5FRUQ7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgZmFrZV9v cHMgPSB7CisJLmZsYWdzID0gSTkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUsCisJLmdldF9w YWdlcyA9IGZha2VfZ2V0X2h1Z2VfcGFnZXMsCisJLnB1dF9wYWdlcyA9IGZha2VfcHV0X2h1Z2Vf cGFnZXMsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgorZmFrZV9o dWdlX3BhZ2VzX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTY0IHNpemUp Cit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKworCUdFTV9CVUdfT04oIXNp emUpOworCUdFTV9CVUdfT04oIUlTX0FMSUdORUQoc2l6ZSwgSTkxNV9HVFRfUEFHRV9TSVpFKSk7 CisKKwlpZiAob3ZlcmZsb3dzX3R5cGUoc2l6ZSwgb2JqLT5iYXNlLnNpemUpKQorCQlyZXR1cm4g RVJSX1BUUigtRTJCSUcpOworCisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2FsbG9jKGk5MTUpOwor CWlmICghb2JqKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRybV9nZW1fcHJpdmF0 ZV9vYmplY3RfaW5pdCgmaTkxNS0+ZHJtLCAmb2JqLT5iYXNlLCBzaXplKTsKKwlpOTE1X2dlbV9v YmplY3RfaW5pdChvYmosICZmYWtlX29wcyk7CisKKwlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0g STkxNV9HRU1fRE9NQUlOX0NQVTsKKwlvYmotPmJhc2UucmVhZF9kb21haW5zID0gSTkxNV9HRU1f RE9NQUlOX0NQVTsKKwlvYmotPmNhY2hlX2xldmVsID0gSTkxNV9DQUNIRV9OT05FOworCisJcmV0 dXJuIG9iajsKK30KKworc3RhdGljIGludCBpZ3RfcHBndHRfaHVnZV9maWxsKHZvaWQgKmFyZykK K3sKKwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQgPSBhcmc7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSBwcGd0dC0+YmFzZS5pOTE1OworCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmo7CisJdW5zaWduZWQgbG9uZyBtYXhfcGFnZXMgPSBwcGd0dC0+YmFzZS50b3Rh bCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgcGFnZV9udW07CisJSUdUX1RJTUVPVVQo ZW5kX3RpbWUpOworCWludCBlcnI7CisKKwlmb3JfZWFjaF9wcmltZV9udW1iZXJfZnJvbShwYWdl X251bSwgMSwgbWF4X3BhZ2VzKSB7CisJCXVuc2lnbmVkIGludCBleHBlY3RlZF9ndHQgPSAwOwor CQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwkJc2l6ZV90IHNpemUgPSBwYWdlX251bSA8PCBQQUdF X1NISUZUOworCQlpbnQgaTsKKworCQlvYmogPSBmYWtlX2h1Z2VfcGFnZXNfb2JqZWN0KGk5MTUs IHNpemUpOworCQlpZiAoSVNfRVJSKG9iaikpCisJCQlyZXR1cm4gUFRSX0VSUihvYmopOworCisJ CUdFTV9CVUdfT04ob2JqLT5iYXNlLnNpemUgIT0gc2l6ZSk7CisKKwkJZXJyID0gaTkxNV9nZW1f b2JqZWN0X3Bpbl9wYWdlcyhvYmopOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcHV0OworCisJ CUdFTV9CVUdfT04oIW9iai0+bW0ucGFnZV9zaXplcy5zZyk7CisKKwkJdm1hID0gaTkxNV92bWFf aW5zdGFuY2Uob2JqLCAmcHBndHQtPmJhc2UsIE5VTEwpOworCQlpZiAoSVNfRVJSKHZtYSkpIHsK KwkJCWVyciA9IFBUUl9FUlIodm1hKTsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJZXJy ID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElOX1VTRVIpOworCQlpZiAoZXJyKSB7CisJCQlp OTE1X3ZtYV9jbG9zZSh2bWEpOworCQkJZ290byBvdXRfdW5waW47CisJCX0KKworCQlHRU1fQlVH X09OKG9iai0+bW0ucGFnZV9zaXplcy5ndHQpOworCQlHRU1fQlVHX09OKCF2bWEtPnBhZ2Vfc2l6 ZXMuc2cpOworCQlHRU1fQlVHX09OKCF2bWEtPnBhZ2Vfc2l6ZXMucGh5cyk7CisKKwkJLyogRmln dXJlIG91dCB0aGUgZXhwZWN0ZWQgZ3R0IHBhZ2Ugc2l6ZSBrbm93aW5nIHRoYXQgd2UgZ28gZnJv bQorCQkgKiBsYXJnZXN0IHRvIHNtYWxsZXN0IHBhZ2Ugc2l6ZSBzZyBjaHVua3MsIGFuZCB0aGF0 IHdlIGFsaWduIHRvCisJCSAqIHRoZSBsYXJnZXN0IHBhZ2Ugc2l6ZS4KKwkJICovCisJCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhZ2Vfc2l6ZXMpOyArK2kpIHsKKwkJCXVuc2lnbmVkIGlu dCBwYWdlX3NpemUgPSBwYWdlX3NpemVzW2ldOworCisJCQlpZiAoSEFTX1BBR0VfU0laRShpOTE1 LCBwYWdlX3NpemUpICYmIHNpemUgPj0gcGFnZV9zaXplKSB7CisJCQkJZXhwZWN0ZWRfZ3R0IHw9 IHBhZ2Vfc2l6ZTsKKwkJCQlzaXplICY9IHBhZ2Vfc2l6ZS0xOworCQkJfQorCQl9CisKKwkJR0VN X0JVR19PTighZXhwZWN0ZWRfZ3R0KTsKKwkJR0VNX0JVR19PTihzaXplKTsKKworCQlpZiAoZXhw ZWN0ZWRfZ3R0ICYgSTkxNV9HVFRfUEFHRV9TSVpFXzRLKQorCQkJZXhwZWN0ZWRfZ3R0ICY9IH5J OTE1X0dUVF9QQUdFX1NJWkVfNjRLOworCisJCUdFTV9CVUdfT04odm1hLT5wYWdlX3NpemVzLmd0 dCAhPSBleHBlY3RlZF9ndHQpOworCisJCWlmICh2bWEtPnBhZ2Vfc2l6ZXMuc2cgJiBJOTE1X0dU VF9QQUdFX1NJWkVfNjRLKSB7CisJCQlHRU1fQlVHX09OKCFJU19BTElHTkVEKHZtYS0+bm9kZS5z dGFydCwKKwkJCQkJICAgICAgIEk5MTVfR1RUX1BBR0VfU0laRV8yTSkpOworCQkJR0VNX0JVR19P TighSVNfQUxJR05FRCh2bWEtPm5vZGUuc2l6ZSwKKwkJCQkJICAgICAgIEk5MTVfR1RUX1BBR0Vf U0laRV8yTSkpOworCQl9CisKKwkJaTkxNV92bWFfdW5waW4odm1hKTsKKwkJaTkxNV92bWFfY2xv c2Uodm1hKTsKKworCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsKKwkJaTkxNV9n ZW1fb2JqZWN0X3B1dChvYmopOworCisJCWlmIChpZ3RfdGltZW91dChlbmRfdGltZSwKKwkJCQki JXMgdGltZWQgb3V0IGF0IHNpemUgJWx4XG4iLAorCQkJCV9fZnVuY19fLCBvYmotPmJhc2Uuc2l6 ZSkpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3VucGluOgorCWk5MTVfZ2Vt X29iamVjdF91bnBpbl9wYWdlcyhvYmopOworb3V0X3B1dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0 KG9iaik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9wcGd0dF9taXNhbGln bmVkX2RtYSh2b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gYXJn OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBndHQtPmJhc2UuaTkxNTsKKwl1 bnNpZ25lZCBsb25nIHN1cHBvcnRlZCA9IElOVEVMX0lORk8oaTkxNSktPnBhZ2Vfc2l6ZV9tYXNr OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IGVycjsKKwlpbnQgYml0 OworCisJLyogU2FuaXR5IGNoZWNrIGRtYSBtaXNhbGlnbm1lbnQgZm9yIGh1Z2UgcGFnZXMgLS0g dGhlIGRtYSBhZGRyZXNzZXMgd2UKKwkgKiBpbnNlcnQgaW50byB0aGUgcGFnaW5nIHN0cnVjdHVy ZXMgbmVlZCB0byBhbHdheXMgcmVzcGVjdCB0aGUgcGFnZQorCSAqIHNpemUgYWxpZ25tZW50Lgor CSAqLworCisJYml0ID0gaWxvZzIoSTkxNV9HVFRfUEFHRV9TSVpFXzY0Syk7CisKKwlmb3JfZWFj aF9zZXRfYml0X2Zyb20oYml0LCAmc3VwcG9ydGVkLCBCSVRTX1BFUl9MT05HKSB7CisJCUlHVF9U SU1FT1VUKGVuZF90aW1lKTsKKwkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IEJJVChiaXQpOwor CQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBQSU5fVVNFUiB8IFBJTl9PRkZTRVRfRklYRUQ7CisJCXN0 cnVjdCBpOTE1X3ZtYSAqdm1hOworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCQl1bnNpZ25lZCBp bnQgc2l6ZSA9CisJCQlyb3VuZF91cChwYWdlX3NpemUsIEk5MTVfR1RUX1BBR0VfU0laRV8yTSkg PDwgMTsKKworCQlvYmogPSBmYWtlX2h1Z2VfcGFnZXNfb2JqZWN0KGk5MTUsIHNpemUpOworCQlp ZiAoSVNfRVJSKG9iaikpCisJCQlyZXR1cm4gUFRSX0VSUihvYmopOworCisJCUdFTV9CVUdfT04o b2JqLT5iYXNlLnNpemUgIT0gc2l6ZSk7CisKKwkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9w YWdlcyhvYmopOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcHV0OworCisJCUdFTV9CVUdfT04o IShvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgJiBwYWdlX3NpemUpKTsKKworCQkvKiBGb3JjZSB0aGUg cGFnZSBzaXplIGZvciB0aGlzIG9iamVjdCAqLworCQlvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgPSBw YWdlX3NpemU7CisKKwkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCAmcHBndHQtPmJhc2Us IE5VTEwpOworCQlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJCWVyciA9IFBUUl9FUlIodm1hKTsKKwkJ CWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwg ZmxhZ3MpOworCQlpZiAoZXJyKSB7CisJCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCQkJZ290byBv dXRfdW5waW47CisJCX0KKworCQlHRU1fQlVHX09OKHZtYS0+cGFnZV9zaXplcy5ndHQgIT0gcGFn ZV9zaXplKTsKKworCQlpOTE1X3ZtYV91bnBpbih2bWEpOworCQllcnIgPSBpOTE1X3ZtYV91bmJp bmQodm1hKTsKKwkJaWYgKGVycikgeworCQkJaTkxNV92bWFfY2xvc2Uodm1hKTsKKwkJCWdvdG8g b3V0X3VucGluOworCQl9CisKKwkJLyogVHJ5IGFsbCB0aGUgb3RoZXIgdmFsaWQgb2Zmc2V0cyB1 bnRpbCB0aGUgbmV4dCBib3VuZGFyeSAtLQorCQkgKiBzaG91bGQgYWx3YXlzIGZhbGwgYmFjayB0 byB1c2luZyA0SyBwYWdlcy4KKwkJICovCisJCWZvciAob2Zmc2V0ID0gNDA5Njsgb2Zmc2V0IDwg cGFnZV9zaXplOyBvZmZzZXQgKz0gNDA5NikgeworCQkJZXJyID0gaTkxNV92bWFfcGluKHZtYSwg MCwgMCwgZmxhZ3MgfCBvZmZzZXQpOworCQkJaWYgKGVycikgeworCQkJCWk5MTVfdm1hX2Nsb3Nl KHZtYSk7CisJCQkJZ290byBvdXRfdW5waW47CisJCQl9CisKKwkJCUdFTV9CVUdfT04odm1hLT5w YWdlX3NpemVzLmd0dCAhPSBJOTE1X0dUVF9QQUdFX1NJWkVfNEspOworCisJCQlpOTE1X3ZtYV91 bnBpbih2bWEpOworCQkJZXJyID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7CisJCQlpZiAoZXJyKSB7 CisJCQkJaTkxNV92bWFfY2xvc2Uodm1hKTsKKwkJCQlnb3RvIG91dF91bnBpbjsKKwkJCX0KKwor CQkJaWYgKGlndF90aW1lb3V0KGVuZF90aW1lLAorCQkJCQkiJXMgdGltZWQgb3V0IGF0IG9mZnNl dCAleCB3aXRoIHBhZ2Utc2l6ZSAleFxuIiwKKwkJCQkJX19mdW5jX18sIG9mZnNldCwgcGFnZV9z aXplKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisKKwkJaTkx NV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CisJCWk5MTVfZ2VtX29iamVjdF9wdXQob2Jq KTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3VucGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBp bl9wYWdlcyhvYmopOworb3V0X3B1dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9wcGd0dF82NEsodm9pZCAqYXJnKQorewor CXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHBwZ3R0LT5iYXNlLmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iajsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2luZm8geworCQl1bnNpZ25lZCBpbnQgc2l6 ZTsKKwkJdW5zaWduZWQgaW50IGd0dDsKKwkJdW5zaWduZWQgaW50IG9mZnNldDsKKwl9IG9iamVj dHNbXSA9IHsKKwkJLyogQ2FzZXMgd2l0aCBmb3JjZWQgcGFkZGluZy9hbGlnbm1lbnQgKi8KKwkJ eworCQkJLnNpemUgPSBTWl82NEssCisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzY0SywK KwkJCS5vZmZzZXQgPSAwLAorCQl9LAorCQl7CisJCQkuc2l6ZSA9IFNaXzY0SyArIFNaXzRLLAor CQkJLmd0dCA9IEk5MTVfR1RUX1BBR0VfU0laRV80SywKKwkJCS5vZmZzZXQgPSAwLgorCQl9LAor CQl7CisJCQkuc2l6ZSA9IFNaXzJNIC0gU1pfNEssCisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9T SVpFXzRLLAorCQkJLm9mZnNldCA9IDAsCisJCX0sCisJCXsKKwkJCS5zaXplID0gU1pfMk0gKyBT Wl82NEssCisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzY0SywKKwkJCS5vZmZzZXQgPSAw LAorCQl9LAorCQl7CisJCQkuc2l6ZSA9IFNaXzJNICsgU1pfNEssCisJCQkuZ3R0ID0gSTkxNV9H VFRfUEFHRV9TSVpFXzY0SyB8IEk5MTVfR1RUX1BBR0VfU0laRV80SywKKwkJCS5vZmZzZXQgPSAw LAorCQl9LAorCQkvKiBUcnkgd2l0aG91dCBhbnkgZm9yY2VkIHBhZGRpbmcvYWxpZ25tZW50ICov CisJCXsKKwkJCS5zaXplID0gU1pfNjRLLAorCQkJLm9mZnNldCA9IFNaXzJNLAorCQkJLmd0dCA9 IEk5MTVfR1RUX1BBR0VfU0laRV80SywKKwkJfSwKKwkJeworCQkJLnNpemUgPSBTWl8xMjhLLAor CQkJLm9mZnNldCA9IFNaXzJNIC0gU1pfNjRLLAorCQkJLmd0dCA9IEk5MTVfR1RUX1BBR0VfU0la RV80SywKKwkJfSwKKwl9OworCWludCBpOworCWludCBlcnI7CisKKwlpZiAoIUhBU19QQUdFX1NJ WkUoaTkxNSwgSTkxNV9HVFRfUEFHRV9TSVpFXzY0SykpCisJCXJldHVybiAwOworCisJLyogU2Fu aXR5IGNoZWNrIHNvbWUgb2YgdGhlIHRyaWNraW5lc3Mgd2l0aCA2NEsgcGFnZXMgLS0gZWl0aGVy IHdlIGNhbgorCSAqIHNhZmVseSBtYXJrIHRoZSB3aG9sZSBwYWdlLXRhYmxlKDJNIGJsb2NrKSBh cyA2NEssIG9yIHdlIGhhdmUgdG8KKwkgKiBhbHdheXMgZmFsbGJhY2sgdG8gNEsuCisJICovCisK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvYmplY3RzKTsgKytpKSB7CisJCXVuc2lnbmVk IGludCBzaXplID0gb2JqZWN0c1tpXS5zaXplOworCQl1bnNpZ25lZCBpbnQgZXhwZWN0ZWRfZ3R0 ID0gb2JqZWN0c1tpXS5ndHQ7CisJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBvYmplY3RzW2ldLm9m ZnNldDsKKwkJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJCWludCBmbGFncyA9IFBJTl9VU0VSOwor CisJCW9iaiA9IGZha2VfaHVnZV9wYWdlc19vYmplY3QoaTkxNSwgc2l6ZSk7CisJCWlmIChJU19F UlIob2JqKSkKKwkJCXJldHVybiBQVFJfRVJSKG9iaik7CisKKwkJZXJyID0gaTkxNV9nZW1fb2Jq ZWN0X3Bpbl9wYWdlcyhvYmopOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcHV0OworCisJCUdF TV9CVUdfT04oIW9iai0+bW0ucGFnZV9zaXplcy5zZyk7CisKKwkJLyogRGlzYWJsZSAyTSBwYWdl cyAtLSBXZSBvbmx5IHdhbnQgdG8gdXNlIDY0Sy80SyBwYWdlcyBmb3IKKwkJICogdGhpcyB0ZXN0 LgorCQkgKi8KKwkJb2JqLT5tbS5wYWdlX3NpemVzLnNnICY9IH5JOTE1X0dUVF9QQUdFX1NJWkVf Mk07CisKKwkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCAmcHBndHQtPmJhc2UsIE5VTEwp OworCQlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJCWVyciA9IFBUUl9FUlIodm1hKTsKKwkJCWdvdG8g b3V0X3VucGluOworCQl9CisKKwkJaWYgKG9mZnNldCkKKwkJCWZsYWdzIHw9IFBJTl9PRkZTRVRf RklYRUQgfCBvZmZzZXQ7CisKKwkJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgZmxhZ3Mp OworCQlpZiAoZXJyKSB7CisJCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCQkJZ290byBvdXRfdW5w aW47CisJCX0KKworCQlHRU1fQlVHX09OKG9iai0+bW0ucGFnZV9zaXplcy5ndHQpOworCQlHRU1f QlVHX09OKCF2bWEtPnBhZ2Vfc2l6ZXMuc2cpOworCQlHRU1fQlVHX09OKCF2bWEtPnBhZ2Vfc2l6 ZXMucGh5cyk7CisKKwkJR0VNX0JVR19PTih2bWEtPnBhZ2Vfc2l6ZXMuZ3R0ICE9IGV4cGVjdGVk X2d0dCk7CisKKwkJaWYgKCFvZmZzZXQgJiYgdm1hLT5wYWdlX3NpemVzLnNnICYgSTkxNV9HVFRf UEFHRV9TSVpFXzY0SykgeworCQkJR0VNX0JVR19PTighSVNfQUxJR05FRCh2bWEtPm5vZGUuc3Rh cnQsCisJCQkJCSAgICAgICBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pKTsKKwkJCUdFTV9CVUdfT04o IUlTX0FMSUdORUQodm1hLT5ub2RlLnNpemUsCisJCQkJCSAgICAgICBJOTE1X0dUVF9QQUdFX1NJ WkVfMk0pKTsKKwkJfQorCisJCWk5MTVfdm1hX3VucGluKHZtYSk7CisJCWk5MTVfdm1hX2Nsb3Nl KHZtYSk7CisKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CisJCWk5MTVfZ2Vt X29iamVjdF9wdXQob2JqKTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3VucGluOgorCWk5MTVf Z2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOworb3V0X3B1dDoKKwlpOTE1X2dlbV9vYmplY3Rf cHV0KG9iaik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IGk5MTVfdm1hICoK K2dwdV93cml0ZV9kdyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgdTY0IG9mZnNldCwgdTMyIHZhbHVl KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNSh2bWEtPm9iai0+ YmFzZS5kZXYpOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGk5 MTVfdm1hICpiYXRjaDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1MzIgKmNtZDsKKwlpbnQgZXJy OworCisJR0VNX0JVR19PTihJTlRFTF9HRU4oaTkxNSkgPCA4KTsKKworCXNpemUgPSA1ICogc2l6 ZW9mKHUzMik7CisJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CisJb2JqID0gaTkx NV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbChpOTE1LCBzaXplKTsKKwlpZiAoSVNfRVJSKG9i aikpCisJCXJldHVybiBFUlJfQ0FTVChvYmopOworCisJY21kID0gaTkxNV9nZW1fb2JqZWN0X3Bp bl9tYXAob2JqLCBJOTE1X01BUF9XQik7CisJaWYgKElTX0VSUihjbWQpKSB7CisJCWVyciA9IFBU Ul9FUlIoY21kKTsKKwkJZ290byBlcnI7CisJfQorCisJb2Zmc2V0ICs9IHZtYS0+bm9kZS5zdGFy dDsKKworCSpjbWQrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40OworCSpjbWQrKyA9IGxvd2Vy XzMyX2JpdHMob2Zmc2V0KTsKKwkqY21kKysgPSB1cHBlcl8zMl9iaXRzKG9mZnNldCk7CisJKmNt ZCsrID0gdmFsdWU7CisKKwkqY21kID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKwlpOTE1X2dlbV9v YmplY3RfdW5waW5fbWFwKG9iaik7CisKKwllcnIgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0 dF9kb21haW4ob2JqLCBmYWxzZSk7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisKKwliYXRjaCA9 IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgdm1hLT52bSwgTlVMTCk7CisJaWYgKElTX0VSUihiYXRj aCkpIHsKKwkJZXJyID0gUFRSX0VSUihiYXRjaCk7CisJCWdvdG8gZXJyOworCX0KKworCWVyciA9 IGk5MTVfdm1hX3BpbihiYXRjaCwgMCwgMCwgUElOX1VTRVIpOworCWlmIChlcnIpCisJCWdvdG8g ZXJyOworCisJcmV0dXJuIGJhdGNoOworCitlcnI6CisJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmop OworCisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIGludCBncHVfd3JpdGUoc3Ry dWN0IGk5MTVfdm1hICp2bWEsCisJCSAgICAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwK KwkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJICAgICB1MzIgdmFsdWUpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHZtYS0+b2JqLT5iYXNlLmRldik7 CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTsKKwlzdHJ1Y3QgaTkxNV92bWEgKmJh dGNoOworCWludCBmbGFncyA9IDA7CisJaW50IGVycjsKKworCWJhdGNoID0gZ3B1X3dyaXRlX2R3 KHZtYSwgb2Zmc2V0LCB2YWx1ZSk7CisJaWYgKElTX0VSUihiYXRjaCkpCisJCXJldHVybiBQVFJf RVJSKGJhdGNoKTsKKworCXJxID0gaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhpOTE1LT5lbmdpbmVb UkNTXSwgY3R4KTsKKwlpZiAoSVNfRVJSKHJxKSkgeworCQllcnIgPSBQVFJfRVJSKHJxKTsKKwkJ Z290byBlcnJfYmF0Y2g7CisJfQorCisJZXJyID0gcnEtPmVuZ2luZS0+ZW1pdF9mbHVzaChycSwg RU1JVF9JTlZBTElEQVRFKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yZXF1ZXN0OworCisJZXJy ID0gaTkxNV9zd2l0Y2hfY29udGV4dChycSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmVxdWVz dDsKKworCWVyciA9IHJxLT5lbmdpbmUtPmVtaXRfYmJfc3RhcnQocnEsCisJCQliYXRjaC0+bm9k ZS5zdGFydCwgYmF0Y2gtPm5vZGUuc2l6ZSwKKwkJCWZsYWdzKTsKKwlpZiAoZXJyKQorCQlnb3Rv IGVycl9yZXF1ZXN0OworCisJaTkxNV92bWFfbW92ZV90b19hY3RpdmUoYmF0Y2gsIHJxLCAwKTsK KwlpOTE1X2dlbV9vYmplY3Rfc2V0X2FjdGl2ZV9yZWZlcmVuY2UoYmF0Y2gtPm9iaik7CisJaTkx NV92bWFfdW5waW4oYmF0Y2gpOworCWk5MTVfdm1hX2Nsb3NlKGJhdGNoKTsKKworCWk5MTVfdm1h X21vdmVfdG9fYWN0aXZlKHZtYSwgcnEsIDApOworCisJcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2so dm1hLT5vYmotPnJlc3YsIE5VTEwpOworCXJlc2VydmF0aW9uX29iamVjdF9hZGRfZXhjbF9mZW5j ZSh2bWEtPm9iai0+cmVzdiwgJnJxLT5mZW5jZSk7CisJcmVzZXJ2YXRpb25fb2JqZWN0X3VubG9j ayh2bWEtPm9iai0+cmVzdik7CisKKwlfX2k5MTVfYWRkX3JlcXVlc3QocnEsIHRydWUpOworCisJ cmV0dXJuIDA7CisKK2Vycl9yZXF1ZXN0OgorCV9faTkxNV9hZGRfcmVxdWVzdChycSwgZmFsc2Up OworZXJyX2JhdGNoOgorCWk5MTVfdm1hX3VucGluKGJhdGNoKTsKKworCXJldHVybiBlcnI7Cit9 CisKK3N0YXRpYyBpbmxpbmUgaW50IGlndF9jYW5fYWxsb2NhdGVfdGhwKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KQoreworCXJldHVybiBIQVNfUEFHRV9TSVpFKGk5MTUsIEk5MTVfR1RU X1BBR0VfU0laRV8yTSkgJiYKKwkJaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCk7Cit9CisKK3N0 YXRpYyBpbnQgaWd0X3BwZ3R0X3dyaXRlX2h1Z2Uodm9pZCAqYXJnKQoreworCXN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dCA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IHBwZ3R0LT5iYXNlLmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlj b25zdCB1bnNpZ25lZCBpbnQgcGFnZV9zaXplc1tdID0geworCQlJOTE1X0dUVF9QQUdFX1NJWkVf NjRLLAorCQlJOTE1X0dUVF9QQUdFX1NJWkVfMk0sCisJfTsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZt YTsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaTsKKworCWlmICghaWd0X2Nhbl9hbGxvY2F0ZV90aHAo aTkxNSkpCisJCXJldHVybiAwOworCisJLyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIEhXIHVzZXMg aHVnZS1wYWdlcyBjb3JyZWN0bHkgKi8KKworCXBwZ3R0ID0gaTkxNS0+a2VybmVsX2NvbnRleHQt PnBwZ3R0OworCisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShpOTE1LCBJOTE1X0dUVF9Q QUdFX1NJWkVfMk0pOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsK KworCWVyciA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwlpZiAoZXJyKQorCQln b3RvIG91dF9wdXQ7CisKKwlHRU1fQlVHX09OKCFvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cpOworCisJ aWYgKG9iai0+bW0ucGFnZV9zaXplcy5zZyA8IEk5MTVfR1RUX1BBR0VfU0laRV8yTSkgeworCQlw cl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBodWdlIHBhZ2VzXG4iKTsKKwkJZXJyID0gLUVJTlZB TDsKKwkJZ290byBvdXRfdW5waW47CisJfQorCisJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2Jq LCAmcHBndHQtPmJhc2UsIE5VTEwpOworCWlmIChJU19FUlIodm1hKSkgeworCQllcnIgPSBQVFJf RVJSKHZtYSk7CisJCWdvdG8gb3V0X3VucGluOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHBhZ2Vfc2l6ZXMpOyArK2kpIHsKKwkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHBh Z2Vfc2l6ZXNbaV07CisJCXUzMiAqbWFwOworCisJCWlmICghSEFTX1BBR0VfU0laRShpOTE1LCBw YWdlX3NpemUpKQorCQkJY29udGludWU7CisKKwkJLyogRm9yY2UgdGhlIHBhZ2Ugc2l6ZSAqLwor CQlvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgPSBwYWdlX3NpemU7CisKKwkJZXJyID0gaTkxNV9nZW1f b2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7CisJCWlmIChlcnIpCisJCQlnb3Rv IG91dF9jbG9zZTsKKworCQllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUik7 CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9jbG9zZTsKKworCQlHRU1fQlVHX09OKG9iai0+bW0u cGFnZV9zaXplcy5ndHQpOworCQlHRU1fQlVHX09OKHZtYS0+cGFnZV9zaXplcy5zZyAhPSBwYWdl X3NpemUpOworCQlHRU1fQlVHX09OKCF2bWEtPnBhZ2Vfc2l6ZXMucGh5cyk7CisKKwkJR0VNX0JV R19PTih2bWEtPnBhZ2Vfc2l6ZXMuZ3R0ICE9IHBhZ2Vfc2l6ZSk7CisJCUdFTV9CVUdfT04oIUlT X0FMSUdORUQodm1hLT5ub2RlLnN0YXJ0LCBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pKTsKKwkJR0VN X0JVR19PTighSVNfQUxJR05FRCh2bWEtPm5vZGUuc2l6ZSwgSTkxNV9HVFRfUEFHRV9TSVpFXzJN KSk7CisKKwkJZXJyID0gZ3B1X3dyaXRlKHZtYSwgaTkxNS0+a2VybmVsX2NvbnRleHQsIDAsIHBh Z2Vfc2l6ZSk7CisJCWlmIChlcnIpIHsKKwkJCWk5MTVfdm1hX3VucGluKHZtYSk7CisJCQlnb3Rv IG91dF9jbG9zZTsKKwkJfQorCisJCWVyciA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2Rv bWFpbihvYmosIGZhbHNlKTsKKwkJaWYgKGVycikgeworCQkJaTkxNV92bWFfdW5waW4odm1hKTsK KwkJCWdvdG8gb3V0X2Nsb3NlOworCQl9CisKKwkJaTkxNV92bWFfdW5waW4odm1hKTsKKwkJZXJy ID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9jbG9zZTsK KworCQltYXAgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChvYmosIEk5MTVfTUFQX1dCKTsKKwkJ aWYgKElTX0VSUihtYXApKSB7CisJCQllcnIgPSBQVFJfRVJSKG1hcCk7CisJCQlnb3RvIG91dF9j bG9zZTsKKwkJfQorCisJCUdFTV9CVUdfT04obWFwWzBdICE9IHBhZ2Vfc2l6ZSk7CisKKwkJaTkx NV9nZW1fb2JqZWN0X3VucGluX21hcChvYmopOworCX0KKworb3V0X2Nsb3NlOgorCWk5MTVfdm1h X2Nsb3NlKHZtYSk7CitvdXRfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9i aik7CitvdXRfcHV0OgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKworCXJldHVybiBlcnI7 Cit9CisKK3N0YXRpYyBpbnQgaWd0X3BwZ3R0X2dlbWZzX2h1Z2Uodm9pZCAqYXJnKQoreworCXN0 cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IHBwZ3R0LT5iYXNlLmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKKwljb25zdCB1bnNpZ25lZCBpbnQgb2JqZWN0X3NpemVzW10gPSB7CisJCUk5MTVfR1RU X1BBR0VfU0laRV8yTSwKKwkJSTkxNV9HVFRfUEFHRV9TSVpFXzJNICsgSTkxNV9HVFRfUEFHRV9T SVpFXzRLLAorCX07CisJaW50IGVycjsKKwlpbnQgaTsKKworCWlmICghaWd0X2Nhbl9hbGxvY2F0 ZV90aHAoaTkxNSkpCisJCXJldHVybiAwOworCisJLyogU2FuaXR5IGNoZWNrIFRIUCB0aHJvdWdo IGdlbWZzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvYmplY3Rfc2l6ZXMpOyAr K2kpIHsKKwkJdW5zaWduZWQgaW50IHNpemUgPSBvYmplY3Rfc2l6ZXNbaV07CisJCXN0cnVjdCBp OTE1X3ZtYSAqdm1hOworCisJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoaTkxNSwgc2l6 ZSk7CisJCWlmIChJU19FUlIob2JqKSkKKwkJCXJldHVybiBQVFJfRVJSKG9iaik7CisKKwkJZXJy ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOworCQlpZiAoZXJyKQorCQkJZ290byBv dXRfcHV0OworCisJCUdFTV9CVUdfT04oIW9iai0+bW0ucGFnZV9zaXplcy5zZyk7CisKKwkJaWYg KG9iai0+bW0ucGFnZV9zaXplcy5zZyA8IHNpemUpIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIGFs bG9jYXRlIGh1Z2UgcGFnZXNcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X3Vu cGluOworCQl9CisKKwkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCAmcHBndHQtPmJhc2Us IE5VTEwpOworCQlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJCWVyciA9IFBUUl9FUlIodm1hKTsKKwkJ CWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwg UElOX1VTRVIpOworCQlpZiAoZXJyKSB7CisJCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCQkJZ290 byBvdXRfdW5waW47CisJCX0KKworCQlHRU1fQlVHX09OKG9iai0+bW0ucGFnZV9zaXplcy5ndHQp OworCQlHRU1fQlVHX09OKCF2bWEtPnBhZ2Vfc2l6ZXMuc2cpOworCQlHRU1fQlVHX09OKCF2bWEt PnBhZ2Vfc2l6ZXMucGh5cyk7CisKKwkJR0VNX0JVR19PTih2bWEtPnBhZ2Vfc2l6ZXMuZ3R0ICE9 IHNpemUpOworCQlHRU1fQlVHX09OKCFJU19BTElHTkVEKHZtYS0+bm9kZS5zdGFydCwgSTkxNV9H VFRfUEFHRV9TSVpFXzJNKSk7CisKKwkJaWYgKHZtYS0+cGFnZV9zaXplcy5zZyAmIEk5MTVfR1RU X1BBR0VfU0laRV82NEspIHsKKwkJCUdFTV9CVUdfT04oIUlTX0FMSUdORUQodm1hLT5ub2RlLnNp emUsCisJCQkJCSAgICAgICBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pKTsKKwkJfQorCisJCWk5MTVf dm1hX3VucGluKHZtYSk7CisJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisKKwkJaTkxNV9nZW1fb2Jq ZWN0X3VucGluX3BhZ2VzKG9iaik7CisJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwl9CisK KwlyZXR1cm4gMDsKKworb3V0X3VucGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhv YmopOworb3V0X3B1dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwlyZXR1cm4gZXJy OworfQorCitzdGF0aWMgaW50IGlndF9tb2NrX2V4aGF1c3RfZGV2aWNlX3N1cHBvcnRlZF9wYWdl cyh2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJ dW5zaWduZWQgaW50IHNhdmVkX21hc2sgPSBJTlRFTF9JTkZPKGk5MTUpLT5wYWdlX3NpemVfbWFz azsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCWludCBpLCBqOworCWludCBl cnI7CisKKwkvKiBTYW5pdHkgY2hlY2sgY3JlYXRpbmcgb2JqZWN0cyB3aXRoIGV2ZXJ5IHZhbGlk IHBhZ2Ugc3VwcG9ydAorCSAqIGNvbWJpbmF0aW9uIGZvciBvdXIgbW9jayBkZXZpY2UuCisJICov CisKKwlmb3IgKGkgPSAxOyBpIDwgQklUKEFSUkFZX1NJWkUocGFnZV9zaXplcykpOyBpKyspIHsK KwkJdW5zaWduZWQgaW50IGNvbWJpbmF0aW9uID0gMDsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJS QVlfU0laRShwYWdlX3NpemVzKTsgaisrKSB7CisJCQlpZiAoaSAmIEJJVChqKSkKKwkJCQljb21i aW5hdGlvbiB8PSBwYWdlX3NpemVzW2pdOworCQl9CisKKwkJbWt3cml0ZV9kZXZpY2VfaW5mbyhp OTE1KS0+cGFnZV9zaXplX21hc2sgPSBjb21iaW5hdGlvbjsKKworCQlvYmogPSBmYWtlX2h1Z2Vf cGFnZXNfb2JqZWN0KGk5MTUsIGNvbWJpbmF0aW9uKTsKKwkJaWYgKElTX0VSUihvYmopKSB7CisJ CQllcnIgPSBQVFJfRVJSKG9iaik7CisJCQlnb3RvIG91dF9kZXZpY2U7CisJCX0KKworCQlHRU1f QlVHX09OKG9iai0+YmFzZS5zaXplICE9IGNvbWJpbmF0aW9uKTsKKworCQllcnIgPSBpOTE1X2dl bV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9wdXQ7CisK KwkJR0VNX0JVR19PTihvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgIT0gY29tYmluYXRpb24pOworCisJ CWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOworCQlpOTE1X2dlbV9vYmplY3RfcHV0 KG9iaik7CisJfQorCisJZ290byBvdXRfZGV2aWNlOworCitvdXRfcHV0OgorCWk5MTVfZ2VtX29i amVjdF9wdXQob2JqKTsKK291dF9kZXZpY2U6CisJbWt3cml0ZV9kZXZpY2VfaW5mbyhpOTE1KS0+ cGFnZV9zaXplX21hc2sgPSBzYXZlZF9tYXNrOworCisJcmV0dXJuIGVycjsKK30KKworaW50IGk5 MTVfZ2VtX2h1Z2VfcGFnZV9tb2NrX3NlbGZ0ZXN0cyh2b2lkKQoreworCXN0YXRpYyBjb25zdCBz dHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7CisJCVNVQlRFU1QoaWd0X21vY2tfZXhoYXVz dF9kZXZpY2Vfc3VwcG9ydGVkX3BhZ2VzKSwKKwl9OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1OworCWludCBlcnI7CisKKwlpOTE1ID0gbW9ja19nZW1fZGV2aWNlKCk7CisJaWYgKCFp OTE1KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3Rf bXV0ZXgpOworCWVyciA9IGk5MTVfc3VidGVzdHModGVzdHMsIGk5MTUpOworCW11dGV4X3VubG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwlkcm1fZGV2X3VucmVmKCZpOTE1LT5kcm0p OworCisJcmV0dXJuIGVycjsKK30KKworaW50IGk5MTVfZ2VtX2h1Z2VfcGFnZV9saXZlX3NlbGZ0 ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RhdGljIGNvbnN0 IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKKwkJU1VCVEVTVChpZ3RfcHBndHRfaHVn ZV9maWxsKSwKKwkJU1VCVEVTVChpZ3RfcHBndHRfbWlzYWxpZ25lZF9kbWEpLAorCQlTVUJURVNU KGlndF9wcGd0dF82NEspLAorCQlTVUJURVNUKGlndF9wcGd0dF9nZW1mc19odWdlKSwKKwkJU1VC VEVTVChpZ3RfcHBndHRfd3JpdGVfaHVnZSksCisJfTsKKwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAq cHBndHQ7CisJc3RydWN0IGRybV9maWxlICpmaWxlOworCWludCBlcnI7CisKKwlpZiAoIVVTRVNf RlVMTF80OEJJVF9QUEdUVChkZXZfcHJpdikpCisJCXJldHVybiAwOworCisJZmlsZSA9IG1vY2tf ZmlsZShkZXZfcHJpdik7CisJaWYgKElTX0VSUihmaWxlKSkKKwkJcmV0dXJuIFBUUl9FUlIoZmls ZSk7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisJcHBndHQg PSBpOTE1X3BwZ3R0X2NyZWF0ZShkZXZfcHJpdiwgZmlsZS0+ZHJpdmVyX3ByaXYsICJtb2NrIik7 CisJaWYgKElTX0VSUihwcGd0dCkpIHsKKwkJZXJyID0gUFRSX0VSUihwcGd0dCk7CisJCWdvdG8g b3V0X3VubG9jazsKKwl9CisKKwllcnIgPSBpOTE1X3N1YnRlc3RzKHRlc3RzLCBwcGd0dCk7CisK KwlpOTE1X3BwZ3R0X2Nsb3NlKCZwcGd0dC0+YmFzZSk7CisJaTkxNV9wcGd0dF9wdXQocHBndHQp OworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0 ZXgpOworCisJbW9ja19maWxlX2ZyZWUoZGV2X3ByaXYsIGZpbGUpOworCisJcmV0dXJuIGVycjsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVf c2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3Nl bGZ0ZXN0cy5oCmluZGV4IDE4YjE3NGQ4NTVjYS4uNjRhY2Q3ZWNjYzVjIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKQEAg LTE1LDUgKzE1LDYgQEAgc2VsZnRlc3Qob2JqZWN0cywgaTkxNV9nZW1fb2JqZWN0X2xpdmVfc2Vs ZnRlc3RzKQogc2VsZnRlc3QoZG1hYnVmLCBpOTE1X2dlbV9kbWFidWZfbGl2ZV9zZWxmdGVzdHMp CiBzZWxmdGVzdChjb2hlcmVuY3ksIGk5MTVfZ2VtX2NvaGVyZW5jeV9saXZlX3NlbGZ0ZXN0cykK IHNlbGZ0ZXN0KGd0dCwgaTkxNV9nZW1fZ3R0X2xpdmVfc2VsZnRlc3RzKQorc2VsZnRlc3QoaHVn ZXBhZ2VzLCBpOTE1X2dlbV9odWdlX3BhZ2VfbGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChjb250 ZXh0cywgaTkxNV9nZW1fY29udGV4dF9saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGhhbmdjaGVj aywgaW50ZWxfaGFuZ2NoZWNrX2xpdmVfc2VsZnRlc3RzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKaW5kZXggZmM3NDY4NzUw MWJhLi45OTYxYjQ0Zjc2ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaApAQCAtMjEsMyArMjEsNCBAQCBzZWxmdGVzdChk bWFidWYsIGk5MTVfZ2VtX2RtYWJ1Zl9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KHZtYSwgaTkx NV92bWFfbW9ja19zZWxmdGVzdHMpCiBzZWxmdGVzdChldmljdCwgaTkxNV9nZW1fZXZpY3RfbW9j a19zZWxmdGVzdHMpCiBzZWxmdGVzdChndHQsIGk5MTVfZ2VtX2d0dF9tb2NrX3NlbGZ0ZXN0cykK K3NlbGZ0ZXN0KGh1Z2VwYWdlcywgaTkxNV9nZW1faHVnZV9wYWdlX21vY2tfc2VsZnRlc3RzKQot LSAKMi45LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=