From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH 3/6] drm/i915/lmem: support kernel mapping Date: Fri, 18 Oct 2019 17:55:55 +0100 Message-ID: <20191018165558.18518-3-matthew.auld@intel.com> References: <20191018165558.18518-1-matthew.auld@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 E41076EB73 for ; Fri, 18 Oct 2019 16:56:07 +0000 (UTC) In-Reply-To: <20191018165558.18518-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 RnJvbTogQWJkaWVsIEphbnVsZ3VlIDxhYmRpZWwuamFudWxndWVAbGludXguaW50ZWwuY29tPgoK V2UgY2FuIGNyZWF0ZSBMTUVNIG9iamVjdHMsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gc3VwcG9ydCBt YXBwaW5nIHRoZW0KaW50byBrZXJuZWwgc3BhY2UgZm9yIGludGVybmFsIHVzZS4KClNpZ25lZC1v ZmYtYnk6IEFiZGllbCBKYW51bGd1ZSA8YWJkaWVsLmphbnVsZ3VlQGxpbnV4LmludGVsLmNvbT4K U2lnbmVkLW9mZi1ieTogTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBTdGV2ZSBIYW1wc29uIDxzdGV2ZW4udC5oYW1wc29uQGludGVsLmNvbT4KQ2M6 IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5jICAgICAgfCAgMzYgKysrKysr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5oICAgICAgfCAgIDggKysK IC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oICB8ICAgOSArLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMgICAgIHwgIDIyICsrKy0K IC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jICB8IDExMyArKysr KysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTgwIGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X2xtZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9sbWVtLmMKaW5kZXgg YTUzZTQ0NjM1NzBkLi5kZDY5YzAwNDM0ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9sbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX2xtZW0uYwpAQCAtOSwxMSArOSw0NyBAQAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAK IGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9sbWVtX29ial9v cHMgPSB7CisJLmZsYWdzID0gSTkxNV9HRU1fT0JKRUNUX0hBU19JT01FTSwKKwogCS5nZXRfcGFn ZXMgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2J1ZGR5LAogCS5wdXRfcGFnZXMgPSBpOTE1 X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2J1ZGR5LAogCS5yZWxlYXNlID0gaTkxNV9nZW1fb2JqZWN0 X3JlbGVhc2VfbWVtb3J5X3JlZ2lvbiwKIH07CiAKKy8qIFhYWDogVGltZSB0byB2ZnVuYyB5b3Vy IGxpZmUgdXA/ICovCit2b2lkIF9faW9tZW0gKmk5MTVfZ2VtX29iamVjdF9sbWVtX2lvX21hcF9w YWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCSAgICAgICB1bnNpZ25l ZCBsb25nIG4pCit7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldDsKKworCW9mZnNldCA9IGk5MTVf Z2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Mob2JqLCBuKTsKKworCXJldHVybiBpb19tYXBwaW5n X21hcF93Yygmb2JqLT5tbS5yZWdpb24tPmlvbWFwLCBvZmZzZXQsIFBBR0VfU0laRSk7Cit9CisK K3ZvaWQgX19pb21lbSAqaTkxNV9nZW1fb2JqZWN0X2xtZW1faW9fbWFwX3BhZ2VfYXRvbWljKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCQkgICAgICB1bnNpZ25lZCBsb25n IG4pCit7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldDsKKworCW9mZnNldCA9IGk5MTVfZ2VtX29i amVjdF9nZXRfZG1hX2FkZHJlc3Mob2JqLCBuKTsKKworCXJldHVybiBpb19tYXBwaW5nX21hcF9h dG9taWNfd2MoJm9iai0+bW0ucmVnaW9uLT5pb21hcCwgb2Zmc2V0KTsKK30KKwordm9pZCBfX2lv bWVtICppOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG4sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBz aXplKQoreworCXJlc291cmNlX3NpemVfdCBvZmZzZXQ7CisKKwlHRU1fQlVHX09OKCFpOTE1X2dl bV9vYmplY3RfaXNfY29udGlndW91cyhvYmopKTsKKworCW9mZnNldCA9IGk5MTVfZ2VtX29iamVj dF9nZXRfZG1hX2FkZHJlc3Mob2JqLCBuKTsKKworCXJldHVybiBpb19tYXBwaW5nX21hcF93Yygm b2JqLT5tbS5yZWdpb24tPmlvbWFwLCBvZmZzZXQsIHNpemUpOworfQorCiBib29sIGk5MTVfZ2Vt X29iamVjdF9pc19sbWVtKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJcmV0 dXJuIG9iai0+b3BzID09ICZpOTE1X2dlbV9sbWVtX29ial9vcHM7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX2xtZW0uaAppbmRleCBlYmMxNWZlMjRmNTguLjMxYTY0NjJiZGJiNiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2xtZW0uaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5oCkBAIC0xMyw2ICsxMywx NCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9sbWVtX29ial9vcHM7CiAKK3ZvaWQgX19p b21lbSAqaTkxNV9nZW1fb2JqZWN0X2xtZW1faW9fbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCisJCQkJCSAgdW5zaWduZWQgbG9uZyBuLCB1bnNpZ25lZCBsb25nIHNpemUpOwor dm9pZCBfX2lvbWVtICppOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXBfcGFnZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBuKTsKK3Zv aWQgX19pb21lbSAqCitpOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXBfcGFnZV9hdG9taWMoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkJdW5zaWduZWQgbG9uZyBuKTsKKwog Ym9vbCBpOTE1X2dlbV9vYmplY3RfaXNfbG1lbShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCmluZGV4IGEzODdlM2VlNzI4Yi4u OTYwMDgzNzRhNDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fb2JqZWN0X3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X29iamVjdF90eXBlcy5oCkBAIC0zMSwxMCArMzEsMTEgQEAgc3RydWN0IGk5MTVfbHV0X2hhbmRs ZSB7CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewogCXVuc2lnbmVkIGludCBmbGFn czsKICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0hBU19TVFJVQ1RfUEFHRQlCSVQoMCkKLSNkZWZp bmUgSTkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUJQklUKDEpCi0jZGVmaW5lIEk5MTVfR0VN X09CSkVDVF9JU19QUk9YWQlCSVQoMikKLSNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX05PX0dHVFQJ CUJJVCgzKQotI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMCUJJVCg0KQorI2Rl ZmluZSBJOTE1X0dFTV9PQkpFQ1RfSEFTX0lPTUVNCUJJVCgxKQorI2RlZmluZSBJOTE1X0dFTV9P QkpFQ1RfSVNfU0hSSU5LQUJMRQlCSVQoMikKKyNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0lTX1BS T1hZCUJJVCgzKQorI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfTk9fR0dUVAkJQklUKDQpCisjZGVm aW5lIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwJQklUKDUpCiAKIAkvKiBJbnRlcmZhY2Ug YmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQgaXRzIGJhY2tpbmcgc3RvcmFnZS4KIAkgKiBnZXRf cGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlvciB0byB0aGUgdXNlIG9mIHRoZSBhc3NvY2lhdGVk IHNldApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2Vz LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYwppbmRleCBiMGVj MDk1OWMxM2YuLmNmN2Y1YTNjYjIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX3BhZ2VzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3BhZ2VzLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNs dWRlICJpOTE1X2dlbV9vYmplY3QuaCIKICNpbmNsdWRlICJpOTE1X3NjYXR0ZXJsaXN0LmgiCisj aW5jbHVkZSAiaTkxNV9nZW1fbG1lbS5oIgogCiB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X3NldF9w YWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJCSBzdHJ1Y3Qgc2dfdGFi bGUgKnBhZ2VzLApAQCAtMTcyLDcgKzE3Myw5IEBAIF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3Bh Z2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJCXZvaWQgKnB0cjsKIAogCQlw dHIgPSBwYWdlX21hc2tfYml0cyhvYmotPm1tLm1hcHBpbmcpOwotCQlpZiAoaXNfdm1hbGxvY19h ZGRyKHB0cikpCisJCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfbG1lbShvYmopKQorCQkJaW9fbWFw cGluZ191bm1hcChwdHIpOworCQllbHNlIGlmIChpc192bWFsbG9jX2FkZHIocHRyKSkKIAkJCXZ1 bm1hcChwdHIpOwogCQllbHNlCiAJCQlrdW5tYXAoa21hcF90b19wYWdlKHB0cikpOwpAQCAtMjMx LDcgKzIzNCw3IEBAIGludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKIH0KIAogLyogVGhlICdtYXBwaW5nJyBwYXJ0IG9mIGk5MTVf Z2VtX29iamVjdF9waW5fbWFwKCkgYmVsb3cgKi8KLXN0YXRpYyB2b2lkICppOTE1X2dlbV9vYmpl Y3RfbWFwKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCitzdGF0aWMgdm9p ZCAqaTkxNV9nZW1fb2JqZWN0X21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAog CQkJCSBlbnVtIGk5MTVfbWFwX3R5cGUgdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIG5fcGFnZXMg PSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwpAQCAtMjQ0LDYgKzI0NywxMyBAQCBzdGF0 aWMgdm9pZCAqaTkxNV9nZW1fb2JqZWN0X21hcChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAogCXBncHJvdF90IHBncHJvdDsKIAl2b2lkICphZGRyOwogCisJaWYgKGk5MTVf Z2VtX29iamVjdF9pc19sbWVtKG9iaikpIHsKKwkJaWYgKHR5cGUgIT0gSTkxNV9NQVBfV0MpCisJ CQlyZXR1cm4gTlVMTDsKKworCQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X2xtZW1faW9fbWFwKG9i aiwgMCwgb2JqLT5iYXNlLnNpemUpOworCX0KKwogCS8qIEEgc2luZ2xlIHBhZ2UgY2FuIGFsd2F5 cyBiZSBrbWFwcGVkICovCiAJaWYgKG5fcGFnZXMgPT0gMSAmJiB0eXBlID09IEk5MTVfTUFQX1dC KQogCQlyZXR1cm4ga21hcChzZ19wYWdlKHNndC0+c2dsKSk7CkBAIC0yODUsMTEgKzI5NSwxMyBA QCB2b2lkICppOTE1X2dlbV9vYmplY3RfcGluX21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAogCQkJICAgICAgZW51bSBpOTE1X21hcF90eXBlIHR5cGUpCiB7CiAJZW51bSBpOTE1 X21hcF90eXBlIGhhc190eXBlOworCXVuc2lnbmVkIGludCBmbGFnczsKIAlib29sIHBpbm5lZDsK IAl2b2lkICpwdHI7CiAJaW50IGVycjsKIAotCWlmICh1bmxpa2VseSghaTkxNV9nZW1fb2JqZWN0 X2hhc19zdHJ1Y3RfcGFnZShvYmopKSkKKwlmbGFncyA9IEk5MTVfR0VNX09CSkVDVF9IQVNfU1RS VUNUX1BBR0UgfCBJOTE1X0dFTV9PQkpFQ1RfSEFTX0lPTUVNOworCWlmICghaTkxNV9nZW1fb2Jq ZWN0X3R5cGVfaGFzKG9iaiwgZmxhZ3MpKQogCQlyZXR1cm4gRVJSX1BUUigtRU5YSU8pOwogCiAJ ZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZvYmotPm1tLmxvY2spOwpAQCAtMzIxLDcg KzMzMyw5IEBAIHZvaWQgKmk5MTVfZ2VtX29iamVjdF9waW5fbWFwKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCiAJCQlnb3RvIGVycl91bnBpbjsKIAkJfQogCi0JCWlmIChpc192bWFs bG9jX2FkZHIocHRyKSkKKwkJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19sbWVtKG9iaikpCisJCQlp b19tYXBwaW5nX3VubWFwKHB0cik7CisJCWVsc2UgaWYgKGlzX3ZtYWxsb2NfYWRkcihwdHIpKQog CQkJdnVubWFwKHB0cik7CiAJCWVsc2UKIAkJCWt1bm1hcChrbWFwX3RvX3BhZ2UocHRyKSk7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3Jl Z2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdp b24uYwppbmRleCA2MTdhMzVjZmFjMmYuLjI5MjQ4OTM3MTg0MiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdpb24uYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCkBAIC0xMyw4 ICsxMywxMCBAQAogCiAjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX2xtZW0uaCIKICNpbmNsdWRlICJn ZW0vaTkxNV9nZW1fcmVnaW9uLmgiCisjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX29iamVjdF9ibHQu aCIKICNpbmNsdWRlICJnZW0vc2VsZnRlc3RzL21vY2tfY29udGV4dC5oIgogI2luY2x1ZGUgImd0 L2ludGVsX2d0LmgiCisjaW5jbHVkZSAic2VsZnRlc3RzL2lndF9mbHVzaF90ZXN0LmgiCiAjaW5j bHVkZSAic2VsZnRlc3RzL2k5MTVfcmFuZG9tLmgiCiAKIHN0YXRpYyB2b2lkIGNsb3NlX29iamVj dHMoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKQEAgLTI3NSw2ICsyNzcsMTE2IEBA IHN0YXRpYyBpbnQgaWd0X2xtZW1fY3JlYXRlKHZvaWQgKmFyZykKIAlyZXR1cm4gZXJyOwogfQog CitzdGF0aWMgaW50IGlndF9sbWVtX3dyaXRlX2NwdSh2b2lkICphcmcpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKKwlJOTE1X1JORF9TVEFURShwcm5nKTsKKwlJR1RfVElNRU9VVChlbmRfdGltZSk7CisJ dTMyIGJ5dGVzW10gPSB7CisJCTAsIC8qIHJuZyBwbGFjZWhvbGRlciAqLworCQlzaXplb2YodTMy KSwKKwkJc2l6ZW9mKHU2NCksCisJCTY0LCAvKiBjbCAqLworCQlQQUdFX1NJWkUsCisJCVBBR0Vf U0laRSAtIHNpemVvZih1MzIpLAorCQlQQUdFX1NJWkUgLSBzaXplb2YodTY0KSwKKwkJUEFHRV9T SVpFIC0gNjQsCisJfTsKKwl1MzIgKnZhZGRyOworCXUzMiBzejsKKwl1MzIgaTsKKwlpbnQgKm9y ZGVyOworCWludCBjb3VudDsKKwlpbnQgZXJyOworCisJaWYgKCFIQVNfRU5HSU5FKGk5MTUsIEJD UzApKQorCQlyZXR1cm4gMDsKKworCXN6ID0gcm91bmRfdXAocHJhbmRvbV91MzJfc3RhdGUoJnBy bmcpICUgU1pfMzJNLCBQQUdFX1NJWkUpOworCXN6ID0gbWF4X3QodTMyLCAyICogUEFHRV9TSVpF LCBzeik7CisKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2xtZW0oaTkxNSwgc3osIEk5 MTVfQk9fQUxMT0NfQ09OVElHVU9VUyk7CisJaWYgKElTX0VSUihvYmopKQorCQlyZXR1cm4gUFRS X0VSUihvYmopOworCisJdmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChvYmosIEk5MTVf TUFQX1dDKTsKKwlpZiAoSVNfRVJSKHZhZGRyKSkgeworCQllcnIgPSBQVFJfRVJSKHZhZGRyKTsK KwkJZ290byBvdXRfcHV0OworCX0KKworCS8qIFB1dCB0aGUgcGFnZXMgaW50byBhIGtub3duIHN0 YXRlIC0tIGRvIHNvIGZyb20gdGhlIGdwdSBmb3IgYWRkZWQgZnVuICovCisJZXJyID0gaTkxNV9n ZW1fb2JqZWN0X2ZpbGxfYmx0KG9iaiwgaTkxNS0+ZW5naW5lW0JDUzBdLT5rZXJuZWxfY29udGV4 dCwKKwkJCQkgICAgICAgMHhkZWFkYmVhZik7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5waW47 CisKKwlpOTE1X2dlbV9vYmplY3RfbG9jayhvYmopOworCWVyciA9IGk5MTVfZ2VtX29iamVjdF9z ZXRfdG9fd2NfZG9tYWluKG9iaiwgdHJ1ZSk7CisJaTkxNV9nZW1fb2JqZWN0X3VubG9jayhvYmop OworCWlmIChlcnIpCisJCWdvdG8gb3V0X3VucGluOworCisJY291bnQgPSBBUlJBWV9TSVpFKGJ5 dGVzKTsKKwlvcmRlciA9IGk5MTVfcmFuZG9tX29yZGVyKGNvdW50ICogY291bnQsICZwcm5nKTsK KwlpZiAoIW9yZGVyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VucGluOworCX0K KworCS8qIFdlIHdhbnQgdG8gdGhyb3cgaW4gYSByYW5kb20gd2lkdGgvYWxpZ24gKi8KKwlieXRl c1swXSA9IGlndF9yYW5kb21fb2Zmc2V0KCZwcm5nLCAwLCBQQUdFX1NJWkUsIHNpemVvZih1MzIp LAorCQkJCSAgICAgc2l6ZW9mKHUzMikpOworCisJaSA9IDA7CisJZG8geworCQl1MzIgb2Zmc2V0 OworCQl1MzIgYWxpZ247CisJCXUzMiBkd29yZDsKKwkJdTMyIHNpemU7CisJCXUzMiB2YWw7CisK KwkJc2l6ZSA9IGJ5dGVzW29yZGVyW2ldICUgY291bnRdOworCQlpID0gKGkgKyAxKSAlIChjb3Vu dCAqIGNvdW50KTsKKworCQlhbGlnbiA9IGJ5dGVzW29yZGVyW2ldICUgY291bnRdOworCQlpID0g KGkgKyAxKSAlIChjb3VudCAqIGNvdW50KTsKKworCQlhbGlnbiA9IG1heF90KHUzMiwgc2l6ZW9m KHUzMiksIHJvdW5kZG93bl9wb3dfb2ZfdHdvKGFsaWduKSk7CisKKwkJb2Zmc2V0ID0gaWd0X3Jh bmRvbV9vZmZzZXQoJnBybmcsIDAsIG9iai0+YmFzZS5zaXplLAorCQkJCQkgICBzaXplLCBhbGln bik7CisKKwkJdmFsID0gcHJhbmRvbV91MzJfc3RhdGUoJnBybmcpOworCQltZW1zZXQzMih2YWRk ciArIG9mZnNldCAvIHNpemVvZih1MzIpLCB2YWwgXiAweGRlYWRiZWFmLAorCQkJIHNpemUgLyBz aXplb2YodTMyKSk7CisKKwkJLyoKKwkJICogU2FtcGxlIHJhbmRvbSBkdyAtLSBkb24ndCB3YXN0 ZSBwcmVjaW91cyB0aW1lIHJlYWRpbmcgZXZlcnkKKwkJICogc2luZ2xlIGR3LgorCQkgKi8KKwkJ ZHdvcmQgPSBpZ3RfcmFuZG9tX29mZnNldCgmcHJuZywgb2Zmc2V0LAorCQkJCQkgIG9mZnNldCAr IHNpemUsCisJCQkJCSAgc2l6ZW9mKHUzMiksIHNpemVvZih1MzIpKTsKKwkJZHdvcmQgLz0gc2l6 ZW9mKHUzMik7CisJCWlmICh2YWRkcltkd29yZF0gIT0gKHZhbCBeIDB4ZGVhZGJlYWYpKSB7CisJ CQlwcl9lcnIoIiVzIHZhZGRyWyV1XT0ldSwgdmFsPSV1LCBzaXplPSV1LCBhbGlnbj0ldSwgb2Zm c2V0PSV1XG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBkd29yZCwgdmFkZHJbZHdvcmRdLCB2YWwg XiAweGRlYWRiZWFmLAorCQkJICAgICAgIHNpemUsIGFsaWduLCBvZmZzZXQpOworCQkJZXJyID0g LUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoIV9faWd0X3RpbWVvdXQoZW5kX3Rp bWUsIE5VTEwpKTsKKworb3V0X3VucGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob2Jq KTsKK291dF9wdXQ6CisJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCisJcmV0dXJuIGVycjsK K30KKwogaW50IGludGVsX21lbW9yeV9yZWdpb25fbW9ja19zZWxmdGVzdHModm9pZCkKIHsKIAlz dGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewpAQCAtMzA4LDYgKzQy MCw3IEBAIGludCBpbnRlbF9tZW1vcnlfcmVnaW9uX2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0 IHRlc3RzW10gPSB7CiAJCVNVQlRFU1QoaWd0X2xtZW1fY3JlYXRlKSwKKwkJU1VCVEVTVChpZ3Rf bG1lbV93cml0ZV9jcHUpLAogCX07CiAKIAlpZiAoIUhBU19MTUVNKGk5MTUpKSB7Ci0tIAoyLjIw LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==