From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 2/4] drm/i915/gtt: Recursive scratch page Date: Tue, 5 Mar 2019 13:54:28 +0000 Message-ID: <20190305135430.4948-2-chris@chris-wilson.co.uk> References: <20190305135430.4948-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 fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B54089826 for ; Tue, 5 Mar 2019 13:56:14 +0000 (UTC) In-Reply-To: <20190305135430.4948-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 Cc: Mika Kuoppala , Matthew Auld List-Id: intel-gfx@lists.freedesktop.org RmlsbCB0aGUgc2NyYXRjaCBwYWdlIHdpdGggcG9pbnRlcnMgdG8gaXRzZWxmIHNvIHRoYXQgd2Ug Y2FuIHJldXNlIGl0IGF0CmFueSBsZXZlbCBvZiB0aGUgcGFnZSB0YWJsZXMuCgpTaWduZWQtb2Zm LWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IE1hdHRoZXcg QXVsZCA8bWF0dGhldy5hdWxkQGludGVsLmNvbT4KQ2M6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3Vv cHBhbGFAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5j IHwgMjAyICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5oIHwgICAzIC0KIDIgZmlsZXMgY2hhbmdlZCwgODUgaW5zZXJ0aW9ucygr KSwgMTIwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKaW5kZXgg NGE2ODFiMzMzMmFkLi43ZjJkODQ2MmYzMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0 dC5jCkBAIC03MDEsOSArNzAxLDcgQEAgc3RhdGljIHZvaWQgZnJlZV9wZChzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bSwKIHN0YXRpYyB2b2lkIGdlbjhfaW5pdGlhbGl6ZV9wZChzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCSAgICAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVj dG9yeSAqcGQpCiB7Ci0JZmlsbF9weCh2bSwgcGQsCi0JCWdlbjhfcGRlX2VuY29kZShweF9kbWEo dm0tPnNjcmF0Y2hfcHQpLCBJOTE1X0NBQ0hFX0xMQykpOwotCW1lbXNldF9wKCh2b2lkICoqKXBk LT5wYWdlX3RhYmxlLCB2bS0+c2NyYXRjaF9wdCwgSTkxNV9QREVTKTsKKwlmaWxsX3B4KHZtLCBw ZCwgdm0tPnNjcmF0Y2hfcHRlKTsKIH0KIAogc3RhdGljIGludCBfX3BkcF9pbml0KHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtLApAQCAtNzExLDEzICs3MDksMTEgQEAgc3RhdGljIGludCBf X3BkcF9pbml0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogewogCWNvbnN0IHVuc2ln bmVkIGludCBwZHBlcyA9IGk5MTVfcGRwZXNfcGVyX3BkcCh2bSk7CiAKLQlwZHAtPnBhZ2VfZGly ZWN0b3J5ID0ga21hbGxvY19hcnJheShwZHBlcywgc2l6ZW9mKCpwZHAtPnBhZ2VfZGlyZWN0b3J5 KSwKLQkJCQkJICAgIEk5MTVfR0ZQX0FMTE9XX0ZBSUwpOworCXBkcC0+cGFnZV9kaXJlY3Rvcnkg PSBrY2FsbG9jKHBkcGVzLCBzaXplb2YoKnBkcC0+cGFnZV9kaXJlY3RvcnkpLAorCQkJCSAgICAg IEk5MTVfR0ZQX0FMTE9XX0ZBSUwpOwogCWlmICh1bmxpa2VseSghcGRwLT5wYWdlX2RpcmVjdG9y eSkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0X3AoKHZvaWQgKiopcGRwLT5wYWdlX2Rp cmVjdG9yeSwgdm0tPnNjcmF0Y2hfcGQsIHBkcGVzKTsKLQogCXJldHVybiAwOwogfQogCkBAIC03 NzcsMTkgKzc3MywxMyBAQCBzdGF0aWMgdm9pZCBmcmVlX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNz X3NwYWNlICp2bSwKIHN0YXRpYyB2b2lkIGdlbjhfaW5pdGlhbGl6ZV9wZHAoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCiAJCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRl ciAqcGRwKQogewotCWdlbjhfcHBndHRfcGRwZV90IHNjcmF0Y2hfcGRwZTsKLQotCXNjcmF0Y2hf cGRwZSA9IGdlbjhfcGRwZV9lbmNvZGUocHhfZG1hKHZtLT5zY3JhdGNoX3BkKSwgSTkxNV9DQUNI RV9MTEMpOwotCi0JZmlsbF9weCh2bSwgcGRwLCBzY3JhdGNoX3BkcGUpOworCWZpbGxfcHgodm0s IHBkcCwgdm0tPnNjcmF0Y2hfcHRlKTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuOF9pbml0aWFsaXpl X3BtbDQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJCQkJIHN0cnVjdCBpOTE1X3Bt bDQgKnBtbDQpCiB7Ci0JZmlsbF9weCh2bSwgcG1sNCwKLQkJZ2VuOF9wbWw0ZV9lbmNvZGUocHhf ZG1hKHZtLT5zY3JhdGNoX3BkcCksIEk5MTVfQ0FDSEVfTExDKSk7Ci0JbWVtc2V0X3AoKHZvaWQg KiopcG1sNC0+cGRwcywgdm0tPnNjcmF0Y2hfcGRwLCBHRU44X1BNTDRFU19QRVJfUE1MNCk7CisJ ZmlsbF9weCh2bSwgcG1sNCwgdm0tPnNjcmF0Y2hfcHRlKTsKIH0KIAogLyogUERFIFRMQnMgYXJl IGEgcGFpbiB0byBpbnZhbGlkYXRlIG9uIEdFTjgrLiBXaGVuIHdlIG1vZGlmeQpAQCAtODI1LDE3 ICs4MTUsMTYgQEAgc3RhdGljIGJvb2wgZ2VuOF9wcGd0dF9jbGVhcl9wdChjb25zdCBzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lk IGdlbjhfcHBndHRfc2V0X3BkZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKLQkJCSAg ICAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQsCi0JCQkgICAgICAgc3RydWN0IGk5 MTVfcGFnZV90YWJsZSAqcHQsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IHBkZSkKK3N0YXRpYyB2 b2lkIGdlbjhfcHBndHRfY2xlYXJfcGRlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAor CQkJCSBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQsCisJCQkJIHVuc2lnbmVkIGludCBw ZGUpCiB7CiAJZ2VuOF9wZGVfdCAqdmFkZHI7CiAKLQlwZC0+cGFnZV90YWJsZVtwZGVdID0gcHQ7 CisJcGQtPnBhZ2VfdGFibGVbcGRlXSA9IE5VTEw7CiAKIAl2YWRkciA9IGttYXBfYXRvbWljX3B4 KHBkKTsKLQl2YWRkcltwZGVdID0gZ2VuOF9wZGVfZW5jb2RlKHB4X2RtYShwdCksIEk5MTVfQ0FD SEVfTExDKTsKKwl2YWRkcltwZGVdID0gdm0tPnNjcmF0Y2hfcHRlOwogCWt1bm1hcF9hdG9taWMo dmFkZHIpOwogfQogCkBAIC04NDcsMzcgKzgzNiwzNCBAQCBzdGF0aWMgYm9vbCBnZW44X3BwZ3R0 X2NsZWFyX3BkKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCXUzMiBwZGU7CiAKIAln ZW44X2Zvcl9lYWNoX3BkZShwdCwgcGQsIHN0YXJ0LCBsZW5ndGgsIHBkZSkgewotCQlHRU1fQlVH X09OKHB0ID09IHZtLT5zY3JhdGNoX3B0KTsKLQogCQlpZiAoIWdlbjhfcHBndHRfY2xlYXJfcHQo dm0sIHB0LCBzdGFydCwgbGVuZ3RoKSkKIAkJCWNvbnRpbnVlOwogCi0JCWdlbjhfcHBndHRfc2V0 X3BkZSh2bSwgcGQsIHZtLT5zY3JhdGNoX3B0LCBwZGUpOworCQlnZW44X3BwZ3R0X2NsZWFyX3Bk ZSh2bSwgcGQsIHBkZSk7CiAJCUdFTV9CVUdfT04oIXBkLT51c2VkX3BkZXMpOwogCQlwZC0+dXNl ZF9wZGVzLS07Ci0KIAkJZnJlZV9wdCh2bSwgcHQpOwogCX0KIAogCXJldHVybiAhcGQtPnVzZWRf cGRlczsKIH0KIAotc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9zZXRfcGRwZShzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bSwKLQkJCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVy ICpwZHAsCi0JCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkLAotCQkJCXVuc2lnbmVk IGludCBwZHBlKQorc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhcl9wZHBlKHN0cnVjdCBpOTE1 X2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJCSAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9p bnRlciAqcGRwLAorCQkJCSAgdW5zaWduZWQgaW50IHBkcGUpCiB7CiAJZ2VuOF9wcGd0dF9wZHBl X3QgKnZhZGRyOwogCi0JcGRwLT5wYWdlX2RpcmVjdG9yeVtwZHBlXSA9IHBkOworCXBkcC0+cGFn ZV9kaXJlY3RvcnlbcGRwZV0gPSBOVUxMOwogCWlmICghdXNlXzRsdmwodm0pKQogCQlyZXR1cm47 CiAKIAl2YWRkciA9IGttYXBfYXRvbWljX3B4KHBkcCk7Ci0JdmFkZHJbcGRwZV0gPSBnZW44X3Bk cGVfZW5jb2RlKHB4X2RtYShwZCksIEk5MTVfQ0FDSEVfTExDKTsKKwl2YWRkcltwZHBlXSA9IHZt LT5zY3JhdGNoX3B0ZTsKIAlrdW5tYXBfYXRvbWljKHZhZGRyKTsKIH0KIAorCiAvKiBSZW1vdmVz IGVudHJpZXMgZnJvbSBhIHNpbmdsZSBwYWdlIGRpciBwb2ludGVyLCByZWxlYXNpbmcgaXQgaWYg aXQncyBlbXB0eS4KICAqIENhbGxlciBjYW4gdXNlIHRoZSByZXR1cm4gdmFsdWUgdG8gdXBkYXRl IGhpZ2hlci1sZXZlbCBlbnRyaWVzCiAgKi8KQEAgLTg4OSwxNSArODc1LDEyIEBAIHN0YXRpYyBi b29sIGdlbjhfcHBndHRfY2xlYXJfcGRwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAog CXVuc2lnbmVkIGludCBwZHBlOwogCiAJZ2VuOF9mb3JfZWFjaF9wZHBlKHBkLCBwZHAsIHN0YXJ0 LCBsZW5ndGgsIHBkcGUpIHsKLQkJR0VNX0JVR19PTihwZCA9PSB2bS0+c2NyYXRjaF9wZCk7Ci0K IAkJaWYgKCFnZW44X3BwZ3R0X2NsZWFyX3BkKHZtLCBwZCwgc3RhcnQsIGxlbmd0aCkpCiAJCQlj b250aW51ZTsKIAotCQlnZW44X3BwZ3R0X3NldF9wZHBlKHZtLCBwZHAsIHZtLT5zY3JhdGNoX3Bk LCBwZHBlKTsKKwkJZ2VuOF9wcGd0dF9jbGVhcl9wZHBlKHZtLCBwZHAsIHBkcGUpOwogCQlHRU1f QlVHX09OKCFwZHAtPnVzZWRfcGRwZXMpOwogCQlwZHAtPnVzZWRfcGRwZXMtLTsKLQogCQlmcmVl X3BkKHZtLCBwZCk7CiAJfQogCkBAIC05MTAsMTYgKzg5MywxNiBAQCBzdGF0aWMgdm9pZCBnZW44 X3BwZ3R0X2NsZWFyXzNsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJZ2VuOF9w cGd0dF9jbGVhcl9wZHAodm0sICZpOTE1X3ZtX3RvX3BwZ3R0KHZtKS0+cGRwLCBzdGFydCwgbGVu Z3RoKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9zZXRfcG1sNGUoc3RydWN0IGk5MTVf cG1sNCAqcG1sNCwKLQkJCQkgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRw LAotCQkJCSB1bnNpZ25lZCBpbnQgcG1sNGUpCitzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFy X3BtNGxlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJCSAgIHN0cnVjdCBpOTE1 X3BtbDQgKnBtbDQsCisJCQkJICAgdW5zaWduZWQgaW50IHBtbDRlKQogewogCWdlbjhfcHBndHRf cG1sNGVfdCAqdmFkZHI7CiAKLQlwbWw0LT5wZHBzW3BtbDRlXSA9IHBkcDsKKwlwbWw0LT5wZHBz W3BtbDRlXSA9IE5VTEw7CiAKIAl2YWRkciA9IGttYXBfYXRvbWljX3B4KHBtbDQpOwotCXZhZGRy W3BtbDRlXSA9IGdlbjhfcG1sNGVfZW5jb2RlKHB4X2RtYShwZHApLCBJOTE1X0NBQ0hFX0xMQyk7 CisJdmFkZHJbcG1sNGVdID0gdm0tPnNjcmF0Y2hfcHRlOwogCWt1bm1hcF9hdG9taWModmFkZHIp OwogfQogCkBAIC05MzgsMTMgKzkyMSwxMCBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFy XzRsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJR0VNX0JVR19PTighdXNlXzRs dmwodm0pKTsKIAogCWdlbjhfZm9yX2VhY2hfcG1sNGUocGRwLCBwbWw0LCBzdGFydCwgbGVuZ3Ro LCBwbWw0ZSkgewotCQlHRU1fQlVHX09OKHBkcCA9PSB2bS0+c2NyYXRjaF9wZHApOwotCiAJCWlm ICghZ2VuOF9wcGd0dF9jbGVhcl9wZHAodm0sIHBkcCwgc3RhcnQsIGxlbmd0aCkpCiAJCQljb250 aW51ZTsKIAotCQlnZW44X3BwZ3R0X3NldF9wbWw0ZShwbWw0LCB2bS0+c2NyYXRjaF9wZHAsIHBt bDRlKTsKLQorCQlnZW44X3BwZ3R0X2NsZWFyX3BtNGxlKHZtLCBwbWw0LCBwbWw0ZSk7CiAJCWZy ZWVfcGRwKHZtLCBwZHApOwogCX0KIH0KQEAgLTExOTYsOCArMTE3NiwxMCBAQCBzdGF0aWMgdm9p ZCBnZW44X2ZyZWVfcGFnZV90YWJsZXMoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJ aW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSTkxNV9QREVTOyBpKyspIHsKLQkJaWYgKHBkLT5w YWdlX3RhYmxlW2ldICE9IHZtLT5zY3JhdGNoX3B0KQotCQkJZnJlZV9wdCh2bSwgcGQtPnBhZ2Vf dGFibGVbaV0pOworCQlpZiAoIXBkLT5wYWdlX3RhYmxlW2ldKQorCQkJY29udGludWU7CisKKwkJ ZnJlZV9wdCh2bSwgcGQtPnBhZ2VfdGFibGVbaV0pOwogCX0KIH0KIApAQCAtMTIxOSw5ICsxMjAx LDYgQEAgc3RhdGljIGludCBnZW44X2luaXRfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSkKIAogCQl2bS0+c2NyYXRjaF9vcmRlciA9IGNsb25lLT5zY3JhdGNoX29yZGVyOwog CQl2bS0+c2NyYXRjaF9wdGUgPSBjbG9uZS0+c2NyYXRjaF9wdGU7Ci0JCXZtLT5zY3JhdGNoX3B0 ICA9IGNsb25lLT5zY3JhdGNoX3B0OwotCQl2bS0+c2NyYXRjaF9wZCAgPSBjbG9uZS0+c2NyYXRj aF9wZDsKLQkJdm0tPnNjcmF0Y2hfcGRwID0gY2xvbmUtPnNjcmF0Y2hfcGRwOwogCQlyZXR1cm4g MDsKIAl9CiAKQEAgLTEyMzMsNDIgKzEyMTIsOSBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9zY3Jh dGNoKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQogCQlnZW44X3B0ZV9lbmNvZGUodm0t PnNjcmF0Y2hfcGFnZS5kYWRkciwKIAkJCQlJOTE1X0NBQ0hFX0xMQywKIAkJCQlQVEVfUkVBRF9P TkxZKTsKLQotCXZtLT5zY3JhdGNoX3B0ID0gYWxsb2NfcHQodm0pOwotCWlmIChJU19FUlIodm0t PnNjcmF0Y2hfcHQpKSB7Ci0JCXJldCA9IFBUUl9FUlIodm0tPnNjcmF0Y2hfcHQpOwotCQlnb3Rv IGZyZWVfc2NyYXRjaF9wYWdlOwotCX0KLQotCXZtLT5zY3JhdGNoX3BkID0gYWxsb2NfcGQodm0p OwotCWlmIChJU19FUlIodm0tPnNjcmF0Y2hfcGQpKSB7Ci0JCXJldCA9IFBUUl9FUlIodm0tPnNj cmF0Y2hfcGQpOwotCQlnb3RvIGZyZWVfcHQ7Ci0JfQotCi0JaWYgKHVzZV80bHZsKHZtKSkgewot CQl2bS0+c2NyYXRjaF9wZHAgPSBhbGxvY19wZHAodm0pOwotCQlpZiAoSVNfRVJSKHZtLT5zY3Jh dGNoX3BkcCkpIHsKLQkJCXJldCA9IFBUUl9FUlIodm0tPnNjcmF0Y2hfcGRwKTsKLQkJCWdvdG8g ZnJlZV9wZDsKLQkJfQotCX0KLQotCWdlbjhfaW5pdGlhbGl6ZV9wdCh2bSwgdm0tPnNjcmF0Y2hf cHQpOwotCWdlbjhfaW5pdGlhbGl6ZV9wZCh2bSwgdm0tPnNjcmF0Y2hfcGQpOwotCWlmICh1c2Vf NGx2bCh2bSkpCi0JCWdlbjhfaW5pdGlhbGl6ZV9wZHAodm0sIHZtLT5zY3JhdGNoX3BkcCk7CisJ ZmlsbF9wYWdlX2RtYSgodm0pLCAmdm0tPnNjcmF0Y2hfcGFnZSwgdm0tPnNjcmF0Y2hfcHRlKTsK IAogCXJldHVybiAwOwotCi1mcmVlX3BkOgotCWZyZWVfcGQodm0sIHZtLT5zY3JhdGNoX3BkKTsK LWZyZWVfcHQ6Ci0JZnJlZV9wdCh2bSwgdm0tPnNjcmF0Y2hfcHQpOwotZnJlZV9zY3JhdGNoX3Bh Z2U6Ci0JY2xlYW51cF9zY3JhdGNoX3BhZ2Uodm0pOwotCi0JcmV0dXJuIHJldDsKIH0KIAogc3Rh dGljIGludCBnZW44X3BwZ3R0X25vdGlmeV92Z3Qoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0 LCBib29sIGNyZWF0ZSkKQEAgLTEzMDgsMTAgKzEyNTQsNiBAQCBzdGF0aWMgdm9pZCBnZW44X2Zy ZWVfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKIAlpZiAoIXZtLT5zY3Jh dGNoX3BhZ2UuZGFkZHIpCiAJCXJldHVybjsKIAotCWlmICh1c2VfNGx2bCh2bSkpCi0JCWZyZWVf cGRwKHZtLCB2bS0+c2NyYXRjaF9wZHApOwotCWZyZWVfcGQodm0sIHZtLT5zY3JhdGNoX3BkKTsK LQlmcmVlX3B0KHZtLCB2bS0+c2NyYXRjaF9wdCk7CiAJY2xlYW51cF9zY3JhdGNoX3BhZ2Uodm0p OwogfQogCkBAIC0xMzIyLDcgKzEyNjQsNyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFu dXBfM2x2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAlpbnQgaTsKIAogCWZvciAo aSA9IDA7IGkgPCBwZHBlczsgaSsrKSB7Ci0JCWlmIChwZHAtPnBhZ2VfZGlyZWN0b3J5W2ldID09 IHZtLT5zY3JhdGNoX3BkKQorCQlpZiAoIXBkcC0+cGFnZV9kaXJlY3RvcnlbaV0pCiAJCQljb250 aW51ZTsKIAogCQlnZW44X2ZyZWVfcGFnZV90YWJsZXModm0sIHBkcC0+cGFnZV9kaXJlY3Rvcnlb aV0pOwpAQCAtMTMzNyw3ICsxMjc5LDcgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhbnVw XzRsdmwoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQogCWludCBpOwogCiAJZm9yIChpID0g MDsgaSA8IEdFTjhfUE1MNEVTX1BFUl9QTUw0OyBpKyspIHsKLQkJaWYgKHBwZ3R0LT5wbWw0LnBk cHNbaV0gPT0gcHBndHQtPnZtLnNjcmF0Y2hfcGRwKQorCQlpZiAoIXBwZ3R0LT5wbWw0LnBkcHNb aV0pCiAJCQljb250aW51ZTsKIAogCQlnZW44X3BwZ3R0X2NsZWFudXBfM2x2bCgmcHBndHQtPnZt LCBwcGd0dC0+cG1sNC5wZHBzW2ldKTsKQEAgLTEzNjIsNiArMTMwNCw0OSBAQCBzdGF0aWMgdm9p ZCBnZW44X3BwZ3R0X2NsZWFudXAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCiAJZ2Vu OF9mcmVlX3NjcmF0Y2godm0pOwogfQogCitzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X3NldF9wZGUo c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCisJCQkgICAgICAgc3RydWN0IGk5MTVfcGFn ZV9kaXJlY3RvcnkgKnBkLAorCQkJICAgICAgIHN0cnVjdCBpOTE1X3BhZ2VfdGFibGUgKnB0LAor CQkJICAgICAgIHVuc2lnbmVkIGludCBwZGUpCit7CisJZ2VuOF9wZGVfdCAqdmFkZHI7CisKKwlw ZC0+cGFnZV90YWJsZVtwZGVdID0gcHQ7CisKKwl2YWRkciA9IGttYXBfYXRvbWljX3B4KHBkKTsK Kwl2YWRkcltwZGVdID0gZ2VuOF9wZGVfZW5jb2RlKHB4X2RtYShwdCksIEk5MTVfQ0FDSEVfTExD KTsKKwlrdW5tYXBfYXRvbWljKHZhZGRyKTsKK30KKworc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9z ZXRfcGRwZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKKwkJCQlzdHJ1Y3QgaTkxNV9w YWdlX2RpcmVjdG9yeV9wb2ludGVyICpwZHAsCisJCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rv cnkgKnBkLAorCQkJCXVuc2lnbmVkIGludCBwZHBlKQoreworCWdlbjhfcHBndHRfcGRwZV90ICp2 YWRkcjsKKworCXBkcC0+cGFnZV9kaXJlY3RvcnlbcGRwZV0gPSBwZDsKKwlpZiAoIXVzZV80bHZs KHZtKSkKKwkJcmV0dXJuOworCisJdmFkZHIgPSBrbWFwX2F0b21pY19weChwZHApOworCXZhZGRy W3BkcGVdID0gZ2VuOF9wZHBlX2VuY29kZShweF9kbWEocGQpLCBJOTE1X0NBQ0hFX0xMQyk7CisJ a3VubWFwX2F0b21pYyh2YWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjhfcHBndHRfc2V0X3Bt bDRlKHN0cnVjdCBpOTE1X3BtbDQgKnBtbDQsCisJCQkJIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0 b3J5X3BvaW50ZXIgKnBkcCwKKwkJCQkgdW5zaWduZWQgaW50IHBtbDRlKQoreworCWdlbjhfcHBn dHRfcG1sNGVfdCAqdmFkZHI7CisKKwlwbWw0LT5wZHBzW3BtbDRlXSA9IHBkcDsKKworCXZhZGRy ID0ga21hcF9hdG9taWNfcHgocG1sNCk7CisJdmFkZHJbcG1sNGVdID0gZ2VuOF9wbWw0ZV9lbmNv ZGUocHhfZG1hKHBkcCksIEk5MTVfQ0FDSEVfTExDKTsKKwlrdW5tYXBfYXRvbWljKHZhZGRyKTsK K30KKwogc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jX3BkKHN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtLAogCQkJICAgICAgIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZCwKIAkJ CSAgICAgICB1NjQgc3RhcnQsIHU2NCBsZW5ndGgpCkBAIC0xMzczLDcgKzEzNTgsNyBAQCBzdGF0 aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfcGQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0s CiAJZ2VuOF9mb3JfZWFjaF9wZGUocHQsIHBkLCBzdGFydCwgbGVuZ3RoLCBwZGUpIHsKIAkJaW50 IGNvdW50ID0gZ2VuOF9wdGVfY291bnQoc3RhcnQsIGxlbmd0aCk7CiAKLQkJaWYgKHB0ID09IHZt LT5zY3JhdGNoX3B0KSB7CisJCWlmICghcHQpIHsKIAkJCXBkLT51c2VkX3BkZXMrKzsKIAogCQkJ cHQgPSBhbGxvY19wdCh2bSk7CkBAIC0xNDA4LDcgKzEzOTMsNyBAQCBzdGF0aWMgaW50IGdlbjhf cHBndHRfYWxsb2NfcGRwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCWludCByZXQ7 CiAKIAlnZW44X2Zvcl9lYWNoX3BkcGUocGQsIHBkcCwgc3RhcnQsIGxlbmd0aCwgcGRwZSkgewot CQlpZiAocGQgPT0gdm0tPnNjcmF0Y2hfcGQpIHsKKwkJaWYgKCFwZCkgewogCQkJcGRwLT51c2Vk X3BkcGVzKys7CiAKIAkJCXBkID0gYWxsb2NfcGQodm0pOwpAQCAtMTQzMSw3ICsxNDE2LDcgQEAg c3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSwKIAogdW53aW5kX3BkOgogCWlmICghcGQtPnVzZWRfcGRlcykgewotCQlnZW44X3BwZ3R0 X3NldF9wZHBlKHZtLCBwZHAsIHZtLT5zY3JhdGNoX3BkLCBwZHBlKTsKKwkJZ2VuOF9wcGd0dF9j bGVhcl9wZHBlKHZtLCBwZHAsIHBkcGUpOwogCQlHRU1fQlVHX09OKCFwZHAtPnVzZWRfcGRwZXMp OwogCQlwZHAtPnVzZWRfcGRwZXMtLTsKIAkJZnJlZV9wZCh2bSwgcGQpOwpAQCAtMTQ1OSw3ICsx NDQ0LDcgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jXzRsdmwoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sCiAJaW50IHJldDsKIAogCWdlbjhfZm9yX2VhY2hfcG1sNGUocGRwLCBw bWw0LCBzdGFydCwgbGVuZ3RoLCBwbWw0ZSkgewotCQlpZiAocG1sNC0+cGRwc1twbWw0ZV0gPT0g dm0tPnNjcmF0Y2hfcGRwKSB7CisJCWlmICghcGRwKSB7CiAJCQlwZHAgPSBhbGxvY19wZHAodm0p OwogCQkJaWYgKElTX0VSUihwZHApKQogCQkJCWdvdG8gdW53aW5kOwpAQCAtMTQ3Nyw3ICsxNDYy LDcgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jXzRsdmwoc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0sCiAKIHVud2luZF9wZHA6CiAJaWYgKCFwZHAtPnVzZWRfcGRwZXMpIHsKLQkJ Z2VuOF9wcGd0dF9zZXRfcG1sNGUocG1sNCwgdm0tPnNjcmF0Y2hfcGRwLCBwbWw0ZSk7CisJCWdl bjhfcHBndHRfY2xlYXJfcG00bGUodm0sIHBtbDQsIHBtbDRlKTsKIAkJZnJlZV9wZHAodm0sIHBk cCk7CiAJfQogdW53aW5kOgpAQCAtMTUxMCw3ICsxNDk1LDcgQEAgc3RhdGljIGludCBnZW44X3By ZWFsbG9jYXRlX3RvcF9sZXZlbF9wZHAoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQogdW53 aW5kOgogCXN0YXJ0IC09IGZyb207CiAJZ2VuOF9mb3JfZWFjaF9wZHBlKHBkLCBwZHAsIGZyb20s IHN0YXJ0LCBwZHBlKSB7Ci0JCWdlbjhfcHBndHRfc2V0X3BkcGUodm0sIHBkcCwgdm0tPnNjcmF0 Y2hfcGQsIHBkcGUpOworCQlnZW44X3BwZ3R0X2NsZWFyX3BkcGUodm0sIHBkcCwgcGRwZSk7CiAJ CWZyZWVfcGQodm0sIHBkKTsKIAl9CiAJcGRwLT51c2VkX3BkcGVzID0gMDsKQEAgLTE2NzMsOCAr MTY1OCw2IEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfY2xlYXJfcmFuZ2Uoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCiAJCWNvbnN0IHVuc2lnbmVkIGludCBjb3VudCA9IG1pbihudW1f ZW50cmllcywgR0VONl9QVEVTIC0gcHRlKTsKIAkJZ2VuNl9wdGVfdCAqdmFkZHI7CiAKLQkJR0VN X0JVR19PTihwdCA9PSB2bS0+c2NyYXRjaF9wdCk7Ci0KIAkJbnVtX2VudHJpZXMgLT0gY291bnQ7 CiAKIAkJR0VNX0JVR19PTihjb3VudCA+IHB0LT51c2VkX3B0ZXMpOwpAQCAtMTcxMCw4ICsxNjkz LDYgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9pbnNlcnRfZW50cmllcyhzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bSwKIAlzdHJ1Y3Qgc2d0X2RtYSBpdGVyID0gc2d0X2RtYSh2bWEpOwog CWdlbjZfcHRlX3QgKnZhZGRyOwogCi0JR0VNX0JVR19PTihwcGd0dC0+cGQucGFnZV90YWJsZVth Y3RfcHRdID09IHZtLT5zY3JhdGNoX3B0KTsKLQogCXZhZGRyID0ga21hcF9hdG9taWNfcHgocHBn dHQtPnBkLnBhZ2VfdGFibGVbYWN0X3B0XSk7CiAJZG8gewogCQl2YWRkclthY3RfcHRlXSA9IHB0 ZV9lbmNvZGUgfCBHRU42X1BURV9BRERSX0VOQ09ERShpdGVyLmRtYSk7CkBAIC0xNzQ5LDcgKzE3 MzAsNyBAQCBzdGF0aWMgaW50IGdlbjZfYWxsb2NfdmFfcmFuZ2Uoc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0sCiAJZ2VuNl9mb3JfZWFjaF9wZGUocHQsICZwcGd0dC0+YmFzZS5wZCwgc3Rh cnQsIGxlbmd0aCwgcGRlKSB7CiAJCWNvbnN0IHVuc2lnbmVkIGludCBjb3VudCA9IGdlbjZfcHRl X2NvdW50KHN0YXJ0LCBsZW5ndGgpOwogCi0JCWlmIChwdCA9PSB2bS0+c2NyYXRjaF9wdCkgewor CQlpZiAoIXB0KSB7CiAJCQlwdCA9IGFsbG9jX3B0KHZtKTsKIAkJCWlmIChJU19FUlIocHQpKQog CQkJCWdvdG8gdW53aW5kX291dDsKQEAgLTE3ODQsOCArMTc2NSw2IEBAIHN0YXRpYyBpbnQgZ2Vu Nl9hbGxvY192YV9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIHN0YXRpYyBp bnQgZ2VuNl9wcGd0dF9pbml0X3NjcmF0Y2goc3RydWN0IGdlbjZfaHdfcHBndHQgKnBwZ3R0KQog ewogCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKiBjb25zdCB2bSA9ICZwcGd0dC0+YmFzZS52 bTsKLQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICp1bnVzZWQ7Ci0JdTMyIHBkZTsKIAlpbnQgcmV0 OwogCiAJcmV0ID0gc2V0dXBfc2NyYXRjaF9wYWdlKHZtLCBfX0dGUF9ISUdITUVNKTsKQEAgLTE3 OTUsMjMgKzE3NzQsMTMgQEAgc3RhdGljIGludCBnZW42X3BwZ3R0X2luaXRfc2NyYXRjaChzdHJ1 Y3QgZ2VuNl9od19wcGd0dCAqcHBndHQpCiAJdm0tPnNjcmF0Y2hfcHRlID0gdm0tPnB0ZV9lbmNv ZGUodm0tPnNjcmF0Y2hfcGFnZS5kYWRkciwKIAkJCQkJIEk5MTVfQ0FDSEVfTk9ORSwKIAkJCQkJ IFBURV9SRUFEX09OTFkpOwotCi0Jdm0tPnNjcmF0Y2hfcHQgPSBhbGxvY19wdCh2bSk7Ci0JaWYg KElTX0VSUih2bS0+c2NyYXRjaF9wdCkpIHsKLQkJY2xlYW51cF9zY3JhdGNoX3BhZ2Uodm0pOwot CQlyZXR1cm4gUFRSX0VSUih2bS0+c2NyYXRjaF9wdCk7Ci0JfQotCi0JZ2VuNl9pbml0aWFsaXpl X3B0KHZtLCB2bS0+c2NyYXRjaF9wdCk7Ci0JZ2VuNl9mb3JfYWxsX3BkZXModW51c2VkLCAmcHBn dHQtPmJhc2UucGQsIHBkZSkKLQkJcHBndHQtPmJhc2UucGQucGFnZV90YWJsZVtwZGVdID0gdm0t PnNjcmF0Y2hfcHQ7CisJZmlsbF9wYWdlX2RtYV8zMih2bSwgJnZtLT5zY3JhdGNoX3BhZ2UsIHZt LT5zY3JhdGNoX3B0ZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZ2VuNl9wcGd0 dF9mcmVlX3NjcmF0Y2goc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCiB7Ci0JZnJlZV9w dCh2bSwgdm0tPnNjcmF0Y2hfcHQpOwogCWNsZWFudXBfc2NyYXRjaF9wYWdlKHZtKTsKIH0KIApA QCAtMTgyMSw3ICsxNzkwLDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9mcmVlX3BkKHN0cnVj dCBnZW42X2h3X3BwZ3R0ICpwcGd0dCkKIAl1MzIgcGRlOwogCiAJZ2VuNl9mb3JfYWxsX3BkZXMo cHQsICZwcGd0dC0+YmFzZS5wZCwgcGRlKQotCQlpZiAocHQgIT0gcHBndHQtPmJhc2Uudm0uc2Ny YXRjaF9wdCkKKwkJaWYgKHB0KQogCQkJZnJlZV9wdCgmcHBndHQtPmJhc2Uudm0sIHB0KTsKIH0K IApAQCAtMTg3Myw3ICsxODQyLDYgQEAgc3RhdGljIGludCBwZF92bWFfYmluZChzdHJ1Y3QgaTkx NV92bWEgKnZtYSwKIHN0YXRpYyB2b2lkIHBkX3ZtYV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2 bWEpCiB7CiAJc3RydWN0IGdlbjZfaHdfcHBndHQgKnBwZ3R0ID0gdm1hLT5wcml2YXRlOwotCXN0 cnVjdCBpOTE1X3BhZ2VfdGFibGUgKiBjb25zdCBzY3JhdGNoX3B0ID0gcHBndHQtPmJhc2Uudm0u c2NyYXRjaF9wdDsKIAlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICpwdDsKIAl1bnNpZ25lZCBpbnQg cGRlOwogCkBAIC0xODgyLDExICsxODUwLDExIEBAIHN0YXRpYyB2b2lkIHBkX3ZtYV91bmJpbmQo c3RydWN0IGk5MTVfdm1hICp2bWEpCiAKIAkvKiBGcmVlIGFsbCBubyBsb25nZXIgdXNlZCBwYWdl IHRhYmxlcyAqLwogCWdlbjZfZm9yX2FsbF9wZGVzKHB0LCAmcHBndHQtPmJhc2UucGQsIHBkZSkg ewotCQlpZiAocHQtPnVzZWRfcHRlcyB8fCBwdCA9PSBzY3JhdGNoX3B0KQorCQlpZiAoIXB0IHx8 IHB0LT51c2VkX3B0ZXMpCiAJCQljb250aW51ZTsKIAogCQlmcmVlX3B0KCZwcGd0dC0+YmFzZS52 bSwgcHQpOwotCQlwcGd0dC0+YmFzZS5wZC5wYWdlX3RhYmxlW3BkZV0gPSBzY3JhdGNoX3B0Owor CQlwcGd0dC0+YmFzZS5wZC5wYWdlX3RhYmxlW3BkZV0gPSBOVUxMOwogCX0KIAogCXBwZ3R0LT5z Y2FuX2Zvcl91bnVzZWRfcHQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgK aW5kZXggODYwNjVkNzViM2FjLi5jMzA1NjVmMjViM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2d0dC5oCkBAIC0yOTQsOSArMjk0LDYgQEAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSB7 CiAJdTY0IHNjcmF0Y2hfcHRlOwogCWludCBzY3JhdGNoX29yZGVyOwogCXN0cnVjdCBpOTE1X3Bh Z2VfZG1hIHNjcmF0Y2hfcGFnZTsKLQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICpzY3JhdGNoX3B0 OwotCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpzY3JhdGNoX3BkOwotCXN0cnVjdCBpOTE1 X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnNjcmF0Y2hfcGRwOyAvKiBHRU44KyAmIDQ4YiBQUEdU VCAqLwogCiAJLyoqCiAJICogTGlzdCBvZiB2bWEgY3VycmVudGx5IGJvdW5kLgotLSAKMi4yMC4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=