From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v2] drm/i915: Store a direct lookup from object handle to vma Date: Wed, 22 Mar 2017 09:33:47 +0000 Message-ID: <20170322093347.2593-1-chris@chris-wilson.co.uk> References: <20170316132006.7976-8-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-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8EA946E83C for ; Wed, 22 Mar 2017 09:33:51 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id n11so8005362wma.0 for ; Wed, 22 Mar 2017 02:33:51 -0700 (PDT) In-Reply-To: <20170316132006.7976-8-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 c2UKc3BlZWR1cHMgd2l0aCBtdWx0aXBsZSBjbGllbnRzLgoKdjI6IFByZXR0aWVyIG5hbWVzLCBt b3JlIG1hZ2ljLgoKU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxz b24uY28udWs+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgICAgICAg ICAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAg ICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAg IHwgICA1ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgICAgICAg fCAgNzUgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaCAg ICAgICB8ICAyNSArKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIu YyAgICB8IDI1NCArKysrKysrKysrKysrKystLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fb2JqZWN0LmggICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3ZtYS5jICAgICAgICAgICAgICAgfCAgMjAgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfdm1hLmggICAgICAgICAgICAgICB8ICAgOCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL21vY2tfY29udGV4dC5jIHwgIDEyICstCiAxMCBmaWxlcyBjaGFuZ2VkLCAzMDAg aW5zZXJ0aW9ucygrKSwgMTExIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1 Z2ZzLmMKaW5kZXggZmNhYzc5NWQ0Mzk2Li5iNWQwNzBhY2RhZjIgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZGVidWdmcy5jCkBAIC0xOTg4LDYgKzE5ODgsMTIgQEAgc3RhdGljIGludCBpOTE1X2Nv bnRleHRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQkJc2VxX3B1 dGMobSwgJ1xuJyk7CiAJCX0KIAorCQlzZXFfcHJpbnRmKG0sCisJCQkgICAiXHR2bWEgaGFzaHRh YmxlIHNpemU9JXUgKGFjdHVhbCAlbHUpLCBjb3VudD0ldVxuIiwKKwkJCSAgIGN0eC0+dm1hX2x1 dC5odF9zaXplLAorCQkJICAgQklUKGN0eC0+dm1hX2x1dC5odF9iaXRzKSwKKwkJCSAgIGN0eC0+ dm1hX2x1dC5odF9jb3VudCk7CisKIAkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJfQogCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAppbmRleCBhNmZmMmZkMmFjOGUuLjBiNWJjZWNkMjRhMSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+ CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xp Z2h0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvaGFz aC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgva3Jl Zi5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5k ZXggYmI2NTA3MmY2ODhkLi43YzFhMDRkNWIyNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpA QCAtMzE2MSw2ICszMTYxLDEwIEBAIHZvaWQgaTkxNV9nZW1fY2xvc2Vfb2JqZWN0KHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqZ2VtLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiAJCWlmICh2bWEtPnZt LT5maWxlID09IGZwcml2KQogCQkJaTkxNV92bWFfY2xvc2Uodm1hKTsKIAorCXZtYSA9IG9iai0+ dm1hX2hhc2hlZDsKKwlpZiAodm1hICYmIHZtYS0+Y3R4LT5maWxlX3ByaXYgPT0gZnByaXYpCisJ CWk5MTVfdm1hX3VubGlua19jdHgodm1hKTsKKwogCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfYWN0 aXZlKG9iaikgJiYKIAkgICAgIWk5MTVfZ2VtX29iamVjdF9oYXNfYWN0aXZlX3JlZmVyZW5jZShv YmopKSB7CiAJCWk5MTVfZ2VtX29iamVjdF9zZXRfYWN0aXZlX3JlZmVyZW5jZShvYmopOwpAQCAt NDExMiw3ICs0MTE2LDYgQEAgdm9pZCBpOTE1X2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAogCiAJSU5JVF9MSVNUX0hFQUQoJm9iai0+Z2xvYmFsX2xpbmsp OwogCUlOSVRfTElTVF9IRUFEKCZvYmotPnVzZXJmYXVsdF9saW5rKTsKLQlJTklUX0xJU1RfSEVB RCgmb2JqLT5vYmpfZXhlY19saW5rKTsKIAlJTklUX0xJU1RfSEVBRCgmb2JqLT52bWFfbGlzdCk7 CiAJSU5JVF9MSVNUX0hFQUQoJm9iai0+YmF0Y2hfcG9vbF9saW5rKTsKIApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCmluZGV4IDQ4NjA1MWVkNjgxZC4uMTUzYjM0NGVjOTFh IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCkBAIC04NSw2ICs4NSw3 IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8ZHJtL2Ry bVAuaD4KICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KICNpbmNsdWRlICJpOTE1X2Rydi5oIgpA QCAtOTIsNiArOTMsOSBAQAogCiAjZGVmaW5lIEFMTF9MM19TTElDRVMoZGV2KSAoMSA8PCBOVU1f TDNfU0xJQ0VTKGRldikpIC0gMQogCisvKiBJbml0aWFsIHNpemUgKGFzIGxvZzIpIHRvIHByZWFs bG9jYXRlIHRoZSBoYW5kbGUtPm9iamVjdCBoYXNodGFibGUgKi8KKyNkZWZpbmUgVk1BX0hUX0JJ VFMgMnUgLyogNCB4IDIgcG9pbnRlcnMsIDY0IGJ5dGVzIG1pbmltdW0gKi8KKwogc3RhdGljIGlu dCBnZXRfY29udGV4dF9zaXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsK IAlpbnQgcmV0OwpAQCAtMTE5LDYgKzEyMyw2NSBAQCBzdGF0aWMgaW50IGdldF9jb250ZXh0X3Np emUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiByZXQ7CiB9CiAK K3N0YXRpYyB2b2lkIHJlc2l6ZV92bWFfaHQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorewor CXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0X3ZtYV9sdXQgKmx1dCA9CisJCWNvbnRhaW5lcl9vZih3 b3JrLCB0eXBlb2YoKmx1dCksIHJlc2l6ZSk7CisJdW5zaWduZWQgaW50IHNpemUsIGJpdHMsIG5l d19iaXRzLCBpOworCXN0cnVjdCBobGlzdF9oZWFkICpuZXdfaHQ7CisKKwliaXRzID0gMSArIGls b2cyKDQqbHV0LT5odF9jb3VudC8zKTsKKwluZXdfYml0cyA9IG1pbl90KHVuc2lnbmVkIGludCwK KwkJCSBtYXgoYml0cywgVk1BX0hUX0JJVFMpLAorCQkJIHNpemVvZih1bnNpZ25lZCBpbnQpKjgp OworCWlmIChuZXdfYml0cyA9PSBsdXQtPmh0X2JpdHMpCisJCWdvdG8gb3V0OworCisJbmV3X2h0 ID0ga3phbGxvYyhzaXplb2YoKm5ld19odCk8PG5ld19iaXRzLCBHRlBfS0VSTkVMIHwgX19HRlBf Tk9XQVJOKTsKKwlpZiAoIW5ld19odCkKKwkJbmV3X2h0ID0gdnphbGxvYyhzaXplb2YoKm5ld19o dCk8PG5ld19iaXRzKTsKKwlpZiAoIW5ld19odCkKKwkJLyogUHJldGVuZCByZXNpemUgc3VjY2Vl ZGVkIGFuZCBzdG9wIGNhbGxpbmcgdXMgZm9yIGEgYml0ISAqLworCQlnb3RvIG91dDsKKworCXNp emUgPSBCSVQobHV0LT5odF9iaXRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJ CXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCisJCWhs aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1hLCB0bXAsICZsdXQtPmh0W2ldLCBjdHhfbm9kZSkK KwkJCWhsaXN0X2FkZF9oZWFkKCZ2bWEtPmN0eF9ub2RlLAorCQkJCSAgICAgICAmbmV3X2h0W2hh c2hfMzIodm1hLT5jdHhfaGFuZGxlLAorCQkJCQkJICAgICAgIG5ld19iaXRzKV0pOworCX0KKwlr dmZyZWUobHV0LT5odCk7CisJbHV0LT5odCA9IG5ld19odDsKKwlsdXQtPmh0X2JpdHMgPSBuZXdf Yml0czsKKwlzbXBfd21iKCk7CitvdXQ6CisJbHV0LT5odF9zaXplID0gQklUKGJpdHMpOworfQor CitzdGF0aWMgdm9pZCB2bWFfbHV0X2ZyZWUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkK K3sKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dF92bWFfbHV0ICpsdXQgPSAmY3R4LT52bWFfbHV0 OworCXVuc2lnbmVkIGludCBpLCBzaXplOworCisJaWYgKGx1dC0+aHRfc2l6ZSAmIFJFU0laRV9J Tl9QUk9HUkVTUykKKwkJY2FuY2VsX3dvcmtfc3luYygmbHV0LT5yZXNpemUpOworCisJc2l6ZSA9 IEJJVChsdXQtPmh0X2JpdHMpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJc3Ry dWN0IGk5MTVfdm1hICp2bWE7CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmbHV0LT5o dFtpXSwgY3R4X25vZGUpIHsKKwkJCXZtYS0+b2JqLT52bWFfaGFzaGVkID0gTlVMTDsKKwkJCXZt YS0+Y3R4ID0gTlVMTDsKKwkJfQorCX0KKwlrdmZyZWUobHV0LT5odCk7Cit9CisKIHZvaWQgaTkx NV9nZW1fY29udGV4dF9mcmVlKHN0cnVjdCBrcmVmICpjdHhfcmVmKQogewogCXN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoY3R4X3JlZiwgdHlwZW9mKCpjdHgpLCBy ZWYpOwpAQCAtMTI4LDYgKzE5MSw3IEBAIHZvaWQgaTkxNV9nZW1fY29udGV4dF9mcmVlKHN0cnVj dCBrcmVmICpjdHhfcmVmKQogCXRyYWNlX2k5MTVfY29udGV4dF9mcmVlKGN0eCk7CiAJR0VNX0JV R19PTighaTkxNV9nZW1fY29udGV4dF9pc19jbG9zZWQoY3R4KSk7CiAKKwl2bWFfbHV0X2ZyZWUo Y3R4KTsKIAlpOTE1X3BwZ3R0X3B1dChjdHgtPnBwZ3R0KTsKIAogCWZvciAoaSA9IDA7IGkgPCBJ OTE1X05VTV9FTkdJTkVTOyBpKyspIHsKQEAgLTE0NSw2ICsyMDksNyBAQCB2b2lkIGk5MTVfZ2Vt X2NvbnRleHRfZnJlZShzdHJ1Y3Qga3JlZiAqY3R4X3JlZikKIAogCWtmcmVlKGN0eC0+bmFtZSk7 CiAJcHV0X3BpZChjdHgtPnBpZCk7CisKIAlsaXN0X2RlbCgmY3R4LT5saW5rKTsKIAogCWlkYV9z aW1wbGVfcmVtb3ZlKCZjdHgtPmk5MTUtPmNvbnRleHRfaHdfaWRhLCBjdHgtPmh3X2lkKTsKQEAg LTI2Niw2ICszMzEsMTYgQEAgX19jcmVhdGVfaHdfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCiAJbGlzdF9hZGRfdGFpbCgmY3R4LT5saW5rLCAmZGV2X3ByaXYtPmNv bnRleHRfbGlzdCk7CiAJY3R4LT5pOTE1ID0gZGV2X3ByaXY7CiAKKwljdHgtPnZtYV9sdXQuaHRf Yml0cyA9IFZNQV9IVF9CSVRTOworCWN0eC0+dm1hX2x1dC5odF9zaXplID0gQklUKFZNQV9IVF9C SVRTKTsKKwljdHgtPnZtYV9sdXQuaHQgPSBrY2FsbG9jKGN0eC0+dm1hX2x1dC5odF9zaXplLAor CQkJCSAgc2l6ZW9mKCpjdHgtPnZtYV9sdXQuaHQpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYg KCFjdHgtPnZtYV9sdXQuaHQpCisJCWdvdG8gZXJyX291dDsKKworCUlOSVRfV09SSygmY3R4LT52 bWFfbHV0LnJlc2l6ZSwgcmVzaXplX3ZtYV9odCk7CisKIAlpZiAoZGV2X3ByaXYtPmh3X2NvbnRl eHRfc2l6ZSkgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCQlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2NvbnRleHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaAppbmRl eCA0YWYyYWI5NDU1OGIuLjlhOTRlNTNiZGY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fY29udGV4dC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2NvbnRleHQuaApAQCAtMTQzLDYgKzE0MywzMSBAQCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4 dCB7CiAJLyoqIGdndHRfb2Zmc2V0X2JpYXM6IHBsYWNlbWVudCByZXN0cmljdGlvbiBmb3IgY29u dGV4dCBvYmplY3RzICovCiAJdTMyIGdndHRfb2Zmc2V0X2JpYXM7CiAKKwlzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dF92bWFfbHV0IHsKKwkJLyoqIGh0X3NpemU6IGxhc3QgcmVxdWVzdCBzaXplIHRv IGFsbG9jYXRlIHRoZSBoYXNodGFibGUgZm9yLiAqLworCQl1bnNpZ25lZCBpbnQgaHRfc2l6ZTsK KyNkZWZpbmUgUkVTSVpFX0lOX1BST0dSRVNTIEJJVCgwKQorCQkvKiogaHRfYml0czogcmVhbCBs b2cyKHNpemUpIG9mIGhhc2h0YWJsZS4gKi8KKwkJdW5zaWduZWQgaW50IGh0X2JpdHM7CisJCS8q KiBodF9jb3VudDogY3VycmVudCBudW1iZXIgb2YgZW50cmllcyBpbnNpZGUgdGhlIGhhc2h0YWJs ZSAqLworCQl1bnNpZ25lZCBpbnQgaHRfY291bnQ7CisKKwkJLyoqIGh0OiB0aGUgYXJyYXkgb2Yg YnVja2V0cyBjb21wcmlzaW5nIHRoZSBzaW1wbGUgaGFzaHRhYmxlICovCisJCXN0cnVjdCBobGlz dF9oZWFkICpodDsKKworCQkvKiogcmVzaXplOiBBZnRlciBhbiBleGVjYnVmIGNvbXBsZXRlcywg d2UgY2hlY2sgdGhlIGxvYWQgZmFjdG9yCisJCSAqIG9mIHRoZSBoYXNodGFibGUuIElmIHRoZSBo YXNodGFibGUgaXMgdG9vIGZ1bGwsIG9yIHRvbyBlbXB0eSwKKwkJICogd2Ugc2NoZWR1bGUgYSB0 YXNrIHRvIHJlc2l6ZSB0aGUgaGFzaHRhYmxlLiBEdXJpbmcgdGhlCisJCSAqIHJlc2l6ZSwgdGhl IGVudHJpZXMgYXJlIG1vdmVkIGJldHdlZW4gZGlmZmVyZW50IGJ1Y2tldHMgYW5kCisJCSAqIHNv IHdlIGNhbm5vdCBzaW11bHRhbmVvdXNseSByZWFkIHRoZSBoYXNodGFibGUgYXMgaXQgaXMKKwkJ ICogYmVpbmcgcmVzaXplZCAodW5saWtlIHJoYXNodGFibGUpLiBUaGVyZWZvcmUgd2UgdHJlYXQg dGhlCisJCSAqIGFjdGl2ZSB3b3JrIGFzIGEgc3Ryb25nIGJhcnJpZXIsIHBhdXNpbmcgYSBzdWJz ZXF1ZW50CisJCSAqIGV4ZWNidWYgdG8gd2FpdCBmb3IgdGhlIHJlc2l6ZSB3b3JrZXIgdG8gY29t cGxldGUsIGlmCisJCSAqIHJlcXVpcmVkLgorCQkgKi8KKwkJc3RydWN0IHdvcmtfc3RydWN0IHJl c2l6ZTsKKwl9IHZtYV9sdXQ7CisKIAkvKiogZW5naW5lOiBwZXItZW5naW5lIGxvZ2ljYWwgSFcg c3RhdGUgKi8KIAlzdHJ1Y3QgaW50ZWxfY29udGV4dCB7CiAJCXN0cnVjdCBpOTE1X3ZtYSAqc3Rh dGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVy LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKaW5kZXggMGM3 MzY0MjgyNWQwLi5mNGVmMDM3ODc0MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9leGVjYnVmZmVyLmMKQEAgLTc1LDM4ICs3NSwzMyBAQCBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVy IHsKIAkJdW5zaWduZWQgaW50IHBhZ2U7CiAJCWJvb2wgdXNlXzY0Yml0X3JlbG9jOwogCX0gcmVs b2NfY2FjaGU7Ci0JaW50IGFuZDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBpOTE1X3ZtYSAqKmx1dDsK LQkJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldHM7Ci0JfTsKKwlpbnQgbHV0X21hc2s7CisJc3Ry dWN0IGhsaXN0X2hlYWQgKmJ1Y2tldHM7CiB9OwogCiBzdGF0aWMgaW50CiBlYl9jcmVhdGUoc3Ry dWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7Ci0JZWItPmx1dCA9IE5VTEw7Ci0JaWYgKGViLT5h cmdzLT5mbGFncyAmIEk5MTVfRVhFQ19IQU5ETEVfTFVUKSB7Ci0JCXVuc2lnbmVkIGludCBzaXpl ID0gZWItPmFyZ3MtPmJ1ZmZlcl9jb3VudDsKLQkJc2l6ZSAqPSBzaXplb2Yoc3RydWN0IGk5MTVf dm1hICopOwotCQllYi0+bHV0ID0ga21hbGxvYyhzaXplLAotCQkJCSAgR0ZQX1RFTVBPUkFSWSB8 IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX05PUkVUUlkpOwotCX0KLQotCWlmICghZWItPmx1dCkgewot CQl1bnNpZ25lZCBpbnQgc2l6ZSA9IGViLT5hcmdzLT5idWZmZXJfY291bnQ7Ci0JCXVuc2lnbmVk IGludCBjb3VudCA9IFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkgLyAyOwot CQlCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBo bGlzdF9oZWFkKSk7Ci0JCXdoaWxlIChjb3VudCA+IDIqc2l6ZSkKLQkJCWNvdW50ID4+PSAxOwot CQllYi0+bHV0ID0ga3phbGxvYyhjb3VudCpzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpLAotCQkJ CSAgR0ZQX1RFTVBPUkFSWSk7Ci0JCWlmICghZWItPmx1dCkKLQkJCXJldHVybiAtRU5PTUVNOwot Ci0JCWViLT5hbmQgPSBjb3VudCAtIDE7CisJaWYgKChlYi0+YXJncy0+ZmxhZ3MgJiBJOTE1X0VY RUNfSEFORExFX0xVVCkgPT0gMCkgeworCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDEgKyBpbG9nMihl Yi0+YXJncy0+YnVmZmVyX2NvdW50KTsKKworCQlkbyB7CisJCQllYi0+YnVja2V0cyA9IGt6YWxs b2Moc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSA8PCBzaXplLAorCQkJCQkgICAgIEdGUF9URU1Q T1JBUlkgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZKTsKKwkJCWlmIChlYi0+YnVja2V0 cykKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAoLS1zaXplKTsKKworCQlpZiAodW5saWtlbHkoIWVi LT5idWNrZXRzKSkgeworCQkJZWItPmJ1Y2tldHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGxp c3RfaGVhZCksCisJCQkJCSAgICAgIEdGUF9URU1QT1JBUlkpOworCQkJaWYgKHVubGlrZWx5KCFl Yi0+YnVja2V0cykpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQllYi0+bHV0X21hc2sg PSBzaXplOwogCX0gZWxzZSB7Ci0JCWViLT5hbmQgPSAtZWItPmFyZ3MtPmJ1ZmZlcl9jb3VudDsK KwkJZWItPmx1dF9tYXNrID0gLWViLT5hcmdzLT5idWZmZXJfY291bnQ7CiAJfQogCiAJcmV0dXJu IDA7CkBAIC0xNDMsNzMgKzEzOCwxMTMgQEAgZWJfcmVzZXQoc3RydWN0IGk5MTVfZXhlY2J1ZmZl ciAqZWIpCiAJCXZtYS0+ZXhlY19lbnRyeSA9IE5VTEw7CiAJfQogCi0JaWYgKGViLT5hbmQgPj0g MCkKLQkJbWVtc2V0KGViLT5idWNrZXRzLCAwLCAoZWItPmFuZCsxKSpzaXplb2Yoc3RydWN0IGhs aXN0X2hlYWQpKTsKKwlpZiAoZWItPmx1dF9tYXNrID49IDApCisJCW1lbXNldChlYi0+YnVja2V0 cywgMCwKKwkJICAgICAgICgxPDxlYi0+bHV0X21hc2spKnNpemVvZihzdHJ1Y3QgaGxpc3RfaGVh ZCkpOwogfQogCi1zdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKLWViX2dldF9iYXRjaChzdHJ1Y3Qg aTkxNV9leGVjYnVmZmVyICplYikKKyNkZWZpbmUgdG9fcHRyKFQsIHgpICgoVCAqKSh1aW50cHRy X3QpKHgpKQorCitzdGF0aWMgYm9vbAorZWJfYWRkX3ZtYShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVy ICplYiwgc3RydWN0IGk5MTVfdm1hICp2bWEsIGludCBpKQogewotCXN0cnVjdCBpOTE1X3ZtYSAq dm1hID0gbGlzdF9lbnRyeShlYi0+dm1hcy5wcmV2LCB0eXBlb2YoKnZtYSksIGV4ZWNfbGluayk7 CisJaWYgKHVubGlrZWx5KHZtYS0+ZXhlY19lbnRyeSkpIHsKKwkJRFJNX0RFQlVHKCJPYmplY3Qg W2hhbmRsZSAlZCwgaW5kZXggJWRdIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gb2JqZWN0IGxp c3RcbiIsCisJCQkgIGViLT5leGVjW2ldLmhhbmRsZSwgaSk7CisJCXJldHVybiBmYWxzZTsKKwl9 CisJbGlzdF9hZGRfdGFpbCgmdm1hLT5leGVjX2xpbmssICZlYi0+dm1hcyk7CiAKLQkvKgotCSAq IFNOQSBpcyBkb2luZyBmYW5jeSB0cmlja3Mgd2l0aCBjb21wcmVzc2luZyBiYXRjaCBidWZmZXJz LCB3aGljaCBsZWFkcwotCSAqIHRvIG5lZ2F0aXZlIHJlbG9jYXRpb24gZGVsdGFzLiBVc3VhbGx5 IHRoYXQgd29ya3Mgb3V0IG9rIHNpbmNlIHRoZQotCSAqIHJlbG9jYXRlIGFkZHJlc3MgaXMgc3Rp bGwgcG9zaXRpdmUsIGV4Y2VwdCB3aGVuIHRoZSBiYXRjaCBpcyBwbGFjZWQKLQkgKiB2ZXJ5IGxv dyBpbiB0aGUgR1RULiBFbnN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbi4KLQkgKgotCSAqIE5vdGUg dGhhdCBhY3R1YWwgaGFuZ3MgaGF2ZSBvbmx5IGJlZW4gb2JzZXJ2ZWQgb24gZ2VuNywgYnV0IGZv cgotCSAqIHBhcmFub2lhIGRvIGl0IGV2ZXJ5d2hlcmUuCi0JICovCi0JaWYgKCh2bWEtPmV4ZWNf ZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfUElOTkVEKSA9PSAwKQotCQl2bWEtPmV4ZWNfZW50 cnktPmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfTkVFRFNfQklBUzsKKwl2bWEtPmV4ZWNfZW50cnkg PSAmZWItPmV4ZWNbaV07CisJaWYgKGViLT5sdXRfbWFzayA+PSAwKSB7CisJCXZtYS0+ZXhlY19o YW5kbGUgPSBlYi0+ZXhlY1tpXS5oYW5kbGU7CisJCWhsaXN0X2FkZF9oZWFkKCZ2bWEtPmV4ZWNf bm9kZSwKKwkJCSAgICAgICAmZWItPmJ1Y2tldHNbaGFzaF8zMih2bWEtPmV4ZWNfaGFuZGxlLAor CQkJCQkJICAgIGViLT5sdXRfbWFzayldKTsKKwl9CiAKLQlyZXR1cm4gdm1hOworCWk5MTVfdm1h X2dldCh2bWEpOworCWViLT5leGVjW2ldLnJzdmQyID0gKHVpbnRwdHJfdCl2bWE7CisJcmV0dXJu IHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X2hlYWQgKgoraHRfaGVhZChj b25zdCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCB1MzIgaGFuZGxlKQoreworCXJldHVy biAmY3R4LT52bWFfbHV0Lmh0W2hhc2hfMzIoaGFuZGxlLCBjdHgtPnZtYV9sdXQuaHRfYml0cyld OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2h0X25lZWRzX3Jlc2l6ZShjb25zdCBzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqY3R4KQoreworCXJldHVybiAoNCpjdHgtPnZtYV9sdXQuaHRfY291 bnQgPiAzKmN0eC0+dm1hX2x1dC5odF9zaXplIHx8CisJCTQqY3R4LT52bWFfbHV0Lmh0X2NvdW50 IDwgY3R4LT52bWFfbHV0Lmh0X3NpemUpOwogfQogCiBzdGF0aWMgaW50CiBlYl9sb29rdXBfdm1h cyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqOwotCXN0cnVjdCBsaXN0X2hlYWQgb2JqZWN0czsKLQlpbnQgaSwgcmV0OworCWNv bnN0IGludCBjb3VudCA9IGViLT5hcmdzLT5idWZmZXJfY291bnQ7CisJc3RydWN0IGk5MTVfdm1h ICp2bWE7CisJaW50IHNsb3dfcGFzcyA9IC0xOworCWludCBpOwogCiAJSU5JVF9MSVNUX0hFQUQo JmViLT52bWFzKTsKIAotCUlOSVRfTElTVF9IRUFEKCZvYmplY3RzKTsKKwlpZiAodW5saWtlbHko ZWItPmN0eC0+dm1hX2x1dC5odF9zaXplICYgUkVTSVpFX0lOX1BST0dSRVNTKSkKKwkJZmx1c2hf d29yaygmZWItPmN0eC0+dm1hX2x1dC5yZXNpemUpOworCUdFTV9CVUdfT04oZWItPmN0eC0+dm1h X2x1dC5odF9zaXplICYgUkVTSVpFX0lOX1BST0dSRVNTKTsKKworCWZvciAoaSA9IDA7IGkgPCBj b3VudDsgaSsrKSB7CisJCWViLT5leGVjW2ldLnJzdmQyID0gMDsKKworCQlobGlzdF9mb3JfZWFj aF9lbnRyeSh2bWEsCisJCQkJICAgICBodF9oZWFkKGViLT5jdHgsIGViLT5leGVjW2ldLmhhbmRs ZSksCisJCQkJICAgICBjdHhfbm9kZSkgeworCQkJaWYgKHZtYS0+Y3R4X2hhbmRsZSAhPSBlYi0+ ZXhlY1tpXS5oYW5kbGUpCisJCQkJY29udGludWU7CisKKwkJCWlmICghZWJfYWRkX3ZtYShlYiwg dm1hLCBpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJZ290byBuZXh0X3ZtYTsKKwkJfQor CisJCWlmIChzbG93X3Bhc3MgPCAwKQorCQkJc2xvd19wYXNzID0gaTsKK25leHRfdm1hOiA7CisJ fQorCisJaWYgKHNsb3dfcGFzcyA8IDApCisJCXJldHVybiAwOworCiAJc3Bpbl9sb2NrKCZlYi0+ ZmlsZS0+dGFibGVfbG9jayk7CiAJLyogR3JhYiBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGFu ZCByZWxlYXNlIHRoZSBsb2NrIHNvIHdlIGNhbiBsb29rdXAKIAkgKiBvciBjcmVhdGUgdGhlIFZN QSB3aXRob3V0IHVzaW5nIEdGUF9BVE9NSUMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZWItPmFyZ3Mt PmJ1ZmZlcl9jb3VudDsgaSsrKSB7Ci0JCW9iaiA9IHRvX2ludGVsX2JvKGlkcl9maW5kKCZlYi0+ ZmlsZS0+b2JqZWN0X2lkciwgZWItPmV4ZWNbaV0uaGFuZGxlKSk7Ci0JCWlmIChvYmogPT0gTlVM TCkgewotCQkJc3Bpbl91bmxvY2soJmViLT5maWxlLT50YWJsZV9sb2NrKTsKLQkJCURSTV9ERUJV RygiSW52YWxpZCBvYmplY3QgaGFuZGxlICVkIGF0IGluZGV4ICVkXG4iLAotCQkJCSAgIGViLT5l eGVjW2ldLmhhbmRsZSwgaSk7Ci0JCQlyZXQgPSAtRU5PRU5UOwotCQkJZ290byBlcnI7Ci0JCX0K Kwlmb3IgKGkgPSBzbG93X3Bhc3M7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmo7CisKKwkJaWYgKGViLT5leGVjW2ldLnJzdmQyKQorCQkJY29udGlu dWU7CiAKLQkJaWYgKCFsaXN0X2VtcHR5KCZvYmotPm9ial9leGVjX2xpbmspKSB7CisJCW9iaiA9 IHRvX2ludGVsX2JvKGlkcl9maW5kKCZlYi0+ZmlsZS0+b2JqZWN0X2lkciwKKwkJCQkJICAgZWIt PmV4ZWNbaV0uaGFuZGxlKSk7CisJCWlmICh1bmxpa2VseSghb2JqKSkgewogCQkJc3Bpbl91bmxv Y2soJmViLT5maWxlLT50YWJsZV9sb2NrKTsKLQkJCURSTV9ERUJVRygiT2JqZWN0ICVwIFtoYW5k bGUgJWQsIGluZGV4ICVkXSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIG9iamVjdCBsaXN0XG4i LAotCQkJCSAgIG9iaiwgZWItPmV4ZWNbaV0uaGFuZGxlLCBpKTsKLQkJCXJldCA9IC1FSU5WQUw7 Ci0JCQlnb3RvIGVycjsKKwkJCURSTV9ERUJVRygiSW52YWxpZCBvYmplY3QgaGFuZGxlICVkIGF0 IGluZGV4ICVkXG4iLAorCQkJCSAgZWItPmV4ZWNbaV0uaGFuZGxlLCBpKTsKKwkJCXJldHVybiAt RU5PRU5UOwogCQl9CiAKLQkJaTkxNV9nZW1fb2JqZWN0X2dldChvYmopOwotCQlsaXN0X2FkZF90 YWlsKCZvYmotPm9ial9leGVjX2xpbmssICZvYmplY3RzKTsKKwkJZWItPmV4ZWNbaV0ucnN2ZDIg PSAxIHwgKHVpbnRwdHJfdClvYmo7CiAJfQogCXNwaW5fdW5sb2NrKCZlYi0+ZmlsZS0+dGFibGVf bG9jayk7CiAKLQlpID0gMDsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJm9iamVjdHMpKSB7Ci0JCXN0 cnVjdCBpOTE1X3ZtYSAqdm1hOworCWZvciAoaSA9IHNsb3dfcGFzczsgaSA8IGNvdW50OyBpKysp IHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAotCQlvYmogPSBsaXN0X2Zp cnN0X2VudHJ5KCZvYmplY3RzLAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCwKLQkJCQkgICAgICAgb2JqX2V4ZWNfbGluayk7CisJCWlmICgoZWItPmV4ZWNbaV0ucnN2ZDIg JiAxKSA9PSAwKQorCQkJY29udGludWU7CiAKIAkJLyoKIAkJICogTk9URTogV2UgY2FuIGxlYWsg YW55IHZtYXMgY3JlYXRlZCBoZXJlIHdoZW4gc29tZXRoaW5nIGZhaWxzCkBAIC0yMTksNjEgKzI1 NCw3MiBAQCBlYl9sb29rdXBfdm1hcyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIAkJICog ZnJvbSB0aGUgKG9iaiwgdm0pIHdlIGRvbid0IHJ1biB0aGUgcmlzayBvZiBjcmVhdGluZwogCQkg KiBkdXBsaWNhdGVkIHZtYXMgZm9yIHRoZSBzYW1lIHZtLgogCQkgKi8KKwkJb2JqID0gdG9fcHRy KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LCBlYi0+ZXhlY1tpXS5yc3ZkMiAmIH4xKTsKIAkJ dm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCBlYi0+dm0sIE5VTEwpOwogCQlpZiAodW5saWtl bHkoSVNfRVJSKHZtYSkpKSB7CiAJCQlEUk1fREVCVUcoIkZhaWxlZCB0byBsb29rdXAgVk1BXG4i KTsKLQkJCXJldCA9IFBUUl9FUlIodm1hKTsKLQkJCWdvdG8gZXJyOworCQkJcmV0dXJuIFBUUl9F UlIodm1hKTsKIAkJfQogCi0JCS8qIFRyYW5zZmVyIG93bmVyc2hpcCBmcm9tIHRoZSBvYmplY3Rz IGxpc3QgdG8gdGhlIHZtYXMgbGlzdC4gKi8KLQkJbGlzdF9hZGRfdGFpbCgmdm1hLT5leGVjX2xp bmssICZlYi0+dm1hcyk7Ci0JCWxpc3RfZGVsX2luaXQoJm9iai0+b2JqX2V4ZWNfbGluayk7Ci0K LQkJdm1hLT5leGVjX2VudHJ5ID0gJmViLT5leGVjW2ldOwotCQlpZiAoZWItPmFuZCA8IDApIHsK LQkJCWViLT5sdXRbaV0gPSB2bWE7Ci0JCX0gZWxzZSB7Ci0JCQl1MzIgaGFuZGxlID0KLQkJCQll Yi0+YXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNfSEFORExFX0xVVCA/Ci0JCQkJaSA6IGViLT5leGVj W2ldLmhhbmRsZTsKLQkJCXZtYS0+ZXhlY19oYW5kbGUgPSBoYW5kbGU7Ci0JCQlobGlzdF9hZGRf aGVhZCgmdm1hLT5leGVjX25vZGUsCi0JCQkJICAgICAgICZlYi0+YnVja2V0c1toYW5kbGUgJiBl Yi0+YW5kXSk7CisJCS8qIEZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCAqLworCQlpZiAoIXZtYS0+ Y3R4KSB7CisJCQl2bWEtPmN0eCA9IGViLT5jdHg7CisJCQl2bWEtPmN0eF9oYW5kbGUgPSBlYi0+ ZXhlY1tpXS5oYW5kbGU7CisJCQlobGlzdF9hZGRfaGVhZCgmdm1hLT5jdHhfbm9kZSwKKwkJCQkg ICAgICAgaHRfaGVhZChlYi0+Y3R4LCBlYi0+ZXhlY1tpXS5oYW5kbGUpKTsKKwkJCWViLT5jdHgt PnZtYV9sdXQuaHRfY291bnQrKzsKKwkJCWlmIChpOTE1X3ZtYV9pc19nZ3R0KHZtYSkpIHsKKwkJ CQlHRU1fQlVHX09OKG9iai0+dm1hX2hhc2hlZCk7CisJCQkJb2JqLT52bWFfaGFzaGVkID0gdm1h OworCQkJfQogCQl9Ci0JCSsraTsKKworCQlpZiAoIWViX2FkZF92bWEoZWIsIHZtYSwgaSkpCisJ CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaHRfbmVlZHNfcmVzaXplKGViLT5jdHgpKSB7 CisJCWViLT5jdHgtPnZtYV9sdXQuaHRfc2l6ZSB8PSBSRVNJWkVfSU5fUFJPR1JFU1M7CisJCXF1 ZXVlX3dvcmsoc3lzdGVtX2hpZ2hwcmlfd3EsICZlYi0+Y3R4LT52bWFfbHV0LnJlc2l6ZSk7CiAJ fQogCiAJcmV0dXJuIDA7Cit9CiAKK3N0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKgorZWJfZ2V0X2Jh dGNoKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQoreworCXN0cnVjdCBpOTE1X3ZtYSAqdm1h OworCisJdm1hID0gdG9fcHRyKHN0cnVjdCBpOTE1X3ZtYSwgZWItPmV4ZWNbZWItPmFyZ3MtPmJ1 ZmZlcl9jb3VudC0xXS5yc3ZkMik7CiAKLWVycjoKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJm9iamVj dHMpKSB7Ci0JCW9iaiA9IGxpc3RfZmlyc3RfZW50cnkoJm9iamVjdHMsCi0JCQkJICAgICAgIHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAotCQkJCSAgICAgICBvYmpfZXhlY19saW5rKTsKLQkJ bGlzdF9kZWxfaW5pdCgmb2JqLT5vYmpfZXhlY19saW5rKTsKLQkJaTkxNV9nZW1fb2JqZWN0X3B1 dChvYmopOwotCX0KIAkvKgotCSAqIE9iamVjdHMgYWxyZWFkeSB0cmFuc2ZlcmVkIHRvIHRoZSB2 bWFzIGxpc3Qgd2lsbCBiZSB1bnJlZmVyZW5jZWQgYnkKLQkgKiBlYl9kZXN0cm95LgorCSAqIFNO QSBpcyBkb2luZyBmYW5jeSB0cmlja3Mgd2l0aCBjb21wcmVzc2luZyBiYXRjaCBidWZmZXJzLCB3 aGljaCBsZWFkcworCSAqIHRvIG5lZ2F0aXZlIHJlbG9jYXRpb24gZGVsdGFzLiBVc3VhbGx5IHRo YXQgd29ya3Mgb3V0IG9rIHNpbmNlIHRoZQorCSAqIHJlbG9jYXRlIGFkZHJlc3MgaXMgc3RpbGwg cG9zaXRpdmUsIGV4Y2VwdCB3aGVuIHRoZSBiYXRjaCBpcyBwbGFjZWQKKwkgKiB2ZXJ5IGxvdyBp biB0aGUgR1RULiBFbnN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbi4KKwkgKgorCSAqIE5vdGUgdGhh dCBhY3R1YWwgaGFuZ3MgaGF2ZSBvbmx5IGJlZW4gb2JzZXJ2ZWQgb24gZ2VuNywgYnV0IGZvcgor CSAqIHBhcmFub2lhIGRvIGl0IGV2ZXJ5d2hlcmUuCiAJICovCisJaWYgKCh2bWEtPmV4ZWNfZW50 cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfUElOTkVEKSA9PSAwKQorCQl2bWEtPmV4ZWNfZW50cnkt PmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfTkVFRFNfQklBUzsKIAotCXJldHVybiByZXQ7CisJcmV0 dXJuIHZtYTsKIH0KIAotc3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAqZWJfZ2V0X3ZtYShzdHJ1Y3Qg aTkxNV9leGVjYnVmZmVyICplYiwgdW5zaWduZWQgbG9uZyBoYW5kbGUpCitzdGF0aWMgc3RydWN0 IGk5MTVfdm1hICoKK2ViX2dldF92bWEoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsIHVuc2ln bmVkIGxvbmcgaGFuZGxlKQogewotCWlmIChlYi0+YW5kIDwgMCkgewotCQlpZiAoaGFuZGxlID49 IC1lYi0+YW5kKQorCWlmIChlYi0+bHV0X21hc2sgPCAwKSB7CisJCWlmIChoYW5kbGUgPj0gLWVi LT5sdXRfbWFzaykKIAkJCXJldHVybiBOVUxMOwotCQlyZXR1cm4gZWItPmx1dFtoYW5kbGVdOwor CQlyZXR1cm4gdG9fcHRyKHN0cnVjdCBpOTE1X3ZtYSwgZWItPmV4ZWNbaGFuZGxlXS5yc3ZkMik7 CiAJfSBlbHNlIHsKIAkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJCXN0cnVjdCBpOTE1X3Zt YSAqdm1hOwogCi0JCWhlYWQgPSAmZWItPmJ1Y2tldHNbaGFuZGxlICYgZWItPmFuZF07CisJCWhl YWQgPSAmZWItPmJ1Y2tldHNbaGFzaF8zMihoYW5kbGUsIGViLT5sdXRfbWFzayldOwogCQlobGlz dF9mb3JfZWFjaF9lbnRyeSh2bWEsIGhlYWQsIGV4ZWNfbm9kZSkgewogCQkJaWYgKHZtYS0+ZXhl Y19oYW5kbGUgPT0gaGFuZGxlKQogCQkJCXJldHVybiB2bWE7CkBAIC0yOTcsNyArMzQzLDcgQEAg c3RhdGljIHZvaWQgZWJfZGVzdHJveShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIAogCWk5 MTVfZ2VtX2NvbnRleHRfcHV0KGViLT5jdHgpOwogCi0JaWYgKGViLT5idWNrZXRzKQorCWlmIChl Yi0+bHV0X21hc2sgPj0gMCkKIAkJa2ZyZWUoZWItPmJ1Y2tldHMpOwogfQogCkBAIC05MTUsNyAr OTYxLDcgQEAgc3RhdGljIGludCBlYl9yZXNlcnZlKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmVi KQogCQkJZW50cnktPmZsYWdzICY9IH5FWEVDX09CSkVDVF9ORUVEU19GRU5DRTsKIAkJbmVlZF9m ZW5jZSA9CiAJCQllbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9ORUVEU19GRU5DRSAmJgotCQkJ aTkxNV9nZW1fb2JqZWN0X2lzX3RpbGVkKG9iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfaXNfdGls ZWQodm1hLT5vYmopOwogCQluZWVkX21hcHBhYmxlID0gbmVlZF9mZW5jZSB8fCBuZWVkX3JlbG9j X21hcHBhYmxlKHZtYSk7CiAKIAkJaWYgKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1BJTk5F RCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0LmgKaW5kZXggMTc0Y2Y5MjNjMjM2 Li41MDkzZTA2NWI5YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X29iamVjdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCkBA IC03MSw2ICs3MSw3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKIAkvKiogTGlzdCBv ZiBWTUFzIGJhY2tlZCBieSB0aGlzIG9iamVjdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgdm1hX2xp c3Q7CiAJc3RydWN0IHJiX3Jvb3Qgdm1hX3RyZWU7CisJc3RydWN0IGk5MTVfdm1hICp2bWFfaGFz aGVkOwogCiAJLyoqIFN0b2xlbiBtZW1vcnkgZm9yIHRoaXMgb2JqZWN0LCBpbnN0ZWFkIG9mIGJl aW5nIGJhY2tlZCBieSBzaG1lbS4gKi8KIAlzdHJ1Y3QgZHJtX21tX25vZGUgKnN0b2xlbjsKQEAg LTg1LDkgKzg2LDYgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgewogCSAqLwogCXN0cnVj dCBsaXN0X2hlYWQgdXNlcmZhdWx0X2xpbms7CiAKLQkvKiogVXNlZCBpbiBleGVjYnVmIHRvIHRl bXBvcmFyaWx5IGhvbGQgYSByZWYgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG9ial9leGVjX2xpbms7 Ci0KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJhdGNoX3Bvb2xfbGluazsKIAlJOTE1X1NFTEZURVNUX0RF Q0xBUkUoc3RydWN0IGxpc3RfaGVhZCBzdF9saW5rKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV92bWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMK aW5kZXggNmNmMzJkYTY4MmVjLi5iMjg2ODA3YzQ1MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfdm1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEu YwpAQCAtNTkwLDExICs1OTAsMzEgQEAgdm9pZCBpOTE1X3ZtYV9kZXN0cm95KHN0cnVjdCBpOTE1 X3ZtYSAqdm1hKQogCWttZW1fY2FjaGVfZnJlZSh0b19pOTE1KHZtYS0+b2JqLT5iYXNlLmRldikt PnZtYXMsIHZtYSk7CiB9CiAKK3ZvaWQgaTkxNV92bWFfdW5saW5rX2N0eChzdHJ1Y3QgaTkxNV92 bWEgKnZtYSkKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0gdm1hLT5jdHg7CisK KwlpZiAoY3R4LT52bWFfbHV0Lmh0X3NpemUgJiBSRVNJWkVfSU5fUFJPR1JFU1MpIHsKKwkJY2Fu Y2VsX3dvcmtfc3luYygmY3R4LT52bWFfbHV0LnJlc2l6ZSk7CisJCWN0eC0+dm1hX2x1dC5odF9z aXplICY9IH5SRVNJWkVfSU5fUFJPR1JFU1M7CisJfQorCisJX19obGlzdF9kZWwoJnZtYS0+Y3R4 X25vZGUpOworCWN0eC0+dm1hX2x1dC5odF9jb3VudC0tOworCisJaWYgKGk5MTVfdm1hX2lzX2dn dHQodm1hKSkKKwkJdm1hLT5vYmotPnZtYV9oYXNoZWQgPSBOVUxMOworCXZtYS0+Y3R4ID0gTlVM TDsKK30KKwogdm9pZCBpOTE1X3ZtYV9jbG9zZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKIHsKIAlH RU1fQlVHX09OKGk5MTVfdm1hX2lzX2Nsb3NlZCh2bWEpKTsKIAl2bWEtPmZsYWdzIHw9IEk5MTVf Vk1BX0NMT1NFRDsKIAorCWlmICh2bWEtPmN0eCkKKwkJaTkxNV92bWFfdW5saW5rX2N0eCh2bWEp OworCiAJbGlzdF9kZWwoJnZtYS0+b2JqX2xpbmspOwogCXJiX2VyYXNlKCZ2bWEtPm9ial9ub2Rl LCAmdm1hLT5vYmotPnZtYV90cmVlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV92bWEuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmgKaW5kZXggNGQ4 MjczMDBkMWE4Li44ODU0M2ZhZmNmZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfdm1hLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuaApAQCAtOTks NiArOTksNyBAQCBzdHJ1Y3QgaTkxNV92bWEgewogCiAJc3RydWN0IGxpc3RfaGVhZCBvYmpfbGlu azsgLyogTGluayBpbiB0aGUgb2JqZWN0J3MgVk1BIGxpc3QgKi8KIAlzdHJ1Y3QgcmJfbm9kZSBv Ympfbm9kZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBvYmpfaGFzaDsKIAogCS8qKiBUaGlzIHZtYSdz IHBsYWNlIGluIHRoZSBleGVjYnVmIHJlc2VydmF0aW9uIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9o ZWFkIGV4ZWNfbGluazsKQEAgLTExMCw4ICsxMTEsMTIgQEAgc3RydWN0IGk5MTVfdm1hIHsKIAkg KiBVc2VkIGZvciBwZXJmb3JtaW5nIHJlbG9jYXRpb25zIGR1cmluZyBleGVjYnVmZmVyIGluc2Vy dGlvbi4KIAkgKi8KIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBleGVjX25vZGU7Ci0JdW5zaWduZWQgbG9u ZyBleGVjX2hhbmRsZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlY19l bnRyeTsKKwl1MzIgZXhlY19oYW5kbGU7CisKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 OworCXN0cnVjdCBobGlzdF9ub2RlIGN0eF9ub2RlOworCXUzMiBjdHhfaGFuZGxlOwogfTsKIAog c3RydWN0IGk5MTVfdm1hICoKQEAgLTIzNSw2ICsyNDAsNyBAQCBib29sIGk5MTVfdm1hX21pc3Bs YWNlZChjb25zdCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAkJCXU2NCBzaXplLCB1NjQgYWxpZ25t ZW50LCB1NjQgZmxhZ3MpOwogdm9pZCBfX2k5MTVfdm1hX3NldF9tYXBfYW5kX2ZlbmNlYWJsZShz dHJ1Y3QgaTkxNV92bWEgKnZtYSk7CiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfdm1hX3VuYmluZChz dHJ1Y3QgaTkxNV92bWEgKnZtYSk7Cit2b2lkIGk5MTVfdm1hX3VubGlua19jdHgoc3RydWN0IGk5 MTVfdm1hICp2bWEpOwogdm9pZCBpOTE1X3ZtYV9jbG9zZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSk7 CiB2b2lkIGk5MTVfdm1hX2Rlc3Ryb3koc3RydWN0IGk5MTVfdm1hICp2bWEpOwogCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmMKaW5kZXggOGQzYTkwYzNm OGFjLi5mOGI5Y2MyMTJiMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9tb2NrX2NvbnRleHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv bW9ja19jb250ZXh0LmMKQEAgLTQwLDEwICs0MCwxOCBAQCBtb2NrX2NvbnRleHQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJSU5JVF9MSVNUX0hFQUQoJmN0eC0+bGluayk7CiAJY3R4 LT5pOTE1ID0gaTkxNTsKIAorCWN0eC0+dm1hX2x1dC5odF9iaXRzID0gVk1BX0hUX0JJVFM7CisJ Y3R4LT52bWFfbHV0Lmh0X3NpemUgPSBCSVQoVk1BX0hUX0JJVFMpOworCWN0eC0+dm1hX2x1dC5o dCA9IGtjYWxsb2MoY3R4LT52bWFfbHV0Lmh0X3NpemUsCisJCQkJICBzaXplb2YoKmN0eC0+dm1h X2x1dC5odCksCisJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eC0+dm1hX2x1dC5odCkKKwkJ Z290byBlcnJfZnJlZTsKKwogCXJldCA9IGlkYV9zaW1wbGVfZ2V0KCZpOTE1LT5jb250ZXh0X2h3 X2lkYSwKIAkJCSAgICAgMCwgTUFYX0NPTlRFWFRfSFdfSUQsIEdGUF9LRVJORUwpOwogCWlmIChy ZXQgPCAwKQotCQlnb3RvIGVycl9mcmVlOworCQlnb3RvIGVycl92bWFfaHQ7CiAJY3R4LT5od19p ZCA9IHJldDsKIAogCWlmIChuYW1lKSB7CkBAIC01OCw2ICs2Niw4IEBAIG1vY2tfY29udGV4dChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAogCXJldHVybiBjdHg7CiAKK2Vycl92bWFf aHQ6CisJa3ZmcmVlKGN0eC0+dm1hX2x1dC5odCk7CiBlcnJfZnJlZToKIAlrZnJlZShjdHgpOwog CXJldHVybiBOVUxMOwotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK