From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH v2 08/22] drm/i915/lmem: support kernel mapping Date: Thu, 3 Oct 2019 20:24:30 +0100 Message-ID: <20191003192444.10113-9-matthew.auld@intel.com> References: <20191003192444.10113-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2A4DA6EA57 for ; Thu, 3 Oct 2019 19:25:03 +0000 (UTC) In-Reply-To: <20191003192444.10113-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 IC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jICB8IDExOCArKysr KysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTg1IGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X2xtZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9sbWVtLmMKaW5kZXgg MjZhMjMzMDRkZjMyLi4xYTA0NTg1OGIzYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9sbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX2xtZW0uYwpAQCAtOSwxMSArOSw0NyBAQAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAK IGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9sbWVtX29ial9v cHMgPSB7CisJLmZsYWdzID0gSTkxNV9HRU1fT0JKRUNUX0hBU19JT01FTSwKKwogCS5nZXRfcGFn ZXMgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2J1ZGR5LAogCS5wdXRfcGFnZXMgPSBpOTE1 X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2J1ZGR5LAogCS5yZWxlYXNlID0gaTkxNV9nZW1fb2JqZWN0 X3JlbGVhc2VfbWVtb3J5X3JlZ2lvbiwKIH07CiAKKy8qIFhYWDogVGltZSB0byB2ZnVuYyB5b3Vy IGxpZmUgdXA/ICovCit2b2lkIF9faW9tZW0gKmk5MTVfZ2VtX29iamVjdF9sbWVtX2lvX21hcF9w YWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCSAgICAgICB1bnNpZ25l ZCBsb25nIG4pCit7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldDsKKworCW9mZnNldCA9IGk5MTVf Z2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Mob2JqLCBuKTsKKworCXJldHVybiBpb19tYXBwaW5n X21hcF93Yygmb2JqLT5tbS5yZWdpb24tPmlvbWFwLCBvZmZzZXQsIFBBR0VfU0laRSk7Cit9CisK K3ZvaWQgX19pb21lbSAqaTkxNV9nZW1fb2JqZWN0X2xtZW1faW9fbWFwX3BhZ2VfYXRvbWljKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCQkgICAgICB1bnNpZ25lZCBsb25n IG4pCit7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldDsKKworCW9mZnNldCA9IGk5MTVfZ2VtX29i amVjdF9nZXRfZG1hX2FkZHJlc3Mob2JqLCBuKTsKKworCXJldHVybiBpb19tYXBwaW5nX21hcF9h dG9taWNfd2MoJm9iai0+bW0ucmVnaW9uLT5pb21hcCwgb2Zmc2V0KTsKK30KKwordm9pZCBfX2lv bWVtICppOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG4sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBz aXplKQoreworCXJlc291cmNlX3NpemVfdCBvZmZzZXQ7CisKKwlHRU1fQlVHX09OKCEob2JqLT5m bGFncyAmIEk5MTVfQk9fQUxMT0NfQ09OVElHVU9VUykpOworCisJb2Zmc2V0ID0gaTkxNV9nZW1f b2JqZWN0X2dldF9kbWFfYWRkcmVzcyhvYmosIG4pOworCisJcmV0dXJuIGlvX21hcHBpbmdfbWFw X3djKCZvYmotPm1tLnJlZ2lvbi0+aW9tYXAsIG9mZnNldCwgc2l6ZSk7Cit9CisKIGJvb2wgaTkx NV9nZW1fb2JqZWN0X2lzX2xtZW0oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsK IAlzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqcmVnaW9uID0gb2JqLT5tbS5yZWdpb247CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2xtZW0uaAppbmRleCBlYmMxNWZlMjRmNTgu LjMxYTY0NjJiZGJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX2xtZW0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5o CkBAIC0xMyw2ICsxMywxNCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKIAogZXh0ZXJu IGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9sbWVtX29ial9v cHM7CiAKK3ZvaWQgX19pb21lbSAqaTkxNV9nZW1fb2JqZWN0X2xtZW1faW9fbWFwKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCSAgdW5zaWduZWQgbG9uZyBuLCB1bnNpZ25l ZCBsb25nIHNpemUpOwordm9pZCBfX2lvbWVtICppOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXBf cGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCQkgICAgICAgdW5zaWdu ZWQgbG9uZyBuKTsKK3ZvaWQgX19pb21lbSAqCitpOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXBf cGFnZV9hdG9taWMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkJdW5zaWdu ZWQgbG9uZyBuKTsKKwogYm9vbCBpOTE1X2dlbV9vYmplY3RfaXNfbG1lbShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCmluZGV4 IDlhODU3OWI2NzM1Ny4uYjc1YTE0YTYxZDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCkBAIC0zMCwxMCArMzAsMTEgQEAgc3RydWN0 IGk5MTVfbHV0X2hhbmRsZSB7CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewogCXVu c2lnbmVkIGludCBmbGFnczsKICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0hBU19TVFJVQ1RfUEFH RQlCSVQoMCkKLSNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUJQklUKDEpCi0j ZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9JU19QUk9YWQlCSVQoMikKLSNkZWZpbmUgSTkxNV9HRU1f T0JKRUNUX05PX0dHVFQJCUJJVCgzKQotI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FO Q0VMCUJJVCg0KQorI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSEFTX0lPTUVNCUJJVCgxKQorI2Rl ZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNfU0hSSU5LQUJMRQlCSVQoMikKKyNkZWZpbmUgSTkxNV9H RU1fT0JKRUNUX0lTX1BST1hZCUJJVCgzKQorI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfTk9fR0dU VAkJQklUKDQpCisjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwJQklUKDUpCiAK IAkvKiBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQgaXRzIGJhY2tpbmcgc3Rv cmFnZS4KIAkgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlvciB0byB0aGUgdXNlIG9m IHRoZSBhc3NvY2lhdGVkIHNldApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX3BhZ2VzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFn ZXMuYwppbmRleCBiMGVjMDk1OWMxM2YuLmNmN2Y1YTNjYjIxMCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSAiaTkx NV9kcnYuaCIKICNpbmNsdWRlICJpOTE1X2dlbV9vYmplY3QuaCIKICNpbmNsdWRlICJpOTE1X3Nj YXR0ZXJsaXN0LmgiCisjaW5jbHVkZSAiaTkxNV9nZW1fbG1lbS5oIgogCiB2b2lkIF9faTkxNV9n ZW1fb2JqZWN0X3NldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJ CSBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLApAQCAtMTcyLDcgKzE3Myw5IEBAIF9faTkxNV9nZW1f b2JqZWN0X3Vuc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJCXZv aWQgKnB0cjsKIAogCQlwdHIgPSBwYWdlX21hc2tfYml0cyhvYmotPm1tLm1hcHBpbmcpOwotCQlp ZiAoaXNfdm1hbGxvY19hZGRyKHB0cikpCisJCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfbG1lbShv YmopKQorCQkJaW9fbWFwcGluZ191bm1hcChwdHIpOworCQllbHNlIGlmIChpc192bWFsbG9jX2Fk ZHIocHRyKSkKIAkJCXZ1bm1hcChwdHIpOwogCQllbHNlCiAJCQlrdW5tYXAoa21hcF90b19wYWdl KHB0cikpOwpAQCAtMjMxLDcgKzIzNCw3IEBAIGludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFn ZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIH0KIAogLyogVGhlICdtYXBwaW5n JyBwYXJ0IG9mIGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKCkgYmVsb3cgKi8KLXN0YXRpYyB2b2lk ICppOTE1X2dlbV9vYmplY3RfbWFwKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCitzdGF0aWMgdm9pZCAqaTkxNV9nZW1fb2JqZWN0X21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAogCQkJCSBlbnVtIGk5MTVfbWFwX3R5cGUgdHlwZSkKIHsKIAl1bnNpZ25l ZCBsb25nIG5fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwpAQCAtMjQ0LDYg KzI0NywxMyBAQCBzdGF0aWMgdm9pZCAqaTkxNV9nZW1fb2JqZWN0X21hcChjb25zdCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCXBncHJvdF90IHBncHJvdDsKIAl2b2lkICphZGRy OwogCisJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19sbWVtKG9iaikpIHsKKwkJaWYgKHR5cGUgIT0g STkxNV9NQVBfV0MpCisJCQlyZXR1cm4gTlVMTDsKKworCQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0 X2xtZW1faW9fbWFwKG9iaiwgMCwgb2JqLT5iYXNlLnNpemUpOworCX0KKwogCS8qIEEgc2luZ2xl IHBhZ2UgY2FuIGFsd2F5cyBiZSBrbWFwcGVkICovCiAJaWYgKG5fcGFnZXMgPT0gMSAmJiB0eXBl ID09IEk5MTVfTUFQX1dCKQogCQlyZXR1cm4ga21hcChzZ19wYWdlKHNndC0+c2dsKSk7CkBAIC0y ODUsMTEgKzI5NSwxMyBAQCB2b2lkICppOTE1X2dlbV9vYmplY3RfcGluX21hcChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJICAgICAgZW51bSBpOTE1X21hcF90eXBlIHR5cGUp CiB7CiAJZW51bSBpOTE1X21hcF90eXBlIGhhc190eXBlOworCXVuc2lnbmVkIGludCBmbGFnczsK IAlib29sIHBpbm5lZDsKIAl2b2lkICpwdHI7CiAJaW50IGVycjsKIAotCWlmICh1bmxpa2VseSgh aTkxNV9nZW1fb2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShvYmopKSkKKwlmbGFncyA9IEk5MTVfR0VN X09CSkVDVF9IQVNfU1RSVUNUX1BBR0UgfCBJOTE1X0dFTV9PQkpFQ1RfSEFTX0lPTUVNOworCWlm ICghaTkxNV9nZW1fb2JqZWN0X3R5cGVfaGFzKG9iaiwgZmxhZ3MpKQogCQlyZXR1cm4gRVJSX1BU UigtRU5YSU8pOwogCiAJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZvYmotPm1tLmxv Y2spOwpAQCAtMzIxLDcgKzMzMyw5IEBAIHZvaWQgKmk5MTVfZ2VtX29iamVjdF9waW5fbWFwKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQlnb3RvIGVycl91bnBpbjsKIAkJfQog Ci0JCWlmIChpc192bWFsbG9jX2FkZHIocHRyKSkKKwkJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19s bWVtKG9iaikpCisJCQlpb19tYXBwaW5nX3VubWFwKHB0cik7CisJCWVsc2UgaWYgKGlzX3ZtYWxs b2NfYWRkcihwdHIpKQogCQkJdnVubWFwKHB0cik7CiAJCWVsc2UKIAkJCWt1bm1hcChrbWFwX3Rv X3BhZ2UocHRyKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aW50ZWxfbWVtb3J5X3JlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lu dGVsX21lbW9yeV9yZWdpb24uYwppbmRleCA5NjkyZGQ0NDhiOGMuLjFhZDc1NWU3NWU1NyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdp b24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3Jl Z2lvbi5jCkBAIC0xMyw4ICsxMywxMCBAQAogCiAjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX2xtZW0u aCIKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1fcmVnaW9uLmgiCisjaW5jbHVkZSAiZ2VtL2k5MTVf Z2VtX29iamVjdF9ibHQuaCIKICNpbmNsdWRlICJnZW0vc2VsZnRlc3RzL21vY2tfY29udGV4dC5o IgogI2luY2x1ZGUgImd0L2ludGVsX2d0LmgiCisjaW5jbHVkZSAic2VsZnRlc3RzL2lndF9mbHVz aF90ZXN0LmgiCiAjaW5jbHVkZSAic2VsZnRlc3RzL2k5MTVfcmFuZG9tLmgiCiAKIHN0YXRpYyB2 b2lkIGNsb3NlX29iamVjdHMoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKQEAgLTI3 NCw2ICsyNzYsMTIxIEBAIHN0YXRpYyBpbnQgaWd0X2xtZW1fY3JlYXRlKHZvaWQgKmFyZykKIAly ZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGlndF9sbWVtX3dyaXRlX2NwdSh2b2lkICphcmcp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iajsKKwlJOTE1X1JORF9TVEFURShwcm5nKTsKKwlJR1RfVElNRU9V VChlbmRfdGltZSk7CisJdTMyIGJ5dGVzW10gPSB7CisJCTAsIC8qIHJuZyBwbGFjZWhvbGRlciAq LworCQlzaXplb2YodTMyKSwKKwkJc2l6ZW9mKHU2NCksCisJCTY0LCAvKiBjbCAqLworCQlQQUdF X1NJWkUsCisJCVBBR0VfU0laRSAtIHNpemVvZih1MzIpLAorCQlQQUdFX1NJWkUgLSBzaXplb2Yo dTY0KSwKKwkJUEFHRV9TSVpFIC0gNjQsCisJfTsKKwl1MzIgKnZhZGRyOworCXUzMiB2YWw7CisJ dTMyIHN6OworCXUzMiBpOworCWludCAqb3JkZXI7CisJaW50IGNvdW50OworCWludCBlcnI7CisK KwlpZiAoIUhBU19FTkdJTkUoaTkxNSwgQkNTMCkpCisJCXJldHVybiAwOworCisJc3ogPSByb3Vu ZF91cChwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZykgJSBTWl8zMk0sIFBBR0VfU0laRSk7CisJc3og PSBtYXhfdCh1MzIsIDIgKiBQQUdFX1NJWkUsIHN6KTsKKworCW9iaiA9IGk5MTVfZ2VtX29iamVj dF9jcmVhdGVfbG1lbShpOTE1LCBzeiwgSTkxNV9CT19BTExPQ19DT05USUdVT1VTKTsKKwlpZiAo SVNfRVJSKG9iaikpCisJCXJldHVybiBQVFJfRVJSKG9iaik7CisKKwl2YWRkciA9IGk5MTVfZ2Vt X29iamVjdF9waW5fbWFwKG9iaiwgSTkxNV9NQVBfV0MpOworCWlmIChJU19FUlIodmFkZHIpKSB7 CisJCWVyciA9IFBUUl9FUlIodmFkZHIpOworCQlnb3RvIG91dF9wdXQ7CisJfQorCisJdmFsID0g cHJhbmRvbV91MzJfc3RhdGUoJnBybmcpOworCisJLyogUHV0IHRoZSBwYWdlcyBpbnRvIGEga25v d24gc3RhdGUgLS0gZG8gc28gZnJvbSB0aGUgZ3B1IGZvciBhZGRlZCBmdW4gKi8KKwllcnIgPSBp OTE1X2dlbV9vYmplY3RfZmlsbF9ibHQob2JqLCBpOTE1LT5lbmdpbmVbQkNTMF0tPmtlcm5lbF9j b250ZXh0LAorCQkJCSAgICAgICB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3VucGluOwor CisJaTkxNV9nZW1fb2JqZWN0X2xvY2sob2JqKTsKKwllcnIgPSBpOTE1X2dlbV9vYmplY3Rfc2V0 X3RvX3djX2RvbWFpbihvYmosIHRydWUpOworCWk5MTVfZ2VtX29iamVjdF91bmxvY2sob2JqKTsK KwlpZiAoZXJyKQorCQlnb3RvIG91dF91bnBpbjsKKworCWNvdW50ID0gQVJSQVlfU0laRShieXRl cyk7CisJb3JkZXIgPSBpOTE1X3JhbmRvbV9vcmRlcihjb3VudCAqIGNvdW50LCAmcHJuZyk7CisJ aWYgKCFvcmRlcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bnBpbjsKKwl9CisK KwkvKiBXZSB3YW50IHRvIHRocm93IGluIGEgcmFuZG9tIHdpZHRoL2FsaWduICovCisJYnl0ZXNb MF0gPSBpZ3RfcmFuZG9tX29mZnNldCgmcHJuZywgMCwgUEFHRV9TSVpFLCBzaXplb2YodTMyKSwK KwkJCQkgICAgIHNpemVvZih1MzIpKTsKKworCWkgPSAwOworCWRvIHsKKwkJdTMyIG9mZnNldDsK KwkJdTMyIGFsaWduOworCQl1MzIgZHdvcmQ7CisJCXUzMiBzaXplOworCisJCXNpemUgPSBieXRl c1tvcmRlcltpXSAlIGNvdW50XTsKKwkJaSA9IChpICsgMSkgJSAoY291bnQgKiBjb3VudCk7CisK KwkJYWxpZ24gPSBieXRlc1tvcmRlcltpXSAlIGNvdW50XTsKKwkJaSA9IChpICsgMSkgJSAoY291 bnQgKiBjb3VudCk7CisKKwkJYWxpZ24gPSBtYXhfdCh1MzIsIHNpemVvZih1MzIpLCByb3VuZGRv d25fcG93X29mX3R3byhhbGlnbikpOworCisJCW9mZnNldCA9IGlndF9yYW5kb21fb2Zmc2V0KCZw cm5nLCAwLCBvYmotPmJhc2Uuc2l6ZSwKKwkJCQkJICAgc2l6ZSwgYWxpZ24pOworCisJCXZhbCA9 IHByYW5kb21fdTMyX3N0YXRlKCZwcm5nKTsKKwkJbWVtc2V0MzIodmFkZHIgKyBvZmZzZXQgLyBz aXplb2YodTMyKSwgdmFsIF4gMHhkZWFkYmVhZiwKKwkJCSBzaXplIC8gc2l6ZW9mKHUzMikpOwor CisJCS8qCisJCSAqIFNhbXBsZSByYW5kb20gZHcgLS0gZG9uJ3Qgd2FzdGUgcHJlY2lvdXMgdGlt ZSByZWFkaW5nIGV2ZXJ5CisJCSAqIHNpbmdsZSBkdy4KKwkJICovCisJCWR3b3JkID0gaWd0X3Jh bmRvbV9vZmZzZXQoJnBybmcsIG9mZnNldCwKKwkJCQkJICBvZmZzZXQgKyBzaXplLAorCQkJCQkg IHNpemVvZih1MzIpLCBzaXplb2YodTMyKSk7CisJCWR3b3JkIC89IHNpemVvZih1MzIpOworCQlp ZiAodmFkZHJbZHdvcmRdICE9ICh2YWwgXiAweGRlYWRiZWFmKSkgeworCQkJcHJfZXJyKCIlcyB2 YWRkclsldV09JXUsIHZhbD0ldSwgc2l6ZT0ldSwgYWxpZ249JXUsIG9mZnNldD0ldVxuIiwKKwkJ CSAgICAgICBfX2Z1bmNfXywgZHdvcmQsIHZhZGRyW2R3b3JkXSwgdmFsIF4gMHhkZWFkYmVhZiwK KwkJCSAgICAgICBzaXplLCBhbGlnbiwgb2Zmc2V0KTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQli cmVhazsKKwkJfQorCX0gd2hpbGUgKCFfX2lndF90aW1lb3V0KGVuZF90aW1lLCBOVUxMKSk7CisK K291dF91bnBpbjoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7CitvdXRfcHV0Ogor CWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKworCWlmIChpZ3RfZmx1c2hfdGVzdChpOTE1LCBJ OTE1X1dBSVRfTE9DS0VEKSkKKwkJZXJyID0gLUVJTzsKKworCXJldHVybiBlcnI7Cit9CisKIGlu dCBpbnRlbF9tZW1vcnlfcmVnaW9uX21vY2tfc2VsZnRlc3RzKHZvaWQpCiB7CiAJc3RhdGljIGNv bnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKQEAgLTMwOSw2ICs0MjYsNyBAQCBp bnQgaW50ZWxfbWVtb3J5X3JlZ2lvbl9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1td ID0gewogCQlTVUJURVNUKGlndF9sbWVtX2NyZWF0ZSksCisJCVNVQlRFU1QoaWd0X2xtZW1fd3Jp dGVfY3B1KSwKIAl9OwogCWludCBlcnI7CiAKLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4