From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [RFC PATCH 15/42] drm/i915: support copying objects via blitter engine Date: Thu, 14 Feb 2019 14:57:13 +0000 Message-ID: <20190214145740.14521-16-matthew.auld@intel.com> References: <20190214145740.14521-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 515CC6E91B for ; Thu, 14 Feb 2019 14:58:02 +0000 (UTC) In-Reply-To: <20190214145740.14521-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 V2UgbmVlZCB0byBzdXBwb3J0IGNvcHlpbmcgZnJvbSBvbmUgb2JqZWN0IGJhY2tpbmcgc3RvcmUg dG8gYW5vdGhlciBmb3IKb2JqZWN0IG1pZ3JhdGlvbi4KClNpZ25lZC1vZmYtYnk6IE1hdHRoZXcg QXVsZCA8bWF0dGhldy5hdWxkQGludGVsLmNvbT4KQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFz LmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KQ2M6IEFiZGllbCBKYW51bGd1ZSA8YWJkaWVsLmph bnVsZ3VlQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oICAgICAgICAgICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YyAgICAgICAgICAgICAgIHwgMTg3ICsrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZ3B1X2NvbW1hbmRzLmggICAgIHwgICAyICsKIC4uLi9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdC5jICB8ICA4MCArKysrKysrKwogNCBmaWxlcyBjaGFu Z2VkLCAyNzIgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDViMzlh ZjU3YzM2Yy4uYjlkMDFjYWEzNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTI4MTEs NiArMjgxMSw5IEBAIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKIAkJCSBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMg Km9wcyk7CiBpbnQgaTkxNV9nZW1fb2JqZWN0X2NsZWFyX2JsdChzdHJ1Y3QgaTkxNV9nZW1fY29u dGV4dCAqY3R4LAogCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Citp bnQgaTkxNV9nZW1fb2JqZWN0X2NvcHlfYmx0KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgs CisJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpzcmMsCisJCQkgICAgIHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpkc3QpOwogc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg KgogaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHU2NCBzaXplKTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbS5jCmluZGV4IDAzMmQ0MzM0YzBmMS4uNTAxNzE0ZmJmOTJmIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMKQEAgLTQyODgsNiArNDI4OCwxOTMgQEAgc3RhdGljIGJvb2wgZGlzY2FyZF9i YWNraW5nX3N0b3JhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAlyZXR1cm4g YXRvbWljX2xvbmdfcmVhZCgmb2JqLT5iYXNlLmZpbHAtPmZfY291bnQpID09IDE7CiB9CiAKK3N0 YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKgorX19pOTE1X2dlbV9jb3B5X2JsdChzdHJ1Y3QgaTkxNV92 bWEgKnNyYywgc3RydWN0IGk5MTVfdm1hICpkc3QpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSB0b19pOTE1KHNyYy0+b2JqLT5iYXNlLmRldik7CisJY29uc3QgaW50IGdlbiA9 IElOVEVMX0dFTihpOTE1KTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0 cnVjdCBpOTE1X3ZtYSAqYmF0Y2g7CisJdTMyICpjbWQ7CisJaW50IGVycjsKKworCUdFTV9CVUdf T04oc3JjLT52bSAhPSBkc3QtPnZtKTsKKwlHRU1fQlVHX09OKHNyYy0+b2JqLT5iYXNlLnNpemUg IT0gZHN0LT5vYmotPmJhc2Uuc2l6ZSk7CisKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRl X2ludGVybmFsKGk5MTUsIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUihvYmopKQorCQlyZXR1cm4g RVJSX0NBU1Qob2JqKTsKKworCWNtZCA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKG9iaiwgSTkx NV9NQVBfV0IpOworCWlmIChJU19FUlIoY21kKSkgeworCQllcnIgPSBQVFJfRVJSKGNtZCk7CisJ CWdvdG8gZXJyOworCX0KKworCWlmIChnZW4gPj0gOSkgeworCQkqY21kKysgPSBHRU45X1hZX0ZB U1RfQ09QWV9CTFRfQ01EOworCQkqY21kKysgPSBCTFRfREVQVEhfMzIgfCBQQUdFX1NJWkU7CisJ CSpjbWQrKyA9IDA7CisJCSpjbWQrKyA9IHNyYy0+b2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElG VCA8PCAxNiB8IFBBR0VfU0laRSAvIDQ7CisJCSpjbWQrKyA9IGxvd2VyXzMyX2JpdHMoZHN0LT5u b2RlLnN0YXJ0KTsKKwkJKmNtZCsrID0gdXBwZXJfMzJfYml0cyhkc3QtPm5vZGUuc3RhcnQpOwor CQkqY21kKysgPSAwOworCQkqY21kKysgPSBQQUdFX1NJWkU7CisJCSpjbWQrKyA9IGxvd2VyXzMy X2JpdHMoc3JjLT5ub2RlLnN0YXJ0KTsKKwkJKmNtZCsrID0gdXBwZXJfMzJfYml0cyhzcmMtPm5v ZGUuc3RhcnQpOworCX0gZWxzZSBpZiAoZ2VuID49IDgpIHsKKwkJKmNtZCsrID0gR0VOOF9YWV9T UkNfQ09QWV9CTFRfQ01EIHwgQkxUX1dSSVRFX1JHQkE7CisJCSpjbWQrKyA9IEJMVF9ERVBUSF8z MiB8IEJMVF9ST1BfU1JDX0NPUFkgfCBQQUdFX1NJWkU7CisJCSpjbWQrKyA9IDA7CisJCSpjbWQr KyA9IHNyYy0+b2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCA8PCAxNiB8IFBBR0VfU0laRSAv IDQ7CisJCSpjbWQrKyA9IGxvd2VyXzMyX2JpdHMoZHN0LT5ub2RlLnN0YXJ0KTsKKwkJKmNtZCsr ID0gdXBwZXJfMzJfYml0cyhkc3QtPm5vZGUuc3RhcnQpOworCQkqY21kKysgPSAwOworCQkqY21k KysgPSBQQUdFX1NJWkU7CisJCSpjbWQrKyA9IGxvd2VyXzMyX2JpdHMoc3JjLT5ub2RlLnN0YXJ0 KTsKKwkJKmNtZCsrID0gdXBwZXJfMzJfYml0cyhzcmMtPm5vZGUuc3RhcnQpOworCX0gZWxzZSB7 CisJCSpjbWQrKyA9IFhZX1NSQ19DT1BZX0JMVF9DTUQgfCBCTFRfV1JJVEVfUkdCQTsKKwkJKmNt ZCsrID0gQkxUX0RFUFRIXzMyIHwgQkxUX1JPUF9TUkNfQ09QWSB8IFBBR0VfU0laRTsKKwkJKmNt ZCsrID0gMDsKKwkJKmNtZCsrID0gc3JjLT5vYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUIDw8 IDE2IHwgUEFHRV9TSVpFIC8gNDsKKwkJKmNtZCsrID0gZHN0LT5ub2RlLnN0YXJ0OworCQkqY21k KysgPSAwOworCQkqY21kKysgPSBQQUdFX1NJWkU7CisJCSpjbWQrKyA9IHNyYy0+bm9kZS5zdGFy dDsKKwl9CisKKwkqY21kID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKworCWk5MTVfZ2VtX29iamVj dF91bnBpbl9tYXAob2JqKTsKKworCWVyciA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2Rv bWFpbihvYmosIGZhbHNlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCWJhdGNoID0gaTkx NV92bWFfaW5zdGFuY2Uob2JqLCBzcmMtPnZtLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGJhdGNoKSkg eworCQllcnIgPSBQVFJfRVJSKGJhdGNoKTsKKwkJZ290byBlcnI7CisJfQorCisJZXJyID0gaTkx NV92bWFfcGluKGJhdGNoLCAwLCAwLCBQSU5fVVNFUik7CisJaWYgKGVycikKKwkJZ290byBlcnI7 CisKKwlyZXR1cm4gYmF0Y2g7CisKK2VycjoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJ cmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIGludCBpOTE1X2dlbV9jb3B5X2JsdChz dHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkJICAgICBzdHJ1Y3QgaTkxNV92bWEgKnNy YywKKwkJCSAgICAgc3RydWN0IGk5MTVfdm1hICpkc3QpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSB0b19pOTE1KHNyYy0+b2JqLT5iYXNlLmRldik7CisJc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lID0gaTkxNS0+ZW5naW5lW0JDU107CisJc3RydWN0IGk5MTVfcmVx dWVzdCAqcnE7CisJc3RydWN0IGk5MTVfdm1hICpiYXRjaDsKKwlpbnQgZmxhZ3MgPSAwOworCWlu dCBlcnI7CisKKwllcnIgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4oc3JjLT5v YmosIGZhbHNlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gaTkxNV9nZW1f b2JqZWN0X3NldF90b19ndHRfZG9tYWluKGRzdC0+b2JqLCB0cnVlKTsKKwlpZiAoZXJyKQorCQly ZXR1cm4gZXJyOworCisJcnEgPSBpOTE1X3JlcXVlc3RfYWxsb2MoZW5naW5lLCBjdHgpOworCWlm IChJU19FUlIocnEpKQorCQlyZXR1cm4gUFRSX0VSUihycSk7CisKKwliYXRjaCA9IF9faTkxNV9n ZW1fY29weV9ibHQoc3JjLCBkc3QpOworCWlmIChJU19FUlIoYmF0Y2gpKSB7CisJCWVyciA9IFBU Ul9FUlIoYmF0Y2gpOworCQlnb3RvIGVycl9yZXF1ZXN0OworCX0KKworCWVyciA9IGk5MTVfdm1h X21vdmVfdG9fYWN0aXZlKGJhdGNoLCBycSwgMCk7CisJaTkxNV92bWFfdW5waW4oYmF0Y2gpOwor CWk5MTVfdm1hX2Nsb3NlKGJhdGNoKTsKKwlpZiAoZXJyKSB7CisJCWk5MTVfZ2VtX29iamVjdF9w dXQoYmF0Y2gtPm9iaik7CisJCWdvdG8gZXJyX3JlcXVlc3Q7CisJfQorCisJaTkxNV9nZW1fb2Jq ZWN0X3NldF9hY3RpdmVfcmVmZXJlbmNlKGJhdGNoLT5vYmopOworCisJZXJyID0gZW5naW5lLT5l bWl0X2JiX3N0YXJ0KHJxLAorCQkJCSAgICBiYXRjaC0+bm9kZS5zdGFydCwgYmF0Y2gtPm5vZGUu c2l6ZSwKKwkJCQkgICAgZmxhZ3MpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3JlcXVlc3Q7CisK KwllcnIgPSBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzcmMsIHJxLCAwKTsKKwlpZiAoZXJyKSB7 CisJCWk5MTVfcmVxdWVzdF9za2lwKHJxLCBlcnIpOworCQlnb3RvIGVycl9yZXF1ZXN0OworCX0K KworCWVyciA9IGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKGRzdCwgcnEsIEVYRUNfT0JKRUNUX1dS SVRFKTsKKwlpZiAoZXJyKQorCQlpOTE1X3JlcXVlc3Rfc2tpcChycSwgZXJyKTsKKworZXJyX3Jl cXVlc3Q6CisJaTkxNV9yZXF1ZXN0X2FkZChycSk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGk5 MTVfZ2VtX29iamVjdF9jb3B5X2JsdChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkJ ICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqc3JjLAorCQkJICAgICBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqZHN0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 ID0gdG9faTkxNShzcmMtPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSA9IGN0eC0+cHBndHQgPyAmY3R4LT5wcGd0dC0+dm06ICZpOTE1LT5nZ3R0LnZtOworCXN0cnVj dCBpOTE1X3ZtYSAqc3JjX3ZtYTsKKwlzdHJ1Y3QgaTkxNV92bWEgKmRzdF92bWE7CisJaW50IGVy cjsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJ c3JjX3ZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKHNyYywgdm0sIE5VTEwpOworCWlmIChJU19FUlIo c3JjX3ZtYSkpCisJCXJldHVybiBQVFJfRVJSKHNyY192bWEpOworCisJZXJyID0gaTkxNV92bWFf cGluKHNyY192bWEsIDAsIDAsIFBJTl9VU0VSKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwor CisJZHN0X3ZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKGRzdCwgdm0sIE5VTEwpOworCWlmIChJU19F UlIoZHN0X3ZtYSkpIHsKKwkJZXJyID0gUFRSX0VSUihkc3Rfdm1hKTsKKwkJZ290byBvdXRfdW5w aW5fc3JjOworCX0KKworCWVyciA9IGk5MTVfdm1hX3Bpbihkc3Rfdm1hLCAwLCAwLCBQSU5fVVNF Uik7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5waW5fc3JjOworCisJZXJyID0gaTkxNV9nZW1f Y29weV9ibHQoY3R4LCBzcmNfdm1hLCBkc3Rfdm1hKTsKKwlpOTE1X3ZtYV91bnBpbihzcmNfdm1h KTsKKwlpOTE1X3ZtYV91bnBpbihkc3Rfdm1hKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwor CisJcmV0dXJuIGk5MTVfZ2VtX29iamVjdF93YWl0KGRzdCwKKwkJCQkgICAgSTkxNV9XQUlUX0xP Q0tFRCB8CisJCQkJICAgIEk5MTVfV0FJVF9BTEwsCisJCQkJICAgIE1BWF9TQ0hFRFVMRV9USU1F T1VUKTsKKworb3V0X3VucGluX3NyYzoKKwlpOTE1X3ZtYV91bnBpbihzcmNfdm1hKTsKKwlyZXR1 cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKIF9faTkxNV9nZW1fZmlsbF9i bHQoc3RydWN0IGk5MTVfdm1hICp2bWEsIHUzMiB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2dwdV9jb21tYW5kcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3B1X2NvbW1hbmRzLmgKaW5kZXggZjc0ZmYxZDA5NWMyLi5lOTdlOTA2NjY3NmMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2dwdV9jb21tYW5kcy5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2dwdV9jb21tYW5kcy5oCkBAIC0xNzgsNiAr MTc4LDggQEAKICNkZWZpbmUgWFlfQ09MT1JfQkxUX0NNRCAgICAgICAgICAgICAgCSgyPDwyOSB8 IDB4NTA8PDIyIHwgKDctMikpCiAjZGVmaW5lIFNSQ19DT1BZX0JMVF9DTUQJCSgoMjw8MjkpfCgw eDQzPDwyMil8NCkKICNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8 PDIyKXw2KQorI2RlZmluZSBHRU44X1hZX1NSQ19DT1BZX0JMVF9DTUQJKCgyPDwyOSl8KDB4NTM8 PDIyKXw4KQorI2RlZmluZSBHRU45X1hZX0ZBU1RfQ09QWV9CTFRfQ01ECSgoMjw8MjkpfCgweDQy PDwyMil8OCkKICNkZWZpbmUgWFlfTU9OT19TUkNfQ09QWV9JTU1fQkxUCSgoMjw8MjkpfCgweDcx PDwyMil8NSkKICNkZWZpbmUgICBCTFRfV1JJVEVfQQkJCSgyPDwyMCkKICNkZWZpbmUgICBCTFRf V1JJVEVfUkdCCQkJKDE8PDIwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfZ2VtX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfZ2VtX29iamVjdC5jCmluZGV4IGM4M2RjNWUyZjIxOS4uZGFiYjAzODg1ODk5IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0LmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdC5jCkBA IC02OTcsNiArNjk3LDg1IEBAIHN0YXRpYyBpbnQgaWd0X2ZpbGxfYmx0KHZvaWQgKmFyZykKIAly ZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGlndF9jb3B5X2JsdCh2b2lkICphcmcpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKnNyYywgKmRzdDsKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OworCXN0 cnVjdCBkcm1fZmlsZSAqZmlsZTsKKwl1MzIgKnZhZGRyOworCWludCBlcnI7CisJdTMyIGk7CisK KwlmaWxlID0gbW9ja19maWxlKGk5MTUpOworCWlmIChJU19FUlIoZmlsZSkpCisJCXJldHVybiBQ VFJfRVJSKGZpbGUpOworCisJY3R4ID0gbGl2ZV9jb250ZXh0KGk5MTUsIGZpbGUpOworCWlmIChJ U19FUlIoY3R4KSkgeworCQllcnIgPSBQVFJfRVJSKGN0eCk7CisJCWdvdG8gZXJyX2ZpbGU7CisJ fQorCisJc3JjID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbChpOTE1LCBTWl8yTSk7 CisJaWYgKElTX0VSUihzcmMpKSB7CisJCWVyciA9IFBUUl9FUlIoc3JjKTsKKwkJZ290byBlcnJf ZmlsZTsKKwl9CisKKwl2YWRkciA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKHNyYywgSTkxNV9N QVBfV0IpOworCWlmIChJU19FUlIodmFkZHIpKSB7CisJCWVyciA9IFBUUl9FUlIodmFkZHIpOwor CQlnb3RvIGVycl9wdXRfc3JjOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzcmMtPmJhc2Uuc2l6 ZSAvIHNpemVvZih1MzIpOyArK2kpCisJCXZhZGRyW2ldID0gaTsKKworCWk5MTVfZ2VtX29iamVj dF91bnBpbl9tYXAoc3JjKTsKKworCWRzdCA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJu YWwoaTkxNSwgU1pfMk0pOworCWlmIChJU19FUlIoZHN0KSkgeworCQllcnIgPSBQVFJfRVJSKGRz dCk7CisJCWdvdG8gZXJyX3B1dF9zcmM7CisJfQorCisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0 cnVjdF9tdXRleCk7CisKKwllcnIgPSBpOTE1X2dlbV9vYmplY3RfY29weV9ibHQoY3R4LCBzcmMs IGRzdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcHV0X2RzdDsKKworCWVyciA9IGk5MTVfZ2Vt X29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihkc3QsIGZhbHNlKTsKKwlpZiAoZXJyKQorCQlnb3Rv IGVycl9wdXRfZHN0OworCisJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsK KworCXZhZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoZHN0LCBJOTE1X01BUF9XQik7CisJ aWYgKElTX0VSUih2YWRkcikpIHsKKwkJZXJyID0gUFRSX0VSUih2YWRkcik7CisJCWdvdG8gZXJy X3B1dF9kc3Q7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRzdC0+YmFzZS5zaXplIC8gc2l6ZW9m KHUzMik7ICsraSkgeworCQlpZiAodmFkZHJbaV0gIT0gaSkgeworCQkJcHJfZXJyKCJ2YWRkclsl ZF09JXUsIGV4cGVjdGVkPSV1XG4iLCBpLCB2YWRkcltpXSwgaSk7CisJCQllcnIgPSAtRUlOVkFM OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGRzdCk7 CitlcnJfcHV0X2RzdDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KGRzdCk7CitlcnJfcHV0X3NyYzoK KwlpOTE1X2dlbV9vYmplY3RfcHV0KHNyYyk7CitlcnJfZmlsZToKKwltb2NrX2ZpbGVfZnJlZShp OTE1LCBmaWxlKTsKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgaTkxNV9nZW1fb2JqZWN0X21vY2tf c2VsZnRlc3RzKHZvaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVz dHNbXSA9IHsKQEAgLTcyMyw2ICs4MDIsNyBAQCBpbnQgaTkxNV9nZW1fb2JqZWN0X2xpdmVfc2Vs ZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCQlTVUJURVNUKGlndF9wYXJ0 aWFsX3RpbGluZyksCiAJCVNVQlRFU1QoaWd0X21tYXBfb2Zmc2V0X2V4aGF1c3Rpb24pLAogCQlT VUJURVNUKGlndF9maWxsX2JsdCksCisJCVNVQlRFU1QoaWd0X2NvcHlfYmx0KSwKIAl9OwogCiAJ cmV0dXJuIGk5MTVfc3VidGVzdHModGVzdHMsIGk5MTUpOwotLSAKMi4yMC4xCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=