From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 1/2] drm/i915/selftests: Extract spinner code Date: Fri, 30 Nov 2018 08:02:53 +0000 Message-ID: <20181130080254.15383-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 41F706E537 for ; Fri, 30 Nov 2018 08:02:59 +0000 (UTC) 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 RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClB1bGwgb3V0 IHNwaW5uZXIgY29kZSB0byBhIHN0YW5kYWxvbmUgZmlsZSB0byBlbmFibGUgaXQgdG8gYmUgc2hv cnRseSB1c2VkCmJ5IG90aGVyIGFuZCBuZXcgdGVzdCBjYXNlcy4KClBsYWluIGNvZGUgbW92ZW1l bnQgLSBubyBmdW5jdGlvbmFsIGNoYW5nZXMuCgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlICAgICAgICAgICAgICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvaWd0X3NwaW5uZXIuYyB8IDE5OSArKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5oIHwgIDM3ICsrKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2ludGVsX2xyYy5jICAgfCAzMDEgKysrKy0tLS0tLS0tLS0tLS0tLQogNCBm aWxlcyBjaGFuZ2VkLCAyOTAgaW5zZXJ0aW9ucygrKSwgMjUwIGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lndF9z cGlubmVyLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDBmZjg3OGM5OTRlMi4uZTU2MzcwYjA0 NmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMTY0LDcgKzE2NCw4IEBAIGk5MTUtJChDT05G SUdfRFJNX0k5MTVfQ0FQVFVSRV9FUlJPUikgKz0gaTkxNV9ncHVfZXJyb3IubwogaTkxNS0kKENP TkZJR19EUk1fSTkxNV9TRUxGVEVTVCkgKz0gXAogCXNlbGZ0ZXN0cy9pOTE1X3JhbmRvbS5vIFwK IAlzZWxmdGVzdHMvaTkxNV9zZWxmdGVzdC5vIFwKLQlzZWxmdGVzdHMvaWd0X2ZsdXNoX3Rlc3Qu bworCXNlbGZ0ZXN0cy9pZ3RfZmx1c2hfdGVzdC5vIFwKKwlzZWxmdGVzdHMvaWd0X3NwaW5uZXIu bwogCiAjIHZpcnR1YWwgZ3B1IGNvZGUKIGk5MTUteSArPSBpOTE1X3ZncHUubwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lndF9zcGlubmVyLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaWd0X3NwaW5uZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjhjZDM0ZjZlNjg1OQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5jCkBAIC0wLDAgKzEsMTk5 IEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdo dCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgImlndF9zcGlubmVy LmgiCisKK2ludCBpZ3Rfc3Bpbm5lcl9pbml0KHN0cnVjdCBpZ3Rfc3Bpbm5lciAqc3Bpbiwgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJdW5zaWduZWQgaW50IG1vZGU7CisJdm9p ZCAqdmFkZHI7CisJaW50IGVycjsKKworCUdFTV9CVUdfT04oSU5URUxfR0VOKGk5MTUpIDwgOCk7 CisKKwltZW1zZXQoc3BpbiwgMCwgc2l6ZW9mKCpzcGluKSk7CisJc3Bpbi0+aTkxNSA9IGk5MTU7 CisKKwlzcGluLT5od3MgPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKGk5MTUsIFBB R0VfU0laRSk7CisJaWYgKElTX0VSUihzcGluLT5od3MpKSB7CisJCWVyciA9IFBUUl9FUlIoc3Bp bi0+aHdzKTsKKwkJZ290byBlcnI7CisJfQorCisJc3Bpbi0+b2JqID0gaTkxNV9nZW1fb2JqZWN0 X2NyZWF0ZV9pbnRlcm5hbChpOTE1LCBQQUdFX1NJWkUpOworCWlmIChJU19FUlIoc3Bpbi0+b2Jq KSkgeworCQllcnIgPSBQVFJfRVJSKHNwaW4tPm9iaik7CisJCWdvdG8gZXJyX2h3czsKKwl9CisK KwlpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2xldmVsKHNwaW4tPmh3cywgSTkxNV9DQUNIRV9M TEMpOworCXZhZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoc3Bpbi0+aHdzLCBJOTE1X01B UF9XQik7CisJaWYgKElTX0VSUih2YWRkcikpIHsKKwkJZXJyID0gUFRSX0VSUih2YWRkcik7CisJ CWdvdG8gZXJyX29iajsKKwl9CisJc3Bpbi0+c2Vxbm8gPSBtZW1zZXQodmFkZHIsIDB4ZmYsIFBB R0VfU0laRSk7CisKKwltb2RlID0gaTkxNV9jb2hlcmVudF9tYXBfdHlwZShpOTE1KTsKKwl2YWRk ciA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKHNwaW4tPm9iaiwgbW9kZSk7CisJaWYgKElTX0VS Uih2YWRkcikpIHsKKwkJZXJyID0gUFRSX0VSUih2YWRkcik7CisJCWdvdG8gZXJyX3VucGluX2h3 czsKKwl9CisJc3Bpbi0+YmF0Y2ggPSB2YWRkcjsKKworCXJldHVybiAwOworCitlcnJfdW5waW5f aHdzOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoc3Bpbi0+aHdzKTsKK2Vycl9vYmo6CisJ aTkxNV9nZW1fb2JqZWN0X3B1dChzcGluLT5vYmopOworZXJyX2h3czoKKwlpOTE1X2dlbV9vYmpl Y3RfcHV0KHNwaW4tPmh3cyk7CitlcnI6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHVuc2ln bmVkIGludCBzZXFub19vZmZzZXQodTY0IGZlbmNlKQoreworCXJldHVybiBvZmZzZXRfaW5fcGFn ZShzaXplb2YodTMyKSAqIGZlbmNlKTsKK30KKworc3RhdGljIHU2NCBod3NfYWRkcmVzcyhjb25z dCBzdHJ1Y3QgaTkxNV92bWEgKmh3cywKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxKQoreworCXJldHVybiBod3MtPm5vZGUuc3RhcnQgKyBzZXFub19vZmZzZXQocnEtPmZl bmNlLmNvbnRleHQpOworfQorCitzdGF0aWMgaW50IGVtaXRfcmVjdXJzZV9iYXRjaChzdHJ1Y3Qg aWd0X3NwaW5uZXIgKnNwaW4sCisJCQkgICAgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJ CSAgICAgIHUzMiBhcmJpdHJhdGlvbl9jb21tYW5kKQoreworCXN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtID0gJnJxLT5nZW1fY29udGV4dC0+cHBndHQtPnZtOworCXN0cnVjdCBpOTE1X3Zt YSAqaHdzLCAqdm1hOworCXUzMiAqYmF0Y2g7CisJaW50IGVycjsKKworCXZtYSA9IGk5MTVfdm1h X2luc3RhbmNlKHNwaW4tPm9iaiwgdm0sIE5VTEwpOworCWlmIChJU19FUlIodm1hKSkKKwkJcmV0 dXJuIFBUUl9FUlIodm1hKTsKKworCWh3cyA9IGk5MTVfdm1hX2luc3RhbmNlKHNwaW4tPmh3cywg dm0sIE5VTEwpOworCWlmIChJU19FUlIoaHdzKSkKKwkJcmV0dXJuIFBUUl9FUlIoaHdzKTsKKwor CWVyciA9IGk5MTVfdm1hX3Bpbih2bWEsIDAsIDAsIFBJTl9VU0VSKTsKKwlpZiAoZXJyKQorCQly ZXR1cm4gZXJyOworCisJZXJyID0gaTkxNV92bWFfcGluKGh3cywgMCwgMCwgUElOX1VTRVIpOwor CWlmIChlcnIpCisJCWdvdG8gdW5waW5fdm1hOworCisJZXJyID0gaTkxNV92bWFfbW92ZV90b19h Y3RpdmUodm1hLCBycSwgMCk7CisJaWYgKGVycikKKwkJZ290byB1bnBpbl9od3M7CisKKwlpZiAo IWk5MTVfZ2VtX29iamVjdF9oYXNfYWN0aXZlX3JlZmVyZW5jZSh2bWEtPm9iaikpIHsKKwkJaTkx NV9nZW1fb2JqZWN0X2dldCh2bWEtPm9iaik7CisJCWk5MTVfZ2VtX29iamVjdF9zZXRfYWN0aXZl X3JlZmVyZW5jZSh2bWEtPm9iaik7CisJfQorCisJZXJyID0gaTkxNV92bWFfbW92ZV90b19hY3Rp dmUoaHdzLCBycSwgMCk7CisJaWYgKGVycikKKwkJZ290byB1bnBpbl9od3M7CisKKwlpZiAoIWk5 MTVfZ2VtX29iamVjdF9oYXNfYWN0aXZlX3JlZmVyZW5jZShod3MtPm9iaikpIHsKKwkJaTkxNV9n ZW1fb2JqZWN0X2dldChod3MtPm9iaik7CisJCWk5MTVfZ2VtX29iamVjdF9zZXRfYWN0aXZlX3Jl ZmVyZW5jZShod3MtPm9iaik7CisJfQorCisJYmF0Y2ggPSBzcGluLT5iYXRjaDsKKworCSpiYXRj aCsrID0gTUlfU1RPUkVfRFdPUkRfSU1NX0dFTjQ7CisJKmJhdGNoKysgPSBsb3dlcl8zMl9iaXRz KGh3c19hZGRyZXNzKGh3cywgcnEpKTsKKwkqYmF0Y2grKyA9IHVwcGVyXzMyX2JpdHMoaHdzX2Fk ZHJlc3MoaHdzLCBycSkpOworCSpiYXRjaCsrID0gcnEtPmZlbmNlLnNlcW5vOworCisJKmJhdGNo KysgPSBhcmJpdHJhdGlvbl9jb21tYW5kOworCisJKmJhdGNoKysgPSBNSV9CQVRDSF9CVUZGRVJf U1RBUlQgfCAxIDw8IDggfCAxOworCSpiYXRjaCsrID0gbG93ZXJfMzJfYml0cyh2bWEtPm5vZGUu c3RhcnQpOworCSpiYXRjaCsrID0gdXBwZXJfMzJfYml0cyh2bWEtPm5vZGUuc3RhcnQpOworCSpi YXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsgLyogbm90IHJlYWNoZWQgKi8KKworCWk5MTVf Z2VtX2NoaXBzZXRfZmx1c2goc3Bpbi0+aTkxNSk7CisKKwllcnIgPSBycS0+ZW5naW5lLT5lbWl0 X2JiX3N0YXJ0KHJxLCB2bWEtPm5vZGUuc3RhcnQsIFBBR0VfU0laRSwgMCk7CisKK3VucGluX2h3 czoKKwlpOTE1X3ZtYV91bnBpbihod3MpOwordW5waW5fdm1hOgorCWk5MTVfdm1hX3VucGluKHZt YSk7CisJcmV0dXJuIGVycjsKK30KKworc3RydWN0IGk5MTVfcmVxdWVzdCAqCitpZ3Rfc3Bpbm5l cl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgaWd0X3NwaW5uZXIgKnNwaW4sCisJCQkgICBzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkJICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLAorCQkJICAgdTMyIGFyYml0cmF0aW9uX2NvbW1hbmQpCit7CisJc3RydWN0IGk5MTVfcmVx dWVzdCAqcnE7CisJaW50IGVycjsKKworCXJxID0gaTkxNV9yZXF1ZXN0X2FsbG9jKGVuZ2luZSwg Y3R4KTsKKwlpZiAoSVNfRVJSKHJxKSkKKwkJcmV0dXJuIHJxOworCisJZXJyID0gZW1pdF9yZWN1 cnNlX2JhdGNoKHNwaW4sIHJxLCBhcmJpdHJhdGlvbl9jb21tYW5kKTsKKwlpZiAoZXJyKSB7CisJ CWk5MTVfcmVxdWVzdF9hZGQocnEpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCXJl dHVybiBycTsKK30KKworc3RhdGljIHUzMgoraHdzX3NlcW5vKGNvbnN0IHN0cnVjdCBpZ3Rfc3Bp bm5lciAqc3BpbiwgY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCit7CisJdTMyICpzZXFu byA9IHNwaW4tPnNlcW5vICsgc2Vxbm9fb2Zmc2V0KHJxLT5mZW5jZS5jb250ZXh0KTsKKworCXJl dHVybiBSRUFEX09OQ0UoKnNlcW5vKTsKK30KKwordm9pZCBpZ3Rfc3Bpbm5lcl9lbmQoc3RydWN0 IGlndF9zcGlubmVyICpzcGluKQoreworCSpzcGluLT5iYXRjaCA9IE1JX0JBVENIX0JVRkZFUl9F TkQ7CisJaTkxNV9nZW1fY2hpcHNldF9mbHVzaChzcGluLT5pOTE1KTsKK30KKwordm9pZCBpZ3Rf c3Bpbm5lcl9maW5pKHN0cnVjdCBpZ3Rfc3Bpbm5lciAqc3BpbikKK3sKKwlpZ3Rfc3Bpbm5lcl9l bmQoc3Bpbik7CisKKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKHNwaW4tPm9iaik7CisJaTkx NV9nZW1fb2JqZWN0X3B1dChzcGluLT5vYmopOworCisJaTkxNV9nZW1fb2JqZWN0X3VucGluX21h cChzcGluLT5od3MpOworCWk5MTVfZ2VtX29iamVjdF9wdXQoc3Bpbi0+aHdzKTsKK30KKworYm9v bCBpZ3Rfd2FpdF9mb3Jfc3Bpbm5lcihzdHJ1Y3QgaWd0X3NwaW5uZXIgKnNwaW4sIHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxKQoreworCWlmICghd2FpdF9ldmVudF90aW1lb3V0KHJxLT5leGVjdXRl LAorCQkJCVJFQURfT05DRShycS0+Z2xvYmFsX3NlcW5vKSwKKwkJCQltc2Vjc190b19qaWZmaWVz KDEwKSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiAhKHdhaXRfZm9yX3VzKGk5MTVfc2Vx bm9fcGFzc2VkKGh3c19zZXFubyhzcGluLCBycSksCisJCQkJCSAgICAgICBycS0+ZmVuY2Uuc2Vx bm8pLAorCQkJICAgICAxMCkgJiYKKwkJIHdhaXRfZm9yKGk5MTVfc2Vxbm9fcGFzc2VkKGh3c19z ZXFubyhzcGluLCBycSksCisJCQkJCSAgICBycS0+ZmVuY2Uuc2Vxbm8pLAorCQkJICAxMDAwKSk7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaWd0X3NwaW5u ZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzkxNzc3Yzc2ZGM3Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lndF9zcGlubmVyLmgK QEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKyAq CisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYg X19JOTE1X1NFTEZURVNUU19JR1RfU1BJTk5FUl9IX18KKyNkZWZpbmUgX19JOTE1X1NFTEZURVNU U19JR1RfU1BJTk5FUl9IX18KKworI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIKKworI2lu Y2x1ZGUgIi4uL2k5MTVfZHJ2LmgiCisjaW5jbHVkZSAiLi4vaTkxNV9yZXF1ZXN0LmgiCisjaW5j bHVkZSAiLi4vaW50ZWxfcmluZ2J1ZmZlci5oIgorI2luY2x1ZGUgIi4uL2k5MTVfZ2VtX2NvbnRl eHQuaCIKKworc3RydWN0IGlndF9zcGlubmVyIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqaHdzOworCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmo7CisJdTMyICpiYXRjaDsKKwl2b2lkICpzZXFubzsKK307CisKK2lu dCBpZ3Rfc3Bpbm5lcl9pbml0KHN0cnVjdCBpZ3Rfc3Bpbm5lciAqc3Bpbiwgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpOwordm9pZCBpZ3Rfc3Bpbm5lcl9maW5pKHN0cnVjdCBpZ3Rfc3Bp bm5lciAqc3Bpbik7CisKK3N0cnVjdCBpOTE1X3JlcXVlc3QgKgoraWd0X3NwaW5uZXJfY3JlYXRl X3JlcXVlc3Qoc3RydWN0IGlndF9zcGlubmVyICpzcGluLAorCQkJICAgc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCwKKwkJCSAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJ CSAgIHUzMiBhcmJpdHJhdGlvbl9jb21tYW5kKTsKK3ZvaWQgaWd0X3NwaW5uZXJfZW5kKHN0cnVj dCBpZ3Rfc3Bpbm5lciAqc3Bpbik7CisKK2Jvb2wgaWd0X3dhaXRfZm9yX3NwaW5uZXIoc3RydWN0 IGlndF9zcGlubmVyICpzcGluLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSk7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2xyYy5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2xyYy5jCmluZGV4IDk0ZmMwZTVj ODc2Ni4uY2E0NjFlM2E1ZjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvaW50ZWxfbHJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lu dGVsX2xyYy5jCkBAIC02LDIxNiArNiwxOCBAQAogCiAjaW5jbHVkZSAiLi4vaTkxNV9zZWxmdGVz dC5oIgogI2luY2x1ZGUgImlndF9mbHVzaF90ZXN0LmgiCisjaW5jbHVkZSAiaWd0X3NwaW5uZXIu aCIKICNpbmNsdWRlICJpOTE1X3JhbmRvbS5oIgogCiAjaW5jbHVkZSAibW9ja19jb250ZXh0Lmgi CiAKLXN0cnVjdCBzcGlubmVyIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqaHdzOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmo7Ci0JdTMyICpiYXRjaDsKLQl2b2lkICpzZXFubzsKLX07Ci0KLXN0YXRpYyBpbnQg c3Bpbm5lcl9pbml0KHN0cnVjdCBzcGlubmVyICpzcGluLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkKLXsKLQl1bnNpZ25lZCBpbnQgbW9kZTsKLQl2b2lkICp2YWRkcjsKLQlpbnQgZXJy OwotCi0JR0VNX0JVR19PTihJTlRFTF9HRU4oaTkxNSkgPCA4KTsKLQotCW1lbXNldChzcGluLCAw LCBzaXplb2YoKnNwaW4pKTsKLQlzcGluLT5pOTE1ID0gaTkxNTsKLQotCXNwaW4tPmh3cyA9IGk5 MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoaTkxNSwgUEFHRV9TSVpFKTsKLQlpZiAoSVNf RVJSKHNwaW4tPmh3cykpIHsKLQkJZXJyID0gUFRSX0VSUihzcGluLT5od3MpOwotCQlnb3RvIGVy cjsKLQl9Ci0KLQlzcGluLT5vYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKGk5 MTUsIFBBR0VfU0laRSk7Ci0JaWYgKElTX0VSUihzcGluLT5vYmopKSB7Ci0JCWVyciA9IFBUUl9F UlIoc3Bpbi0+b2JqKTsKLQkJZ290byBlcnJfaHdzOwotCX0KLQotCWk5MTVfZ2VtX29iamVjdF9z ZXRfY2FjaGVfbGV2ZWwoc3Bpbi0+aHdzLCBJOTE1X0NBQ0hFX0xMQyk7Ci0JdmFkZHIgPSBpOTE1 X2dlbV9vYmplY3RfcGluX21hcChzcGluLT5od3MsIEk5MTVfTUFQX1dCKTsKLQlpZiAoSVNfRVJS KHZhZGRyKSkgewotCQllcnIgPSBQVFJfRVJSKHZhZGRyKTsKLQkJZ290byBlcnJfb2JqOwotCX0K LQlzcGluLT5zZXFubyA9IG1lbXNldCh2YWRkciwgMHhmZiwgUEFHRV9TSVpFKTsKLQotCW1vZGUg PSBpOTE1X2NvaGVyZW50X21hcF90eXBlKGk5MTUpOwotCXZhZGRyID0gaTkxNV9nZW1fb2JqZWN0 X3Bpbl9tYXAoc3Bpbi0+b2JqLCBtb2RlKTsKLQlpZiAoSVNfRVJSKHZhZGRyKSkgewotCQllcnIg PSBQVFJfRVJSKHZhZGRyKTsKLQkJZ290byBlcnJfdW5waW5faHdzOwotCX0KLQlzcGluLT5iYXRj aCA9IHZhZGRyOwotCi0JcmV0dXJuIDA7Ci0KLWVycl91bnBpbl9od3M6Ci0JaTkxNV9nZW1fb2Jq ZWN0X3VucGluX21hcChzcGluLT5od3MpOwotZXJyX29iajoKLQlpOTE1X2dlbV9vYmplY3RfcHV0 KHNwaW4tPm9iaik7Ci1lcnJfaHdzOgotCWk5MTVfZ2VtX29iamVjdF9wdXQoc3Bpbi0+aHdzKTsK LWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHNlcW5vX29mZnNl dCh1NjQgZmVuY2UpCi17Ci0JcmV0dXJuIG9mZnNldF9pbl9wYWdlKHNpemVvZih1MzIpICogZmVu Y2UpOwotfQotCi1zdGF0aWMgdTY0IGh3c19hZGRyZXNzKGNvbnN0IHN0cnVjdCBpOTE1X3ZtYSAq aHdzLAotCQkgICAgICAgY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCi17Ci0JcmV0dXJu IGh3cy0+bm9kZS5zdGFydCArIHNlcW5vX29mZnNldChycS0+ZmVuY2UuY29udGV4dCk7Ci19Ci0K LXN0YXRpYyBpbnQgZW1pdF9yZWN1cnNlX2JhdGNoKHN0cnVjdCBzcGlubmVyICpzcGluLAotCQkJ ICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCi0JCQkgICAgICB1MzIgYXJiaXRyYXRpb25f Y29tbWFuZCkKLXsKLQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9ICZycS0+Z2VtX2Nv bnRleHQtPnBwZ3R0LT52bTsKLQlzdHJ1Y3QgaTkxNV92bWEgKmh3cywgKnZtYTsKLQl1MzIgKmJh dGNoOwotCWludCBlcnI7Ci0KLQl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShzcGluLT5vYmosIHZt LCBOVUxMKTsKLQlpZiAoSVNfRVJSKHZtYSkpCi0JCXJldHVybiBQVFJfRVJSKHZtYSk7Ci0KLQlo d3MgPSBpOTE1X3ZtYV9pbnN0YW5jZShzcGluLT5od3MsIHZtLCBOVUxMKTsKLQlpZiAoSVNfRVJS KGh3cykpCi0JCXJldHVybiBQVFJfRVJSKGh3cyk7Ci0KLQllcnIgPSBpOTE1X3ZtYV9waW4odm1h LCAwLCAwLCBQSU5fVVNFUik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGk5 MTVfdm1hX3Bpbihod3MsIDAsIDAsIFBJTl9VU0VSKTsKLQlpZiAoZXJyKQotCQlnb3RvIHVucGlu X3ZtYTsKLQotCWVyciA9IGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHZtYSwgcnEsIDApOwotCWlm IChlcnIpCi0JCWdvdG8gdW5waW5faHdzOwotCi0JaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX2Fj dGl2ZV9yZWZlcmVuY2Uodm1hLT5vYmopKSB7Ci0JCWk5MTVfZ2VtX29iamVjdF9nZXQodm1hLT5v YmopOwotCQlpOTE1X2dlbV9vYmplY3Rfc2V0X2FjdGl2ZV9yZWZlcmVuY2Uodm1hLT5vYmopOwot CX0KLQotCWVyciA9IGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKGh3cywgcnEsIDApOwotCWlmIChl cnIpCi0JCWdvdG8gdW5waW5faHdzOwotCi0JaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX2FjdGl2 ZV9yZWZlcmVuY2UoaHdzLT5vYmopKSB7Ci0JCWk5MTVfZ2VtX29iamVjdF9nZXQoaHdzLT5vYmop OwotCQlpOTE1X2dlbV9vYmplY3Rfc2V0X2FjdGl2ZV9yZWZlcmVuY2UoaHdzLT5vYmopOwotCX0K LQotCWJhdGNoID0gc3Bpbi0+YmF0Y2g7Ci0KLQkqYmF0Y2grKyA9IE1JX1NUT1JFX0RXT1JEX0lN TV9HRU40OwotCSpiYXRjaCsrID0gbG93ZXJfMzJfYml0cyhod3NfYWRkcmVzcyhod3MsIHJxKSk7 Ci0JKmJhdGNoKysgPSB1cHBlcl8zMl9iaXRzKGh3c19hZGRyZXNzKGh3cywgcnEpKTsKLQkqYmF0 Y2grKyA9IHJxLT5mZW5jZS5zZXFubzsKLQotCSpiYXRjaCsrID0gYXJiaXRyYXRpb25fY29tbWFu ZDsKLQotCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4IHwgMTsKLQkq YmF0Y2grKyA9IGxvd2VyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0KTsKLQkqYmF0Y2grKyA9IHVw cGVyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0KTsKLQkqYmF0Y2grKyA9IE1JX0JBVENIX0JVRkZF Ul9FTkQ7IC8qIG5vdCByZWFjaGVkICovCi0KLQlpOTE1X2dlbV9jaGlwc2V0X2ZsdXNoKHNwaW4t Pmk5MTUpOwotCi0JZXJyID0gcnEtPmVuZ2luZS0+ZW1pdF9iYl9zdGFydChycSwgdm1hLT5ub2Rl LnN0YXJ0LCBQQUdFX1NJWkUsIDApOwotCi11bnBpbl9od3M6Ci0JaTkxNV92bWFfdW5waW4oaHdz KTsKLXVucGluX3ZtYToKLQlpOTE1X3ZtYV91bnBpbih2bWEpOwotCXJldHVybiBlcnI7Ci19Ci0K LXN0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKLXNwaW5uZXJfY3JlYXRlX3JlcXVlc3Qoc3Ry dWN0IHNwaW5uZXIgKnNwaW4sCi0JCSAgICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 LAotCQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkgICAgICAgdTMy IGFyYml0cmF0aW9uX2NvbW1hbmQpCi17Ci0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Ci0JaW50 IGVycjsKLQotCXJxID0gaTkxNV9yZXF1ZXN0X2FsbG9jKGVuZ2luZSwgY3R4KTsKLQlpZiAoSVNf RVJSKHJxKSkKLQkJcmV0dXJuIHJxOwotCi0JZXJyID0gZW1pdF9yZWN1cnNlX2JhdGNoKHNwaW4s IHJxLCBhcmJpdHJhdGlvbl9jb21tYW5kKTsKLQlpZiAoZXJyKSB7Ci0JCWk5MTVfcmVxdWVzdF9h ZGQocnEpOwotCQlyZXR1cm4gRVJSX1BUUihlcnIpOwotCX0KLQotCXJldHVybiBycTsKLX0KLQot c3RhdGljIHUzMiBod3Nfc2Vxbm8oY29uc3Qgc3RydWN0IHNwaW5uZXIgKnNwaW4sIGNvbnN0IHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQotewotCXUzMiAqc2Vxbm8gPSBzcGluLT5zZXFubyArIHNl cW5vX29mZnNldChycS0+ZmVuY2UuY29udGV4dCk7Ci0KLQlyZXR1cm4gUkVBRF9PTkNFKCpzZXFu byk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwaW5uZXJfZW5kKHN0cnVjdCBzcGlubmVyICpzcGluKQot ewotCSpzcGluLT5iYXRjaCA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Ci0JaTkxNV9nZW1fY2hpcHNl dF9mbHVzaChzcGluLT5pOTE1KTsKLX0KLQotc3RhdGljIHZvaWQgc3Bpbm5lcl9maW5pKHN0cnVj dCBzcGlubmVyICpzcGluKQotewotCXNwaW5uZXJfZW5kKHNwaW4pOwotCi0JaTkxNV9nZW1fb2Jq ZWN0X3VucGluX21hcChzcGluLT5vYmopOwotCWk5MTVfZ2VtX29iamVjdF9wdXQoc3Bpbi0+b2Jq KTsKLQotCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoc3Bpbi0+aHdzKTsKLQlpOTE1X2dlbV9v YmplY3RfcHV0KHNwaW4tPmh3cyk7Ci19Ci0KLXN0YXRpYyBib29sIHdhaXRfZm9yX3NwaW5uZXIo c3RydWN0IHNwaW5uZXIgKnNwaW4sIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQotewotCWlmICgh d2FpdF9ldmVudF90aW1lb3V0KHJxLT5leGVjdXRlLAotCQkJCVJFQURfT05DRShycS0+Z2xvYmFs X3NlcW5vKSwKLQkJCQltc2Vjc190b19qaWZmaWVzKDEwKSkpCi0JCXJldHVybiBmYWxzZTsKLQot CXJldHVybiAhKHdhaXRfZm9yX3VzKGk5MTVfc2Vxbm9fcGFzc2VkKGh3c19zZXFubyhzcGluLCBy cSksCi0JCQkJCSAgICAgICBycS0+ZmVuY2Uuc2Vxbm8pLAotCQkJICAgICAxMCkgJiYKLQkJIHdh aXRfZm9yKGk5MTVfc2Vxbm9fcGFzc2VkKGh3c19zZXFubyhzcGluLCBycSksCi0JCQkJCSAgICBy cS0+ZmVuY2Uuc2Vxbm8pLAotCQkJICAxMDAwKSk7Ci19Ci0KIHN0YXRpYyBpbnQgbGl2ZV9zYW5p dHljaGVjayh2b2lkICphcmcpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBh cmc7CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwogCXN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHg7CiAJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Ci0Jc3RydWN0IHNwaW5uZXIg c3BpbjsKKwlzdHJ1Y3QgaWd0X3NwaW5uZXIgc3BpbjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAog CWlmICghSEFTX0xPR0lDQUxfUklOR19DT05URVhUUyhpOTE1KSkKQEAgLTIyNCw3ICsyNiw3IEBA IHN0YXRpYyBpbnQgbGl2ZV9zYW5pdHljaGVjayh2b2lkICphcmcpCiAJbXV0ZXhfbG9jaygmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7CiAJaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7CiAKLQlp ZiAoc3Bpbm5lcl9pbml0KCZzcGluLCBpOTE1KSkKKwlpZiAoaWd0X3NwaW5uZXJfaW5pdCgmc3Bp biwgaTkxNSkpCiAJCWdvdG8gZXJyX3VubG9jazsKIAogCWN0eCA9IGtlcm5lbF9jb250ZXh0KGk5 MTUpOwpAQCAtMjM0LDE0ICszNiwxNCBAQCBzdGF0aWMgaW50IGxpdmVfc2FuaXR5Y2hlY2sodm9p ZCAqYXJnKQogCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7CiAJCXN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxOwogCi0JCXJxID0gc3Bpbm5lcl9jcmVhdGVfcmVxdWVzdCgmc3Bpbiwg Y3R4LCBlbmdpbmUsIE1JX05PT1ApOworCQlycSA9IGlndF9zcGlubmVyX2NyZWF0ZV9yZXF1ZXN0 KCZzcGluLCBjdHgsIGVuZ2luZSwgTUlfTk9PUCk7CiAJCWlmIChJU19FUlIocnEpKSB7CiAJCQll cnIgPSBQVFJfRVJSKHJxKTsKIAkJCWdvdG8gZXJyX2N0eDsKIAkJfQogCiAJCWk5MTVfcmVxdWVz dF9hZGQocnEpOwotCQlpZiAoIXdhaXRfZm9yX3NwaW5uZXIoJnNwaW4sIHJxKSkgeworCQlpZiAo IWlndF93YWl0X2Zvcl9zcGlubmVyKCZzcGluLCBycSkpIHsKIAkJCUdFTV9UUkFDRSgic3Bpbm5l ciBmYWlsZWQgdG8gc3RhcnRcbiIpOwogCQkJR0VNX1RSQUNFX0RVTVAoKTsKIAkJCWk5MTVfZ2Vt X3NldF93ZWRnZWQoaTkxNSk7CkBAIC0yNDksNyArNTEsNyBAQCBzdGF0aWMgaW50IGxpdmVfc2Fu aXR5Y2hlY2sodm9pZCAqYXJnKQogCQkJZ290byBlcnJfY3R4OwogCQl9CiAKLQkJc3Bpbm5lcl9l bmQoJnNwaW4pOworCQlpZ3Rfc3Bpbm5lcl9lbmQoJnNwaW4pOwogCQlpZiAoaWd0X2ZsdXNoX3Rl c3QoaTkxNSwgSTkxNV9XQUlUX0xPQ0tFRCkpIHsKIAkJCWVyciA9IC1FSU87CiAJCQlnb3RvIGVy cl9jdHg7CkBAIC0yNjAsNyArNjIsNyBAQCBzdGF0aWMgaW50IGxpdmVfc2FuaXR5Y2hlY2sodm9p ZCAqYXJnKQogZXJyX2N0eDoKIAlrZXJuZWxfY29udGV4dF9jbG9zZShjdHgpOwogZXJyX3NwaW46 Ci0Jc3Bpbm5lcl9maW5pKCZzcGluKTsKKwlpZ3Rfc3Bpbm5lcl9maW5pKCZzcGluKTsKIGVycl91 bmxvY2s6CiAJaWd0X2ZsdXNoX3Rlc3QoaTkxNSwgSTkxNV9XQUlUX0xPQ0tFRCk7CiAJaW50ZWxf cnVudGltZV9wbV9wdXQoaTkxNSk7CkBAIC0yNzIsNyArNzQsNyBAQCBzdGF0aWMgaW50IGxpdmVf cHJlZW1wdCh2b2lkICphcmcpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBh cmc7CiAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eF9oaSwgKmN0eF9sbzsKLQlzdHJ1Y3Qg c3Bpbm5lciBzcGluX2hpLCBzcGluX2xvOworCXN0cnVjdCBpZ3Rfc3Bpbm5lciBzcGluX2hpLCBz cGluX2xvOwogCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKIAllbnVtIGludGVsX2Vu Z2luZV9pZCBpZDsKIAlpbnQgZXJyID0gLUVOT01FTTsKQEAgLTI4MywxMCArODUsMTAgQEAgc3Rh dGljIGludCBsaXZlX3ByZWVtcHQodm9pZCAqYXJnKQogCW11dGV4X2xvY2soJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwogCWludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwogCi0JaWYgKHNwaW5u ZXJfaW5pdCgmc3Bpbl9oaSwgaTkxNSkpCisJaWYgKGlndF9zcGlubmVyX2luaXQoJnNwaW5faGks IGk5MTUpKQogCQlnb3RvIGVycl91bmxvY2s7CiAKLQlpZiAoc3Bpbm5lcl9pbml0KCZzcGluX2xv LCBpOTE1KSkKKwlpZiAoaWd0X3NwaW5uZXJfaW5pdCgmc3Bpbl9sbywgaTkxNSkpCiAJCWdvdG8g ZXJyX3NwaW5faGk7CiAKIAljdHhfaGkgPSBrZXJuZWxfY29udGV4dChpOTE1KTsKQEAgLTMwNCwx NSArMTA2LDE1IEBAIHN0YXRpYyBpbnQgbGl2ZV9wcmVlbXB0KHZvaWQgKmFyZykKIAlmb3JfZWFj aF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewogCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsK IAotCQlycSA9IHNwaW5uZXJfY3JlYXRlX3JlcXVlc3QoJnNwaW5fbG8sIGN0eF9sbywgZW5naW5l LAotCQkJCQkgICAgTUlfQVJCX0NIRUNLKTsKKwkJcnEgPSBpZ3Rfc3Bpbm5lcl9jcmVhdGVfcmVx dWVzdCgmc3Bpbl9sbywgY3R4X2xvLCBlbmdpbmUsCisJCQkJCQlNSV9BUkJfQ0hFQ0spOwogCQlp ZiAoSVNfRVJSKHJxKSkgewogCQkJZXJyID0gUFRSX0VSUihycSk7CiAJCQlnb3RvIGVycl9jdHhf bG87CiAJCX0KIAogCQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsKLQkJaWYgKCF3YWl0X2Zvcl9zcGlu bmVyKCZzcGluX2xvLCBycSkpIHsKKwkJaWYgKCFpZ3Rfd2FpdF9mb3Jfc3Bpbm5lcigmc3Bpbl9s bywgcnEpKSB7CiAJCQlHRU1fVFJBQ0UoImxvIHNwaW5uZXIgZmFpbGVkIHRvIHN0YXJ0XG4iKTsK IAkJCUdFTV9UUkFDRV9EVU1QKCk7CiAJCQlpOTE1X2dlbV9zZXRfd2VkZ2VkKGk5MTUpOwpAQCAt MzIwLDE2ICsxMjIsMTYgQEAgc3RhdGljIGludCBsaXZlX3ByZWVtcHQodm9pZCAqYXJnKQogCQkJ Z290byBlcnJfY3R4X2xvOwogCQl9CiAKLQkJcnEgPSBzcGlubmVyX2NyZWF0ZV9yZXF1ZXN0KCZz cGluX2hpLCBjdHhfaGksIGVuZ2luZSwKLQkJCQkJICAgIE1JX0FSQl9DSEVDSyk7CisJCXJxID0g aWd0X3NwaW5uZXJfY3JlYXRlX3JlcXVlc3QoJnNwaW5faGksIGN0eF9oaSwgZW5naW5lLAorCQkJ CQkJTUlfQVJCX0NIRUNLKTsKIAkJaWYgKElTX0VSUihycSkpIHsKLQkJCXNwaW5uZXJfZW5kKCZz cGluX2xvKTsKKwkJCWlndF9zcGlubmVyX2VuZCgmc3Bpbl9sbyk7CiAJCQllcnIgPSBQVFJfRVJS KHJxKTsKIAkJCWdvdG8gZXJyX2N0eF9sbzsKIAkJfQogCiAJCWk5MTVfcmVxdWVzdF9hZGQocnEp OwotCQlpZiAoIXdhaXRfZm9yX3NwaW5uZXIoJnNwaW5faGksIHJxKSkgeworCQlpZiAoIWlndF93 YWl0X2Zvcl9zcGlubmVyKCZzcGluX2hpLCBycSkpIHsKIAkJCUdFTV9UUkFDRSgiaGkgc3Bpbm5l ciBmYWlsZWQgdG8gc3RhcnRcbiIpOwogCQkJR0VNX1RSQUNFX0RVTVAoKTsKIAkJCWk5MTVfZ2Vt X3NldF93ZWRnZWQoaTkxNSk7CkBAIC0zMzcsOCArMTM5LDggQEAgc3RhdGljIGludCBsaXZlX3By ZWVtcHQodm9pZCAqYXJnKQogCQkJZ290byBlcnJfY3R4X2xvOwogCQl9CiAKLQkJc3Bpbm5lcl9l bmQoJnNwaW5faGkpOwotCQlzcGlubmVyX2VuZCgmc3Bpbl9sbyk7CisJCWlndF9zcGlubmVyX2Vu ZCgmc3Bpbl9oaSk7CisJCWlndF9zcGlubmVyX2VuZCgmc3Bpbl9sbyk7CiAJCWlmIChpZ3RfZmx1 c2hfdGVzdChpOTE1LCBJOTE1X1dBSVRfTE9DS0VEKSkgewogCQkJZXJyID0gLUVJTzsKIAkJCWdv dG8gZXJyX2N0eF9sbzsKQEAgLTM1MSw5ICsxNTMsOSBAQCBzdGF0aWMgaW50IGxpdmVfcHJlZW1w dCh2b2lkICphcmcpCiBlcnJfY3R4X2hpOgogCWtlcm5lbF9jb250ZXh0X2Nsb3NlKGN0eF9oaSk7 CiBlcnJfc3Bpbl9sbzoKLQlzcGlubmVyX2ZpbmkoJnNwaW5fbG8pOworCWlndF9zcGlubmVyX2Zp bmkoJnNwaW5fbG8pOwogZXJyX3NwaW5faGk6Ci0Jc3Bpbm5lcl9maW5pKCZzcGluX2hpKTsKKwlp Z3Rfc3Bpbm5lcl9maW5pKCZzcGluX2hpKTsKIGVycl91bmxvY2s6CiAJaWd0X2ZsdXNoX3Rlc3Qo aTkxNSwgSTkxNV9XQUlUX0xPQ0tFRCk7CiAJaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSk7CkBA IC0zNjUsNyArMTY3LDcgQEAgc3RhdGljIGludCBsaXZlX2xhdGVfcHJlZW1wdCh2b2lkICphcmcp CiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CiAJc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgKmN0eF9oaSwgKmN0eF9sbzsKLQlzdHJ1Y3Qgc3Bpbm5lciBzcGluX2hpLCBz cGluX2xvOworCXN0cnVjdCBpZ3Rfc3Bpbm5lciBzcGluX2hpLCBzcGluX2xvOwogCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKIAlzdHJ1Y3QgaTkxNV9zY2hlZF9hdHRyIGF0dHIgPSB7 fTsKIAllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKQEAgLTM3NywxMCArMTc5LDEwIEBAIHN0YXRp YyBpbnQgbGl2ZV9sYXRlX3ByZWVtcHQodm9pZCAqYXJnKQogCW11dGV4X2xvY2soJmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwogCWludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwogCi0JaWYgKHNw aW5uZXJfaW5pdCgmc3Bpbl9oaSwgaTkxNSkpCisJaWYgKGlndF9zcGlubmVyX2luaXQoJnNwaW5f aGksIGk5MTUpKQogCQlnb3RvIGVycl91bmxvY2s7CiAKLQlpZiAoc3Bpbm5lcl9pbml0KCZzcGlu X2xvLCBpOTE1KSkKKwlpZiAoaWd0X3NwaW5uZXJfaW5pdCgmc3Bpbl9sbywgaTkxNSkpCiAJCWdv dG8gZXJyX3NwaW5faGk7CiAKIAljdHhfaGkgPSBrZXJuZWxfY29udGV4dChpOTE1KTsKQEAgLTM5 NCwyOCArMTk2LDI5IEBAIHN0YXRpYyBpbnQgbGl2ZV9sYXRlX3ByZWVtcHQodm9pZCAqYXJnKQog CWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7CiAJCXN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxOwogCi0JCXJxID0gc3Bpbm5lcl9jcmVhdGVfcmVxdWVzdCgmc3Bpbl9sbywgY3R4X2xv LCBlbmdpbmUsCi0JCQkJCSAgICBNSV9BUkJfQ0hFQ0spOworCQlycSA9IGlndF9zcGlubmVyX2Ny ZWF0ZV9yZXF1ZXN0KCZzcGluX2xvLCBjdHhfbG8sIGVuZ2luZSwKKwkJCQkJCU1JX0FSQl9DSEVD Syk7CiAJCWlmIChJU19FUlIocnEpKSB7CiAJCQllcnIgPSBQVFJfRVJSKHJxKTsKIAkJCWdvdG8g ZXJyX2N0eF9sbzsKIAkJfQogCiAJCWk5MTVfcmVxdWVzdF9hZGQocnEpOwotCQlpZiAoIXdhaXRf Zm9yX3NwaW5uZXIoJnNwaW5fbG8sIHJxKSkgeworCQlpZiAoIWlndF93YWl0X2Zvcl9zcGlubmVy KCZzcGluX2xvLCBycSkpIHsKIAkJCXByX2VycigiRmlyc3QgY29udGV4dCBmYWlsZWQgdG8gc3Rh cnRcbiIpOwogCQkJZ290byBlcnJfd2VkZ2VkOwogCQl9CiAKLQkJcnEgPSBzcGlubmVyX2NyZWF0 ZV9yZXF1ZXN0KCZzcGluX2hpLCBjdHhfaGksIGVuZ2luZSwgTUlfTk9PUCk7CisJCXJxID0gaWd0 X3NwaW5uZXJfY3JlYXRlX3JlcXVlc3QoJnNwaW5faGksIGN0eF9oaSwgZW5naW5lLAorCQkJCQkJ TUlfTk9PUCk7CiAJCWlmIChJU19FUlIocnEpKSB7Ci0JCQlzcGlubmVyX2VuZCgmc3Bpbl9sbyk7 CisJCQlpZ3Rfc3Bpbm5lcl9lbmQoJnNwaW5fbG8pOwogCQkJZXJyID0gUFRSX0VSUihycSk7CiAJ CQlnb3RvIGVycl9jdHhfbG87CiAJCX0KIAogCQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsKLQkJaWYg KHdhaXRfZm9yX3NwaW5uZXIoJnNwaW5faGksIHJxKSkgeworCQlpZiAoaWd0X3dhaXRfZm9yX3Nw aW5uZXIoJnNwaW5faGksIHJxKSkgewogCQkJcHJfZXJyKCJTZWNvbmQgY29udGV4dCBvdmVydG9v ayBmaXJzdD9cbiIpOwogCQkJZ290byBlcnJfd2VkZ2VkOwogCQl9CkBAIC00MjMsMTQgKzIyNiwx NCBAQCBzdGF0aWMgaW50IGxpdmVfbGF0ZV9wcmVlbXB0KHZvaWQgKmFyZykKIAkJYXR0ci5wcmlv cml0eSA9IEk5MTVfVVNFUl9QUklPUklUWShJOTE1X1BSSU9SSVRZX01BWCk7CiAJCWVuZ2luZS0+ c2NoZWR1bGUocnEsICZhdHRyKTsKIAotCQlpZiAoIXdhaXRfZm9yX3NwaW5uZXIoJnNwaW5faGks IHJxKSkgeworCQlpZiAoIWlndF93YWl0X2Zvcl9zcGlubmVyKCZzcGluX2hpLCBycSkpIHsKIAkJ CXByX2VycigiSGlnaCBwcmlvcml0eSBjb250ZXh0IGZhaWxlZCB0byBwcmVlbXB0IHRoZSBsb3cg cHJpb3JpdHkgY29udGV4dFxuIik7CiAJCQlHRU1fVFJBQ0VfRFVNUCgpOwogCQkJZ290byBlcnJf d2VkZ2VkOwogCQl9CiAKLQkJc3Bpbm5lcl9lbmQoJnNwaW5faGkpOwotCQlzcGlubmVyX2VuZCgm c3Bpbl9sbyk7CisJCWlndF9zcGlubmVyX2VuZCgmc3Bpbl9oaSk7CisJCWlndF9zcGlubmVyX2Vu ZCgmc3Bpbl9sbyk7CiAJCWlmIChpZ3RfZmx1c2hfdGVzdChpOTE1LCBJOTE1X1dBSVRfTE9DS0VE KSkgewogCQkJZXJyID0gLUVJTzsKIAkJCWdvdG8gZXJyX2N0eF9sbzsKQEAgLTQ0Myw5ICsyNDYs OSBAQCBzdGF0aWMgaW50IGxpdmVfbGF0ZV9wcmVlbXB0KHZvaWQgKmFyZykKIGVycl9jdHhfaGk6 CiAJa2VybmVsX2NvbnRleHRfY2xvc2UoY3R4X2hpKTsKIGVycl9zcGluX2xvOgotCXNwaW5uZXJf ZmluaSgmc3Bpbl9sbyk7CisJaWd0X3NwaW5uZXJfZmluaSgmc3Bpbl9sbyk7CiBlcnJfc3Bpbl9o aToKLQlzcGlubmVyX2ZpbmkoJnNwaW5faGkpOworCWlndF9zcGlubmVyX2ZpbmkoJnNwaW5faGkp OwogZXJyX3VubG9jazoKIAlpZ3RfZmx1c2hfdGVzdChpOTE1LCBJOTE1X1dBSVRfTE9DS0VEKTsK IAlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1KTsKQEAgLTQ1Myw4ICsyNTYsOCBAQCBzdGF0aWMg aW50IGxpdmVfbGF0ZV9wcmVlbXB0KHZvaWQgKmFyZykKIAlyZXR1cm4gZXJyOwogCiBlcnJfd2Vk Z2VkOgotCXNwaW5uZXJfZW5kKCZzcGluX2hpKTsKLQlzcGlubmVyX2VuZCgmc3Bpbl9sbyk7CisJ aWd0X3NwaW5uZXJfZW5kKCZzcGluX2hpKTsKKwlpZ3Rfc3Bpbm5lcl9lbmQoJnNwaW5fbG8pOwog CWk5MTVfZ2VtX3NldF93ZWRnZWQoaTkxNSk7CiAJZXJyID0gLUVJTzsKIAlnb3RvIGVycl9jdHhf bG87CkBAIC00NjQsNyArMjY3LDcgQEAgc3RhdGljIGludCBsaXZlX3ByZWVtcHRfaGFuZyh2b2lk ICphcmcpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CiAJc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKmN0eF9oaSwgKmN0eF9sbzsKLQlzdHJ1Y3Qgc3Bpbm5lciBzcGlu X2hpLCBzcGluX2xvOworCXN0cnVjdCBpZ3Rfc3Bpbm5lciBzcGluX2hpLCBzcGluX2xvOwogCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKIAllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsK IAlpbnQgZXJyID0gLUVOT01FTTsKQEAgLTQ3OCwxMCArMjgxLDEwIEBAIHN0YXRpYyBpbnQgbGl2 ZV9wcmVlbXB0X2hhbmcodm9pZCAqYXJnKQogCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3Rf bXV0ZXgpOwogCWludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwogCi0JaWYgKHNwaW5uZXJfaW5p dCgmc3Bpbl9oaSwgaTkxNSkpCisJaWYgKGlndF9zcGlubmVyX2luaXQoJnNwaW5faGksIGk5MTUp KQogCQlnb3RvIGVycl91bmxvY2s7CiAKLQlpZiAoc3Bpbm5lcl9pbml0KCZzcGluX2xvLCBpOTE1 KSkKKwlpZiAoaWd0X3NwaW5uZXJfaW5pdCgmc3Bpbl9sbywgaTkxNSkpCiAJCWdvdG8gZXJyX3Nw aW5faGk7CiAKIAljdHhfaGkgPSBrZXJuZWxfY29udGV4dChpOTE1KTsKQEAgLTUwMCwxNSArMzAz LDE1IEBAIHN0YXRpYyBpbnQgbGl2ZV9wcmVlbXB0X2hhbmcodm9pZCAqYXJnKQogCQlpZiAoIWlu dGVsX2VuZ2luZV9oYXNfcHJlZW1wdGlvbihlbmdpbmUpKQogCQkJY29udGludWU7CiAKLQkJcnEg PSBzcGlubmVyX2NyZWF0ZV9yZXF1ZXN0KCZzcGluX2xvLCBjdHhfbG8sIGVuZ2luZSwKLQkJCQkJ ICAgIE1JX0FSQl9DSEVDSyk7CisJCXJxID0gaWd0X3NwaW5uZXJfY3JlYXRlX3JlcXVlc3QoJnNw aW5fbG8sIGN0eF9sbywgZW5naW5lLAorCQkJCQkJTUlfQVJCX0NIRUNLKTsKIAkJaWYgKElTX0VS UihycSkpIHsKIAkJCWVyciA9IFBUUl9FUlIocnEpOwogCQkJZ290byBlcnJfY3R4X2xvOwogCQl9 CiAKIAkJaTkxNV9yZXF1ZXN0X2FkZChycSk7Ci0JCWlmICghd2FpdF9mb3Jfc3Bpbm5lcigmc3Bp bl9sbywgcnEpKSB7CisJCWlmICghaWd0X3dhaXRfZm9yX3NwaW5uZXIoJnNwaW5fbG8sIHJxKSkg ewogCQkJR0VNX1RSQUNFKCJsbyBzcGlubmVyIGZhaWxlZCB0byBzdGFydFxuIik7CiAJCQlHRU1f VFJBQ0VfRFVNUCgpOwogCQkJaTkxNV9nZW1fc2V0X3dlZGdlZChpOTE1KTsKQEAgLTUxNiwxMCAr MzE5LDEwIEBAIHN0YXRpYyBpbnQgbGl2ZV9wcmVlbXB0X2hhbmcodm9pZCAqYXJnKQogCQkJZ290 byBlcnJfY3R4X2xvOwogCQl9CiAKLQkJcnEgPSBzcGlubmVyX2NyZWF0ZV9yZXF1ZXN0KCZzcGlu X2hpLCBjdHhfaGksIGVuZ2luZSwKLQkJCQkJICAgIE1JX0FSQl9DSEVDSyk7CisJCXJxID0gaWd0 X3NwaW5uZXJfY3JlYXRlX3JlcXVlc3QoJnNwaW5faGksIGN0eF9oaSwgZW5naW5lLAorCQkJCQkJ TUlfQVJCX0NIRUNLKTsKIAkJaWYgKElTX0VSUihycSkpIHsKLQkJCXNwaW5uZXJfZW5kKCZzcGlu X2xvKTsKKwkJCWlndF9zcGlubmVyX2VuZCgmc3Bpbl9sbyk7CiAJCQllcnIgPSBQVFJfRVJSKHJx KTsKIAkJCWdvdG8gZXJyX2N0eF9sbzsKIAkJfQpAQCAtNTQ0LDcgKzM0Nyw3IEBAIHN0YXRpYyBp bnQgbGl2ZV9wcmVlbXB0X2hhbmcodm9pZCAqYXJnKQogCiAJCWVuZ2luZS0+ZXhlY2xpc3RzLnBy ZWVtcHRfaGFuZy5pbmplY3RfaGFuZyA9IGZhbHNlOwogCi0JCWlmICghd2FpdF9mb3Jfc3Bpbm5l cigmc3Bpbl9oaSwgcnEpKSB7CisJCWlmICghaWd0X3dhaXRfZm9yX3NwaW5uZXIoJnNwaW5faGks IHJxKSkgewogCQkJR0VNX1RSQUNFKCJoaSBzcGlubmVyIGZhaWxlZCB0byBzdGFydFxuIik7CiAJ CQlHRU1fVFJBQ0VfRFVNUCgpOwogCQkJaTkxNV9nZW1fc2V0X3dlZGdlZChpOTE1KTsKQEAgLTU1 Miw4ICszNTUsOCBAQCBzdGF0aWMgaW50IGxpdmVfcHJlZW1wdF9oYW5nKHZvaWQgKmFyZykKIAkJ CWdvdG8gZXJyX2N0eF9sbzsKIAkJfQogCi0JCXNwaW5uZXJfZW5kKCZzcGluX2hpKTsKLQkJc3Bp bm5lcl9lbmQoJnNwaW5fbG8pOworCQlpZ3Rfc3Bpbm5lcl9lbmQoJnNwaW5faGkpOworCQlpZ3Rf c3Bpbm5lcl9lbmQoJnNwaW5fbG8pOwogCQlpZiAoaWd0X2ZsdXNoX3Rlc3QoaTkxNSwgSTkxNV9X QUlUX0xPQ0tFRCkpIHsKIAkJCWVyciA9IC1FSU87CiAJCQlnb3RvIGVycl9jdHhfbG87CkBAIC01 NjYsOSArMzY5LDkgQEAgc3RhdGljIGludCBsaXZlX3ByZWVtcHRfaGFuZyh2b2lkICphcmcpCiBl cnJfY3R4X2hpOgogCWtlcm5lbF9jb250ZXh0X2Nsb3NlKGN0eF9oaSk7CiBlcnJfc3Bpbl9sbzoK LQlzcGlubmVyX2ZpbmkoJnNwaW5fbG8pOworCWlndF9zcGlubmVyX2ZpbmkoJnNwaW5fbG8pOwog ZXJyX3NwaW5faGk6Ci0Jc3Bpbm5lcl9maW5pKCZzcGluX2hpKTsKKwlpZ3Rfc3Bpbm5lcl9maW5p KCZzcGluX2hpKTsKIGVycl91bmxvY2s6CiAJaWd0X2ZsdXNoX3Rlc3QoaTkxNSwgSTkxNV9XQUlU X0xPQ0tFRCk7CiAJaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSk7Ci0tIAoyLjE5LjEKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=