From mboxrd@z Thu Jan 1 00:00:00 1970 From: jglisse@redhat.com Subject: [PATCH 2/2] gpu/i915: use HMM mirror for userptr buffer object. Date: Sun, 9 Sep 2018 20:57:36 -0400 Message-ID: <20180910005736.5805-3-jglisse@redhat.com> References: <20180910005736.5805-1-jglisse@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180910005736.5805-1-jglisse@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org Cc: David Airlie , Daniel Vetter , intel-gfx@lists.freedesktop.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , dri-devel@lists.freedesktop.org, Rodrigo Vivi List-Id: dri-devel@lists.freedesktop.org RnJvbTogSsOpcsO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+CgpUaGlzIHJlcGxhY2Ug ZXhpc3RpbmcgY29kZSB0aGF0IHJlbHkgb24gZ2V0X3VzZXJfcGFnZSgpIGFrYSBHVVAgd2l0aApj b2RlIHRoYXQgbm93IHVzZSBITU0gbWlycm9yIHRvIG1pcnJvciBhIHJhbmdlIG9mIHZpcnR1YWwg YWRkcmVzcyBhcwphIGJ1ZmZlciBvYmplY3QgYWNjZXNzaWJsZSBieSB0aGUgR1BVLiBUaGVyZSBp cyBubyBmdW5jdGlvbmFsIGNoYW5nZXMKZnJvbSB1c2Vyc3BhY2UgcG9pbnQgb2Ygdmlldy4KCkZy b20ga2VybmVsIHBvaW50IG9mIHZpZXcgd2Ugbm8gbG9uZ2VyIHBpbiBwYWdlcyBmb3IgdXNlcnB0 ciBidWZmZXIKb2JqZWN0IHdoaWNoIGlzIGEgd2VsY29tZSBjaGFuZ2UgKGkgYW0gYXNzdW1pbmcg dGhhdCBldmVyeW9uZSBkaXNsaWtlCnBhZ2UgcGluIGFzIGkgZG8pLgoKQW5vdGhlciBjaGFuZ2Us IGZyb20ga2VybmVsIHBvaW50IG9mIHZpZXcsIGlzIHRoYXQgaXQgZG9lcyBubyBsb25nZXIKaGF2 ZSBhIGZhc3QgcGF0aCB3aXRoIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSB0aGlzIGNhbiBldmVudHVh bGx5IGFkZGVkCmJhY2sgdGhyb3VnaCBITU0uCgpTaWduZWQtb2ZmLWJ5OiBKw6lyw7RtZSBHbGlz c2UgPGpnbGlzc2VAcmVkaGF0LmNvbT4KQ2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KQ2M6IERhbmllbCBWZXR0ZXIg PGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KQ2M6IExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGlu dGVsLmNvbT4KQ2M6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBsaW51eC5pbnRlbC5jb20+CkNj OiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBS b2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+CkNjOiBpbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCi0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0 ci5jIHwgMjA2ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwMiBp bnNlcnRpb25zKCspLCAxMDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fdXNlcnB0ci5jCmluZGV4IDVlMDliNjU0YjVhZC4uMzc4YWFiNDM4ZWJkIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCkBAIC00NjQsNyArNDY0LDcgQEAgX19pOTE1 X2dlbV91c2VycHRyX2FsbG9jX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos CiAKIHN0YXRpYyBpbnQKIF9faTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0aXZlKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgICBib29sIHZhbHVlKQorCQkJICAgICAgc3Ry dWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTQ4Niw4NiArNDg2 LDEyMCBAQCBfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAogCS8qIEluIG9yZGVyIHRvIHNlcmlhbGlzZSBnZXRfcGFnZXMgd2l0aCBh biBvdXRzdGFuZGluZwogCSAqIGNhbmNlbF91c2VycHRyLCB3ZSBtdXN0IGRyb3AgdGhlIHN0cnVj dF9tdXRleCBhbmQgdHJ5IGFnYWluLgogCSAqLwotCWlmICghdmFsdWUpCisJaWYgKHJhbmdlKSB7 CisJCWlmICghaG1tX3ZtYV9yYW5nZV9kb25lKHJhbmdlKSkKKwkJCXJldCA9IC1FQUdBSU47CisJ CWVsc2UKKwkJCWFkZF9vYmplY3Qob2JqLT51c2VycHRyLm1tdV9vYmplY3QpOworCX0gZWxzZQog CQlkZWxfb2JqZWN0KG9iai0+dXNlcnB0ci5tbXVfb2JqZWN0KTsKLQllbHNlIGlmICghd29ya19w ZW5kaW5nKCZvYmotPnVzZXJwdHIubW11X29iamVjdC0+d29yaykpCi0JCWFkZF9vYmplY3Qob2Jq LT51c2VycHRyLm1tdV9vYmplY3QpOwotCWVsc2UKLQkJcmV0ID0gLUVBR0FJTjsKIAlzcGluX3Vu bG9jaygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QtPm1pcnJvci0+bG9jayk7CiAjZW5kaWYKIAog CXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1fX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3Bh Z2VzX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKQorc3RhdGljIGludAoraTkxNV9n ZW1fdXNlcnB0cl9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB0cnkp CiB7Ci0Jc3RydWN0IGdldF9wYWdlc193b3JrICp3b3JrID0gY29udGFpbmVyX29mKF93b3JrLCB0 eXBlb2YoKndvcmspLCB3b3JrKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0g d29yay0+b2JqOwotCWNvbnN0IGludCBucGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NI SUZUOworI2lmIGRlZmluZWQoQ09ORklHX0hNTV9NSVJST1IpCisJc3RhdGljIGNvbnN0IHVpbnQ2 NF90IGk5MTVfcmFuZ2VfZmxhZ3NbSE1NX1BGTl9GTEFHX01BWF0gPSB7CisJCSgxIDw8IDApLCAv KiBITU1fUEZOX1ZBTElEICovCisJCSgxIDw8IDEpLCAvKiBITU1fUEZOX1dSSVRFICovCisJCTAg LyogSE1NX1BGTl9ERVZJQ0VfUFJJVkFURSAqLworCX07CisJc3RhdGljIGNvbnN0IHVpbnQ2NF90 IGk5MTVfcmFuZ2VfdmFsdWVzW0hNTV9QRk5fVkFMVUVfTUFYXSA9IHsKKwkJMHhmZmZmZmZmZmZm ZmZmZmZlVUwsIC8qIEhNTV9QRk5fRVJST1IgKi8KKwkJMCwgLyogSE1NX1BGTl9OT05FICovCisJ CTB4ZmZmZmZmZmZmZmZmZmZmY1VMIC8qIEhNTV9QRk5fU1BFQ0lBTCAqLworCX07CisKKwljb25z dCB1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7CisJ c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBvYmotPnVzZXJwdHIubW0tPm1tOworCXN0cnVjdCBzZ190 YWJsZSAqcGFnZXM7CisJc3RydWN0IGhtbV9yYW5nZSByYW5nZTsKIAlzdHJ1Y3QgcGFnZSAqKnB2 ZWM7Ci0JaW50IHBpbm5lZCwgcmV0OwotCi0JcmV0ID0gLUVOT01FTTsKLQlwaW5uZWQgPSAwOwot Ci0JcHZlYyA9IGt2bWFsbG9jX2FycmF5KG5wYWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBH RlBfS0VSTkVMKTsKLQlpZiAocHZlYyAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBtbV9zdHJ1Y3QgKm1t ID0gb2JqLT51c2VycHRyLm1tLT5tbTsKLQkJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKLQotCQlp ZiAoIWk5MTVfZ2VtX29iamVjdF9pc19yZWFkb25seShvYmopKQotCQkJZmxhZ3MgfD0gRk9MTF9X UklURTsKLQotCQlyZXQgPSAtRUZBVUxUOwotCQlpZiAobW1nZXRfbm90X3plcm8obW0pKSB7Ci0J CQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCQl3aGlsZSAocGlubmVkIDwgbnBhZ2VzKSB7 Ci0JCQkJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlCi0JCQkJCSh3b3JrLT50YXNrLCBtbSwK LQkJCQkJIG9iai0+dXNlcnB0ci5wdHIgKyBwaW5uZWQgKiBQQUdFX1NJWkUsCi0JCQkJCSBucGFn ZXMgLSBwaW5uZWQsCi0JCQkJCSBmbGFncywKLQkJCQkJIHB2ZWMgKyBwaW5uZWQsIE5VTEwsIE5V TEwpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlicmVhazsKLQotCQkJCXBpbm5lZCArPSByZXQ7 Ci0JCQl9Ci0JCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCQkJbW1wdXQobW0pOwotCQl9CisJ dW5zaWduZWQgbG9uZyBpOworCWJvb2wgd3JpdGUgPSAhaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRv bmx5KG9iaik7CisJaW50IGVycjsKKworCXJhbmdlLnBmbnMgPSBrdm1hbGxvY19hcnJheShucGFn ZXMsIHNpemVvZih1aW50NjRfdCksCisJCQkJICAgIHRyeSA/IEdGUF9LRVJORUwgfCBfX0dGUF9O T1JFVFJZIHwgX19HRlBfTk9XQVJOIDogR0ZQX0tFUk5FTCk7CisJaWYgKHJhbmdlLnBmbnMgPT0g TlVMTCkKKwkJcmV0dXJuIHRyeSA/IC1FQUdBSU4gOiAtRU5PTUVNOworCisJcmFuZ2UucGZuX3No aWZ0ID0gMTI7CisJcmFuZ2Uuc3RhcnQgPSBvYmotPnVzZXJwdHIucHRyOworCXJhbmdlLmZsYWdz ID0gaTkxNV9yYW5nZV9mbGFnczsKKwlyYW5nZS52YWx1ZXMgPSBpOTE1X3JhbmdlX3ZhbHVlczsK KwlyYW5nZS5lbmQgPSByYW5nZS5zdGFydCArIG9iai0+YmFzZS5zaXplOworCisJcmFuZ2Uudm1h ID0gZmluZF92bWEobW0sIHJhbmdlLnN0YXJ0KTsKKwlpZiAoIXJhbmdlLnZtYSB8fCByYW5nZS52 bWEtPnZtX2ZpbGUgfHwgcmFuZ2Uudm1hLT52bV9lbmQgPCByYW5nZS5lbmQpIHsKKwkJa3ZmcmVl KHJhbmdlLnBmbnMpOworCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQltdXRleF9sb2NrKCZvYmot Pm1tLmxvY2spOwotCWlmIChvYmotPnVzZXJwdHIud29yayA9PSAmd29yay0+d29yaykgewotCQlz dHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzID0gRVJSX1BUUihyZXQpOwotCi0JCWlmIChwaW5uZWQgPT0g bnBhZ2VzKSB7Ci0JCQlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhvYmos IHB2ZWMsCi0JCQkJCQkJICAgICAgIG5wYWdlcyk7Ci0JCQlpZiAoIUlTX0VSUihwYWdlcykpIHsK LQkJCQlwaW5uZWQgPSAwOwotCQkJCXBhZ2VzID0gTlVMTDsKK2FnYWluOgorCWZvciAoaSA9IDA7 IGkgPCBucGFnZXM7ICsraSkgeworCQlyYW5nZS5wZm5zW2ldID0gcmFuZ2UuZmxhZ3NbSE1NX1BG Tl9WQUxJRF07CisJCXJhbmdlLnBmbnNbaV0gfD0gd3JpdGUgPyByYW5nZS5mbGFnc1tITU1fUEZO X1dSSVRFXSA6IDA7CisJfQorCisJZXJyID0gaG1tX3ZtYV9mYXVsdCgmcmFuZ2UsIHRydWUpOwor CWlmIChlcnIpIHsKKwkJa3ZmcmVlKHJhbmdlLnBmbnMpOworCQlyZXR1cm4gZXJyOworCX0KKwor CWZvciAoaSA9IDAsIHB2ZWMgPSAodm9pZCAqKXJhbmdlLnBmbnM7IGkgPCBucGFnZXM7ICsraSkg eworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGhtbV9wZm5fdG9fcGFnZSgmcmFuZ2UsIHJhbmdlLnBm bnNbaV0pOworCisJCWlmIChwYWdlID09IE5VTEwpIHsKKwkJCWhtbV92bWFfcmFuZ2VfZG9uZSgm cmFuZ2UpOworCisJCQlpZiAodHJ5KSB7CisJCQkJa3ZmcmVlKHJhbmdlLnBmbnMpOworCQkJCXJl dHVybiAtRUFHQUlOOwogCQkJfQorCQkJZ290byBhZ2FpbjsKIAkJfQotCi0JCW9iai0+dXNlcnB0 ci53b3JrID0gRVJSX0NBU1QocGFnZXMpOwotCQlpZiAoSVNfRVJSKHBhZ2VzKSkKLQkJCV9faTkx NV9nZW1fdXNlcnB0cl9zZXRfYWN0aXZlKG9iaiwgZmFsc2UpOworCQlwdmVjW2ldID0gcGFnZTsK IAl9Ci0JbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2spOwogCi0JcmVsZWFzZV9wYWdlcyhwdmVj LCBwaW5uZWQpOwotCWt2ZnJlZShwdmVjKTsKKwlpZiAoIXRyeSkKKwkJbXV0ZXhfbG9jaygmb2Jq LT5tbS5sb2NrKTsKKwlwYWdlcyA9IF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhvYmos IHB2ZWMsIG5wYWdlcyk7CisJaWYgKCFJU19FUlIocGFnZXMpKQorCQlfX2k5MTVfZ2VtX3VzZXJw dHJfc2V0X2FjdGl2ZShvYmosICZyYW5nZSk7CisJZWxzZQorCQlobW1fdm1hX3JhbmdlX2RvbmUo JnJhbmdlKTsKKwlpZiAoIXRyeSkKKwkJbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2spOworCisJ a3ZmcmVlKHJhbmdlLnBmbnMpOworCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocGFnZXMpOworI2Vs c2UgLyogQ09ORklHX0hNTV9NSVJST1IgKi8KKwlyZXR1cm4gLUVGQVVMVDsKKyNlbmRpZgorfQor CitzdGF0aWMgdm9pZAorX19pOTE1X2dlbV91c2VycHRyX2dldF9wYWdlc193b3JrZXIoc3RydWN0 IHdvcmtfc3RydWN0ICpfd29yaykKK3sKKwlzdHJ1Y3QgZ2V0X3BhZ2VzX3dvcmsgKndvcmsgPSBj b250YWluZXJfb2YoX3dvcmssIHR5cGVvZigqd29yayksIHdvcmspOworCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmogPSB3b3JrLT5vYmo7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVf Z2VtX3VzZXJwdHJfbWFwKG9iaiwgZmFsc2UpOworCW9iai0+dXNlcnB0ci53b3JrID0gRVJSX1BU UihyZXQpOwogCiAJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwogCXB1dF90YXNrX3N0cnVjdCh3 b3JrLT50YXNrKTsKIAlrZnJlZSh3b3JrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzZ190YWJsZSAq CitzdGF0aWMgaW50CiBfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3NjaGVkdWxlKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGdldF9wYWdlc193b3JrICp3 b3JrOwpAQCAtNTkxLDcgKzYyNSw3IEBAIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2No ZWR1bGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAkgKi8KIAl3b3JrID0ga21h bGxvYyhzaXplb2YoKndvcmspLCBHRlBfS0VSTkVMKTsKIAlpZiAod29yayA9PSBOVUxMKQotCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlvYmotPnVzZXJw dHIud29yayA9ICZ3b3JrLT53b3JrOwogCkBAIC02MDMsMTcgKzYzNywxMiBAQCBfX2k5MTVfZ2Vt X3VzZXJwdHJfZ2V0X3BhZ2VzX3NjaGVkdWxlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCiAJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2Vz X3dvcmtlcik7CiAJcXVldWVfd29yayh0b19pOTE1KG9iai0+YmFzZS5kZXYpLT5tbS51c2VycHRy X3dxLCAmd29yay0+d29yayk7CiAKLQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwlyZXR1cm4g LUVBR0FJTjsKIH0KIAogc3RhdGljIGludCBpOTE1X2dlbV91c2VycHRyX2dldF9wYWdlcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCWNvbnN0IGludCBudW1fcGFnZXMgPSBv YmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZUOwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gb2Jq LT51c2VycHRyLm1tLT5tbTsKLQlzdHJ1Y3QgcGFnZSAqKnB2ZWM7Ci0Jc3RydWN0IHNnX3RhYmxl ICpwYWdlczsKLQlib29sIGFjdGl2ZTsKLQlpbnQgcGlubmVkOworCWludCByZXQ7CiAKIAkvKiBJ ZiB1c2Vyc3BhY2Ugc2hvdWxkIGVuZ2luZWVyIHRoYXQgdGhlc2UgcGFnZXMgYXJlIHJlcGxhY2Vk IGluCiAJICogdGhlIHZtYSBiZXR3ZWVuIHVzIGJpbmRpbmcgdGhpcyBwYWdlIGludG8gdGhlIEdU VCBhbmQgY29tcGxldGlvbgpAQCAtNjQwLDQwICs2NjksMTAgQEAgc3RhdGljIGludCBpOTE1X2dl bV91c2VycHRyX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCQkJ cmV0dXJuIC1FQUdBSU47CiAJfQogCi0JcHZlYyA9IE5VTEw7Ci0JcGlubmVkID0gMDsKLQotCWlm IChtbSA9PSBjdXJyZW50LT5tbSkgewotCQlwdmVjID0ga3ZtYWxsb2NfYXJyYXkobnVtX3BhZ2Vz LCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCi0JCQkJICAgICAgR0ZQX0tFUk5FTCB8Ci0JCQkJICAg ICAgX19HRlBfTk9SRVRSWSB8Ci0JCQkJICAgICAgX19HRlBfTk9XQVJOKTsKLQkJaWYgKHB2ZWMp IC8qIGRlZmVyIHRvIHdvcmtlciBpZiBtYWxsb2MgZmFpbHMgKi8KLQkJCXBpbm5lZCA9IF9fZ2V0 X3VzZXJfcGFnZXNfZmFzdChvYmotPnVzZXJwdHIucHRyLAotCQkJCQkJICAgICAgIG51bV9wYWdl cywKLQkJCQkJCSAgICAgICAhaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRvbmx5KG9iaiksCi0JCQkJ CQkgICAgICAgcHZlYyk7Ci0JfQotCi0JYWN0aXZlID0gZmFsc2U7Ci0JaWYgKHBpbm5lZCA8IDAp IHsKLQkJcGFnZXMgPSBFUlJfUFRSKHBpbm5lZCk7Ci0JCXBpbm5lZCA9IDA7Ci0JfSBlbHNlIGlm IChwaW5uZWQgPCBudW1fcGFnZXMpIHsKLQkJcGFnZXMgPSBfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0 X3BhZ2VzX3NjaGVkdWxlKG9iaik7Ci0JCWFjdGl2ZSA9IHBhZ2VzID09IEVSUl9QVFIoLUVBR0FJ Tik7Ci0JfSBlbHNlIHsKLQkJcGFnZXMgPSBfX2k5MTVfZ2VtX3VzZXJwdHJfYWxsb2NfcGFnZXMo b2JqLCBwdmVjLCBudW1fcGFnZXMpOwotCQlhY3RpdmUgPSAhSVNfRVJSKHBhZ2VzKTsKLQl9Ci0J aWYgKGFjdGl2ZSkKLQkJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCB0cnVlKTsK LQotCWlmIChJU19FUlIocGFnZXMpKQotCQlyZWxlYXNlX3BhZ2VzKHB2ZWMsIHBpbm5lZCk7Ci0J a3ZmcmVlKHB2ZWMpOwotCi0JcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwYWdlcyk7CisJcmV0ID0g aTkxNV9nZW1fdXNlcnB0cl9tYXAob2JqLCB0cnVlKTsKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJ CXJldCA9IF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2NoZWR1bGUob2JqKTsKKwlyZXR1 cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjg0LDcgKzY4Myw3IEBAIGk5MTVfZ2VtX3Vz ZXJwdHJfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJc3RydWN0 IHBhZ2UgKnBhZ2U7CiAKIAlCVUdfT04ob2JqLT51c2VycHRyLndvcmsgIT0gTlVMTCk7Ci0JX19p OTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBmYWxzZSk7CisJX19pOTE1X2dlbV91c2Vy cHRyX3NldF9hY3RpdmUob2JqLCBOVUxMKTsKIAogCWlmIChvYmotPm1tLm1hZHYgIT0gSTkxNV9N QURWX1dJTExORUVEKQogCQlvYmotPm1tLmRpcnR5ID0gZmFsc2U7CkBAIC02OTYsNyArNjk1LDYg QEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKIAkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCiAJCW1hcmtfcGFnZV9hY2Nlc3NlZChw YWdlKTsKLQkJcHV0X3BhZ2UocGFnZSk7CiAJfQogCW9iai0+bW0uZGlydHkgPSBmYWxzZTsKIAot LSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK