From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Subject: [PATCH 3/7] drm/amdgpu: move PT validation back into VM code Date: Thu, 29 Sep 2016 09:52:33 +0200 Message-ID: <1475135557-11537-3-git-send-email-deathsimple@vodafone.de> References: <1475135557-11537-1-git-send-email-deathsimple@vodafone.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1475135557-11537-1-git-send-email-deathsimple-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org RnJvbTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgoKU2F2ZXMg YSBidW5jaCBvZiBDUFUgY3ljbGVzIHdoZW4gc3dhcHBpbmcgdGhpbmdzIGJhY2sgaW4gYW5kCmFs bG93cyB1cyB0byBzcGxpdCB0aGUgVk0gaGVhZGVycyBpbnRvIGEgc2VwYXJhdGUgZmlsZS4KClNp Z25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCAgICAgfCAgNSArKy0tCiBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYyAgfCA0MiArKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9n ZW0uYyB8IDI3ICsrKysrKysrKysrKy0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3ZtLmMgIHwgMjAgKysrKysrKysrLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCA1 OSBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdS5oCmluZGV4IDg0MGZjZGIuLjBjMmQzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdS5oCkBAIC05MTcsOCArOTE3LDkgQEAgdm9pZCBhbWRncHVfdm1fZmluaShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwgc3RydWN0IGFtZGdwdV92bSAqdm0pOwogdm9pZCBhbWRncHVfdm1f Z2V0X3BkX2JvKHN0cnVjdCBhbWRncHVfdm0gKnZtLAogCQkJIHN0cnVjdCBsaXN0X2hlYWQgKnZh bGlkYXRlZCwKIAkJCSBzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmVudHJ5KTsKLXZvaWQg YW1kZ3B1X3ZtX2dldF9wdF9ib3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCBh bWRncHVfdm0gKnZtLAotCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpkdXBsaWNhdGVzKTsKK2ludCBh bWRncHVfdm1fdmFsaWRhdGVfcHRfYm9zKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1 Y3QgYW1kZ3B1X3ZtICp2bSwKKwkJCSAgICAgIGludCAoKmNhbGxiYWNrKSh2b2lkICpwLCBzdHJ1 Y3QgYW1kZ3B1X2JvICpibyksCisJCQkgICAgICB2b2lkICpwYXJhbSk7CiB2b2lkIGFtZGdwdV92 bV9tb3ZlX3B0X2Jvc19pbl9scnUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJCQkJICBz dHJ1Y3QgYW1kZ3B1X3ZtICp2bSk7CiBpbnQgYW1kZ3B1X3ZtX2dyYWJfaWQoc3RydWN0IGFtZGdw dV92bSAqdm0sIHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2NzLmMKaW5kZXggNWJlYWI3MS4uMmFkZWExNyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2NzLmMKQEAgLTM4OCw5ICszODgsOSBAQCByZXRyeToKIAogLyogTGFz dCByZXNvcnQsIHRyeSB0byBldmljdCBzb21ldGhpbmcgZnJvbSB0aGUgY3VycmVudCB3b3JraW5n IHNldCAqLwogc3RhdGljIGJvb2wgYW1kZ3B1X2NzX3RyeV9ldmljdChzdHJ1Y3QgYW1kZ3B1X2Nz X3BhcnNlciAqcCwKLQkJCQlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmxvYmopCisJCQkJ c3RydWN0IGFtZGdwdV9ibyAqdmFsaWRhdGVkKQogewotCXVpbnQzMl90IGRvbWFpbiA9IGxvYmot PnJvYmotPmFsbG93ZWRfZG9tYWluczsKKwl1aW50MzJfdCBkb21haW4gPSB2YWxpZGF0ZWQtPmFs bG93ZWRfZG9tYWluczsKIAlpbnQgcjsKIAogCWlmICghcC0+ZXZpY3RhYmxlKQpAQCAtNDA2LDcg KzQwNiw3IEBAIHN0YXRpYyBib29sIGFtZGdwdV9jc190cnlfZXZpY3Qoc3RydWN0IGFtZGdwdV9j c19wYXJzZXIgKnAsCiAJCXVpbnQzMl90IG90aGVyOwogCiAJCS8qIElmIHdlIHJlYWNoZWQgb3Vy IGN1cnJlbnQgQk8gd2UgY2FuIGZvcmdldCBpdCAqLwotCQlpZiAoY2FuZGlkYXRlID09IGxvYmop CisJCWlmIChjYW5kaWRhdGUtPnJvYmogPT0gdmFsaWRhdGVkKQogCQkJYnJlYWs7CiAKIAkJb3Ro ZXIgPSBhbWRncHVfbWVtX3R5cGVfdG9fZG9tYWluKGJvLT50Ym8ubWVtLm1lbV90eXBlKTsKQEAg LTQzOSw2ICs0MzksMjMgQEAgc3RhdGljIGJvb2wgYW1kZ3B1X2NzX3RyeV9ldmljdChzdHJ1Y3Qg YW1kZ3B1X2NzX3BhcnNlciAqcCwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBpbnQgYW1k Z3B1X2NzX3ZhbGlkYXRlKHZvaWQgKnBhcmFtLCBzdHJ1Y3QgYW1kZ3B1X2JvICpibykKK3sKKwlz dHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCA9IHBhcmFtOworCWludCByOworCisJZG8geworCQly ID0gYW1kZ3B1X2NzX2JvX3ZhbGlkYXRlKHAsIGJvKTsKKwl9IHdoaWxlIChyID09IC1FTk9NRU0g JiYgYW1kZ3B1X2NzX3RyeV9ldmljdChwLCBibykpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwor CWlmIChiby0+c2hhZG93KQorCQlyID0gYW1kZ3B1X2NzX2JvX3ZhbGlkYXRlKHAsIGJvKTsKKwor CXJldHVybiByOworfQorCiBzdGF0aWMgaW50IGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKHN0cnVj dCBhbWRncHVfY3NfcGFyc2VyICpwLAogCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKnZhbGlkYXRl ZCkKIHsKQEAgLTQ2NiwxOCArNDgzLDEwIEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX2xpc3RfdmFs aWRhdGUoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCiAJCWlmIChwLT5ldmljdGFibGUgPT0g bG9iaikKIAkJCXAtPmV2aWN0YWJsZSA9IE5VTEw7CiAKLQkJZG8gewotCQkJciA9IGFtZGdwdV9j c19ib192YWxpZGF0ZShwLCBibyk7Ci0JCX0gd2hpbGUgKHIgPT0gLUVOT01FTSAmJiBhbWRncHVf Y3NfdHJ5X2V2aWN0KHAsIGxvYmopKTsKKwkJciA9IGFtZGdwdV9jc192YWxpZGF0ZShwLCBibyk7 CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAKLQkJaWYgKGJvLT5zaGFkb3cpIHsKLQkJCXIgPSBh bWRncHVfY3NfYm9fdmFsaWRhdGUocCwgYm8pOwotCQkJaWYgKHIpCi0JCQkJcmV0dXJuIHI7Ci0J CX0KLQogCQlpZiAoYmluZGluZ191c2VycHRyKSB7CiAJCQlkcm1fZnJlZV9sYXJnZShsb2JqLT51 c2VyX3BhZ2VzKTsKIAkJCWxvYmotPnVzZXJfcGFnZXMgPSBOVUxMOwpAQCAtNTk1LDE0ICs2MDQs MTkgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3Bh cnNlciAqcCwKIAkJbGlzdF9zcGxpY2UoJm5lZWRfcGFnZXMsICZwLT52YWxpZGF0ZWQpOwogCX0K IAotCWFtZGdwdV92bV9nZXRfcHRfYm9zKHAtPmFkZXYsICZmcHJpdi0+dm0sICZkdXBsaWNhdGVz KTsKLQogCXAtPmJ5dGVzX21vdmVkX3RocmVzaG9sZCA9IGFtZGdwdV9jc19nZXRfdGhyZXNob2xk X2Zvcl9tb3ZlcyhwLT5hZGV2KTsKIAlwLT5ieXRlc19tb3ZlZCA9IDA7CiAJcC0+ZXZpY3RhYmxl ID0gbGlzdF9sYXN0X2VudHJ5KCZwLT52YWxpZGF0ZWQsCiAJCQkJICAgICAgIHN0cnVjdCBhbWRn cHVfYm9fbGlzdF9lbnRyeSwKIAkJCQkgICAgICAgdHYuaGVhZCk7CiAKKwlyID0gYW1kZ3B1X3Zt X3ZhbGlkYXRlX3B0X2JvcyhwLT5hZGV2LCAmZnByaXYtPnZtLAorCQkJCSAgICAgIGFtZGdwdV9j c192YWxpZGF0ZSwgcCk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJhbWRncHVfdm1fdmFsaWRh dGVfcHRfYm9zKCkgZmFpbGVkLlxuIik7CisJCWdvdG8gZXJyb3JfdmFsaWRhdGU7CisJfQorCiAJ ciA9IGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKHAsICZkdXBsaWNhdGVzKTsKIAlpZiAocikgewog CQlEUk1fRVJST1IoImFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKGR1cGxpY2F0ZXMpIGZhaWxlZC5c biIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5j IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jCmluZGV4IGYyZmI3MmQu LjhmZjkwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9n ZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKQEAgLTQ3 MSw2ICs0NzEsMTYgQEAgb3V0OgogCXJldHVybiByOwogfQogCitzdGF0aWMgaW50IGFtZGdwdV9n ZW1fdmFfY2hlY2sodm9pZCAqcCwgc3RydWN0IGFtZGdwdV9ibyAqYm8pCit7CisJdW5zaWduZWQg ZG9tYWluID0gYW1kZ3B1X21lbV90eXBlX3RvX2RvbWFpbihiby0+dGJvLm1lbS5tZW1fdHlwZSk7 CisKKwkvKiBpZiBhbnl0aGluZyBpcyBzd2FwcGVkIG91dCBkb24ndCBzd2FwIGl0IGluIGhlcmUs CisJICAganVzdCBhYm9ydCBhbmQgd2FpdCBmb3IgdGhlIG5leHQgQ1MgKi8KKworCXJldHVybiBk b21haW4gPT0gQU1ER1BVX0dFTV9ET01BSU5fQ1BVID8gLUVSRVNUQVJUU1lTIDogMDsKK30KKwog LyoqCiAgKiBhbWRncHVfZ2VtX3ZhX3VwZGF0ZV92bSAtdXBkYXRlIHRoZSBib192YSBpbiBpdHMg Vk0KICAqCkBAIC00ODEsNyArNDkxLDggQEAgb3V0OgogICogdml0YWwgaGVyZSwgc28gdGhleSBh cmUgbm90IHJlcG9ydGVkIGJhY2sgdG8gdXNlcnNwYWNlLgogICovCiBzdGF0aWMgdm9pZCBhbWRn cHVfZ2VtX3ZhX3VwZGF0ZV92bShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKLQkJCQkgICAg c3RydWN0IGFtZGdwdV9ib192YSAqYm9fdmEsIHVpbnQzMl90IG9wZXJhdGlvbikKKwkJCQkgICAg c3RydWN0IGFtZGdwdV9ib192YSAqYm9fdmEsCisJCQkJICAgIHVpbnQzMl90IG9wZXJhdGlvbikK IHsKIAlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciB0diwgKmVudHJ5OwogCXN0cnVjdCBhbWRn cHVfYm9fbGlzdF9lbnRyeSB2bV9wZDsKQEAgLTUwNCw3ICs1MTUsNiBAQCBzdGF0aWMgdm9pZCBh bWRncHVfZ2VtX3ZhX3VwZGF0ZV92bShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAlpZiAo cikKIAkJZ290byBlcnJvcl9wcmludDsKIAotCWFtZGdwdV92bV9nZXRfcHRfYm9zKGFkZXYsIGJv X3ZhLT52bSwgJmR1cGxpY2F0ZXMpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZsaXN0 LCBoZWFkKSB7CiAJCWRvbWFpbiA9IGFtZGdwdV9tZW1fdHlwZV90b19kb21haW4oZW50cnktPmJv LT5tZW0ubWVtX3R5cGUpOwogCQkvKiBpZiBhbnl0aGluZyBpcyBzd2FwcGVkIG91dCBkb24ndCBz d2FwIGl0IGluIGhlcmUsCkBAIC01MTIsMTMgKzUyMiwxMCBAQCBzdGF0aWMgdm9pZCBhbWRncHVf Z2VtX3ZhX3VwZGF0ZV92bShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAkJaWYgKGRvbWFp biA9PSBBTURHUFVfR0VNX0RPTUFJTl9DUFUpCiAJCQlnb3RvIGVycm9yX3VucmVzZXJ2ZTsKIAl9 Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmR1cGxpY2F0ZXMsIGhlYWQpIHsKLQkJZG9t YWluID0gYW1kZ3B1X21lbV90eXBlX3RvX2RvbWFpbihlbnRyeS0+Ym8tPm1lbS5tZW1fdHlwZSk7 Ci0JCS8qIGlmIGFueXRoaW5nIGlzIHN3YXBwZWQgb3V0IGRvbid0IHN3YXAgaXQgaW4gaGVyZSwK LQkJICAganVzdCBhYm9ydCBhbmQgd2FpdCBmb3IgdGhlIG5leHQgQ1MgKi8KLQkJaWYgKGRvbWFp biA9PSBBTURHUFVfR0VNX0RPTUFJTl9DUFUpCi0JCQlnb3RvIGVycm9yX3VucmVzZXJ2ZTsKLQl9 CisJciA9IGFtZGdwdV92bV92YWxpZGF0ZV9wdF9ib3MoYWRldiwgYm9fdmEtPnZtLCBhbWRncHVf Z2VtX3ZhX2NoZWNrLAorCQkJCSAgICAgIE5VTEwpOworCWlmIChyKQorCQlnb3RvIGVycm9yX3Vu cmVzZXJ2ZTsKIAogCXIgPSBhbWRncHVfdm1fdXBkYXRlX3BhZ2VfZGlyZWN0b3J5KGFkZXYsIGJv X3ZhLT52bSk7CiAJaWYgKHIpCkBAIC01MzksOCArNTQ2LDYgQEAgZXJyb3JfcHJpbnQ6CiAJCURS TV9FUlJPUigiQ291bGRuJ3QgdXBkYXRlIEJPX1ZBICglZClcbiIsIHIpOwogfQogCi0KLQogaW50 IGFtZGdwdV9nZW1fdmFfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK IAkJCSAgc3RydWN0IGRybV9maWxlICpmaWxwKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfdm0uYwppbmRleCA4Nzc3Mzk0Li40YzVlNzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdm0uYwpAQCAtMTE2LDI3ICsxMTYsMjggQEAgdm9pZCBhbWRncHVfdm1fZ2V0 X3BkX2JvKHN0cnVjdCBhbWRncHVfdm0gKnZtLAogfQogCiAvKioKLSAqIGFtZGdwdV92bV9nZXRf Ym9zIC0gYWRkIHRoZSB2bSBCT3MgdG8gYSBkdXBsaWNhdGVzIGxpc3QKKyAqIGFtZGdwdV92bV92 YWxpZGF0ZV9wdF9ib3MgLSB2YWxpZGF0ZSB0aGUgcGFnZSB0YWJsZSBCT3MKICAqCiAgKiBAYWRl djogYW1kZ3B1IGRldmljZSBwb2ludGVyCiAgKiBAdm06IHZtIHByb3ZpZGluZyB0aGUgQk9zCi0g KiBAZHVwbGljYXRlczogaGVhZCBvZiBkdXBsaWNhdGVzIGxpc3QKKyAqIEBjYWxsYmFjazogY2Fs bGJhY2sgdG8gZG8gdGhlIHZhbGlkYXRpb24KICAqCi0gKiBBZGQgdGhlIHBhZ2UgZGlyZWN0b3J5 IHRvIHRoZSBCTyBkdXBsaWNhdGVzIGxpc3QKLSAqIGZvciBjb21tYW5kIHN1Ym1pc3Npb24uCisg KiBWYWxpZGF0ZSB0aGUgcGFnZSB0YWJsZSBCT3Mgb24gY29tbWFuZCBzdWJtaXNzaW9uIGlmIG5l Y2Nlc3NhcnkuCiAgKi8KLXZvaWQgYW1kZ3B1X3ZtX2dldF9wdF9ib3Moc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsIHN0cnVjdCBhbWRncHVfdm0gKnZtLAotCQkJICBzdHJ1Y3QgbGlzdF9oZWFk ICpkdXBsaWNhdGVzKQoraW50IGFtZGdwdV92bV92YWxpZGF0ZV9wdF9ib3Moc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsIHN0cnVjdCBhbWRncHVfdm0gKnZtLAorCQkJICAgICAgaW50ICgqY2Fs bGJhY2spKHZvaWQgKnAsIHN0cnVjdCBhbWRncHVfYm8gKmJvKSwKKwkJCSAgICAgIHZvaWQgKnBh cmFtKQogewogCXVpbnQ2NF90IG51bV9ldmljdGlvbnM7CiAJdW5zaWduZWQgaTsKKwlpbnQgcjsK IAogCS8qIFdlIG9ubHkgbmVlZCB0byB2YWxpZGF0ZSB0aGUgcGFnZSB0YWJsZXMKIAkgKiBpZiB0 aGV5IGFyZW4ndCBhbHJlYWR5IHZhbGlkLgogCSAqLwogCW51bV9ldmljdGlvbnMgPSBhdG9taWM2 NF9yZWFkKCZhZGV2LT5udW1fZXZpY3Rpb25zKTsKIAlpZiAobnVtX2V2aWN0aW9ucyA9PSB2bS0+ bGFzdF9ldmljdGlvbl9jb3VudGVyKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJLyogYWRk IHRoZSB2bSBwYWdlIHRhYmxlIHRvIHRoZSBsaXN0ICovCiAJZm9yIChpID0gMDsgaSA8PSB2bS0+ bWF4X3BkZV91c2VkOyArK2kpIHsKQEAgLTE0NSw5ICsxNDYsMTIgQEAgdm9pZCBhbWRncHVfdm1f Z2V0X3B0X2JvcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgc3RydWN0IGFtZGdwdV92bSAq dm0sCiAJCWlmICghZW50cnktPnJvYmopCiAJCQljb250aW51ZTsKIAotCQlsaXN0X2FkZCgmZW50 cnktPnR2LmhlYWQsIGR1cGxpY2F0ZXMpOworCQlyID0gY2FsbGJhY2socGFyYW0sIGVudHJ5LT5y b2JqKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKIAl9CiAKKwlyZXR1cm4gMDsKIH0KIAogLyoq Ci0tIAoyLjUuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==