From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 11/17] drm/i915: Store a direct lookup from object handle to vma Date: Mon, 22 Aug 2016 09:03:44 +0100 Message-ID: <20160822080350.4964-12-chris@chris-wilson.co.uk> References: <20160822080350.4964-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8C88E6E2CB for ; Mon, 22 Aug 2016 08:04:10 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id i5so12233292wmg.2 for ; Mon, 22 Aug 2016 01:04:10 -0700 (PDT) In-Reply-To: <20160822080350.4964-1-chris@chris-wilson.co.uk> 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 VGhlIGFkdmVudCBvZiBmdWxsLXBwZ3R0IGxlYWQgdG8gYW4gZXh0cmEgaW5kaXJlY3Rpb24gYmV0 d2VlbiB0aGUgb2JqZWN0CmFuZCBpdHMgYmluZGluZy4gVGhhdCBleHRyYSBpbmRpcmVjdGlvbiBo YXMgYSBub3RpY2VhYmxlIGltcGFjdCBvbiBob3cKZmFzdCB3ZSBjYW4gY29udmVydCBmcm9tIHRo ZSB1c2VyIGhhbmRsZXMgdG8gb3VyIGludGVybmFsIHZtYSBmb3IKZXhlY2J1ZmZlci4gSW4gb3Jk ZXIgdG8gYnlwYXNzIHRoZSBleHRyYSBpbmRpcmVjdGlvbiwgd2UgdXNlIGEKcmVzaXphYmxlIGhh c2h0YWJsZSB0byBqdW1wIGZyb20gdGhlIG9iamVjdCB0byB0aGUgcGVyLWN0eCB2bWEuCnJoYXNo dGFibGUgd2FzIGNvbnNpZGVyZWQgYnV0IHdlIGRvbid0IG5lZWQgdGhlIG9ubGluZSByZXNpemlu ZyBmZWF0dXJlCmFuZCB0aGUgZXh0cmEgY29tcGxleGl0eSBwcm92ZWQgdG8gdW5kZXJtaW5lIGl0 cyB1c2VmdWxuZXNzLiBJbnN0ZWFkLCB3ZQpzaW1wbHkgcmVhbGxvY2F0ZSB0aGUgaGFzdGFibGUg b24gZGVtYW5kIGluIGEgYmFja2dyb3VuZCB0YXNrIGFuZApzZXJpYWxpemUgaXQgYmVmb3JlIGl0 ZXJhdGluZy4KCkluIG5vbi1mdWxsLXBwZ3R0IG1vZGVzLCBtdWx0aXBsZSBmaWxlcyBhbmQgbXVs dGlwbGUgY29udGV4dHMgY2FuIHNoYXJlCnRoZSBzYW1lIHZtYS4gVGhpcyBsZWFkcyB0byBoYXZp bmcgbXVsdGlwbGUgcG9zc2libGUgaGFuZGxlLT52bWEgbGlua3MsCnNvIHdlIG9ubHkgdXNlIHRo ZSBmaXJzdCB0byBlc3RhYmxpc2ggdGhlIGZhc3QgcGF0aC4gVGhlIG1ham9yaXR5IG9mCmJ1ZmZl cnMgYXJlIG5vdCBzaGFyZWQgYW5kIHNvIHdlIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHJlYWxp c2UKc3BlZWR1cHMgd2l0aCBtdWx0aXBsZSBjbGllbnRzLgoKU2lnbmVkLW9mZi1ieTogQ2hyaXMg V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kZWJ1Z2ZzLmMgICAgICAgIHwgIDE3ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oICAgICAgICAgICAgfCAgMTkgKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jICAgICAgICAgICAgfCAgIDUgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2NvbnRleHQuYyAgICB8ICA3MyArKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2V4ZWNidWZmZXIuYyB8IDI0MyArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgICAgICAgIHwgIDIwICsrKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmggICAgICAgIHwgICA4ICstCiA3IGZpbGVzIGNo YW5nZWQsIDI2OSBpbnNlcnRpb25zKCspLCAxMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYwppbmRleCA5OTY3NDQ3MDhmMzEuLmQ4MTIxNTdlZDk0YyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTIwOCw5ICsyMDgsOSBAQCBzdGF0aWMgaW50 IG9ial9yYW5rX2J5X3N0b2xlbih2b2lkICpwcml2LAogCQkJICAgICAgc3RydWN0IGxpc3RfaGVh ZCAqQSwgc3RydWN0IGxpc3RfaGVhZCAqQikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqYSA9Ci0JCWNvbnRhaW5lcl9vZihBLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwgb2Jq X2V4ZWNfbGluayk7CisJCWNvbnRhaW5lcl9vZihBLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCwgdG1wX2xpbmspOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpiID0KLQkJY29udGFp bmVyX29mKEIsIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LCBvYmpfZXhlY19saW5rKTsKKwkJ Y29udGFpbmVyX29mKEIsIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LCB0bXBfbGluayk7CiAK IAlpZiAoYS0+c3RvbGVuLT5zdGFydCA8IGItPnN0b2xlbi0+c3RhcnQpCiAJCXJldHVybiAtMTsK QEAgLTIzOCw3ICsyMzgsNyBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX3N0b2xlbl9saXN0X2luZm8o c3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogCQlpZiAob2JqLT5zdG9sZW4gPT0gTlVM TCkKIAkJCWNvbnRpbnVlOwogCi0JCWxpc3RfYWRkKCZvYmotPm9ial9leGVjX2xpbmssICZzdG9s ZW4pOworCQlsaXN0X2FkZCgmb2JqLT50bXBfbGluaywgJnN0b2xlbik7CiAKIAkJdG90YWxfb2Jq X3NpemUgKz0gb2JqLT5iYXNlLnNpemU7CiAJCXRvdGFsX2d0dF9zaXplICs9IGk5MTVfZ2VtX29i al90b3RhbF9nZ3R0X3NpemUob2JqKTsKQEAgLTI0OCw3ICsyNDgsNyBAQCBzdGF0aWMgaW50IGk5 MTVfZ2VtX3N0b2xlbl9saXN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQog CQlpZiAob2JqLT5zdG9sZW4gPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCi0JCWxpc3RfYWRkKCZv YmotPm9ial9leGVjX2xpbmssICZzdG9sZW4pOworCQlsaXN0X2FkZCgmb2JqLT50bXBfbGluaywg JnN0b2xlbik7CiAKIAkJdG90YWxfb2JqX3NpemUgKz0gb2JqLT5iYXNlLnNpemU7CiAJCWNvdW50 Kys7CkBAIC0yNTYsMTEgKzI1NiwxMSBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX3N0b2xlbl9saXN0 X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogCWxpc3Rfc29ydChOVUxMLCAm c3RvbGVuLCBvYmpfcmFua19ieV9zdG9sZW4pOwogCXNlcV9wdXRzKG0sICJTdG9sZW46XG4iKTsK IAl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0b2xlbikpIHsKLQkJb2JqID0gbGlzdF9maXJzdF9lbnRy eSgmc3RvbGVuLCB0eXBlb2YoKm9iaiksIG9ial9leGVjX2xpbmspOworCQlvYmogPSBsaXN0X2Zp cnN0X2VudHJ5KCZzdG9sZW4sIHR5cGVvZigqb2JqKSwgdG1wX2xpbmspOwogCQlzZXFfcHV0cyht LCAiICAgIik7CiAJCWRlc2NyaWJlX29iaihtLCBvYmopOwogCQlzZXFfcHV0YyhtLCAnXG4nKTsK LQkJbGlzdF9kZWxfaW5pdCgmb2JqLT5vYmpfZXhlY19saW5rKTsKKwkJbGlzdF9kZWwoJm9iai0+ dG1wX2xpbmspOwogCX0KIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIApAQCAt MTk5Niw2ICsxOTk2LDExIEBAIHN0YXRpYyBpbnQgaTkxNV9jb250ZXh0X3N0YXR1cyhzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAkJCXNlcV9wdXRjKG0sICdcbicpOwogCQl9CiAK KwkJc2VxX3ByaW50ZihtLCAiXHR2bWEgaGFzaHRhYmxlIHNpemU9JXUgKGFjdHVhbCAldSksIGNv dW50PSV1XG4iLAorCQkJICAgY3R4LT52bWEuaHRfc2l6ZSwKKwkJCSAgIDEgPDwgY3R4LT52bWEu aHRfYml0cywKKwkJCSAgIGN0eC0+dm1hLmh0X2NvdW50KTsKKwogCQlzZXFfcHV0YyhtLCAnXG4n KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDA0OWFjNTNiMDVkYS4uZTdlNzg0 MGQ1YTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNs dWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KICNpbmNs dWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KLSNpbmNsdWRlIDxsaW51eC9oYXNodGFibGUuaD4KKyNp bmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNp bmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zLmg+CkBAIC04ODks OCArODg5LDExIEBAIHN0cnVjdCBpOTE1X2N0eF9oYW5nX3N0YXRzIHsKICAqLwogc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgewogCXN0cnVjdCBrcmVmIHJlZjsKKwogCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1OwogCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdjsK KwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisKIAlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQ7 CiAJc3RydWN0IHBpZCAqcGlkOwogCkBAIC05MTksNyArOTIyLDEzIEBAIHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0IHsKIAlzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgc3RhdHVzX25vdGlmaWVy OwogCWJvb2wgZXhlY2xpc3RzX2ZvcmNlX3NpbmdsZV9zdWJtaXNzaW9uOwogCi0Jc3RydWN0IGxp c3RfaGVhZCBsaW5rOworCXN0cnVjdCB7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNpemU7CisJ CXN0cnVjdCBobGlzdF9oZWFkICpodDsKKwkJdW5zaWduZWQgaW50IGh0X2JpdHM7CisJCXVuc2ln bmVkIGludCBodF9zaXplOworCQl1bnNpZ25lZCBpbnQgaHRfY291bnQ7CisJfSB2bWE7CiAKIAl1 OCByZW1hcF9zbGljZTsKIAlib29sIGNsb3NlZDoxOwpAQCAtMjE1MywxNSArMjE2MiwxNCBAQCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7CiAKIAkvKiogTGlzdCBvZiBWTUFzIGJhY2tlZCBi eSB0aGlzIG9iamVjdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgdm1hX2xpc3Q7CisJc3RydWN0IGk5 MTVfdm1hICp2bWFfaGFzaGVkOwogCiAJLyoqIFN0b2xlbiBtZW1vcnkgZm9yIHRoaXMgb2JqZWN0 LCBpbnN0ZWFkIG9mIGJlaW5nIGJhY2tlZCBieSBzaG1lbS4gKi8KIAlzdHJ1Y3QgZHJtX21tX25v ZGUgKnN0b2xlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGdsb2JhbF9saXN0OwogCi0JLyoqIFVzZWQg aW4gZXhlY2J1ZiB0byB0ZW1wb3JhcmlseSBob2xkIGEgcmVmICovCi0Jc3RydWN0IGxpc3RfaGVh ZCBvYmpfZXhlY19saW5rOwotCiAJc3RydWN0IGxpc3RfaGVhZCBiYXRjaF9wb29sX2xpbms7CisJ c3RydWN0IGxpc3RfaGVhZCB0bXBfbGluazsKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJLyoq CkBAIC0zMTIzLDYgKzMxMzEsNyBAQCBpbnQgaTkxNV92bWFfYmluZChzdHJ1Y3QgaTkxNV92bWEg KnZtYSwgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAogCQkgIHUzMiBmbGFncyk7 CiB2b2lkIF9faTkxNV92bWFfc2V0X21hcF9hbmRfZmVuY2VhYmxlKHN0cnVjdCBpOTE1X3ZtYSAq dm1hKTsKIGludCBfX211c3RfY2hlY2sgaTkxNV92bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAq dm1hKTsKK3ZvaWQgaTkxNV92bWFfdW5saW5rX2N0eChzdHJ1Y3QgaTkxNV92bWEgKnZtYSk7CiB2 b2lkIGk5MTVfdm1hX2Nsb3NlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKIHZvaWQgaTkxNV92bWFf ZGVzdHJveShzdHJ1Y3QgaTkxNV92bWEgKnZtYSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmlu ZGV4IGU0MzIyMTFlOGIyNC4uMGNhM2VmNTQ3MTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK QEAgLTI2NzksNiArMjY3OSwxMCBAQCB2b2lkIGk5MTVfZ2VtX2Nsb3NlX29iamVjdChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IGRybV9maWxlICpmaWxlKQogCQlpZiAodm1hLT52 bS0+ZmlsZSA9PSBmcHJpdikKIAkJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CiAKKwl2bWEgPSBvYmot PnZtYV9oYXNoZWQ7CisJaWYgKHZtYSAmJiB2bWEtPmN0eC0+ZmlsZV9wcml2ID09IGZwcml2KQor CQlpOTE1X3ZtYV91bmxpbmtfY3R4KHZtYSk7CisKIAlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX2Fj dGl2ZShvYmopICYmCiAJICAgICFpOTE1X2dlbV9vYmplY3RfaGFzX2FjdGl2ZV9yZWZlcmVuY2Uo b2JqKSkgewogCQlpOTE1X2dlbV9vYmplY3Rfc2V0X2FjdGl2ZV9yZWZlcmVuY2Uob2JqKTsKQEAg LTQwNjUsNyArNDA2OSw2IEBAIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkgICAgaTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fcmVh ZCk7CiAJaW5pdF9yZXF1ZXN0X2FjdGl2ZSgmb2JqLT5sYXN0X3dyaXRlLAogCQkJICAgIGk5MTVf Z2VtX29iamVjdF9yZXRpcmVfX3dyaXRlKTsKLQlJTklUX0xJU1RfSEVBRCgmb2JqLT5vYmpfZXhl Y19saW5rKTsKIAlJTklUX0xJU1RfSEVBRCgmb2JqLT52bWFfbGlzdCk7CiAJSU5JVF9MSVNUX0hF QUQoJm9iai0+YmF0Y2hfcG9vbF9saW5rKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Y29udGV4dC5jCmluZGV4IGFiNTRmMjA4YTRhOS4uM2I0ZWVjNjc2ZDY2IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCkBAIC04NSw2ICs4NSw3IEBACiAgKgogICovCiAK KyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRl IDxkcm0vaTkxNV9kcm0uaD4KICNpbmNsdWRlICJpOTE1X2Rydi5oIgpAQCAtOTksNiArMTAwLDkg QEAKICNkZWZpbmUgR0VONl9DT05URVhUX0FMSUdOICg2NDw8MTApCiAjZGVmaW5lIEdFTjdfQ09O VEVYVF9BTElHTiA0MDk2CiAKKy8qIEluaXRpYWwgc2l6ZSAoYXMgbG9nMikgdG8gcHJlYWxsb2Nh dGUgdGhlIGhhbmRsZS0+b2JqZWN0IGhhc2h0YWJsZSAqLworI2RlZmluZSBWTUFfSFRfQklUUyAy dSAvKiA0IHggMiBwb2ludGVycywgNjQgYnl0ZXMgbWluaW11bSAqLworCiBzdGF0aWMgc2l6ZV90 IGdldF9jb250ZXh0X2FsaWdubWVudChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiB7CiAJaWYgKElTX0dFTjYoZGV2X3ByaXYpKQpAQCAtMTM0LDYgKzEzOCw2NCBAQCBzdGF0aWMg aW50IGdldF9jb250ZXh0X3NpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog CXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHJlc2l6ZV92bWFfaHQoc3RydWN0IHdvcmtf c3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHggPQorCQljb250 YWluZXJfb2Yod29yaywgdHlwZW9mKCpjdHgpLCB2bWEucmVzaXplKTsKKwl1bnNpZ25lZCBpbnQg c2l6ZSwgYml0cywgbmV3X2JpdHMsIGk7CisJc3RydWN0IGhsaXN0X2hlYWQgKm5ld19odDsKKwor CWJpdHMgPSAxICsgaWxvZzIoNCpjdHgtPnZtYS5odF9jb3VudC8zKTsKKwluZXdfYml0cyA9IG1p bl90KHVuc2lnbmVkIGludCwKKwkJCSBtYXgoYml0cywgVk1BX0hUX0JJVFMpLAorCQkJIHNpemVv Zih1bnNpZ25lZCBpbnQpKjgpOworCWlmIChuZXdfYml0cyA9PSBjdHgtPnZtYS5odF9iaXRzKQor CQlnb3RvIG91dDsKKworCW5ld19odCA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdfaHQpPDxuZXdfYml0 cywgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CisJaWYgKCFuZXdfaHQpCisJCW5ld19odCA9 IHZ6YWxsb2Moc2l6ZW9mKCpuZXdfaHQpPDxuZXdfYml0cyk7CisJaWYgKCFuZXdfaHQpCisJCS8q IHByZXRlbmQgdGhlIHJlc2l6ZSBzdWNlZWRlZCBhbmQgc3RvcCBjYWxsaW5nIHVzIGZvciBhIGJp dCEgKi8KKwkJZ290byBvdXQ7CisKKwlzaXplID0gMSA8PCBjdHgtPnZtYS5odF9iaXRzOworCWZv ciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJCXN0 cnVjdCBobGlzdF9ub2RlICp0bXA7CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEs IHRtcCwgJmN0eC0+dm1hLmh0W2ldLCBjdHhfbm9kZSkKKwkJCWhsaXN0X2FkZF9oZWFkKCZ2bWEt PmN0eF9ub2RlLAorCQkJCSAgICAgICAmbmV3X2h0W2hhc2hfMzIodm1hLT5jdHhfaGFuZGxlLAor CQkJCQkJICAgICAgIG5ld19iaXRzKV0pOworCX0KKwlrdmZyZWUoY3R4LT52bWEuaHQpOworCWN0 eC0+dm1hLmh0ID0gbmV3X2h0OworCWN0eC0+dm1hLmh0X2JpdHMgPSBuZXdfYml0czsKKwlzbXBf d21iKCk7CitvdXQ6CisJY3R4LT52bWEuaHRfc2l6ZSA9IDEgPDwgYml0czsKK30KKworc3RhdGlj IHZvaWQgZGVjb3VwbGVfdm1hKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCit7CisJdW5z aWduZWQgaW50IGksIHNpemU7CisKKwlpZiAoY3R4LT52bWEuaHRfc2l6ZSAmIDEpCisJCWNhbmNl bF93b3JrX3N5bmMoJmN0eC0+dm1hLnJlc2l6ZSk7CisKKwlzaXplID0gMSA8PCBjdHgtPnZtYS5o dF9iaXRzOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJc3RydWN0IGk5MTVfdm1h ICp2bWE7CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmY3R4LT52bWEuaHRbaV0sIGN0 eF9ub2RlKSB7CisJCQl2bWEtPm9iai0+dm1hX2hhc2hlZCA9IE5VTEw7CisJCQl2bWEtPmN0eCA9 IE5VTEw7CisJCX0KKwl9CisJa3ZmcmVlKGN0eC0+dm1hLmh0KTsKK30KKwogdm9pZCBpOTE1X2dl bV9jb250ZXh0X2ZyZWUoc3RydWN0IGtyZWYgKmN0eF9yZWYpCiB7CiAJc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihjdHhfcmVmLCB0eXBlb2YoKmN0eCksIHJlZik7 CkBAIC0xNDMsNiArMjA1LDcgQEAgdm9pZCBpOTE1X2dlbV9jb250ZXh0X2ZyZWUoc3RydWN0IGty ZWYgKmN0eF9yZWYpCiAJdHJhY2VfaTkxNV9jb250ZXh0X2ZyZWUoY3R4KTsKIAlHRU1fQlVHX09O KCFjdHgtPmNsb3NlZCk7CiAKKwlkZWNvdXBsZV92bWEoY3R4KTsKIAlpOTE1X3BwZ3R0X3B1dChj dHgtPnBwZ3R0KTsKIAogCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9FTkdJTkVTOyBpKyspIHsK QEAgLTE1OSw2ICsyMjIsNyBAQCB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfZnJlZShzdHJ1Y3Qga3Jl ZiAqY3R4X3JlZikKIAl9CiAKIAlwdXRfcGlkKGN0eC0+cGlkKTsKKwogCWxpc3RfZGVsKCZjdHgt PmxpbmspOwogCiAJaWRhX3NpbXBsZV9yZW1vdmUoJmN0eC0+aTkxNS0+Y29udGV4dF9od19pZGEs IGN0eC0+aHdfaWQpOwpAQCAtMjgxLDYgKzM0NSwxNSBAQCBfX2NyZWF0ZV9od19jb250ZXh0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAKIAljdHgtPmdndHRfYWxpZ25tZW50ID0gZ2V0X2NvbnRl eHRfYWxpZ25tZW50KGRldl9wcml2KTsKIAorCWN0eC0+dm1hLmh0X2JpdHMgPSBWTUFfSFRfQklU UzsKKwljdHgtPnZtYS5odF9zaXplID0gMSA8PCBjdHgtPnZtYS5odF9iaXRzOworCWN0eC0+dm1h Lmh0ID0ga3phbGxvYyhzaXplb2YoKmN0eC0+dm1hLmh0KSpjdHgtPnZtYS5odF9zaXplLAorCQkJ ICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgtPnZtYS5odCkKKwkJZ290byBlcnJfb3V0Owor CisJSU5JVF9XT1JLKCZjdHgtPnZtYS5yZXNpemUsIHJlc2l6ZV92bWFfaHQpOworCiAJaWYgKGRl dl9wcml2LT5od19jb250ZXh0X3NpemUpIHsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKIAkJc3RydWN0IGk5MTVfdm1hICp2bWE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9leGVjYnVmZmVyLmMKaW5kZXggODI0OTZkZDczMzA5Li4zNTc1MWU4NTU4NTkgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKQEAgLTcwLDM4ICs3MCwz MyBAQCBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyIHsKIAkJdW5zaWduZWQgaW50IHBhZ2U7CiAJCWJv b2wgdXNlXzY0Yml0X3JlbG9jOwogCX0gcmVsb2NfY2FjaGU7Ci0JaW50IGFuZDsKLQl1bmlvbiB7 Ci0JCXN0cnVjdCBpOTE1X3ZtYSAqKmx1dDsKLQkJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldHM7 Ci0JfTsKKwlpbnQgbHV0X21hc2s7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldHM7CiB9Owog CiBzdGF0aWMgaW50CiBlYl9jcmVhdGUoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7Ci0J ZWItPmx1dCA9IE5VTEw7Ci0JaWYgKGViLT5hcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19IQU5ETEVf TFVUKSB7Ci0JCXVuc2lnbmVkIGludCBzaXplID0gZWItPmFyZ3MtPmJ1ZmZlcl9jb3VudDsKLQkJ c2l6ZSAqPSBzaXplb2Yoc3RydWN0IGk5MTVfdm1hICopOwotCQllYi0+bHV0ID0ga21hbGxvYyhz aXplLAotCQkJCSAgR0ZQX1RFTVBPUkFSWSB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX05PUkVUUlkp OwotCX0KLQotCWlmICghZWItPmx1dCkgewotCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IGViLT5hcmdz LT5idWZmZXJfY291bnQ7Ci0JCXVuc2lnbmVkIGludCBjb3VudCA9IFBBR0VfU0laRSAvIHNpemVv ZihzdHJ1Y3QgaGxpc3RfaGVhZCkgLyAyOwotCQlCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIo UEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSk7Ci0JCXdoaWxlIChjb3VudCA+ IDIqc2l6ZSkKLQkJCWNvdW50ID4+PSAxOwotCQllYi0+bHV0ID0ga3phbGxvYyhjb3VudCpzaXpl b2Yoc3RydWN0IGhsaXN0X2hlYWQpLAotCQkJCSAgR0ZQX1RFTVBPUkFSWSk7Ci0JCWlmICghZWIt Pmx1dCkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWViLT5hbmQgPSBjb3VudCAtIDE7CisJaWYg KChlYi0+YXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNfSEFORExFX0xVVCkgPT0gMCkgeworCQl1bnNp Z25lZCBpbnQgc2l6ZSA9IDEgKyBpbG9nMihlYi0+YXJncy0+YnVmZmVyX2NvdW50KTsKKworCQlk byB7CisJCQllYi0+YnVja2V0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSA8 PCBzaXplLAorCQkJCQkgICAgIEdGUF9URU1QT1JBUlkgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9O T1JFVFJZKTsKKwkJCWlmIChlYi0+YnVja2V0cykKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAoLS1z aXplKTsKKworCQlpZiAodW5saWtlbHkoIWViLT5idWNrZXRzKSkgeworCQkJZWItPmJ1Y2tldHMg PSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCksCisJCQkJCSAgICAgIEdGUF9URU1Q T1JBUlkpOworCQkJaWYgKHVubGlrZWx5KCFlYi0+YnVja2V0cykpCisJCQkJcmV0dXJuIC1FTk9N RU07CisJCX0KKworCQllYi0+bHV0X21hc2sgPSBzaXplOwogCX0gZWxzZQotCQllYi0+YW5kID0g LWViLT5hcmdzLT5idWZmZXJfY291bnQ7CisJCWViLT5sdXRfbWFzayA9IC1lYi0+YXJncy0+YnVm ZmVyX2NvdW50OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzYsNzIgKzEzMSwxMDMgQEAgZWJfcmVz ZXQoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiAJCXZtYS0+ZXhlY19lbnRyeSA9IE5VTEw7 CiAJfQogCi0JaWYgKGViLT5hbmQgPj0gMCkKLQkJbWVtc2V0KGViLT5idWNrZXRzLCAwLCAoZWIt PmFuZCsxKSpzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKTsKKwlpZiAoZWItPmx1dF9tYXNrID49 IDApCisJCW1lbXNldChlYi0+YnVja2V0cywgMCwKKwkJICAgICAgICgxPDxlYi0+bHV0X21hc2sp KnNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkpOwogfQogCi1zdGF0aWMgc3RydWN0IGk5MTVfdm1h ICoKLWViX2dldF9iYXRjaChzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKKyNkZWZpbmUgdG9f cHRyKFQsIHgpICgoVCAqKSh1aW50cHRyX3QpKHgpKQorCitzdGF0aWMgYm9vbAorZWJfYWRkX3Zt YShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgc3RydWN0IGk5MTVfdm1hICp2bWEsIGludCBp KQogewotCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gbGlzdF9lbnRyeShlYi0+dm1hcy5wcmV2LCB0 eXBlb2YoKnZtYSksIGV4ZWNfbGlzdCk7CisJaWYgKHVubGlrZWx5KHZtYS0+ZXhlY19lbnRyeSkp IHsKKwkJRFJNX0RFQlVHKCJPYmplY3QgW2hhbmRsZSAlZCwgaW5kZXggJWRdIGFwcGVhcnMgbW9y ZSB0aGFuIG9uY2UgaW4gb2JqZWN0IGxpc3RcbiIsCisJCQkgIGViLT5leGVjW2ldLmhhbmRsZSwg aSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJbGlzdF9hZGRfdGFpbCgmdm1hLT5leGVjX2xpc3Qs ICZlYi0+dm1hcyk7CiAKLQkvKgotCSAqIFNOQSBpcyBkb2luZyBmYW5jeSB0cmlja3Mgd2l0aCBj b21wcmVzc2luZyBiYXRjaCBidWZmZXJzLCB3aGljaCBsZWFkcwotCSAqIHRvIG5lZ2F0aXZlIHJl bG9jYXRpb24gZGVsdGFzLiBVc3VhbGx5IHRoYXQgd29ya3Mgb3V0IG9rIHNpbmNlIHRoZQotCSAq IHJlbG9jYXRlIGFkZHJlc3MgaXMgc3RpbGwgcG9zaXRpdmUsIGV4Y2VwdCB3aGVuIHRoZSBiYXRj aCBpcyBwbGFjZWQKLQkgKiB2ZXJ5IGxvdyBpbiB0aGUgR1RULiBFbnN1cmUgdGhpcyBkb2Vzbid0 IGhhcHBlbi4KLQkgKgotCSAqIE5vdGUgdGhhdCBhY3R1YWwgaGFuZ3MgaGF2ZSBvbmx5IGJlZW4g b2JzZXJ2ZWQgb24gZ2VuNywgYnV0IGZvcgotCSAqIHBhcmFub2lhIGRvIGl0IGV2ZXJ5d2hlcmUu Ci0JICovCi0JaWYgKCh2bWEtPmV4ZWNfZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfUElOTkVE KSA9PSAwKQotCQl2bWEtPmV4ZWNfZW50cnktPmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfTkVFRFNf QklBUzsKKwl2bWEtPmV4ZWNfZW50cnkgPSAmZWItPmV4ZWNbaV07CisJaWYgKGViLT5sdXRfbWFz ayA+PSAwKSB7CisJCXZtYS0+ZXhlY19oYW5kbGUgPSBlYi0+ZXhlY1tpXS5oYW5kbGU7CisJCWhs aXN0X2FkZF9oZWFkKCZ2bWEtPmV4ZWNfbm9kZSwKKwkJCSAgICAgICAmZWItPmJ1Y2tldHNbaGFz aF8zMih2bWEtPmV4ZWNfaGFuZGxlLAorCQkJCQkJICAgIGViLT5sdXRfbWFzayldKTsKKwl9CiAK LQlyZXR1cm4gdm1hOworCWViLT5leGVjW2ldLnJzdmQyID0gKHVpbnRwdHJfdCl2bWE7CisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X2hlYWQgKmh0X2hlYWQo c3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKKwkJCQkJIHUzMiBoYW5kbGUpCit7CisJcmV0 dXJuICZjdHgtPnZtYS5odFtoYXNoXzMyKGhhbmRsZSwgY3R4LT52bWEuaHRfYml0cyldOwogfQog CiBzdGF0aWMgaW50CiBlYl9sb29rdXBfdm1hcyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikK IHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCBsaXN0X2hlYWQg b2JqZWN0czsKLQlpbnQgaSwgcmV0OworCWNvbnN0IGludCBjb3VudCA9IGViLT5hcmdzLT5idWZm ZXJfY291bnQ7CisJc3RydWN0IGk5MTVfdm1hICp2bWE7CisJaW50IHNsb3dfcGFzcyA9IC0xOwor CWludCBpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmViLT52bWFzKTsKIAotCUlOSVRfTElTVF9IRUFE KCZvYmplY3RzKTsKKwlpZiAodW5saWtlbHkoZWItPmN0eC0+dm1hLmh0X3NpemUgJiAxKSkKKwkJ Zmx1c2hfd29yaygmZWItPmN0eC0+dm1hLnJlc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50 OyBpKyspIHsKKwkJZWItPmV4ZWNbaV0ucnN2ZDIgPSAwOworCisJCWhsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHZtYSwKKwkJCQkgICAgIGh0X2hlYWQoZWItPmN0eCwgZWItPmV4ZWNbaV0uaGFuZGxlKSwK KwkJCQkgICAgIGN0eF9ub2RlKSB7CisJCQlpZiAodm1hLT5jdHhfaGFuZGxlICE9IGViLT5leGVj W2ldLmhhbmRsZSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFlYl9hZGRfdm1hKGViLCB2bWEs IGkpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlnb3RvIG5leHRfdm1hOworCQl9CisKKwkJ aWYgKHNsb3dfcGFzcyA8IDApCisJCQlzbG93X3Bhc3MgPSBpOworbmV4dF92bWE6IDsKKwl9CisK KwlpZiAoc2xvd19wYXNzIDwgMCkKKwkJcmV0dXJuIDA7CisKIAlzcGluX2xvY2soJmViLT5maWxl LT50YWJsZV9sb2NrKTsKIAkvKiBHcmFiIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgYW5kIHJl bGVhc2UgdGhlIGxvY2sgc28gd2UgY2FuIGxvb2t1cAogCSAqIG9yIGNyZWF0ZSB0aGUgVk1BIHdp dGhvdXQgdXNpbmcgR0ZQX0FUT01JQyAqLwotCWZvciAoaSA9IDA7IGkgPCBlYi0+YXJncy0+YnVm ZmVyX2NvdW50OyBpKyspIHsKLQkJb2JqID0gdG9faW50ZWxfYm8oaWRyX2ZpbmQoJmViLT5maWxl LT5vYmplY3RfaWRyLCBlYi0+ZXhlY1tpXS5oYW5kbGUpKTsKLQkJaWYgKG9iaiA9PSBOVUxMKSB7 Ci0JCQlzcGluX3VubG9jaygmZWItPmZpbGUtPnRhYmxlX2xvY2spOwotCQkJRFJNX0RFQlVHKCJJ bnZhbGlkIG9iamVjdCBoYW5kbGUgJWQgYXQgaW5kZXggJWRcbiIsCi0JCQkJICAgZWItPmV4ZWNb aV0uaGFuZGxlLCBpKTsKLQkJCXJldCA9IC1FTk9FTlQ7Ci0JCQlnb3RvIGVycjsKLQkJfQorCWZv ciAoaSA9IHNsb3dfcGFzczsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKKworCQlpZiAoZWItPmV4ZWNbaV0ucnN2ZDIpCisJCQljb250aW51ZTsK IAotCQlpZiAoIWxpc3RfZW1wdHkoJm9iai0+b2JqX2V4ZWNfbGluaykpIHsKKwkJb2JqID0gdG9f aW50ZWxfYm8oaWRyX2ZpbmQoJmViLT5maWxlLT5vYmplY3RfaWRyLAorCQkJCQkgICBlYi0+ZXhl Y1tpXS5oYW5kbGUpKTsKKwkJaWYgKHVubGlrZWx5KCFvYmopKSB7CiAJCQlzcGluX3VubG9jaygm ZWItPmZpbGUtPnRhYmxlX2xvY2spOwotCQkJRFJNX0RFQlVHKCJPYmplY3QgJXAgW2hhbmRsZSAl ZCwgaW5kZXggJWRdIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gb2JqZWN0IGxpc3RcbiIsCi0J CQkJICAgb2JqLCBlYi0+ZXhlY1tpXS5oYW5kbGUsIGkpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJ CWdvdG8gZXJyOworCQkJRFJNX0RFQlVHKCJJbnZhbGlkIG9iamVjdCBoYW5kbGUgJWQgYXQgaW5k ZXggJWRcbiIsCisJCQkJICBlYi0+ZXhlY1tpXS5oYW5kbGUsIGkpOworCQkJcmV0dXJuIC1FTk9F TlQ7CiAJCX0KIAotCQlsaXN0X2FkZF90YWlsKCZvYmotPm9ial9leGVjX2xpbmssICZvYmplY3Rz KTsKKwkJZWItPmV4ZWNbaV0ucnN2ZDIgPSAxIHwgKHVpbnRwdHJfdClvYmo7CiAJfQogCXNwaW5f dW5sb2NrKCZlYi0+ZmlsZS0+dGFibGVfbG9jayk7CiAKLQlpID0gMDsKLQl3aGlsZSAoIWxpc3Rf ZW1wdHkoJm9iamVjdHMpKSB7Ci0JCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCWZvciAoaSA9IHNs b3dfcGFzczsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKIAotCQlvYmogPSBsaXN0X2ZpcnN0X2VudHJ5KCZvYmplY3RzLAotCQkJCSAgICAgICBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKLQkJCQkgICAgICAgb2JqX2V4ZWNfbGluayk7CisJ CWlmICgoZWItPmV4ZWNbaV0ucnN2ZDIgJiAxKSA9PSAwKQorCQkJY29udGludWU7CiAKIAkJLyoK IAkJICogTk9URTogV2UgY2FuIGxlYWsgYW55IHZtYXMgY3JlYXRlZCBoZXJlIHdoZW4gc29tZXRo aW5nIGZhaWxzCkBAIC0yMTEsNjEgKzIzNyw3MiBAQCBlYl9sb29rdXBfdm1hcyhzdHJ1Y3QgaTkx NV9leGVjYnVmZmVyICplYikKIAkJICogZnJvbSB0aGUgKG9iaiwgdm0pIHdlIGRvbid0IHJ1biB0 aGUgcmlzayBvZiBjcmVhdGluZwogCQkgKiBkdXBsaWNhdGVkIHZtYXMgZm9yIHRoZSBzYW1lIHZt LgogCQkgKi8KKwkJb2JqID0gdG9fcHRyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LCBlYi0+ ZXhlY1tpXS5yc3ZkMiAmIH4xKTsKIAkJdm1hID0gaTkxNV9nZW1fb2JqX2xvb2t1cF9vcl9jcmVh dGVfdm1hKG9iaiwgZWItPnZtLCBOVUxMKTsKIAkJaWYgKHVubGlrZWx5KElTX0VSUih2bWEpKSkg ewogCQkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gbG9va3VwIFZNQVxuIik7Ci0JCQlyZXQgPSBQVFJf RVJSKHZtYSk7Ci0JCQlnb3RvIGVycjsKKwkJCXJldHVybiBQVFJfRVJSKHZtYSk7CiAJCX0KIAot CQkvKiBUcmFuc2ZlciBvd25lcnNoaXAgZnJvbSB0aGUgb2JqZWN0cyBsaXN0IHRvIHRoZSB2bWFz IGxpc3QuICovCi0JCWxpc3RfYWRkX3RhaWwoJnZtYS0+ZXhlY19saXN0LCAmZWItPnZtYXMpOwot CQlsaXN0X2RlbF9pbml0KCZvYmotPm9ial9leGVjX2xpbmspOwotCi0JCXZtYS0+ZXhlY19lbnRy eSA9ICZlYi0+ZXhlY1tpXTsKLQkJaWYgKGViLT5hbmQgPCAwKSB7Ci0JCQllYi0+bHV0W2ldID0g dm1hOwotCQl9IGVsc2UgewotCQkJdTMyIGhhbmRsZSA9Ci0JCQkJZWItPmFyZ3MtPmZsYWdzICYg STkxNV9FWEVDX0hBTkRMRV9MVVQgPwotCQkJCWkgOiBlYi0+ZXhlY1tpXS5oYW5kbGU7Ci0JCQl2 bWEtPmV4ZWNfaGFuZGxlID0gaGFuZGxlOwotCQkJaGxpc3RfYWRkX2hlYWQoJnZtYS0+ZXhlY19u b2RlLAotCQkJCSAgICAgICAmZWItPmJ1Y2tldHNbaGFuZGxlICYgZWItPmFuZF0pOworCQkvKiBG aXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQgKi8KKwkJaWYgKCF2bWEtPmN0eCkgeworCQkJdm1hLT5j dHggPSBlYi0+Y3R4OworCQkJdm1hLT5jdHhfaGFuZGxlID0gZWItPmV4ZWNbaV0uaGFuZGxlOwor CQkJaGxpc3RfYWRkX2hlYWQoJnZtYS0+Y3R4X25vZGUsCisJCQkJICAgICAgIGh0X2hlYWQoZWIt PmN0eCwgZWItPmV4ZWNbaV0uaGFuZGxlKSk7CisJCQllYi0+Y3R4LT52bWEuaHRfY291bnQrKzsK KwkJCWlmIChpOTE1X3ZtYV9pc19nZ3R0KHZtYSkpIHsKKwkJCQlHRU1fQlVHX09OKG9iai0+dm1h X2hhc2hlZCk7CisJCQkJb2JqLT52bWFfaGFzaGVkID0gdm1hOworCQkJfQogCQl9Ci0JCSsraTsK KworCQlpZiAoIWViX2FkZF92bWEoZWIsIHZtYSwgaSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisJaWYgKDQqZWItPmN0eC0+dm1hLmh0X2NvdW50ID4gMyplYi0+Y3R4LT52bWEuaHRfc2l6ZSB8 fAorCSAgICA0KmViLT5jdHgtPnZtYS5odF9jb3VudCA8IGViLT5jdHgtPnZtYS5odF9zaXplKSB7 CisJCWViLT5jdHgtPnZtYS5odF9zaXplIHw9IDE7CisJCXF1ZXVlX3dvcmsoc3lzdGVtX2hpZ2hw cmlfd3EsICZlYi0+Y3R4LT52bWEucmVzaXplKTsKIAl9CiAKIAlyZXR1cm4gMDsKK30KKworc3Rh dGljIHN0cnVjdCBpOTE1X3ZtYSAqCitlYl9nZXRfYmF0Y2goc3RydWN0IGk5MTVfZXhlY2J1ZmZl ciAqZWIpCit7CisJc3RydWN0IGk5MTVfdm1hICp2bWE7CiAKKwl2bWEgPSB0b19wdHIoc3RydWN0 IGk5MTVfdm1hLCBlYi0+ZXhlY1tlYi0+YXJncy0+YnVmZmVyX2NvdW50LTFdLnJzdmQyKTsKIAot ZXJyOgotCXdoaWxlICghbGlzdF9lbXB0eSgmb2JqZWN0cykpIHsKLQkJb2JqID0gbGlzdF9maXJz dF9lbnRyeSgmb2JqZWN0cywKLQkJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qs Ci0JCQkJICAgICAgIG9ial9leGVjX2xpbmspOwotCQlsaXN0X2RlbF9pbml0KCZvYmotPm9ial9l eGVjX2xpbmspOwotCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Ci0JfQogCS8qCi0JICogT2Jq ZWN0cyBhbHJlYWR5IHRyYW5zZmVyZWQgdG8gdGhlIHZtYXMgbGlzdCB3aWxsIGJlIHVucmVmZXJl bmNlZCBieQotCSAqIGViX2Rlc3Ryb3kuCisJICogU05BIGlzIGRvaW5nIGZhbmN5IHRyaWNrcyB3 aXRoIGNvbXByZXNzaW5nIGJhdGNoIGJ1ZmZlcnMsIHdoaWNoIGxlYWRzCisJICogdG8gbmVnYXRp dmUgcmVsb2NhdGlvbiBkZWx0YXMuIFVzdWFsbHkgdGhhdCB3b3JrcyBvdXQgb2sgc2luY2UgdGhl CisJICogcmVsb2NhdGUgYWRkcmVzcyBpcyBzdGlsbCBwb3NpdGl2ZSwgZXhjZXB0IHdoZW4gdGhl IGJhdGNoIGlzIHBsYWNlZAorCSAqIHZlcnkgbG93IGluIHRoZSBHVFQuIEVuc3VyZSB0aGlzIGRv ZXNuJ3QgaGFwcGVuLgorCSAqCisJICogTm90ZSB0aGF0IGFjdHVhbCBoYW5ncyBoYXZlIG9ubHkg YmVlbiBvYnNlcnZlZCBvbiBnZW43LCBidXQgZm9yCisJICogcGFyYW5vaWEgZG8gaXQgZXZlcnl3 aGVyZS4KIAkgKi8KKwlpZiAoKHZtYS0+ZXhlY19lbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9Q SU5ORUQpID09IDApCisJCXZtYS0+ZXhlY19lbnRyeS0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9O RUVEU19CSUFTOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gdm1hOwogfQogCi1zdGF0aWMgc3Ry dWN0IGk5MTVfdm1hICplYl9nZXRfdm1hKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLCB1bnNp Z25lZCBsb25nIGhhbmRsZSkKK3N0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKgorZWJfZ2V0X3ZtYShz dHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgdW5zaWduZWQgbG9uZyBoYW5kbGUpCiB7Ci0JaWYg KGViLT5hbmQgPCAwKSB7Ci0JCWlmIChoYW5kbGUgPj0gLWViLT5hbmQpCisJaWYgKGViLT5sdXRf bWFzayA8IDApIHsKKwkJaWYgKGhhbmRsZSA+PSAtZWItPmx1dF9tYXNrKQogCQkJcmV0dXJuIE5V TEw7Ci0JCXJldHVybiBlYi0+bHV0W2hhbmRsZV07CisJCXJldHVybiB0b19wdHIoc3RydWN0IGk5 MTVfdm1hLCBlYi0+ZXhlY1toYW5kbGVdLnJzdmQyKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgaGxp c3RfaGVhZCAqaGVhZDsKIAkJc3RydWN0IGk5MTVfdm1hICp2bWE7CiAKLQkJaGVhZCA9ICZlYi0+ YnVja2V0c1toYW5kbGUgJiBlYi0+YW5kXTsKKwkJaGVhZCA9ICZlYi0+YnVja2V0c1toYXNoXzMy KGhhbmRsZSwgZWItPmx1dF9tYXNrKV07CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgaGVh ZCwgZXhlY19ub2RlKSB7CiAJCQlpZiAodm1hLT5leGVjX2hhbmRsZSA9PSBoYW5kbGUpCiAJCQkJ cmV0dXJuIHZtYTsKQEAgLTI4OCw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCBlYl9kZXN0cm95KHN0 cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogCiAJaTkxNV9nZW1fY29udGV4dF9wdXQoZWItPmN0 eCk7CiAKLQlpZiAoZWItPmJ1Y2tldHMpCisJaWYgKGViLT5sdXRfbWFzayA+PSAwKQogCQlrZnJl ZShlYi0+YnVja2V0cyk7CiB9CiAKQEAgLTkxNiw3ICs5NTMsNyBAQCBzdGF0aWMgaW50IGViX3Jl c2VydmUoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiAJCQllbnRyeS0+ZmxhZ3MgJj0gfkVY RUNfT0JKRUNUX05FRURTX0ZFTkNFOwogCQluZWVkX2ZlbmNlID0KIAkJCWVudHJ5LT5mbGFncyAm IEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFICYmCi0JCQlpOTE1X2dlbV9vYmplY3RfaXNfdGlsZWQo b2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF9pc190aWxlZCh2bWEtPm9iaik7CiAJCW5lZWRfbWFw cGFibGUgPSBuZWVkX2ZlbmNlIHx8IG5lZWRfcmVsb2NfbWFwcGFibGUodm1hKTsKIAogCQlpZiAo ZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfUElOTkVEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ndHQuYwppbmRleCBmNTFlNDgzNTY5YjkuLmIwN2E4NGYyNjAzZiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmMKQEAgLTMzMzMsMTEgKzMzMzMsMzEgQEAgdm9pZCBpOTE1X3ZtYV9k ZXN0cm95KHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogCWttZW1fY2FjaGVfZnJlZSh0b19pOTE1KHZt YS0+b2JqLT5iYXNlLmRldiktPnZtYXMsIHZtYSk7CiB9CiAKK3ZvaWQgaTkxNV92bWFfdW5saW5r X2N0eChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAq Y3R4ID0gdm1hLT5jdHg7CisKKwlpZiAoY3R4LT52bWEuaHRfc2l6ZSAmIDEpIHsKKwkJY2FuY2Vs X3dvcmtfc3luYygmY3R4LT52bWEucmVzaXplKTsKKwkJY3R4LT52bWEuaHRfc2l6ZSAmPSB+MTsK Kwl9CisKKwlfX2hsaXN0X2RlbCgmdm1hLT5jdHhfbm9kZSk7CisJY3R4LT52bWEuaHRfY291bnQt LTsKKworCWlmIChpOTE1X3ZtYV9pc19nZ3R0KHZtYSkpCisJCXZtYS0+b2JqLT52bWFfaGFzaGVk ID0gTlVMTDsKKwl2bWEtPmN0eCA9IE5VTEw7Cit9CisKIHZvaWQgaTkxNV92bWFfY2xvc2Uoc3Ry dWN0IGk5MTVfdm1hICp2bWEpCiB7CiAJR0VNX0JVR19PTihpOTE1X3ZtYV9pc19jbG9zZWQodm1h KSk7CiAJdm1hLT5mbGFncyB8PSBJOTE1X1ZNQV9DTE9TRUQ7CiAKKwlpZiAodm1hLT5jdHgpCisJ CWk5MTVfdm1hX3VubGlua19jdHgodm1hKTsKKwogCWxpc3RfZGVsX2luaXQoJnZtYS0+b2JqX2xp bmspOwogCWlmICghaTkxNV92bWFfaXNfYWN0aXZlKHZtYSkgJiYgIWk5MTVfdm1hX2lzX3Bpbm5l ZCh2bWEpKQogCQlXQVJOX09OKGk5MTVfdm1hX3VuYmluZCh2bWEpKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZ3R0LmgKaW5kZXggYTkwOTk5ZmUyZTU3Li5mOTU0MDY4M2QyYzAgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCkBAIC0xNjYsNiArMTY2LDcgQEAgc3RydWN0IGk5MTVf Z2d0dF92aWV3IHsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgaTkxNV9nZ3R0 X3ZpZXdfbm9ybWFsOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyBpOTE1X2dn dHRfdmlld19yb3RhdGVkOwogCitzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dDsKIGVudW0gaTkxNV9j YWNoZV9sZXZlbDsKIAogLyoqCkBAIC0yMjYsNiArMjI3LDcgQEAgc3RydWN0IGk5MTVfdm1hIHsK IAlzdHJ1Y3QgbGlzdF9oZWFkIHZtX2xpbms7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG9ial9saW5r OyAvKiBMaW5rIGluIHRoZSBvYmplY3QncyBWTUEgbGlzdCAqLworCXN0cnVjdCBobGlzdF9ub2Rl IG9ial9ub2RlOwogCiAJLyoqIFRoaXMgdm1hJ3MgcGxhY2UgaW4gdGhlIGJhdGNoYnVmZmVyIG9y IG9uIHRoZSBldmljdGlvbiBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBleGVjX2xpc3Q7CkBA IC0yMzQsOCArMjM2LDEyIEBAIHN0cnVjdCBpOTE1X3ZtYSB7CiAJICogVXNlZCBmb3IgcGVyZm9y bWluZyByZWxvY2F0aW9ucyBkdXJpbmcgZXhlY2J1ZmZlciBpbnNlcnRpb24uCiAJICovCiAJc3Ry dWN0IGhsaXN0X25vZGUgZXhlY19ub2RlOwotCXVuc2lnbmVkIGxvbmcgZXhlY19oYW5kbGU7CiAJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWNfZW50cnk7CisJdTMyIGV4ZWNf aGFuZGxlOworCisJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgaGxpc3Rf bm9kZSBjdHhfbm9kZTsKKwl1MzIgY3R4X2hhbmRsZTsKIH07CiAKIHN0cnVjdCBpOTE1X3ZtYSAq Ci0tIAoyLjkuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==