From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [RFC PATCH 17/42] drm/i915/lmem: support kernel mapping Date: Thu, 14 Feb 2019 14:57:15 +0000 Message-ID: <20190214145740.14521-18-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 8C36B6E91B for ; Thu, 14 Feb 2019 14:58:04 +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 RnJvbTogQWJkaWVsIEphbnVsZ3VlIDxhYmRpZWwuamFudWxndWVAbGludXguaW50ZWwuY29tPgoK V2UgY2FuIGNyZWF0ZSBMTUVNIG9iamVjdHMsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gc3VwcG9ydCBt YXBwaW5nIHRoZW0KaW50byBrZXJuZWwgc3BhY2UgZm9yIGludGVybmFsIHVzZS4KClNpZ25lZC1v ZmYtYnk6IEFiZGllbCBKYW51bGd1ZSA8YWJkaWVsLmphbnVsZ3VlQGxpbnV4LmludGVsLmNvbT4K U2lnbmVkLW9mZi1ieTogTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgpDYzog Sm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgotLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICAgICAgICB8ICAxOCArKy0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaCAgICB8ICAgMyArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fbG1lbS5jICAgICAgfCAgMjQgKysrKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmVnaW9uX2xtZW0uaCAgICAgIHwgICA1ICsKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMgICB8ICAgMyArLQogLi4uL2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMgIHwgMTA3ICsrKysrKysrKysr KysrKysrLQogNiBmaWxlcyBjaGFuZ2VkLCAxNDggaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggMzM2OTliM2RjMzk1Li4zZjMxOTUyNGJl ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMjI1Nyw3ICsyMjU3LDkgQEAgX19pOTE1 X2dlbV9vYmplY3RfdW5zZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK IAkJdm9pZCAqcHRyOwogCiAJCXB0ciA9IHBhZ2VfbWFza19iaXRzKG9iai0+bW0ubWFwcGluZyk7 Ci0JCWlmIChpc192bWFsbG9jX2FkZHIocHRyKSkKKwkJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19s bWVtKG9iaikpCisJCQlpb19tYXBwaW5nX3VubWFwKHB0cik7CisJCWVsc2UgaWYgKGlzX3ZtYWxs b2NfYWRkcihwdHIpKQogCQkJdnVubWFwKHB0cik7CiAJCWVsc2UKIAkJCWt1bm1hcChrbWFwX3Rv X3BhZ2UocHRyKSk7CkBAIC0yNjI1LDcgKzI2MjcsNyBAQCBpbnQgX19pOTE1X2dlbV9vYmplY3Rf Z2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB9CiAKIC8qIFRoZSAn bWFwcGluZycgcGFydCBvZiBpOTE1X2dlbV9vYmplY3RfcGluX21hcCgpIGJlbG93ICovCi1zdGF0 aWMgdm9pZCAqaTkxNV9nZW1fb2JqZWN0X21hcChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAorc3RhdGljIHZvaWQgKmk5MTVfZ2VtX29iamVjdF9tYXAoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkgZW51bSBpOTE1X21hcF90eXBlIHR5cGUpCiB7CiAJ dW5zaWduZWQgbG9uZyBuX3BhZ2VzID0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKQEAg LTI2MzgsNiArMjY0MCwxMSBAQCBzdGF0aWMgdm9pZCAqaTkxNV9nZW1fb2JqZWN0X21hcChjb25z dCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCXBncHJvdF90IHBncHJvdDsKIAl2 b2lkICphZGRyOwogCisJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19sbWVtKG9iaikpIHsKKwkJLyog WFhYOiB3ZSBhcmUgaWdub3JpbmcgdGhlIHR5cGUgaGVyZSAtLSB0aGlzIGlzIHNpbXBseSB3YyAq LworCQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X2xtZW1faW9fbWFwKG9iaiwgMCwgb2JqLT5iYXNl LnNpemUpOworCX0KKwogCS8qIEEgc2luZ2xlIHBhZ2UgY2FuIGFsd2F5cyBiZSBrbWFwcGVkICov CiAJaWYgKG5fcGFnZXMgPT0gMSAmJiB0eXBlID09IEk5MTVfTUFQX1dCKQogCQlyZXR1cm4ga21h cChzZ19wYWdlKHNndC0+c2dsKSk7CkBAIC0yNjgzLDcgKzI2OTAsOCBAQCB2b2lkICppOTE1X2dl bV9vYmplY3RfcGluX21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCXZvaWQg KnB0cjsKIAlpbnQgcmV0OwogCi0JaWYgKHVubGlrZWx5KCFpOTE1X2dlbV9vYmplY3RfaGFzX3N0 cnVjdF9wYWdlKG9iaikpKQorCWlmICh1bmxpa2VseSghaTkxNV9nZW1fb2JqZWN0X2hhc19zdHJ1 Y3RfcGFnZShvYmopICYmCisJCSAgICAgIWk5MTVfZ2VtX29iamVjdF9pc19sbWVtKG9iaikpKQog CQlyZXR1cm4gRVJSX1BUUigtRU5YSU8pOwogCiAJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRp YmxlKCZvYmotPm1tLmxvY2spOwpAQCAtMjcxNSw3ICsyNzIzLDkgQEAgdm9pZCAqaTkxNV9nZW1f b2JqZWN0X3Bpbl9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCWdvdG8g ZXJyX3VucGluOwogCQl9CiAKLQkJaWYgKGlzX3ZtYWxsb2NfYWRkcihwdHIpKQorCQlpZiAoaTkx NV9nZW1fb2JqZWN0X2lzX2xtZW0ob2JqKSkKKwkJCWlvX21hcHBpbmdfdW5tYXAocHRyKTsKKwkJ ZWxzZSBpZiAoaXNfdm1hbGxvY19hZGRyKHB0cikpCiAJCQl2dW5tYXAocHRyKTsKIAkJZWxzZQog CQkJa3VubWFwKGttYXBfdG9fcGFnZShwdHIpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X21lbW9yeV9yZWdpb24uaAppbmRleCBiMTU0NmFmYjBiNmUuLjc3NTQ5ODlhZDE2NSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaApAQCAtMTE1LDYgKzExNSw5 IEBAIHZvaWQgaTkxNV9tZW1vcnlfcmVnaW9uX3B1dF9wYWdlc19idWRkeShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAogCiB2b2lkIGk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21lbW9y eV9yZWdpb24oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiAKK3Vuc2lnbmVkIGxv bmcgaTkxNV9nZW1fb2JqZWN0X2xtZW1faW9fcGZuKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCisJCQkJCSAgdW5zaWduZWQgbG9uZyBuKTsKKwogc3RydWN0IGludGVsX21lbW9yeV9y ZWdpb24gKgogaW50ZWxfbWVtb3J5X3JlZ2lvbl9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsCiAJCQkgICByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fbG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmVnaW9uX2xtZW0uYwppbmRleCBiMzk4YmVjYjI3MzMuLmM4YmVlMGMxOGM4OCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmVnaW9uX2xtZW0uYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fbG1lbS5jCkBAIC02NSw2ICs2NSwz MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX21lbW9yeV9yZWdpb25fb3BzIHJlZ2lvbl9s bWVtX29wcyA9IHsKIAkub2JqZWN0X2NyZWF0ZSA9IHJlZ2lvbl9sbWVtX29iamVjdF9jcmVhdGUs CiB9OwogCisvKiBYWFg6IFRpbWUgdG8gdmZ1bmMgeW91ciBsaWZlIHVwPyAqLwordm9pZCBfX2lv bWVtICppOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXBfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBuKQoreworCXJlc291cmNl X3NpemVfdCBvZmZzZXQ7CisKKwlvZmZzZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2RtYV9hZGRy ZXNzKG9iaiwgbik7CisKKwlyZXR1cm4gaW9fbWFwcGluZ19tYXBfYXRvbWljX3djKCZvYmotPm1l bW9yeV9yZWdpb24tPmlvbWFwLCBvZmZzZXQpOworfQorCit2b2lkIF9faW9tZW0gKmk5MTVfZ2Vt X29iamVjdF9sbWVtX2lvX21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJ CQkgIHVuc2lnbmVkIGxvbmcgbiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmVz b3VyY2Vfc2l6ZV90IG9mZnNldDsKKworCUdFTV9CVUdfT04oIShvYmotPmZsYWdzICYgSTkxNV9C T19BTExPQ19DT05USUdVT1VTKSk7CisKKwlvZmZzZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2Rt YV9hZGRyZXNzKG9iaiwgbik7CisKKwlyZXR1cm4gaW9fbWFwcGluZ19tYXBfd2MoJm9iai0+bWVt b3J5X3JlZ2lvbi0+aW9tYXAsIG9mZnNldCwgc2l6ZSk7Cit9CisKIHVuc2lnbmVkIGxvbmcgaTkx NV9nZW1fb2JqZWN0X2xtZW1faW9fcGZuKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos CiAJCQkJCSAgdW5zaWduZWQgbG9uZyBuKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcmVnaW9uX2xtZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jl Z2lvbl9sbWVtLmgKaW5kZXggMWFhMjRiZDI4NjkwLi5hNzZiNzdiNjllNzEgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JlZ2lvbl9sbWVtLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmVnaW9uX2xtZW0uaApAQCAtMjgsNiArMjgsMTEgQEAKIHVuc2ln bmVkIGxvbmcgaTkxNV9nZW1fb2JqZWN0X2xtZW1faW9fcGZuKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCiAJCQkJCSAgdW5zaWduZWQgbG9uZyBuKTsKIAordm9pZCBfX2lvbWVtICpp OTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG4sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Cit2b2lkIF9f aW9tZW0gKmk5MTVfZ2VtX29iamVjdF9sbWVtX2lvX21hcF9wYWdlKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG4pOworCiBib29sIGk5 MTVfZ2VtX29iamVjdF9pc19sbWVtKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwog CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2h1Z2VfcGFnZXMuYwppbmRleCBmNDI4M2Q0MWMxM2YuLjEwMzM2MmY4YzU1MyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jCkBAIC0xMTQ0LDgg KzExNDQsNyBAQCBzdGF0aWMgaW50IF9fY3B1X2NoZWNrX2xtZW0oc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwgdTMyIGR3b3JkLCB1MzIgdmFsKQogCQl1MzIgX19pb21lbSAqYmFzZTsK IAkJdTMyIHJlYWRfdmFsOwogCi0JCWJhc2UgPSAodm9pZCBfX2ZvcmNlICopaW9fbWFwcGluZ19t YXBfYXRvbWljX3djKCZvYmotPm1lbW9yeV9yZWdpb24tPmlvbWFwLAotCQkJCQkJCQlpOTE1X2dl bV9vYmplY3RfZ2V0X2RtYV9hZGRyZXNzKG9iaiwgbikpOworCQliYXNlID0gaTkxNV9nZW1fb2Jq ZWN0X2xtZW1faW9fbWFwX3BhZ2Uob2JqLCBuKTsKIAogCQlyZWFkX3ZhbCA9IGlvcmVhZDMyKGJh c2UgKyBkd29yZCk7CiAJCWlvX21hcHBpbmdfdW5tYXBfYXRvbWljKGJhc2UpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdpb24uYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKaW5k ZXggMmMwN2Q4ZDIxOWU1Li5hZDhkMmVlYWNmNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdpb24uYwpAQCAtMjgsNiArMjgsOSBA QAogI2luY2x1ZGUgIm1vY2tfY29udGV4dC5oIgogI2luY2x1ZGUgIm1vY2tfZHJtLmgiCiAKK3R5 cGVkZWYgaW50ICgqY3B1X2NoZWNrX2ZuX3QpKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCisJCQkgICAgICB1MzIgX19pb21lbSAqYmFzZSwgdTMyIGR3b3JkLCB1MzIgdmFsKTsKKwog c3RhdGljIHZvaWQgY2xvc2Vfb2JqZWN0cyhzdHJ1Y3QgbGlzdF9oZWFkICpvYmplY3RzKQogewog CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosICpvbjsKQEAgLTQ4Nyw3ICs0OTAsOSBA QCBzdGF0aWMgaW50IGlndF9ncHVfd3JpdGUoc3RydWN0IGk5MTVfdm1hICp2bWEsCiAJcmV0dXJu IGVycjsKIH0KIAotc3RhdGljIGludCBpZ3RfY3B1X2NoZWNrKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosIHUzMiBkd29yZCwgdTMyIHZhbCkKK3N0YXRpYyBpbnQgaWd0X2NwdV9jaGVj ayhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJIHUzMiBfX2lvbWVtICpiYXNl LAorCQkJIHUzMiBkd29yZCwgdTMyIHZhbCkKIHsKIAl1bnNpZ25lZCBsb25nIG47CiAJaW50IGVy cjsKQEAgLTUwNCw4ICs1MDksNyBAQCBzdGF0aWMgaW50IGlndF9jcHVfY2hlY2soc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdTMyIGR3b3JkLCB1MzIgdmFsKQogCQl1MzIgX19pb21l bSAqYmFzZTsKIAkJdTMyIHJlYWRfdmFsOwogCi0JCWJhc2UgPSAodm9pZCBfX2ZvcmNlICopIGlv X21hcHBpbmdfbWFwX2F0b21pY193Yygmb2JqLT5tZW1vcnlfcmVnaW9uLT5pb21hcCwKLQkJCQkJ CQkJIGk5MTVfZ2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Mob2JqLCBuKSk7CisJCWJhc2UgPSBp OTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXBfcGFnZShvYmosIG4pOwogCiAJCXJlYWRfdmFsID0g aW9yZWFkMzIoYmFzZSArIGR3b3JkKTsKIAkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMoYmFzZSk7 CkBAIC01MjMsMTEgKzUyNywxMyBAQCBzdGF0aWMgaW50IGlndF9jcHVfY2hlY2soc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdTMyIGR3b3JkLCB1MzIgdmFsKQogCiBzdGF0aWMgaW50 IGlndF9ncHVfZmlsbChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAogCQkJc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCXUzMiB2YWwpCisJCQljcHVfY2hlY2tfZm5fdCBj cHVfY2hlY2ssCisJCQl1MzIgX19pb21lbSAqYmFzZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IGN0eC0+aTkxNTsKIAlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9 IGN0eC0+cHBndHQgPyAmY3R4LT5wcGd0dC0+dm0gOiAmaTkxNS0+Z2d0dC52bTsKIAlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKKwlzdHJ1Y3Qgcm5kX3N0YXRlIHBybmc7CiAJdTMyIGR3b3JkOwogCWlu dCBlcnI7CiAKQEAgLTU0MSwxMiArNTQ3LDE0IEBAIHN0YXRpYyBpbnQgaWd0X2dwdV9maWxsKHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCiAJCXJldHVybiBlcnI7CiAJfQogCisJcHJhbmRv bV9zZWVkX3N0YXRlKCZwcm5nLCBpOTE1X3NlbGZ0ZXN0LnJhbmRvbV9zZWVkKTsKIAlmb3IgKGR3 b3JkID0gMDsgZHdvcmQgPCBQQUdFX1NJWkUgLyBzaXplb2YodTMyKTsgKytkd29yZCkgeworCQl1 MzIgdmFsID0gcHJhbmRvbV91MzJfc3RhdGUoJnBybmcpOwogCQllcnIgPSBpZ3RfZ3B1X3dyaXRl KHZtYSwgY3R4LCBpOTE1LT5lbmdpbmVbUkNTXSwgZHdvcmQsIHZhbCk7CiAJCWlmIChlcnIpCiAJ CQlicmVhazsKIAotCQllcnIgPSBpZ3RfY3B1X2NoZWNrKG9iaiwgZHdvcmQsIHZhbCk7CisJCWVy ciA9IGNwdV9jaGVjayhvYmosIGJhc2UsIGR3b3JkLCB2YWwpOwogCQlpZiAoZXJyKQogCQkJYnJl YWs7CiAJfQpAQCAtNjQ1LDcgKzY1Myw3IEBAIHN0YXRpYyBpbnQgaWd0X2xtZW1fd3JpdGVfZ3B1 KHZvaWQgKmFyZykKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9wdXQ7CiAKLQllcnIgPSBpZ3RfZ3B1 X2ZpbGwoY3R4LCBvYmosIDB4ZGVhZGJlYWYpOworCWVyciA9IGlndF9ncHVfZmlsbChjdHgsIG9i aiwgaWd0X2NwdV9jaGVjaywgTlVMTCk7CiAJaWYgKGVycikgewogCQlwcl9lcnIoImlndF9ncHVf ZmlsbCBmYWlsZWQoJWQpXG4iLCBlcnIpOwogCQlnb3RvIG91dF91bnBpbjsKQEAgLTY1OSw2ICs2 NjcsOTIgQEAgc3RhdGljIGludCBpZ3RfbG1lbV93cml0ZV9ncHUodm9pZCAqYXJnKQogCXJldHVy biBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgaWd0X2xtZW1fY3B1X2NoZWNrKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgICB1MzIgX19pb21lbSAqYmFzZSwgdTMyIGR3b3Jk LCB1MzIgdmFsKQoreworCXUzMiByZWFkX3ZhbDsKKwlpbnQgZXJyOworCisJZXJyID0gaTkxNV9n ZW1fb2JqZWN0X3dhaXQob2JqLAorCQkJCSAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFIHwKKwkJ CQkgICBJOTE1X1dBSVRfTE9DS0VELAorCQkJCSAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwlp ZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdl cyhvYmopOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZWFkX3ZhbCA9IGlvcmVhZDMy KGJhc2UgKyBkd29yZCk7CisgICAgICAgIGlmIChyZWFkX3ZhbCAhPSB2YWwpIHsKKwkJcHJfZXJy KCJiYXNlWyV1XT0weCV4LCB2YWw9MHgleFxuIiwKKwkJICAgICAgIGR3b3JkLCByZWFkX3ZhbCwg dmFsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaTkxNV9nZW1fb2JqZWN0X3VucGluX3Bh Z2VzKG9iaik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2xtZW1fd3JpdGVfY3B1 KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0gYXJnOworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gY3R4LT5pOTE1OworCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IHJuZF9zdGF0ZSBwcm5nOworCXUzMiBfX2lvbWVt ICp2YWRkcjsKKwl1MzIgZHdvcmQ7CisJaW50IHJldCA9IDA7CisKKwlvYmogPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlX2xtZW0oaTkxNSwgUEFHRV9TSVpFLCBJOTE1X0JPX0FMTE9DX0NPTlRJR1VP VVMpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKworCXJldCA9 IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9w dXQ7CisKKwl2YWRkciA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKG9iaiwgSTkxNV9NQVBfV0Mp OworCWlmIChJU19FUlIodmFkZHIpKSB7CisJCXByX2VycigiRmFpbGVkIHRvIGlvbWFwIGxtZW1i YXI7IGVycj0lZFxuIiwgKGludClQVFJfRVJSKHZhZGRyKSk7CisJCXJldCA9IFBUUl9FUlIodmFk ZHIpOworCQlnb3RvIG91dF91bnBpbjsKKwl9CisKKwkvKiBncHUgd3JpdGUvY3B1IHJlYWQgKi8K KwlyZXQgPSBpZ3RfZ3B1X2ZpbGwoY3R4LCBvYmosIGlndF9sbWVtX2NwdV9jaGVjaywgdmFkZHIp OworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJpZ3RfZ3B1X2ZpbGwgZmFpbGVkKCVkKVxuIiwgcmV0 KTsKKwkJZ290byBvdXRfdW5waW47CisJfQorCisJLyogY3B1IHdyaXRlL2NwdSByZWFkICovCisJ cHJhbmRvbV9zZWVkX3N0YXRlKCZwcm5nLCBpOTE1X3NlbGZ0ZXN0LnJhbmRvbV9zZWVkKTsKKwlm b3IgKGR3b3JkID0gMDsgZHdvcmQgPCBQQUdFX1NJWkUgLyBzaXplb2YodTMyKTsgKytkd29yZCkg eworCQl1MzIgcmVhZF92YWw7CisJCXUzMiB2YWwgPSBwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZyk7 CisKKwkJaW93cml0ZTMyKHZhbCwgdmFkZHIgKyBkd29yZCk7CisJCXdtYigpOworCisJCXJlYWRf dmFsID0gaW9yZWFkMzIodmFkZHIgKyBkd29yZCk7CisJCWlmIChyZWFkX3ZhbCAhPSB2YWwpIHsK KwkJCXByX2VycigiYmFzZVsldV09JXUsIHZhbD0ldVxuIiwgZHdvcmQsIHJlYWRfdmFsLCB2YWwp OworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaTkxNV9nZW1fb2Jq ZWN0X3VucGluX21hcChvYmopOworCitvdXRfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0X3VucGlu X3BhZ2VzKG9iaik7CitvdXRfcHV0OgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwlyZXR1 cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGlndF9sbWVtX3BhZ2VzX21pZ3JhdGUodm9pZCAqYXJn KQogewogCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHggPSBhcmc7CkBAIC03NzYsNiArODcw LDcgQEAgaW50IGludGVsX21lbW9yeV9yZWdpb25fbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpCiAJCVNVQlRFU1QoaWd0X3NtZW1fY3JlYXRlX21pZ3JhdGUpLAog CQlTVUJURVNUKGlndF9sbWVtX2NyZWF0ZV9taWdyYXRlKSwKIAkJU1VCVEVTVChpZ3RfbG1lbV93 cml0ZV9ncHUpLAorCQlTVUJURVNUKGlndF9sbWVtX3dyaXRlX2NwdSksCiAJCVNVQlRFU1QoaWd0 X2xtZW1fcGFnZXNfbWlncmF0ZSksCiAJfTsKIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 OwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n Zng=