From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH v2 3/7] drm/i915/lmem: support kernel mapping Date: Mon, 21 Oct 2019 20:27:43 +0100 Message-ID: <20191021192747.24804-3-matthew.auld@intel.com> References: <20191021192747.24804-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 B49396E22B for ; Mon, 21 Oct 2019 19:27:52 +0000 (UTC) In-Reply-To: <20191021192747.24804-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 IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KUmV2aWV3 ZWQtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9sbWVtLmMgICAgICB8ICAzNiArKysrKysKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9sbWVtLmggICAgICB8ICAgOCArKwogLi4u L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmggIHwgICA5ICstCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYyAgICAgfCAgMjIgKysrLQogLi4u L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMgIHwgMTEzICsrKysrKysr KysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxODAgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1l bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2xtZW0uYwppbmRleCA1MTY4 YWI5ZmE0Y2UuLjkxOWNlMDczNmM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX2xtZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fbG1lbS5jCkBAIC05LDExICs5LDQ3IEBACiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKIAogY29u c3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX2xtZW1fb2JqX29wcyA9 IHsKKwkuZmxhZ3MgPSBJOTE1X0dFTV9PQkpFQ1RfSEFTX0lPTUVNLAorCiAJLmdldF9wYWdlcyA9 IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfYnVkZHksCiAJLnB1dF9wYWdlcyA9IGk5MTVfZ2Vt X29iamVjdF9wdXRfcGFnZXNfYnVkZHksCiAJLnJlbGVhc2UgPSBpOTE1X2dlbV9vYmplY3RfcmVs ZWFzZV9tZW1vcnlfcmVnaW9uLAogfTsKIAorLyogWFhYOiBUaW1lIHRvIHZmdW5jIHlvdXIgbGlm ZSB1cD8gKi8KK3ZvaWQgX19pb21lbSAqaTkxNV9nZW1fb2JqZWN0X2xtZW1faW9fbWFwX3BhZ2Uo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxv bmcgbikKK3sKKwlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0OworCisJb2Zmc2V0ID0gaTkxNV9nZW1f b2JqZWN0X2dldF9kbWFfYWRkcmVzcyhvYmosIG4pOworCisJcmV0dXJuIGlvX21hcHBpbmdfbWFw X3djKCZvYmotPm1tLnJlZ2lvbi0+aW9tYXAsIG9mZnNldCwgUEFHRV9TSVpFKTsKK30KKwordm9p ZCBfX2lvbWVtICppOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXBfcGFnZV9hdG9taWMoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbikK K3sKKwlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0OworCisJb2Zmc2V0ID0gaTkxNV9nZW1fb2JqZWN0 X2dldF9kbWFfYWRkcmVzcyhvYmosIG4pOworCisJcmV0dXJuIGlvX21hcHBpbmdfbWFwX2F0b21p Y193Yygmb2JqLT5tbS5yZWdpb24tPmlvbWFwLCBvZmZzZXQpOworfQorCit2b2lkIF9faW9tZW0g Kmk5MTVfZ2VtX29iamVjdF9sbWVtX2lvX21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgbiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUp Cit7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldDsKKworCUdFTV9CVUdfT04oIWk5MTVfZ2VtX29i amVjdF9pc19jb250aWd1b3VzKG9iaikpOworCisJb2Zmc2V0ID0gaTkxNV9nZW1fb2JqZWN0X2dl dF9kbWFfYWRkcmVzcyhvYmosIG4pOworCisJcmV0dXJuIGlvX21hcHBpbmdfbWFwX3djKCZvYmot Pm1tLnJlZ2lvbi0+aW9tYXAsIG9mZnNldCwgc2l6ZSk7Cit9CisKIGJvb2wgaTkxNV9nZW1fb2Jq ZWN0X2lzX2xtZW0oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKIAlyZXR1cm4g b2JqLT5vcHMgPT0gJmk5MTVfZ2VtX2xtZW1fb2JqX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9sbWVtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fbG1lbS5oCmluZGV4IGZjM2YxNTU4MGZlMy4uN2MxNzZiOGI3ZDJmIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9sbWVtLmgKQEAgLTE0LDYgKzE0LDE0IEBA IHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX2xtZW1fb2JqX29wczsKIAordm9pZCBfX2lvbWVt ICppOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG4sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Cit2b2lk IF9faW9tZW0gKmk5MTVfZ2VtX29iamVjdF9sbWVtX2lvX21hcF9wYWdlKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG4pOwordm9pZCBf X2lvbWVtICoKK2k5MTVfZ2VtX29iamVjdF9sbWVtX2lvX21hcF9wYWdlX2F0b21pYyhzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCQl1bnNpZ25lZCBsb25nIG4pOworCiBib29s IGk5MTVfZ2VtX29iamVjdF9pc19sbWVtKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKaW5kZXggYTM4N2UzZWU3MjhiLi45NjAw ODM3NGE0MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9v YmplY3RfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2Jq ZWN0X3R5cGVzLmgKQEAgLTMxLDEwICszMSwxMSBAQCBzdHJ1Y3QgaTkxNV9sdXRfaGFuZGxlIHsK IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyB7CiAJdW5zaWduZWQgaW50IGZsYWdzOwog I2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSEFTX1NUUlVDVF9QQUdFCUJJVCgwKQotI2RlZmluZSBJ OTE1X0dFTV9PQkpFQ1RfSVNfU0hSSU5LQUJMRQlCSVQoMSkKLSNkZWZpbmUgSTkxNV9HRU1fT0JK RUNUX0lTX1BST1hZCUJJVCgyKQotI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfTk9fR0dUVAkJQklU KDMpCi0jZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwJQklUKDQpCisjZGVmaW5l IEk5MTVfR0VNX09CSkVDVF9IQVNfSU9NRU0JQklUKDEpCisjZGVmaW5lIEk5MTVfR0VNX09CSkVD VF9JU19TSFJJTktBQkxFCUJJVCgyKQorI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNfUFJPWFkJ QklUKDMpCisjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9OT19HR1RUCQlCSVQoNCkKKyNkZWZpbmUg STkxNV9HRU1fT0JKRUNUX0FTWU5DX0NBTkNFTAlCSVQoNSkKIAogCS8qIEludGVyZmFjZSBiZXR3 ZWVuIHRoZSBHRU0gb2JqZWN0IGFuZCBpdHMgYmFja2luZyBzdG9yYWdlLgogCSAqIGdldF9wYWdl cygpIGlzIGNhbGxlZCBvbmNlIHByaW9yIHRvIHRoZSB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgc2V0 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCmluZGV4IGIwZWMwOTU5 YzEzZi4uY2Y3ZjVhM2NiMjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fcGFnZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f cGFnZXMuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJpOTE1X2Rydi5oIgogI2luY2x1ZGUg Imk5MTVfZ2VtX29iamVjdC5oIgogI2luY2x1ZGUgImk5MTVfc2NhdHRlcmxpc3QuaCIKKyNpbmNs dWRlICJpOTE1X2dlbV9sbWVtLmgiCiAKIHZvaWQgX19pOTE1X2dlbV9vYmplY3Rfc2V0X3BhZ2Vz KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJIHN0cnVjdCBzZ190YWJsZSAq cGFnZXMsCkBAIC0xNzIsNyArMTczLDkgQEAgX19pOTE1X2dlbV9vYmplY3RfdW5zZXRfcGFnZXMo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAkJdm9pZCAqcHRyOwogCiAJCXB0ciA9 IHBhZ2VfbWFza19iaXRzKG9iai0+bW0ubWFwcGluZyk7Ci0JCWlmIChpc192bWFsbG9jX2FkZHIo cHRyKSkKKwkJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19sbWVtKG9iaikpCisJCQlpb19tYXBwaW5n X3VubWFwKHB0cik7CisJCWVsc2UgaWYgKGlzX3ZtYWxsb2NfYWRkcihwdHIpKQogCQkJdnVubWFw KHB0cik7CiAJCWVsc2UKIAkJCWt1bm1hcChrbWFwX3RvX3BhZ2UocHRyKSk7CkBAIC0yMzEsNyAr MjM0LDcgQEAgaW50IF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAogfQogCiAvKiBUaGUgJ21hcHBpbmcnIHBhcnQgb2YgaTkxNV9nZW1f b2JqZWN0X3Bpbl9tYXAoKSBiZWxvdyAqLwotc3RhdGljIHZvaWQgKmk5MTVfZ2VtX29iamVjdF9t YXAoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKK3N0YXRpYyB2b2lkICpp OTE1X2dlbV9vYmplY3RfbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJ IGVudW0gaTkxNV9tYXBfdHlwZSB0eXBlKQogewogCXVuc2lnbmVkIGxvbmcgbl9wYWdlcyA9IG9i ai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7CkBAIC0yNDQsNiArMjQ3LDEzIEBAIHN0YXRpYyB2 b2lkICppOTE1X2dlbV9vYmplY3RfbWFwKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCiAJcGdwcm90X3QgcGdwcm90OwogCXZvaWQgKmFkZHI7CiAKKwlpZiAoaTkxNV9nZW1f b2JqZWN0X2lzX2xtZW0ob2JqKSkgeworCQlpZiAodHlwZSAhPSBJOTE1X01BUF9XQykKKwkJCXJl dHVybiBOVUxMOworCisJCXJldHVybiBpOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXAob2JqLCAw LCBvYmotPmJhc2Uuc2l6ZSk7CisJfQorCiAJLyogQSBzaW5nbGUgcGFnZSBjYW4gYWx3YXlzIGJl IGttYXBwZWQgKi8KIAlpZiAobl9wYWdlcyA9PSAxICYmIHR5cGUgPT0gSTkxNV9NQVBfV0IpCiAJ CXJldHVybiBrbWFwKHNnX3BhZ2Uoc2d0LT5zZ2wpKTsKQEAgLTI4NSwxMSArMjk1LDEzIEBAIHZv aWQgKmk5MTVfZ2VtX29iamVjdF9waW5fbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCiAJCQkgICAgICBlbnVtIGk5MTVfbWFwX3R5cGUgdHlwZSkKIHsKIAllbnVtIGk5MTVfbWFw X3R5cGUgaGFzX3R5cGU7CisJdW5zaWduZWQgaW50IGZsYWdzOwogCWJvb2wgcGlubmVkOwogCXZv aWQgKnB0cjsKIAlpbnQgZXJyOwogCi0JaWYgKHVubGlrZWx5KCFpOTE1X2dlbV9vYmplY3RfaGFz X3N0cnVjdF9wYWdlKG9iaikpKQorCWZsYWdzID0gSTkxNV9HRU1fT0JKRUNUX0hBU19TVFJVQ1Rf UEFHRSB8IEk5MTVfR0VNX09CSkVDVF9IQVNfSU9NRU07CisJaWYgKCFpOTE1X2dlbV9vYmplY3Rf dHlwZV9oYXMob2JqLCBmbGFncykpCiAJCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7CiAKIAllcnIg PSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm9iai0+bW0ubG9jayk7CkBAIC0zMjEsNyArMzMz LDkgQEAgdm9pZCAqaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwKIAkJCWdvdG8gZXJyX3VucGluOwogCQl9CiAKLQkJaWYgKGlzX3ZtYWxsb2Nf YWRkcihwdHIpKQorCQlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX2xtZW0ob2JqKSkKKwkJCWlvX21h cHBpbmdfdW5tYXAocHRyKTsKKwkJZWxzZSBpZiAoaXNfdm1hbGxvY19hZGRyKHB0cikpCiAJCQl2 dW5tYXAocHRyKTsKIAkJZWxzZQogCQkJa3VubWFwKGttYXBfdG9fcGFnZShwdHIpKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9u LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5j CmluZGV4IDYxN2EzNWNmYWMyZi4uMjkyNDg5MzcxODQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKQEAgLTEzLDggKzEz LDEwIEBACiAKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1fbG1lbS5oIgogI2luY2x1ZGUgImdlbS9p OTE1X2dlbV9yZWdpb24uaCIKKyNpbmNsdWRlICJnZW0vaTkxNV9nZW1fb2JqZWN0X2JsdC5oIgog I2luY2x1ZGUgImdlbS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmgiCiAjaW5jbHVkZSAiZ3QvaW50 ZWxfZ3QuaCIKKyNpbmNsdWRlICJzZWxmdGVzdHMvaWd0X2ZsdXNoX3Rlc3QuaCIKICNpbmNsdWRl ICJzZWxmdGVzdHMvaTkxNV9yYW5kb20uaCIKIAogc3RhdGljIHZvaWQgY2xvc2Vfb2JqZWN0cyhz dHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLApAQCAtMjc1LDYgKzI3NywxMTYgQEAgc3Rh dGljIGludCBpZ3RfbG1lbV9jcmVhdGUodm9pZCAqYXJnKQogCXJldHVybiBlcnI7CiB9CiAKK3N0 YXRpYyBpbnQgaWd0X2xtZW1fd3JpdGVfY3B1KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq OworCUk5MTVfUk5EX1NUQVRFKHBybmcpOworCUlHVF9USU1FT1VUKGVuZF90aW1lKTsKKwl1MzIg Ynl0ZXNbXSA9IHsKKwkJMCwgLyogcm5nIHBsYWNlaG9sZGVyICovCisJCXNpemVvZih1MzIpLAor CQlzaXplb2YodTY0KSwKKwkJNjQsIC8qIGNsICovCisJCVBBR0VfU0laRSwKKwkJUEFHRV9TSVpF IC0gc2l6ZW9mKHUzMiksCisJCVBBR0VfU0laRSAtIHNpemVvZih1NjQpLAorCQlQQUdFX1NJWkUg LSA2NCwKKwl9OworCXUzMiAqdmFkZHI7CisJdTMyIHN6OworCXUzMiBpOworCWludCAqb3JkZXI7 CisJaW50IGNvdW50OworCWludCBlcnI7CisKKwlpZiAoIUhBU19FTkdJTkUoaTkxNSwgQkNTMCkp CisJCXJldHVybiAwOworCisJc3ogPSByb3VuZF91cChwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZykg JSBTWl8zMk0sIFBBR0VfU0laRSk7CisJc3ogPSBtYXhfdCh1MzIsIDIgKiBQQUdFX1NJWkUsIHN6 KTsKKworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfbG1lbShpOTE1LCBzeiwgSTkxNV9C T19BTExPQ19DT05USUdVT1VTKTsKKwlpZiAoSVNfRVJSKG9iaikpCisJCXJldHVybiBQVFJfRVJS KG9iaik7CisKKwl2YWRkciA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKG9iaiwgSTkxNV9NQVBf V0MpOworCWlmIChJU19FUlIodmFkZHIpKSB7CisJCWVyciA9IFBUUl9FUlIodmFkZHIpOworCQln b3RvIG91dF9wdXQ7CisJfQorCisJLyogUHV0IHRoZSBwYWdlcyBpbnRvIGEga25vd24gc3RhdGUg LS0gZG8gc28gZnJvbSB0aGUgZ3B1IGZvciBhZGRlZCBmdW4gKi8KKwllcnIgPSBpOTE1X2dlbV9v YmplY3RfZmlsbF9ibHQob2JqLCBpOTE1LT5lbmdpbmVbQkNTMF0tPmtlcm5lbF9jb250ZXh0LAor CQkJCSAgICAgICAweGRlYWRiZWFmKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bnBpbjsKKwor CWk5MTVfZ2VtX29iamVjdF9sb2NrKG9iaik7CisJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3NldF90 b193Y19kb21haW4ob2JqLCB0cnVlKTsKKwlpOTE1X2dlbV9vYmplY3RfdW5sb2NrKG9iaik7CisJ aWYgKGVycikKKwkJZ290byBvdXRfdW5waW47CisKKwljb3VudCA9IEFSUkFZX1NJWkUoYnl0ZXMp OworCW9yZGVyID0gaTkxNV9yYW5kb21fb3JkZXIoY291bnQgKiBjb3VudCwgJnBybmcpOworCWlm ICghb3JkZXIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5waW47CisJfQorCisJ LyogV2Ugd2FudCB0byB0aHJvdyBpbiBhIHJhbmRvbSB3aWR0aC9hbGlnbiAqLworCWJ5dGVzWzBd ID0gaWd0X3JhbmRvbV9vZmZzZXQoJnBybmcsIDAsIFBBR0VfU0laRSwgc2l6ZW9mKHUzMiksCisJ CQkJICAgICBzaXplb2YodTMyKSk7CisKKwlpID0gMDsKKwlkbyB7CisJCXUzMiBvZmZzZXQ7CisJ CXUzMiBhbGlnbjsKKwkJdTMyIGR3b3JkOworCQl1MzIgc2l6ZTsKKwkJdTMyIHZhbDsKKworCQlz aXplID0gYnl0ZXNbb3JkZXJbaV0gJSBjb3VudF07CisJCWkgPSAoaSArIDEpICUgKGNvdW50ICog Y291bnQpOworCisJCWFsaWduID0gYnl0ZXNbb3JkZXJbaV0gJSBjb3VudF07CisJCWkgPSAoaSAr IDEpICUgKGNvdW50ICogY291bnQpOworCisJCWFsaWduID0gbWF4X3QodTMyLCBzaXplb2YodTMy KSwgcm91bmRkb3duX3Bvd19vZl90d28oYWxpZ24pKTsKKworCQlvZmZzZXQgPSBpZ3RfcmFuZG9t X29mZnNldCgmcHJuZywgMCwgb2JqLT5iYXNlLnNpemUsCisJCQkJCSAgIHNpemUsIGFsaWduKTsK KworCQl2YWwgPSBwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZyk7CisJCW1lbXNldDMyKHZhZGRyICsg b2Zmc2V0IC8gc2l6ZW9mKHUzMiksIHZhbCBeIDB4ZGVhZGJlYWYsCisJCQkgc2l6ZSAvIHNpemVv Zih1MzIpKTsKKworCQkvKgorCQkgKiBTYW1wbGUgcmFuZG9tIGR3IC0tIGRvbid0IHdhc3RlIHBy ZWNpb3VzIHRpbWUgcmVhZGluZyBldmVyeQorCQkgKiBzaW5nbGUgZHcuCisJCSAqLworCQlkd29y ZCA9IGlndF9yYW5kb21fb2Zmc2V0KCZwcm5nLCBvZmZzZXQsCisJCQkJCSAgb2Zmc2V0ICsgc2l6 ZSwKKwkJCQkJICBzaXplb2YodTMyKSwgc2l6ZW9mKHUzMikpOworCQlkd29yZCAvPSBzaXplb2Yo dTMyKTsKKwkJaWYgKHZhZGRyW2R3b3JkXSAhPSAodmFsIF4gMHhkZWFkYmVhZikpIHsKKwkJCXBy X2VycigiJXMgdmFkZHJbJXVdPSV1LCB2YWw9JXUsIHNpemU9JXUsIGFsaWduPSV1LCBvZmZzZXQ9 JXVcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGR3b3JkLCB2YWRkcltkd29yZF0sIHZhbCBeIDB4 ZGVhZGJlYWYsCisJCQkgICAgICAgc2l6ZSwgYWxpZ24sIG9mZnNldCk7CisJCQllcnIgPSAtRUlO VkFMOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICghX19pZ3RfdGltZW91dChlbmRfdGltZSwg TlVMTCkpOworCitvdXRfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChvYmopOwor b3V0X3B1dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwlyZXR1cm4gZXJyOworfQor CiBpbnQgaW50ZWxfbWVtb3J5X3JlZ2lvbl9tb2NrX3NlbGZ0ZXN0cyh2b2lkKQogewogCXN0YXRp YyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7CkBAIC0zMDgsNiArNDIwLDcg QEAgaW50IGludGVsX21lbW9yeV9yZWdpb25fbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVz dHNbXSA9IHsKIAkJU1VCVEVTVChpZ3RfbG1lbV9jcmVhdGUpLAorCQlTVUJURVNUKGlndF9sbWVt X3dyaXRlX2NwdSksCiAJfTsKIAogCWlmICghSEFTX0xNRU0oaTkxNSkpIHsKLS0gCjIuMjAuMQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4