From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH v5 2/2] drm/i915: add in-kernel blitter client Date: Tue, 28 May 2019 20:57:24 +0100 Message-ID: <20190528195724.2786-2-matthew.auld@intel.com> References: <20190528195724.2786-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1541E6E061 for ; Tue, 28 May 2019 19:57:27 +0000 (UTC) In-Reply-To: <20190528195724.2786-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 Cc: CQ Tang List-Id: intel-gfx@lists.freedesktop.org VGhlIHBsYW4gaXMgdG8gdXNlIHRoZSBibGl0dGVyIGVuZ2luZSBmb3IgYXN5bmMgb2JqZWN0IGNs ZWFyaW5nIHdoZW4KdXNpbmcgbG9jYWwgbWVtb3J5LCBidXQgYmVmb3JlIHdlIGNhbiBtb3ZlIHRo ZSB3b3JrZXIgdG8gZ2V0X3BhZ2VzKCkgd2UKaGF2ZSB0byBmaXJzdCB0YW1lIHNvbWUgbW9yZSBv ZiBvdXIgc3RydWN0X211dGV4IHVzYWdlLiBXaXRoIHRoaXMgaW4KbWluZCB3ZSBzaG91bGQgYmUg YWJsZSB0byB1cHN0cmVhbSB0aGUgb2JqZWN0IGNsZWFyaW5nIGFzIHNvbWUKc2VsZnRlc3RzLCB3 aGljaCBzaG91bGQgc2VydmUgYXMgYSBndWluZWEgcGlnIGZvciB0aGUgb25nb2luZyBsb2NraW5n CnJld29yayBhbmQgdXBjb21pbmcgYXN5bmMgZ2V0X3BhZ2VzKCkgZnJhbWV3b3JrLgoKU2lnbmVk LW9mZi1ieTogTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgpDYzogQ1EgVGFu ZyA8Y3EudGFuZ0BpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg ICAgICAgICAgICAgICAgIHwgICAyICsKIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2Ns aWVudF9ibHQuYyAgICB8IDMwNiArKysrKysrKysrKysrKysrKysKIC4uLi9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuaCAgICB8ICAyMSArKwogLi4uL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fb2JqZWN0X2JsdC5jICAgIHwgMTA5ICsrKysrKysKIC4uLi9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF9ibHQuaCAgICB8ICAyNCArKwogLi4uL2k5MTUvZ2VtL3Nl bGZ0ZXN0cy9pOTE1X2dlbV9jbGllbnRfYmx0LmMgIHwgMTI3ICsrKysrKysrCiAuLi4vaTkxNS9n ZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdF9ibHQuYyAgfCAxMTEgKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmggIHwgICAxICsKIC4uLi9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oICB8ICAgMiArCiA5IGZpbGVzIGNo YW5nZWQsIDcwMyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X2JsdC5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVj dF9ibHQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxm dGVzdHMvaTkxNV9nZW1fY2xpZW50X2JsdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3RfYmx0LmMKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCmluZGV4IDgzNTg4ZTk4NDBmOC4uYTc4NTBiYmZmYmUwIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZQpAQCAtOTAsNiArOTAsNyBAQCBvYmoteSArPSBnZW0vCiBnZW0teSArPSBcCiAJZ2Vt L2k5MTVfZ2VtX2J1c3kubyBcCiAJZ2VtL2k5MTVfZ2VtX2NsZmx1c2gubyBcCisJZ2VtL2k5MTVf Z2VtX2NsaWVudF9ibHQubyBcCiAJZ2VtL2k5MTVfZ2VtX2NvbnRleHQubyBcCiAJZ2VtL2k5MTVf Z2VtX2RtYWJ1Zi5vIFwKIAlnZW0vaTkxNV9nZW1fZG9tYWluLm8gXApAQCAtOTcsNiArOTgsNyBA QCBnZW0teSArPSBcCiAJZ2VtL2k5MTVfZ2VtX2ZlbmNlLm8gXAogCWdlbS9pOTE1X2dlbV9pbnRl cm5hbC5vIFwKIAlnZW0vaTkxNV9nZW1fb2JqZWN0Lm8gXAorCWdlbS9pOTE1X2dlbV9vYmplY3Rf Ymx0Lm8gXAogCWdlbS9pOTE1X2dlbV9tbWFuLm8gXAogCWdlbS9pOTE1X2dlbV9wYWdlcy5vIFwK IAlnZW0vaTkxNV9nZW1fcGh5cy5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fY2xpZW50X2JsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uMmQ4Y2YyOWE1Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuYwpAQCAtMCwwICsxLDMwNiBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCisgKi8KKyNpbmNsdWRlICJpOTE1X2dlbV9jbGllbnRfYmx0LmgiCisKKyNpbmNsdWRl ICJpOTE1X2dlbV9vYmplY3RfYmx0LmgiCisjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCisKK3N0cnVj dCBpOTE1X3NsZWV2ZSB7CisJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOworCXN0cnVjdCBpOTE1 X3BhZ2Vfc2l6ZXMgcGFnZV9zaXplczsKK307CisKK3N0YXRpYyBpbnQgdm1hX3NldF9wYWdlcyhz dHJ1Y3QgaTkxNV92bWEgKnZtYSkKK3sKKwlzdHJ1Y3QgaTkxNV9zbGVldmUgKnNsZWV2ZSA9IHZt YS0+cHJpdmF0ZTsKKworCXZtYS0+cGFnZXMgPSBzbGVldmUtPnBhZ2VzOworCXZtYS0+cGFnZV9z aXplcyA9IHNsZWV2ZS0+cGFnZV9zaXplczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCB2bWFfY2xlYXJfcGFnZXMoc3RydWN0IGk5MTVfdm1hICp2bWEpCit7CisJR0VNX0JVR19PTigh dm1hLT5wYWdlcyk7CisJdm1hLT5wYWdlcyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdm1hX2Jp bmQoc3RydWN0IGk5MTVfdm1hICp2bWEsCisJCSAgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2Fj aGVfbGV2ZWwsCisJCSAgICB1MzIgZmxhZ3MpCit7CisJcmV0dXJuIHZtYS0+dm0tPnZtYV9vcHMu YmluZF92bWEodm1hLCBjYWNoZV9sZXZlbCwgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB2bWFf dW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQoreworCXZtYS0+dm0tPnZtYV9vcHMudW5iaW5k X3ZtYSh2bWEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfdm1hX29wcyBwcm94eV92 bWFfb3BzID0geworCS5zZXRfcGFnZXMgPSB2bWFfc2V0X3BhZ2VzLAorCS5jbGVhcl9wYWdlcyA9 IHZtYV9jbGVhcl9wYWdlcywKKwkuYmluZF92bWEgPSB2bWFfYmluZCwKKwkudW5iaW5kX3ZtYSA9 IHZtYV91bmJpbmQsCit9OworCitzdGF0aWMgc3RydWN0IGk5MTVfc2xlZXZlICpjcmVhdGVfc2xl ZXZlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJCQkgc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkJIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCisJCQkJCSBz dHJ1Y3QgaTkxNV9wYWdlX3NpemVzICpwYWdlX3NpemVzKQoreworCXN0cnVjdCBpOTE1X3NsZWV2 ZSAqc2xlZXZlOworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCWludCBlcnI7CisKKwlzbGVldmUg PSBremFsbG9jKHNpemVvZigqc2xlZXZlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbGVldmUpCisJ CXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2Jq LCB2bSwgTlVMTCk7CisJaWYgKElTX0VSUih2bWEpKSB7CisJCWVyciA9IFBUUl9FUlIodm1hKTsK KwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwl2bWEtPnByaXZhdGUgPSBzbGVldmU7CisJdm1hLT5v cHMgPSAmcHJveHlfdm1hX29wczsKKworCXNsZWV2ZS0+dm1hID0gdm1hOworCXNsZWV2ZS0+b2Jq ID0gaTkxNV9nZW1fb2JqZWN0X2dldChvYmopOworCXNsZWV2ZS0+cGFnZXMgPSBwYWdlczsKKwlz bGVldmUtPnBhZ2Vfc2l6ZXMgPSAqcGFnZV9zaXplczsKKworCXJldHVybiBzbGVldmU7CisKK2Vy cl9mcmVlOgorCWtmcmVlKHNsZWV2ZSk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3Rh dGljIHZvaWQgZGVzdHJveV9zbGVldmUoc3RydWN0IGk5MTVfc2xlZXZlICpzbGVldmUpCit7CisJ aTkxNV9nZW1fb2JqZWN0X3B1dChzbGVldmUtPm9iaik7CisJa2ZyZWUoc2xlZXZlKTsKK30KKwor c3RydWN0IGNsZWFyX3BhZ2VzX3dvcmsgeworCXN0cnVjdCBkbWFfZmVuY2UgZG1hOworCXN0cnVj dCBkbWFfZmVuY2VfY2IgY2I7CisJc3RydWN0IGk5MTVfc3dfZmVuY2Ugd2FpdDsKKwlzdHJ1Y3Qg d29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgaXJxX3dvcmsgaXJxX3dvcms7CisJc3RydWN0IGk5 MTVfc2xlZXZlICpzbGVldmU7CisJc3RydWN0IGludGVsX2NvbnRleHQgKmNlOworCXUzMiB2YWx1 ZTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjbGVhcl9wYWdlc193b3JrX2RyaXZlcl9uYW1l KHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiBEUklWRVJfTkFNRTsKK30KKwor c3RhdGljIGNvbnN0IGNoYXIgKmNsZWFyX3BhZ2VzX3dvcmtfdGltZWxpbmVfbmFtZShzdHJ1Y3Qg ZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlyZXR1cm4gImNsZWFyIjsKK30KKworc3RhdGljIHZvaWQg Y2xlYXJfcGFnZXNfd29ya19yZWxlYXNlKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXN0 cnVjdCBjbGVhcl9wYWdlc193b3JrICp3ID0gY29udGFpbmVyX29mKGZlbmNlLCB0eXBlb2YoKncp LCBkbWEpOworCisJZGVzdHJveV9zbGVldmUody0+c2xlZXZlKTsKKworCWk5MTVfc3dfZmVuY2Vf ZmluaSgmdy0+d2FpdCk7CisKKwlCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCp3KSwgZG1h KSk7CisJZG1hX2ZlbmNlX2ZyZWUoJnctPmRtYSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZG1hX2ZlbmNlX29wcyBjbGVhcl9wYWdlc193b3JrX29wcyA9IHsKKwkuZ2V0X2RyaXZlcl9uYW1l ID0gY2xlYXJfcGFnZXNfd29ya19kcml2ZXJfbmFtZSwKKwkuZ2V0X3RpbWVsaW5lX25hbWUgPSBj bGVhcl9wYWdlc193b3JrX3RpbWVsaW5lX25hbWUsCisJLnJlbGVhc2UgPSBjbGVhcl9wYWdlc193 b3JrX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBjbGVhcl9wYWdlc19zaWduYWxfaXJxX3dv cmtlcihzdHJ1Y3QgaXJxX3dvcmsgKndvcmspCit7CisJc3RydWN0IGNsZWFyX3BhZ2VzX3dvcmsg KncgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp3KSwgaXJxX3dvcmspOworCisJZG1hX2Zl bmNlX3NpZ25hbCgmdy0+ZG1hKTsKKwlkbWFfZmVuY2VfcHV0KCZ3LT5kbWEpOworfQorCitzdGF0 aWMgdm9pZCBjbGVhcl9wYWdlc19kbWFfZmVuY2VfY2Ioc3RydWN0IGRtYV9mZW5jZSAqZmVuY2Us CisJCQkJICAgICBzdHJ1Y3QgZG1hX2ZlbmNlX2NiICpjYikKK3sKKwlzdHJ1Y3QgY2xlYXJfcGFn ZXNfd29yayAqdyA9IGNvbnRhaW5lcl9vZihjYiwgdHlwZW9mKCp3KSwgY2IpOworCisJaWYgKGZl bmNlLT5lcnJvcikKKwkJZG1hX2ZlbmNlX3NldF9lcnJvcigmdy0+ZG1hLCBmZW5jZS0+ZXJyb3Ip OworCisJLyoKKwkgKiBQdXNoIHRoZSBzaWduYWxsaW5nIG9mIHRoZSBmZW5jZSBpbnRvIHlldCBh bm90aGVyIHdvcmtlciB0byBhdm9pZAorCSAqIHRoZSBuaWdodG1hcmUgbG9ja2luZyBhcm91bmQg dGhlIGZlbmNlIHNwaW5sb2NrLgorCSAqLworCWlycV93b3JrX3F1ZXVlKCZ3LT5pcnFfd29yayk7 Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX3BhZ2VzX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3Qg KndvcmspCit7CisJc3RydWN0IGNsZWFyX3BhZ2VzX3dvcmsgKncgPSBjb250YWluZXJfb2Yod29y aywgdHlwZW9mKCp3KSwgd29yayk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB3 LT5jZS0+Z2VtX2NvbnRleHQtPmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiA9IHctPnNsZWV2ZS0+b2JqOworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gdy0+c2xlZXZlLT52 bWE7CisJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7CisJaW50IGVyciA9IHctPmRtYS5lcnJvcjsK KworCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIG91dF9zaWduYWw7CisKKwlpZiAob2JqLT5j YWNoZV9kaXJ0eSkgeworCQlvYmotPndyaXRlX2RvbWFpbiA9IDA7CisJCWlmIChpOTE1X2dlbV9v YmplY3RfaGFzX3N0cnVjdF9wYWdlKG9iaikpCisJCQlkcm1fY2xmbHVzaF9zZyh3LT5zbGVldmUt PnBhZ2VzKTsKKwkJb2JqLT5jYWNoZV9kaXJ0eSA9IGZhbHNlOworCX0KKworCS8qIFhYWDogd2Ug bmVlZCB0byBraWxsIHRoaXMgKi8KKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKKwllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUik7CisJaWYgKHVubGlr ZWx5KGVycikpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJxID0gaTkxNV9yZXF1ZXN0X2NyZWF0 ZSh3LT5jZSk7CisJaWYgKElTX0VSUihycSkpIHsKKwkJZXJyID0gUFRSX0VSUihycSk7CisJCWdv dG8gb3V0X3VucGluOworCX0KKworCS8qIFRoZXJlJ3Mgbm8gd2F5IHRoZSBmZW5jZSBoYXMgc2ln bmFsbGVkICovCisJaWYgKGRtYV9mZW5jZV9hZGRfY2FsbGJhY2soJnJxLT5mZW5jZSwgJnctPmNi LAorCQkJCSAgIGNsZWFyX3BhZ2VzX2RtYV9mZW5jZV9jYikpCisJCUdFTV9CVUdfT04oMSk7CisK KwlpZiAody0+Y2UtPmVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIpIHsKKwkJZXJyID0gdy0+ Y2UtPmVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIocnEpOworCQlpZiAodW5saWtlbHkoZXJy KSkKKwkJCWdvdG8gb3V0X3JlcXVlc3Q7CisJfQorCisJZXJyID0gaW50ZWxfZW1pdF92bWFfZmls bF9ibHQocnEsIHZtYSwgdy0+dmFsdWUpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIG91 dF9yZXF1ZXN0OworCisJLyogWFhYOiBtb3JlIGZldmVyaXNoIG5pZ2h0bWFyZXMgYXdhaXQgKi8K KwlpOTE1X3ZtYV9sb2NrKHZtYSk7CisJZXJyID0gaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1h LCBycSwgRVhFQ19PQkpFQ1RfV1JJVEUpOworCWk5MTVfdm1hX3VubG9jayh2bWEpOworb3V0X3Jl cXVlc3Q6CisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJaTkxNV9yZXF1ZXN0X3NraXAocnEsIGVy cik7CisJCWVyciA9IDA7CisJfQorCisJaTkxNV9yZXF1ZXN0X2FkZChycSk7CitvdXRfdW5waW46 CisJaTkxNV92bWFfdW5waW4odm1hKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZpOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKK291dF9zaWduYWw6CisJaWYgKHVubGlrZWx5KGVycikpIHsK KwkJZG1hX2ZlbmNlX3NldF9lcnJvcigmdy0+ZG1hLCBlcnIpOworCQlkbWFfZmVuY2Vfc2lnbmFs KCZ3LT5kbWEpOworCQlkbWFfZmVuY2VfcHV0KCZ3LT5kbWEpOworCX0KK30KKworc3RhdGljIGlu dCBfX2k5MTVfc3dfZmVuY2VfY2FsbAorY2xlYXJfcGFnZXNfd29ya19ub3RpZnkoc3RydWN0IGk5 MTVfc3dfZmVuY2UgKmZlbmNlLAorCQkJZW51bSBpOTE1X3N3X2ZlbmNlX25vdGlmeSBzdGF0ZSkK K3sKKwlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayAqdyA9IGNvbnRhaW5lcl9vZihmZW5jZSwgdHlw ZW9mKCp3KSwgd2FpdCk7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBGRU5DRV9DT01QTEVU RToKKwkJc2NoZWR1bGVfd29yaygmdy0+d29yayk7CisJCWJyZWFrOworCisJY2FzZSBGRU5DRV9G UkVFOgorCQlkbWFfZmVuY2VfcHV0KCZ3LT5kbWEpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4g Tk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZmVuY2VfbG9jayk7CisK Ky8qIFhYWDogYmV0dGVyIG5hbWUgcGxlYXNlICovCitpbnQgaTkxNV9nZW1fc2NoZWR1bGVfZmls bF9wYWdlc19ibHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgICAgIHN0 cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCQkgICAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMs CisJCQkJICAgICBzdHJ1Y3QgaTkxNV9wYWdlX3NpemVzICpwYWdlX3NpemVzLAorCQkJCSAgICAg dTMyIHZhbHVlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShv YmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0gY2UtPmdlbV9j b250ZXh0OworCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtOworCXN0cnVjdCBjbGVhcl9w YWdlc193b3JrICp3b3JrOworCXN0cnVjdCBpOTE1X3NsZWV2ZSAqc2xlZXZlOworCWludCBlcnI7 CisKKwl2bSA9IGN0eC0+cHBndHQgPyAmY3R4LT5wcGd0dC0+dm0gOiAmaTkxNS0+Z2d0dC52bTsK KworCXNsZWV2ZSA9IGNyZWF0ZV9zbGVldmUodm0sIG9iaiwgcGFnZXMsIHBhZ2Vfc2l6ZXMpOwor CWlmIChJU19FUlIoc2xlZXZlKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2xlZXZlKTsKKworCXdvcmsg PSBrbWFsbG9jKHNpemVvZigqd29yayksIEdGUF9LRVJORUwpOworCWlmICghd29yaykgeworCQlk ZXN0cm95X3NsZWV2ZShzbGVldmUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl3b3JrLT52 YWx1ZSA9IHZhbHVlOworCXdvcmstPnNsZWV2ZSA9IHNsZWV2ZTsKKwl3b3JrLT5jZSA9IGNlOwor CisJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBjbGVhcl9wYWdlc193b3JrZXIpOworCisJaW5pdF9p cnFfd29yaygmd29yay0+aXJxX3dvcmssIGNsZWFyX3BhZ2VzX3NpZ25hbF9pcnFfd29ya2VyKTsK KworCWRtYV9mZW5jZV9pbml0KCZ3b3JrLT5kbWEsCisJCSAgICAgICAmY2xlYXJfcGFnZXNfd29y a19vcHMsCisJCSAgICAgICAmZmVuY2VfbG9jaywKKwkJICAgICAgIGk5MTUtPm1tLnVub3JkZXJl ZF90aW1lbGluZSwKKwkJICAgICAgIDApOworCWk5MTVfc3dfZmVuY2VfaW5pdCgmd29yay0+d2Fp dCwgY2xlYXJfcGFnZXNfd29ya19ub3RpZnkpOworCisJaTkxNV9nZW1fb2JqZWN0X2xvY2sob2Jq KTsKKwllcnIgPSBpOTE1X3N3X2ZlbmNlX2F3YWl0X3Jlc2VydmF0aW9uKCZ3b3JrLT53YWl0LAor CQkJCQkgICAgICBvYmotPnJlc3YsIE5VTEwsCisJCQkJCSAgICAgIHRydWUsIEk5MTVfRkVOQ0Vf VElNRU9VVCwKKwkJCQkJICAgICAgSTkxNV9GRU5DRV9HRlApOworCWlmIChlcnIgPCAwKSB7CisJ CWRtYV9mZW5jZV9zZXRfZXJyb3IoJndvcmstPmRtYSwgZXJyKTsKKwl9IGVsc2UgeworCQlyZXNl cnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2Uob2JqLT5yZXN2LCAmd29yay0+ZG1hKTsKKwkJ ZXJyID0gMDsKKwl9CisJaTkxNV9nZW1fb2JqZWN0X3VubG9jayhvYmopOworCisJZG1hX2ZlbmNl X2dldCgmd29yay0+ZG1hKTsKKwlpOTE1X3N3X2ZlbmNlX2NvbW1pdCgmd29yay0+d2FpdCk7CisK KwlyZXR1cm4gZXJyOworfQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRF U1QpCisjaW5jbHVkZSAic2VsZnRlc3RzL2k5MTVfZ2VtX2NsaWVudF9ibHQuYyIKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zZGJkMjhjMjJmZjUKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5o CkBAIC0wLDAgKzEsMjEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisjaWZuZGVmIF9f STkxNV9HRU1fQ0xJRU5UX0JMVF9IX18KKyNkZWZpbmUgX19JOTE1X0dFTV9DTElFTlRfQkxUX0hf XworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3Q7CitzdHJ1Y3QgaTkxNV9wYWdlX3NpemVzOworc3RydWN0IGludGVsX2NvbnRleHQ7CitzdHJ1 Y3Qgc2dfdGFibGU7CisKK2ludCBpOTE1X2dlbV9zY2hlZHVsZV9maWxsX3BhZ2VzX2JsdChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCSAgICAgc3RydWN0IGludGVsX2NvbnRl eHQgKmNlLAorCQkJCSAgICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKKwkJCQkgICAgIHN0cnVj dCBpOTE1X3BhZ2Vfc2l6ZXMgKnBhZ2Vfc2l6ZXMsCisJCQkJICAgICB1MzIgdmFsdWUpOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmpl Y3RfYmx0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X2JsdC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODQzMjRiNzU1ZGU2Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVj dF9ibHQuYwpAQCAtMCwwICsxLDEwOSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1J VAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lu Y2x1ZGUgImk5MTVfZ2VtX29iamVjdF9ibHQuaCIKKworI2luY2x1ZGUgImk5MTVfZ2VtX2NsZmx1 c2guaCIKKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKworaW50IGludGVsX2VtaXRfdm1hX2ZpbGxf Ymx0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkJICAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1h LAorCQkJICAgIHUzMiB2YWx1ZSkKK3sKKwl1MzIgKmNzOworCisJY3MgPSBpbnRlbF9yaW5nX2Jl Z2luKHJxLCA4KTsKKwlpZiAoSVNfRVJSKGNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3MpOworCisJ aWYgKElOVEVMX0dFTihycS0+aTkxNSkgPj0gOCkgeworCQkqY3MrKyA9IFhZX0NPTE9SX0JMVF9D TUQgfCBCTFRfV1JJVEVfUkdCQSB8ICg3LTIpOworCQkqY3MrKyA9IEJMVF9ERVBUSF8zMiB8IEJM VF9ST1BfQ09MT1JfQ09QWSB8IFBBR0VfU0laRTsKKwkJKmNzKysgPSAwOworCQkqY3MrKyA9IHZt YS0+c2l6ZSA+PiBQQUdFX1NISUZUIDw8IDE2IHwgUEFHRV9TSVpFIC8gNDsKKwkJKmNzKysgPSBs b3dlcl8zMl9iaXRzKHZtYS0+bm9kZS5zdGFydCk7CisJCSpjcysrID0gdXBwZXJfMzJfYml0cyh2 bWEtPm5vZGUuc3RhcnQpOworCQkqY3MrKyA9IHZhbHVlOworCQkqY3MrKyA9IE1JX05PT1A7CisJ fSBlbHNlIHsKKwkJKmNzKysgPSBYWV9DT0xPUl9CTFRfQ01EIHwgQkxUX1dSSVRFX1JHQkEgfCAo Ni0yKTsKKwkJKmNzKysgPSBCTFRfREVQVEhfMzIgfCBCTFRfUk9QX0NPTE9SX0NPUFkgfCBQQUdF X1NJWkU7CisJCSpjcysrID0gMDsKKwkJKmNzKysgPSB2bWEtPnNpemUgPj4gUEFHRV9TSElGVCA8 PCAxNiB8IFBBR0VfU0laRSAvIDQ7CisJCSpjcysrID0gdm1hLT5ub2RlLnN0YXJ0OworCQkqY3Mr KyA9IHZhbHVlOworCQkqY3MrKyA9IE1JX05PT1A7CisJCSpjcysrID0gTUlfTk9PUDsKKwl9CisK KwlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKKworCXJldHVybiAwOworfQorCitpbnQgaTkx NV9nZW1fb2JqZWN0X2ZpbGxfYmx0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJ CQkgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCSAgICAgdTMyIHZhbHVlKQorewor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsK KwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0gY2UtPmdlbV9jb250ZXh0OworCXN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtOworCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOworCXN0 cnVjdCBpOTE1X3ZtYSAqdm1hOworCWludCBlcnI7CisKKwkvKiBYWFg6IGNlLT52bSBwbGVhc2Ug Ki8KKwl2bSA9IGN0eC0+cHBndHQgPyAmY3R4LT5wcGd0dC0+dm0gOiAmaTkxNS0+Z2d0dC52bTsK KworCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgdm0sIE5VTEwpOworCWlmIChJU19FUlIo dm1hKSkKKwkJcmV0dXJuIFBUUl9FUlIodm1hKTsKKworCWVyciA9IGk5MTVfdm1hX3Bpbih2bWEs IDAsIDAsIFBJTl9VU0VSKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIGVycjsKKwor CWlmIChvYmotPmNhY2hlX2RpcnR5ICYgfm9iai0+Y2FjaGVfY29oZXJlbnQpIHsKKwkJaTkxNV9n ZW1fb2JqZWN0X2xvY2sob2JqKTsKKwkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqLCAwKTsK KwkJaTkxNV9nZW1fb2JqZWN0X3VubG9jayhvYmopOworCX0KKworCXJxID0gaTkxNV9yZXF1ZXN0 X2NyZWF0ZShjZSk7CisJaWYgKElTX0VSUihycSkpIHsKKwkJZXJyID0gUFRSX0VSUihycSk7CisJ CWdvdG8gb3V0X3VucGluOworCX0KKworCWVyciA9IGk5MTVfcmVxdWVzdF9hd2FpdF9vYmplY3Qo cnEsIG9iaiwgdHJ1ZSk7CisJaWYgKHVubGlrZWx5KGVycikpCisJCWdvdG8gb3V0X3JlcXVlc3Q7 CisKKwlpZiAoY2UtPmVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIpIHsKKwkJZXJyID0gY2Ut PmVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIocnEpOworCQlpZiAodW5saWtlbHkoZXJyKSkK KwkJCWdvdG8gb3V0X3JlcXVlc3Q7CisJfQorCisJZXJyID0gaW50ZWxfZW1pdF92bWFfZmlsbF9i bHQocnEsIHZtYSwgdmFsdWUpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIG91dF9yZXF1 ZXN0OworCisJaTkxNV92bWFfbG9jayh2bWEpOworCWVyciA9IGk5MTVfdm1hX21vdmVfdG9fYWN0 aXZlKHZtYSwgcnEsIEVYRUNfT0JKRUNUX1dSSVRFKTsKKwlpOTE1X3ZtYV91bmxvY2sodm1hKTsK K291dF9yZXF1ZXN0OgorCWlmICh1bmxpa2VseShlcnIpKQorCQlpOTE1X3JlcXVlc3Rfc2tpcChy cSwgZXJyKTsKKworCWk5MTVfcmVxdWVzdF9hZGQocnEpOworb3V0X3VucGluOgorCWk5MTVfdm1h X3VucGluKHZtYSk7CisJcmV0dXJuIGVycjsKK30KKworI2lmIElTX0VOQUJMRUQoQ09ORklHX0RS TV9JOTE1X1NFTEZURVNUKQorI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3RfYmx0 LmMiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9vYmplY3RfYmx0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0 X2JsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2VjN2RlNmFj MGMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X29iamVjdF9ibHQuaApAQCAtMCwwICsxLDI0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUICovCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAq LworCisjaWZuZGVmIF9fSTkxNV9HRU1fT0JKRUNUX0JMVF9IX18KKyNkZWZpbmUgX19JOTE1X0dF TV9PQkpFQ1RfQkxUX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3Q7CitzdHJ1Y3QgaW50ZWxfY29udGV4dDsKK3N0cnVjdCBpOTE1X3Jl cXVlc3Q7CitzdHJ1Y3QgaTkxNV92bWE7CisKK2ludCBpbnRlbF9lbWl0X3ZtYV9maWxsX2JsdChz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJCSAgICBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKKwkJ CSAgICB1MzIgdmFsdWUpOworCitpbnQgaTkxNV9nZW1fb2JqZWN0X2ZpbGxfYmx0KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSwKKwkJCSAgICAgdTMyIHZhbHVlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2NsaWVudF9ibHQuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fY2xpZW50X2JsdC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjY1MGQ4NjU2ZDkyCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9jbGll bnRfYmx0LmMKQEAgLTAsMCArMSwxMjcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBN SVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNp bmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCisKKyNpbmNsdWRlICJzZWxmdGVzdHMvaWd0X2Zs dXNoX3Rlc3QuaCIKKyNpbmNsdWRlICJzZWxmdGVzdHMvbW9ja19kcm0uaCIKKyNpbmNsdWRlICJt b2NrX2NvbnRleHQuaCIKKworc3RhdGljIGludCBpZ3RfY2xpZW50X2ZpbGwodm9pZCAqYXJnKQor eworCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IGNlLT5nZW1fY29udGV4dC0+aTkxNTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOworCXN0cnVjdCBybmRfc3RhdGUgcHJuZzsKKwlJR1RfVElNRU9VVChlbmQp OworCXUzMiAqdmFkZHI7CisJaW50IGVyciA9IDA7CisKKwlwcmFuZG9tX3NlZWRfc3RhdGUoJnBy bmcsIGk5MTVfc2VsZnRlc3QucmFuZG9tX3NlZWQpOworCisJZG8geworCQl1MzIgc3ogPSBwcmFu ZG9tX3UzMl9zdGF0ZSgmcHJuZykgJSBTWl8zMk07CisJCXUzMiB2YWwgPSBwcmFuZG9tX3UzMl9z dGF0ZSgmcHJuZyk7CisJCXUzMiBpOworCisJCXN6ID0gcm91bmRfdXAoc3osIFBBR0VfU0laRSk7 CisKKwkJcHJfZGVidWcoIiVzIHdpdGggc3o9JXgsIHZhbD0leFxuIiwgX19mdW5jX18sIHN6LCB2 YWwpOworCisJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoaTkxNSwgc3op OworCQlpZiAoSVNfRVJSKG9iaikpIHsKKwkJCWVyciA9IFBUUl9FUlIob2JqKTsKKwkJCWdvdG8g ZXJyX2ZsdXNoOworCQl9CisKKwkJdmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChvYmos IEk5MTVfTUFQX1dCKTsKKwkJaWYgKElTX0VSUih2YWRkcikpIHsKKwkJCWVyciA9IFBUUl9FUlIo dmFkZHIpOworCQkJZ290byBlcnJfcHV0OworCQl9CisKKwkJLyoKKwkJICogWFhYOiBUaGUgZ29h bCBpcyBtb3ZlIHRoaXMgdG8gZ2V0X3BhZ2VzLCBzbyB0cnkgdG8gZGlydHkgdGhlCisJCSAqIENQ VSBjYWNoZSBmaXJzdCB0byBjaGVjayB0aGF0IHdlIGRvIHRoZSByZXF1aXJlZCBjbGZsdXNoCisJ CSAqIGJlZm9yZSBzY2hlZHVsaW5nIHRoZSBibHQgZm9yICFsbGMgcGxhdGZvcm1zLiBUaGlzIG1h dGNoZXMKKwkJICogc29tZSB2ZXJzaW9uIG9mIHJlYWxpdHkgd2hlcmUgYXQgZ2V0X3BhZ2VzIHRo ZSBwYWdlcworCQkgKiB0aGVtc2VsdmVzIG1heSBub3QgeWV0IGJlIGNvaGVyZW50IHdpdGggdGhl IEdQVShzd2FwLWluKS4gSWYKKwkJICogd2UgYXJlIG1pc3NpbmcgdGhlIGZsdXNoIHRoZW4gd2Ug c2hvdWxkIHNlZSB0aGUgc3RhbGUgY2FjaGUKKwkJICogdmFsdWVzIGFmdGVyIHdlIGRvIHRoZSBz ZXRfdG9fY3B1X2RvbWFpbiBhbmQgcGljayBpdCB1cCBhcyBhCisJCSAqIHRlc3QgZmFpbHVyZS4K KwkJICovCisJCW1lbXNldDMyKHZhZGRyLCB2YWwgXiAweGRlYWRiZWFmLCBvYmotPmJhc2Uuc2l6 ZSAvIHNpemVvZih1MzIpKTsKKworCQlpZiAoIShvYmotPmNhY2hlX2NvaGVyZW50ICYgSTkxNV9C T19DQUNIRV9DT0hFUkVOVF9GT1JfV1JJVEUpKQorCQkJb2JqLT5jYWNoZV9kaXJ0eSA9IHRydWU7 CisKKwkJZXJyID0gaTkxNV9nZW1fc2NoZWR1bGVfZmlsbF9wYWdlc19ibHQob2JqLCBjZSwgb2Jq LT5tbS5wYWdlcywKKwkJCQkJCSAgICAgICAmb2JqLT5tbS5wYWdlX3NpemVzLAorCQkJCQkJICAg ICAgIHZhbCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl91bnBpbjsKKworCQkvKgorCQkgKiBY WFg6IEZvciBub3cgZG8gdGhlIHdhaXQgd2l0aG91dCB0aGUgb2JqZWN0IHJlc3YgbG9jayB0bwor CQkgKiBlbnN1cmUgd2UgZG9uJ3QgZGVhZGxvY2suCisJCSAqLworCQllcnIgPSBpOTE1X2dlbV9v YmplY3Rfd2FpdChvYmosCisJCQkJCSAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFIHwKKwkJCQkJ ICAgSTkxNV9XQUlUX0FMTCwKKwkJCQkJICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCQlpZiAo ZXJyKQorCQkJZ290byBlcnJfdW5waW47CisKKwkJaTkxNV9nZW1fb2JqZWN0X2xvY2sob2JqKTsK KwkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgZmFsc2UpOwor CQlpOTE1X2dlbV9vYmplY3RfdW5sb2NrKG9iaik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl91 bnBpbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgb2JqLT5iYXNlLnNpemUgLyBzaXplb2YodTMyKTsg KytpKSB7CisJCQlpZiAodmFkZHJbaV0gIT0gdmFsKSB7CisJCQkJcHJfZXJyKCJ2YWRkclsldV09 JXgsIGV4cGVjdGVkPSV4XG4iLCBpLAorCQkJCSAgICAgICB2YWRkcltpXSwgdmFsKTsKKwkJCQll cnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZXJyX3VucGluOworCQkJfQorCQl9CisKKwkJaTkxNV9n ZW1fb2JqZWN0X3VucGluX21hcChvYmopOworCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJ fSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSk7CisKKwlnb3RvIGVycl9mbHVzaDsK KworZXJyX3VucGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob2JqKTsKK2Vycl9wdXQ6 CisJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworZXJyX2ZsdXNoOgorCW11dGV4X2xvY2soJmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCWlmIChpZ3RfZmx1c2hfdGVzdChpOTE1LCBJOTE1X1dB SVRfTE9DS0VEKSkKKwkJZXJyID0gLUVJTzsKKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOworCisJaWYgKGVyciA9PSAtRU5PTUVNKQorCQllcnIgPSAwOworCisJcmV0dXJu IGVycjsKK30KKworaW50IGk5MTVfZ2VtX2NsaWVudF9ibHRfbGl2ZV9zZWxmdGVzdHMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1 YnRlc3QgdGVzdHNbXSA9IHsKKwkJU1VCVEVTVChpZ3RfY2xpZW50X2ZpbGwpLAorCX07CisKKwlp ZiAoaTkxNV90ZXJtaW5hbGx5X3dlZGdlZChpOTE1KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIUhB U19FTkdJTkUoaTkxNSwgQkNTMCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGk5MTVfc3VidGVz dHModGVzdHMsIGk5MTUtPmVuZ2luZVtCQ1MwXS0+a2VybmVsX2NvbnRleHQpOworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3Rf Ymx0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVj dF9ibHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjcxNzUyMWM4 ZWIwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVz dHMvaTkxNV9nZW1fb2JqZWN0X2JsdC5jCkBAIC0wLDAgKzEsMTExIEBACisvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9y YXRpb24KKyAqLworCisjaW5jbHVkZSAiLi4vaTkxNV9zZWxmdGVzdC5oIgorCisjaW5jbHVkZSAi c2VsZnRlc3RzL2lndF9mbHVzaF90ZXN0LmgiCisjaW5jbHVkZSAic2VsZnRlc3RzL21vY2tfZHJt LmgiCisjaW5jbHVkZSAibW9ja19jb250ZXh0LmgiCisKK3N0YXRpYyBpbnQgaWd0X2ZpbGxfYmx0 KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBhcmc7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBjZS0+Z2VtX2NvbnRleHQtPmk5MTU7CisJc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3Qgcm5kX3N0YXRlIHBybmc7CisJSUdU X1RJTUVPVVQoZW5kKTsKKwl1MzIgKnZhZGRyOworCWludCBlcnIgPSAwOworCisJcHJhbmRvbV9z ZWVkX3N0YXRlKCZwcm5nLCBpOTE1X3NlbGZ0ZXN0LnJhbmRvbV9zZWVkKTsKKworCWRvIHsKKwkJ dTMyIHN6ID0gcHJhbmRvbV91MzJfc3RhdGUoJnBybmcpICUgU1pfMzJNOworCQl1MzIgdmFsID0g cHJhbmRvbV91MzJfc3RhdGUoJnBybmcpOworCQl1MzIgaTsKKworCQlzeiA9IHJvdW5kX3VwKHN6 LCBQQUdFX1NJWkUpOworCisJCXByX2RlYnVnKCIlcyB3aXRoIHN6PSV4LCB2YWw9JXhcbiIsIF9f ZnVuY19fLCBzeiwgdmFsKTsKKworCQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVy bmFsKGk5MTUsIHN6KTsKKwkJaWYgKElTX0VSUihvYmopKSB7CisJCQllcnIgPSBQVFJfRVJSKHZh ZGRyKTsKKwkJCWdvdG8gZXJyX2ZsdXNoOworCQl9CisKKwkJdmFkZHIgPSBpOTE1X2dlbV9vYmpl Y3RfcGluX21hcChvYmosIEk5MTVfTUFQX1dCKTsKKwkJaWYgKElTX0VSUih2YWRkcikpIHsKKwkJ CWVyciA9IFBUUl9FUlIodmFkZHIpOworCQkJZ290byBlcnJfcHV0OworCQl9CisKKwkJLyoKKwkJ ICogTWFrZSBzdXJlIHRoZSBwb3RlbnRpYWxseSBhc3luYyBjbGZsdXNoIGRvZXMgaXRzIGpvYiwg aWYKKwkJICogcmVxdWlyZWQuCisJCSAqLworCQltZW1zZXQzMih2YWRkciwgdmFsIF4gMHhkZWFk YmVhZiwgb2JqLT5iYXNlLnNpemUgLyBzaXplb2YodTMyKSk7CisKKwkJaWYgKCEob2JqLT5jYWNo ZV9jb2hlcmVudCAmIEk5MTVfQk9fQ0FDSEVfQ09IRVJFTlRfRk9SX1dSSVRFKSkKKwkJCW9iai0+ Y2FjaGVfZGlydHkgPSB0cnVlOworCisKKwkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7CisJCWVyciA9IGk5MTVfZ2VtX29iamVjdF9maWxsX2JsdChvYmosIGNlLCB2YWwpOwor CQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCQlpZiAoZXJyKQorCQkJ Z290byBlcnJfdW5waW47CisKKwkJaTkxNV9nZW1fb2JqZWN0X2xvY2sob2JqKTsKKwkJZXJyID0g aTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgZmFsc2UpOworCQlpOTE1X2dl bV9vYmplY3RfdW5sb2NrKG9iaik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl91bnBpbjsKKwor CQlmb3IgKGkgPSAwOyBpIDwgb2JqLT5iYXNlLnNpemUgLyBzaXplb2YodTMyKTsgKytpKSB7CisJ CQlpZiAodmFkZHJbaV0gIT0gdmFsKSB7CisJCQkJcHJfZXJyKCJ2YWRkclsldV09JXgsIGV4cGVj dGVkPSV4XG4iLCBpLAorCQkJCSAgICAgICB2YWRkcltpXSwgdmFsKTsKKwkJCQllcnIgPSAtRUlO VkFMOworCQkJCWdvdG8gZXJyX3VucGluOworCQkJfQorCQl9CisKKwkJaTkxNV9nZW1fb2JqZWN0 X3VucGluX21hcChvYmopOworCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJfSB3aGlsZSAo IXRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSk7CisKKwlnb3RvIGVycl9mbHVzaDsKKworZXJyX3Vu cGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob2JqKTsKK2Vycl9wdXQ6CisJaTkxNV9n ZW1fb2JqZWN0X3B1dChvYmopOworZXJyX2ZsdXNoOgorCW11dGV4X2xvY2soJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOworCWlmIChpZ3RfZmx1c2hfdGVzdChpOTE1LCBJOTE1X1dBSVRfTE9DS0VE KSkKKwkJZXJyID0gLUVJTzsKKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp OworCisJaWYgKGVyciA9PSAtRU5PTUVNKQorCQllcnIgPSAwOworCisJcmV0dXJuIGVycjsKK30K KworaW50IGk5MTVfZ2VtX29iamVjdF9ibHRfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVz dHNbXSA9IHsKKwkJU1VCVEVTVChpZ3RfZmlsbF9ibHQpLAorCX07CisKKwlpZiAoaTkxNV90ZXJt aW5hbGx5X3dlZGdlZChpOTE1KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIUhBU19FTkdJTkUoaTkx NSwgQkNTMCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGk5MTVfc3VidGVzdHModGVzdHMsIGk5 MTUtPmVuZ2luZVtCQ1MwXS0+a2VybmVsX2NvbnRleHQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9ncHVfY29tbWFuZHMuaAppbmRleCBhMzRlY2U1M2E3NzEuLjdlOTU4Mjdi MDcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1h bmRzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmgK QEAgLTE4MCw2ICsxODAsNyBAQAogI2RlZmluZSBHRlhfT1BfRFJBV1JFQ1RfSU5GT19JOTY1ICAo KDB4NzkwMDw8MTYpfDB4MikKIAogI2RlZmluZSBDT0xPUl9CTFRfQ01ECQkJKDI8PDI5IHwgMHg0 MDw8MjIgfCAoNS0yKSkKKyNkZWZpbmUgWFlfQ09MT1JfQkxUX0NNRAkJKDI8PDI5IHwgMHg1MDw8 MjIpCiAjZGVmaW5lIFNSQ19DT1BZX0JMVF9DTUQJCSgoMjw8MjkpfCgweDQzPDwyMil8NCkKICNk ZWZpbmUgWFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIyKXw2KQogI2RlZmlu ZSBYWV9NT05PX1NSQ19DT1BZX0lNTV9CTFQJKCgyPDwyOSl8KDB4NzE8PDIyKXw1KQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgK aW5kZXggOWJkYTM2YTU5OGIzLi5kNWRjNDQyN2Q2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaApAQCAtMjUsNiArMjUs OCBAQCBzZWxmdGVzdChnZW0sIGk5MTVfZ2VtX2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QoZXZp Y3QsIGk5MTVfZ2VtX2V2aWN0X2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QoaHVnZXBhZ2VzLCBp OTE1X2dlbV9odWdlX3BhZ2VfbGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChjb250ZXh0cywgaTkx NV9nZW1fY29udGV4dF9saXZlX3NlbGZ0ZXN0cykKK3NlbGZ0ZXN0KGJsdCwgaTkxNV9nZW1fb2Jq ZWN0X2JsdF9saXZlX3NlbGZ0ZXN0cykKK3NlbGZ0ZXN0KGNsaWVudCwgaTkxNV9nZW1fY2xpZW50 X2JsdF9saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KHJlc2V0LCBpbnRlbF9yZXNldF9saXZlX3Nl bGZ0ZXN0cykKIHNlbGZ0ZXN0KGhhbmdjaGVjaywgaW50ZWxfaGFuZ2NoZWNrX2xpdmVfc2VsZnRl c3RzKQogc2VsZnRlc3QoZXhlY2xpc3RzLCBpbnRlbF9leGVjbGlzdHNfbGl2ZV9zZWxmdGVzdHMp Ci0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eA==