From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: [PATCH 02/10] drm/i915/gtt: Use a common type for page directories Date: Fri, 14 Jun 2019 19:43:42 +0300 Message-ID: <20190614164350.30415-2-mika.kuoppala@linux.intel.com> References: <20190614164350.30415-1-mika.kuoppala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0B7D189AF3 for ; Fri, 14 Jun 2019 16:43:55 +0000 (UTC) In-Reply-To: <20190614164350.30415-1-mika.kuoppala@linux.intel.com> 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 QWxsIHBhZ2UgZGlyZWN0b3JpZXMgYXJlIGlkZW50aWNhbCBpbiBmdW5jdGlvbiwgb25seSB0aGUg cG9zaXRpb24gaW4gdGhlCmhpZXJhcmNoeSBkaWZmZXIuIFVzZSBzYW1lIGJhc2UgdHlwZSBmb3Ig ZGlyZWN0b3J5IGZ1bmN0aW9uYWxpdHkuCgp2MjogY2xlYW51cCwgc2l6ZSBhbHdheXMgNTEyLCBp bml0IHRvIG51bGwKCkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K Q2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KQ2M6 IE1hdHRoZXcgQXVsZCA8bWF0dGhldy53aWxsaWFtLmF1bGRAZ21haWwuY29tPgpDYzogQWJkaWVs IEphbnVsZ3VlIDxhYmRpZWwuamFudWxndWVAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5 OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jIHwgICAyICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmNfcmVnLmggICAgIHwgICAyICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMgIHwgICAyICstCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMgICAgICAgIHwgIDMwICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ndHQuYyAgICAgICAgIHwgMzUxICsrKysrKysrKystLS0tLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCAgICAgICAgIHwgIDY0ICsrLS0KIDYg ZmlsZXMgY2hhbmdlZCwgMjM2IGluc2VydGlvbnMoKyksIDIxNSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYwppbmRleCBjODZjYTlmMjE1 MzIuLmRiYWIwYWIxY2VmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX2NvbnRleHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f Y29udGV4dC5jCkBAIC0xMDM4LDcgKzEwMzgsNyBAQCBzdGF0aWMgaW50IGVtaXRfcHBndHRfdXBk YXRlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB2b2lkICpkYXRhKQogCiAJaWYgKGk5MTVfdm1f aXNfNGx2bCh2bSkpIHsKIAkJc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0ID0gaTkxNV92bV90b19w cGd0dCh2bSk7Ci0JCWNvbnN0IGRtYV9hZGRyX3QgcGRfZGFkZHIgPSBweF9kbWEoJnBwZ3R0LT5w bWw0KTsKKwkJY29uc3QgZG1hX2FkZHJfdCBwZF9kYWRkciA9IHB4X2RtYShwcGd0dC0+cGQpOwog CiAJCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNik7CiAJCWlmIChJU19FUlIoY3MpKQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oCmluZGV4IDVlZjkzMmQ4MTBhNy4uNmJm MzQ3MzhiNGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmNf cmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oCkBAIC01 NSw3ICs1NSw3IEBACiAKICNkZWZpbmUgQVNTSUdOX0NUWF9QTUw0KHBwZ3R0LCByZWdfc3RhdGUp IGRvIHsgXAogCXUzMiAqcmVnX3N0YXRlX18gPSAocmVnX3N0YXRlKTsgXAotCWNvbnN0IHU2NCBh ZGRyX18gPSBweF9kbWEoJnBwZ3R0LT5wbWw0KTsgXAorCWNvbnN0IHU2NCBhZGRyX18gPSBweF9k bWEocHBndHQtPnBkKTsgXAogCShyZWdfc3RhdGVfXylbQ1RYX1BEUDBfVURXICsgMV0gPSB1cHBl cl8zMl9iaXRzKGFkZHJfXyk7IFwKIAkocmVnX3N0YXRlX18pW0NUWF9QRFAwX0xEVyArIDFdID0g bG93ZXJfMzJfYml0cyhhZGRyX18pOyBcCiB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcmluZ2J1ZmZlci5jCmluZGV4IGIzYmY0N2U4MTYyZi4uZWNkNGUyMDA4ZWYz IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nYnVmZmVyLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ2J1ZmZlci5jCkBAIC0xNTIz LDcgKzE1MjMsNyBAQCBzdGF0aWMgaW50IGxvYWRfcGRfZGlyKHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJxLCBjb25zdCBzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQpCiAKIAkqY3MrKyA9IE1JX0xPQURf UkVHSVNURVJfSU1NKDEpOwogCSpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19QUF9E SVJfQkFTRShlbmdpbmUtPm1taW9fYmFzZSkpOwotCSpjcysrID0gcHBndHQtPnBkLmJhc2UuZ2d0 dF9vZmZzZXQgPDwgMTA7CisJKmNzKysgPSBwcGd0dC0+cGQtPmJhc2UuZ2d0dF9vZmZzZXQgPDwg MTA7CiAKIAlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L3NjaGVkdWxlci5jCmluZGV4IDkwMjlkZTRiNDY1MS4uMjE0NGZiNDZkMGUxIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5jCkBAIC0zNzUsMTEgKzM3NSwxMyBAQCBzdGF0aWMgaW50 IHNldF9jb250ZXh0X3BwZ3R0X2Zyb21fc2hhZG93KHN0cnVjdCBpbnRlbF92Z3B1X3dvcmtsb2Fk ICp3b3JrbG9hZCwKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobW0tPnBwZ3R0X21tLnJvb3Rf ZW50cnlfdHlwZSA9PSBHVFRfVFlQRV9QUEdUVF9ST09UX0w0X0VOVFJZKSB7Ci0JCXB4X2RtYSgm cHBndHQtPnBtbDQpID0gbW0tPnBwZ3R0X21tLnNoYWRvd19wZHBzWzBdOworCQlweF9kbWEocHBn dHQtPnBkKSA9IG1tLT5wcGd0dF9tbS5zaGFkb3dfcGRwc1swXTsKIAl9IGVsc2UgewogCQlmb3Ig KGkgPSAwOyBpIDwgR1ZUX1JJTkdfQ1RYX05SX1BEUFM7IGkrKykgewotCQkJcHhfZG1hKHBwZ3R0 LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0pID0KLQkJCQltbS0+cHBndHRfbW0uc2hhZG93X3BkcHNb aV07CisJCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBkID0KKwkJCQlpOTE1 X3BkX2VudHJ5KHBwZ3R0LT5wZCwgaSk7CisKKwkJCXB4X2RtYShwZCkgPSBtbS0+cHBndHRfbW0u c2hhZG93X3BkcHNbaV07CiAJCX0KIAl9CiAKQEAgLTExMjgsMTEgKzExMzAsMTQgQEAgaTkxNV9j b250ZXh0X3BwZ3R0X3Jvb3RfcmVzdG9yZShzdHJ1Y3QgaW50ZWxfdmdwdV9zdWJtaXNzaW9uICpz LAogCWludCBpOwogCiAJaWYgKGk5MTVfdm1faXNfNGx2bCgmcHBndHQtPnZtKSkgewotCQlweF9k bWEoJnBwZ3R0LT5wbWw0KSA9IHMtPmk5MTVfY29udGV4dF9wbWw0OworCQlweF9kbWEocHBndHQt PnBkKSA9IHMtPmk5MTVfY29udGV4dF9wbWw0OwogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkg PCBHRU44XzNMVkxfUERQRVM7IGkrKykKLQkJCXB4X2RtYShwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0 b3J5W2ldKSA9Ci0JCQkJcy0+aTkxNV9jb250ZXh0X3BkcHNbaV07CisJCWZvciAoaSA9IDA7IGkg PCBHRU44XzNMVkxfUERQRVM7IGkrKykgeworCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rvcnkg KiBjb25zdCBwZCA9CisJCQkJaTkxNV9wZF9lbnRyeShwcGd0dC0+cGQsIGkpOworCisJCQlweF9k bWEocGQpID0gcy0+aTkxNV9jb250ZXh0X3BkcHNbaV07CisJCX0KIAl9CiB9CiAKQEAgLTExODYs MTEgKzExOTEsMTQgQEAgaTkxNV9jb250ZXh0X3BwZ3R0X3Jvb3Rfc2F2ZShzdHJ1Y3QgaW50ZWxf dmdwdV9zdWJtaXNzaW9uICpzLAogCWludCBpOwogCiAJaWYgKGk5MTVfdm1faXNfNGx2bCgmcHBn dHQtPnZtKSkgewotCQlzLT5pOTE1X2NvbnRleHRfcG1sNCA9IHB4X2RtYSgmcHBndHQtPnBtbDQp OworCQlzLT5pOTE1X2NvbnRleHRfcG1sNCA9IHB4X2RtYShwcGd0dC0+cGQpOwogCX0gZWxzZSB7 Ci0JCWZvciAoaSA9IDA7IGkgPCBHRU44XzNMVkxfUERQRVM7IGkrKykKLQkJCXMtPmk5MTVfY29u dGV4dF9wZHBzW2ldID0KLQkJCQlweF9kbWEocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXSk7 CisJCWZvciAoaSA9IDA7IGkgPCBHRU44XzNMVkxfUERQRVM7IGkrKykgeworCQkJc3RydWN0IGk5 MTVfcGFnZV9kaXJlY3RvcnkgKiBjb25zdCBwZCA9CisJCQkJaTkxNV9wZF9lbnRyeShwcGd0dC0+ cGQsIGkpOworCisJCQlzLT5pOTE1X2NvbnRleHRfcGRwc1tpXSA9IHB4X2RtYShwZCk7CisJCX0K IAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKaW5kZXggYjIxMGNiMDIxOTMx Li5lZjNmYTZiNWVmMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCkBAIC02NjEs NyArNjYxLDggQEAgc3RhdGljIHN0cnVjdCBpOTE1X3BhZ2VfdGFibGUgKmFsbG9jX3B0KHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9 CiAKLQlhdG9taWNfc2V0KCZwdC0+dXNlZF9wdGVzLCAwKTsKKwlhdG9taWNfc2V0KCZwdC0+dXNl ZCwgMCk7CisKIAlyZXR1cm4gcHQ7CiB9CiAKQEAgLTY4MywxMSArNjg0LDMwIEBAIHN0YXRpYyB2 b2lkIGdlbjZfaW5pdGlhbGl6ZV9wdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAlm aWxsMzJfcHgodm0sIHB0LCB2bS0+c2NyYXRjaF9wdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGk5 MTVfcGFnZV9kaXJlY3RvcnkgKmFsbG9jX3BkKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt KQorc3RhdGljIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpfX2FsbG9jX3BkKHZvaWQpCiB7 CiAJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkOwogCiAJcGQgPSBrbWFsbG9jKHNpemVv ZigqcGQpLCBJOTE1X0dGUF9BTExPV19GQUlMKTsKKworCWlmICh1bmxpa2VseSghcGQpKQorCQly ZXR1cm4gTlVMTDsKKworCW1lbXNldCgmcGQtPmJhc2UsIDAsIHNpemVvZihwZC0+YmFzZSkpOwor CWF0b21pY19zZXQoJnBkLT51c2VkLCAwKTsKKwlzcGluX2xvY2tfaW5pdCgmcGQtPmxvY2spOwor CisJLyogZm9yIHNhZmV0eSAqLworCXBkLT5lbnRyeVswXSA9IE5VTEw7CisKKwlyZXR1cm4gcGQ7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqYWxsb2NfcGQoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCit7CisJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rvcnkg KnBkOworCisJcGQgPSBfX2FsbG9jX3BkKCk7CiAJaWYgKHVubGlrZWx5KCFwZCkpCiAJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC02OTYsOCArNzE2LDYgQEAgc3RhdGljIHN0cnVjdCBp OTE1X3BhZ2VfZGlyZWN0b3J5ICphbGxvY19wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCi0JYXRvbWljX3NldCgmcGQtPnVz ZWRfcGRlcywgMCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnBkLT5sb2NrKTsKIAlyZXR1cm4gcGQ7CiB9 CiAKQEAgLTcxMyw4OCArNzMxLDU2IEBAIHN0YXRpYyB2b2lkIGdlbjhfaW5pdGlhbGl6ZV9wZChz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIHsKIAlmaWxsX3B4KHZtLCBwZCwKIAkJZ2Vu OF9wZGVfZW5jb2RlKHB4X2RtYSh2bS0+c2NyYXRjaF9wdCksIEk5MTVfQ0FDSEVfTExDKSk7Ci0J bWVtc2V0X3AoKHZvaWQgKiopcGQtPnBhZ2VfdGFibGUsIHZtLT5zY3JhdGNoX3B0LCBJOTE1X1BE RVMpOworCW1lbXNldF9wKHBkLT5lbnRyeSwgdm0tPnNjcmF0Y2hfcHQsIEk5MTVfUERFUyk7CiB9 CiAKLXN0YXRpYyBpbnQgX19wZHBfaW5pdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwK LQkJICAgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwKQorc3RhdGlj IHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICphbGxvY19wZHAoc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0pCiB7Ci0JY29uc3QgdW5zaWduZWQgaW50IHBkcGVzID0gaTkxNV9wZHBlc19w ZXJfcGRwKHZtKTsKLQotCXBkcC0+cGFnZV9kaXJlY3RvcnkgPSBrbWFsbG9jX2FycmF5KHBkcGVz LCBzaXplb2YoKnBkcC0+cGFnZV9kaXJlY3RvcnkpLAotCQkJCQkgICAgSTkxNV9HRlBfQUxMT1df RkFJTCk7Ci0JaWYgKHVubGlrZWx5KCFwZHAtPnBhZ2VfZGlyZWN0b3J5KSkKLQkJcmV0dXJuIC1F Tk9NRU07CisJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkcDsKIAotCW1lbXNldF9wKCh2 b2lkICoqKXBkcC0+cGFnZV9kaXJlY3RvcnksIHZtLT5zY3JhdGNoX3BkLCBwZHBlcyk7Ci0KLQlh dG9taWNfc2V0KCZwZHAtPnVzZWRfcGRwZXMsIDApOwotCXNwaW5fbG9ja19pbml0KCZwZHAtPmxv Y2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX3BkcF9maW5pKHN0cnVjdCBpOTE1 X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBkcCkKLXsKLQlrZnJlZShwZHAtPnBhZ2VfZGlyZWN0 b3J5KTsKLQlwZHAtPnBhZ2VfZGlyZWN0b3J5ID0gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBp OTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKgotYWxsb2NfcGRwKHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2UgKnZtKQotewotCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBk cDsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQotCUdFTV9CVUdfT04oIWk5MTVfdm1faXNfNGx2bCh2 bSkpOwotCi0JcGRwID0ga21hbGxvYyhzaXplb2YoKnBkcCksIEk5MTVfR0ZQX0FMTE9XX0ZBSUwp OworCXBkcCA9IF9fYWxsb2NfcGQoKTsKIAlpZiAoIXBkcCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CiAKLQlyZXQgPSBfX3BkcF9pbml0KHZtLCBwZHApOwotCWlmIChyZXQpCi0JCWdvdG8g ZmFpbF9iaXRtYXA7Ci0KLQlyZXQgPSBzZXR1cF9weCh2bSwgcGRwKTsKLQlpZiAocmV0KQotCQln b3RvIGZhaWxfcGFnZV9tOworCWlmIChpOTE1X3ZtX2lzXzRsdmwodm0pKSB7CisJCWlmICh1bmxp a2VseShzZXR1cF9weCh2bSwgcGRwKSkpIHsKKwkJCWtmcmVlKHBkcCk7CisJCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKKwkJfQorCX0KIAogCXJldHVybiBwZHA7Ci0KLWZhaWxfcGFnZV9tOgot CV9fcGRwX2ZpbmkocGRwKTsKLWZhaWxfYml0bWFwOgotCWtmcmVlKHBkcCk7Ci0KLQlyZXR1cm4g RVJSX1BUUihyZXQpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX3BkcChzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKLQkJICAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVy ICpwZHApCisJCSAgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkcCkKIHsKLQlfX3Bk cF9maW5pKHBkcCk7Ci0KLQlpZiAoIWk5MTVfdm1faXNfNGx2bCh2bSkpCi0JCXJldHVybjsKKwlp ZiAoaTkxNV92bV9pc180bHZsKHZtKSkKKwkJY2xlYW51cF9weCh2bSwgcGRwKTsKIAotCWNsZWFu dXBfcHgodm0sIHBkcCk7CiAJa2ZyZWUocGRwKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuOF9pbml0 aWFsaXplX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKLQkJCQlzdHJ1Y3QgaTkx NV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyICpwZHApCitzdGF0aWMgdm9pZCBnZW44X2luaXRpYWxp emVfNGx2bF9wZHAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCisJCQkJICAgICBzdHJ1 Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGRwKQogewogCWZpbGxfcHgodm0sIHBkcCwKIAkJZ2Vu OF9wZHBlX2VuY29kZShweF9kbWEodm0tPnNjcmF0Y2hfcGQpLCBJOTE1X0NBQ0hFX0xMQykpOwor CW1lbXNldF9wKHBkcC0+ZW50cnksIHZtLT5zY3JhdGNoX3BkLCA1MTIpOworfQorCitzdGF0aWMg dm9pZCBnZW44X2luaXRpYWxpemVfM2x2bF9wZHAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0sCisJCQkJICAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGRwKQoreworCW1lbXNl dF9wKHBkcC0+ZW50cnksIHZtLT5zY3JhdGNoX3BkLCBHRU44XzNMVkxfUERQRVMpOwogfQogCiBz dGF0aWMgdm9pZCBnZW44X2luaXRpYWxpemVfcG1sNChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSwKLQkJCQkgc3RydWN0IGk5MTVfcG1sNCAqcG1sNCkKKwkJCQkgc3RydWN0IGk5MTVfcGFn ZV9kaXJlY3RvcnkgKnBtbDQpCiB7CiAJZmlsbF9weCh2bSwgcG1sNCwKIAkJZ2VuOF9wbWw0ZV9l bmNvZGUocHhfZG1hKHZtLT5zY3JhdGNoX3BkcCksIEk5MTVfQ0FDSEVfTExDKSk7Ci0JbWVtc2V0 X3AoKHZvaWQgKiopcG1sNC0+cGRwcywgdm0tPnNjcmF0Y2hfcGRwLCBHRU44X1BNTDRFU19QRVJf UE1MNCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnBtbDQtPmxvY2spOworCW1lbXNldF9wKHBtbDQtPmVu dHJ5LCB2bS0+c2NyYXRjaF9wZHAsIEdFTjhfUE1MNEVTX1BFUl9QTUw0KTsKIH0KIAogLyoKQEAg LTgyMiw4ICs4MDgsOCBAQCBzdGF0aWMgYm9vbCBnZW44X3BwZ3R0X2NsZWFyX3B0KGNvbnN0IHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCW1lbXNldDY0KHZhZGRyICsgZ2VuOF9wdGVf aW5kZXgoc3RhcnQpLCB2bS0+c2NyYXRjaF9wdGUsIG51bV9lbnRyaWVzKTsKIAlrdW5tYXBfYXRv bWljKHZhZGRyKTsKIAotCUdFTV9CVUdfT04obnVtX2VudHJpZXMgPiBhdG9taWNfcmVhZCgmcHQt PnVzZWRfcHRlcykpOwotCXJldHVybiAhYXRvbWljX3N1Yl9yZXR1cm4obnVtX2VudHJpZXMsICZw dC0+dXNlZF9wdGVzKTsKKwlHRU1fQlVHX09OKG51bV9lbnRyaWVzID4gYXRvbWljX3JlYWQoJnB0 LT51c2VkKSk7CisJcmV0dXJuICFhdG9taWNfc3ViX3JldHVybihudW1fZW50cmllcywgJnB0LT51 c2VkKTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9zZXRfcGRlKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtLApAQCAtODU0LDEyICs4NDAsMTIgQEAgc3RhdGljIGJvb2wgZ2VuOF9w cGd0dF9jbGVhcl9wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCWNvbnRpbnVl OwogCiAJCXNwaW5fbG9jaygmcGQtPmxvY2spOwotCQlpZiAoIWF0b21pY19yZWFkKCZwdC0+dXNl ZF9wdGVzKSkgeworCQlpZiAoIWF0b21pY19yZWFkKCZwdC0+dXNlZCkpIHsKIAkJCWdlbjhfcHBn dHRfc2V0X3BkZSh2bSwgcGQsIHZtLT5zY3JhdGNoX3B0LCBwZGUpOwotCQkJcGQtPnBhZ2VfdGFi bGVbcGRlXSA9IHZtLT5zY3JhdGNoX3B0OworCQkJcGQtPmVudHJ5W3BkZV0gPSB2bS0+c2NyYXRj aF9wdDsKIAotCQkJR0VNX0JVR19PTighYXRvbWljX3JlYWQoJnBkLT51c2VkX3BkZXMpKTsKLQkJ CWF0b21pY19kZWMoJnBkLT51c2VkX3BkZXMpOworCQkJR0VNX0JVR19PTighYXRvbWljX3JlYWQo JnBkLT51c2VkKSk7CisJCQlhdG9taWNfZGVjKCZwZC0+dXNlZCk7CiAJCQlmcmVlID0gdHJ1ZTsK IAkJfQogCQlzcGluX3VubG9jaygmcGQtPmxvY2spOwpAQCAtODY3LDExICs4NTMsMTEgQEAgc3Rh dGljIGJvb2wgZ2VuOF9wcGd0dF9jbGVhcl9wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSwKIAkJCWZyZWVfcHQodm0sIHB0KTsKIAl9CiAKLQlyZXR1cm4gIWF0b21pY19yZWFkKCZwZC0+ dXNlZF9wZGVzKTsKKwlyZXR1cm4gIWF0b21pY19yZWFkKCZwZC0+dXNlZCk7CiB9CiAKIHN0YXRp YyB2b2lkIGdlbjhfcHBndHRfc2V0X3BkcGUoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0s Ci0JCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwLAorCQkJCXN0cnVj dCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZHAsCiAJCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rv cnkgKnBkLAogCQkJCXVuc2lnbmVkIGludCBwZHBlKQogewpAQCAtODg5LDcgKzg3NSw3IEBAIHN0 YXRpYyB2b2lkIGdlbjhfcHBndHRfc2V0X3BkcGUoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0sCiAgKiBDYWxsZXIgY2FuIHVzZSB0aGUgcmV0dXJuIHZhbHVlIHRvIHVwZGF0ZSBoaWdoZXIt bGV2ZWwgZW50cmllcwogICovCiBzdGF0aWMgYm9vbCBnZW44X3BwZ3R0X2NsZWFyX3BkcChzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKLQkJCQkgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rv cnlfcG9pbnRlciAqcGRwLAorCQkJCSBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0 IHBkcCwKIAkJCQkgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoKQogewogCXN0cnVjdCBpOTE1X3BhZ2Vf ZGlyZWN0b3J5ICpwZDsKQEAgLTkwNCwxMiArODkwLDEyIEBAIHN0YXRpYyBib29sIGdlbjhfcHBn dHRfY2xlYXJfcGRwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJY29udGludWU7 CiAKIAkJc3Bpbl9sb2NrKCZwZHAtPmxvY2spOwotCQlpZiAoIWF0b21pY19yZWFkKCZwZC0+dXNl ZF9wZGVzKSkgeworCQlpZiAoIWF0b21pY19yZWFkKCZwZC0+dXNlZCkpIHsKIAkJCWdlbjhfcHBn dHRfc2V0X3BkcGUodm0sIHBkcCwgdm0tPnNjcmF0Y2hfcGQsIHBkcGUpOwotCQkJcGRwLT5wYWdl X2RpcmVjdG9yeVtwZHBlXSA9IHZtLT5zY3JhdGNoX3BkOworCQkJcGRwLT5lbnRyeVtwZHBlXSA9 IHZtLT5zY3JhdGNoX3BkOwogCi0JCQlHRU1fQlVHX09OKCFhdG9taWNfcmVhZCgmcGRwLT51c2Vk X3BkcGVzKSk7Ci0JCQlhdG9taWNfZGVjKCZwZHAtPnVzZWRfcGRwZXMpOworCQkJR0VNX0JVR19P TighYXRvbWljX3JlYWQoJnBkcC0+dXNlZCkpOworCQkJYXRvbWljX2RlYygmcGRwLT51c2VkKTsK IAkJCWZyZWUgPSB0cnVlOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZwZHAtPmxvY2spOwpAQCAtOTE3 LDE3ICs5MDMsMTcgQEAgc3RhdGljIGJvb2wgZ2VuOF9wcGd0dF9jbGVhcl9wZHAoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJCQlmcmVlX3BkKHZtLCBwZCk7CiAJfQogCi0JcmV0dXJu ICFhdG9taWNfcmVhZCgmcGRwLT51c2VkX3BkcGVzKTsKKwlyZXR1cm4gIWF0b21pY19yZWFkKCZw ZHAtPnVzZWQpOwogfQogCiBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFyXzNsdmwoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJCQkJICB1NjQgc3RhcnQsIHU2NCBsZW5ndGgpCiB7 Ci0JZ2VuOF9wcGd0dF9jbGVhcl9wZHAodm0sICZpOTE1X3ZtX3RvX3BwZ3R0KHZtKS0+cGRwLCBz dGFydCwgbGVuZ3RoKTsKKwlnZW44X3BwZ3R0X2NsZWFyX3BkcCh2bSwgaTkxNV92bV90b19wcGd0 dCh2bSktPnBkLCBzdGFydCwgbGVuZ3RoKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9z ZXRfcG1sNGUoc3RydWN0IGk5MTVfcG1sNCAqcG1sNCwKLQkJCQkgc3RydWN0IGk5MTVfcGFnZV9k aXJlY3RvcnlfcG9pbnRlciAqcGRwLAorc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9zZXRfcG1sNGUo c3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBtbDQsCisJCQkJIHN0cnVjdCBpOTE1X3BhZ2Vf ZGlyZWN0b3J5ICpwZHAsCiAJCQkJIHVuc2lnbmVkIGludCBwbWw0ZSkKIHsKIAlnZW44X3BwZ3R0 X3BtbDRlX3QgKnZhZGRyOwpAQCAtOTQ1LDggKzkzMSw4IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBn dHRfY2xlYXJfNGx2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCQkgIHU2NCBz dGFydCwgdTY0IGxlbmd0aCkKIHsKIAlzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQgPSBpOTE1X3Zt X3RvX3BwZ3R0KHZtKTsKLQlzdHJ1Y3QgaTkxNV9wbWw0ICpwbWw0ID0gJnBwZ3R0LT5wbWw0Owot CXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBkcDsKKwlzdHJ1Y3QgaTkxNV9w YWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBtbDQgPSBwcGd0dC0+cGQ7CisJc3RydWN0IGk5MTVfcGFn ZV9kaXJlY3RvcnkgKnBkcDsKIAl1bnNpZ25lZCBpbnQgcG1sNGU7CiAKIAlHRU1fQlVHX09OKCFp OTE1X3ZtX2lzXzRsdmwodm0pKTsKQEAgLTk1OSw5ICs5NDUsOSBAQCBzdGF0aWMgdm9pZCBnZW44 X3BwZ3R0X2NsZWFyXzRsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJCQljb250 aW51ZTsKIAogCQlzcGluX2xvY2soJnBtbDQtPmxvY2spOwotCQlpZiAoIWF0b21pY19yZWFkKCZw ZHAtPnVzZWRfcGRwZXMpKSB7CisJCWlmICghYXRvbWljX3JlYWQoJnBkcC0+dXNlZCkpIHsKIAkJ CWdlbjhfcHBndHRfc2V0X3BtbDRlKHBtbDQsIHZtLT5zY3JhdGNoX3BkcCwgcG1sNGUpOwotCQkJ cG1sNC0+cGRwc1twbWw0ZV0gPSB2bS0+c2NyYXRjaF9wZHA7CisJCQlwbWw0LT5lbnRyeVtwbWw0 ZV0gPSB2bS0+c2NyYXRjaF9wZHA7CiAJCQlmcmVlID0gdHJ1ZTsKIAkJfQogCQlzcGluX3VubG9j aygmcG1sNC0+bG9jayk7CkBAIC05OTgsNyArOTg0LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGlu ZSBzdHJ1Y3QgZ2VuOF9pbnNlcnRfcHRlIGdlbjhfaW5zZXJ0X3B0ZSh1NjQgc3RhcnQpCiAKIHN0 YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbAogZ2VuOF9wcGd0dF9pbnNlcnRfcHRlX2VudHJpZXMo c3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0LAotCQkJICAgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJl Y3RvcnlfcG9pbnRlciAqcGRwLAorCQkJICAgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rvcnkg KnBkcCwKIAkJCSAgICAgIHN0cnVjdCBzZ3RfZG1hICppdGVyLAogCQkJICAgICAgc3RydWN0IGdl bjhfaW5zZXJ0X3B0ZSAqaWR4LAogCQkJICAgICAgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hl X2xldmVsLApAQCAtMTAxMCw4ICs5OTYsOCBAQCBnZW44X3BwZ3R0X2luc2VydF9wdGVfZW50cmll cyhzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQsCiAJYm9vbCByZXQ7CiAKIAlHRU1fQlVHX09OKGlk eC0+cGRwZSA+PSBpOTE1X3BkcGVzX3Blcl9wZHAoJnBwZ3R0LT52bSkpOwotCXBkID0gcGRwLT5w YWdlX2RpcmVjdG9yeVtpZHgtPnBkcGVdOwotCXZhZGRyID0ga21hcF9hdG9taWNfcHgocGQtPnBh Z2VfdGFibGVbaWR4LT5wZGVdKTsKKwlwZCA9IGk5MTVfcGRfZW50cnkocGRwLCBpZHgtPnBkcGUp OworCXZhZGRyID0ga21hcF9hdG9taWNfcHgoaTkxNV9wdF9lbnRyeShwZCwgaWR4LT5wZGUpKTsK IAlkbyB7CiAJCXZhZGRyW2lkeC0+cHRlXSA9IHB0ZV9lbmNvZGUgfCBpdGVyLT5kbWE7CiAKQEAg LTEwNDEsMTEgKzEwMjcsMTEgQEAgZ2VuOF9wcGd0dF9pbnNlcnRfcHRlX2VudHJpZXMoc3RydWN0 IGk5MTVfcHBndHQgKnBwZ3R0LAogCQkJCX0KIAogCQkJCUdFTV9CVUdfT04oaWR4LT5wZHBlID49 IGk5MTVfcGRwZXNfcGVyX3BkcCgmcHBndHQtPnZtKSk7Ci0JCQkJcGQgPSBwZHAtPnBhZ2VfZGly ZWN0b3J5W2lkeC0+cGRwZV07CisJCQkJcGQgPSBwZHAtPmVudHJ5W2lkeC0+cGRwZV07CiAJCQl9 CiAKIAkJCWt1bm1hcF9hdG9taWModmFkZHIpOwotCQkJdmFkZHIgPSBrbWFwX2F0b21pY19weChw ZC0+cGFnZV90YWJsZVtpZHgtPnBkZV0pOworCQkJdmFkZHIgPSBrbWFwX2F0b21pY19weChpOTE1 X3B0X2VudHJ5KHBkLCBpZHgtPnBkZSkpOwogCQl9CiAJfSB3aGlsZSAoMSk7CiAJa3VubWFwX2F0 b21pYyh2YWRkcik7CkBAIC0xMDYyLDE0ICsxMDQ4LDE0IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBn dHRfaW5zZXJ0XzNsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJc3RydWN0IHNn dF9kbWEgaXRlciA9IHNndF9kbWEodm1hKTsKIAlzdHJ1Y3QgZ2VuOF9pbnNlcnRfcHRlIGlkeCA9 IGdlbjhfaW5zZXJ0X3B0ZSh2bWEtPm5vZGUuc3RhcnQpOwogCi0JZ2VuOF9wcGd0dF9pbnNlcnRf cHRlX2VudHJpZXMocHBndHQsICZwcGd0dC0+cGRwLCAmaXRlciwgJmlkeCwKKwlnZW44X3BwZ3R0 X2luc2VydF9wdGVfZW50cmllcyhwcGd0dCwgcHBndHQtPnBkLCAmaXRlciwgJmlkeCwKIAkJCQkg ICAgICBjYWNoZV9sZXZlbCwgZmxhZ3MpOwogCiAJdm1hLT5wYWdlX3NpemVzLmd0dCA9IEk5MTVf R1RUX1BBR0VfU0laRTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9pbnNlcnRfaHVnZV9l bnRyaWVzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAotCQkJCQkgICBzdHJ1Y3QgaTkxNV9wYWdlX2Rp cmVjdG9yeV9wb2ludGVyICoqcGRwcywKKwkJCQkJICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rv cnkgKnBtbDQsCiAJCQkJCSAgIHN0cnVjdCBzZ3RfZG1hICppdGVyLAogCQkJCQkgICBlbnVtIGk5 MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCiAJCQkJCSAgIHUzMiBmbGFncykKQEAgLTEwODAs OCArMTA2Niw5IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfaW5zZXJ0X2h1Z2VfZW50cmllcyhz dHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAogCWRvIHsKIAkJc3RydWN0IGdlbjhfaW5zZXJ0X3B0ZSBp ZHggPSBnZW44X2luc2VydF9wdGUoc3RhcnQpOwotCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9y eV9wb2ludGVyICpwZHAgPSBwZHBzW2lkeC5wbWw0ZV07Ci0JCXN0cnVjdCBpOTE1X3BhZ2VfZGly ZWN0b3J5ICpwZCA9IHBkcC0+cGFnZV9kaXJlY3RvcnlbaWR4LnBkcGVdOworCQlzdHJ1Y3QgaTkx NV9wYWdlX2RpcmVjdG9yeSAqcGRwID0KKwkJCWk5MTVfcGRwX2VudHJ5KHBtbDQsIGlkeC5wbWw0 ZSk7CisJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZCA9IGk5MTVfcGRfZW50cnkocGRw LCBpZHgucGRwZSk7CiAJCXVuc2lnbmVkIGludCBwYWdlX3NpemU7CiAJCWJvb2wgbWF5YmVfNjRL ID0gZmFsc2U7CiAJCWdlbjhfcHRlX3QgZW5jb2RlID0gcHRlX2VuY29kZTsKQEAgLTEwOTksNyAr MTA4Niw3IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfaW5zZXJ0X2h1Z2VfZW50cmllcyhzdHJ1 Y3QgaTkxNV92bWEgKnZtYSwKIAogCQkJdmFkZHIgPSBrbWFwX2F0b21pY19weChwZCk7CiAJCX0g ZWxzZSB7Ci0JCQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICpwdCA9IHBkLT5wYWdlX3RhYmxlW2lk eC5wZGVdOworCQkJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqcHQgPSBpOTE1X3B0X2VudHJ5KHBk LCBpZHgucGRlKTsKIAogCQkJaW5kZXggPSBpZHgucHRlOwogCQkJbWF4ID0gR0VOOF9QVEVTOwpA QCAtMTE3NCw3ICsxMTYxLDggQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9pbnNlcnRfaHVnZV9l bnRyaWVzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAogCQkJCXUxNiBpOwogCiAJCQkJZW5jb2RlID0g dm1hLT52bS0+c2NyYXRjaF9wdGU7Ci0JCQkJdmFkZHIgPSBrbWFwX2F0b21pY19weChwZC0+cGFn ZV90YWJsZVtpZHgucGRlXSk7CisJCQkJdmFkZHIgPSBrbWFwX2F0b21pY19weChpOTE1X3B0X2Vu dHJ5KHBkLAorCQkJCQkJCQkgICAgIGlkeC5wZGUpKTsKIAogCQkJCWZvciAoaSA9IDE7IGkgPCBp bmRleDsgaSArPSAxNikKIAkJCQkJbWVtc2V0NjQodmFkZHIgKyBpLCBlbmNvZGUsIDE1KTsKQEAg LTExOTQsMTUgKzExODIsMTYgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9pbnNlcnRfNGx2bChz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIHsKIAlzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBn dHQgPSBpOTE1X3ZtX3RvX3BwZ3R0KHZtKTsKIAlzdHJ1Y3Qgc2d0X2RtYSBpdGVyID0gc2d0X2Rt YSh2bWEpOwotCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKipwZHBzID0gcHBn dHQtPnBtbDQucGRwczsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBtbDQg PSBwcGd0dC0+cGQ7CiAKIAlpZiAodm1hLT5wYWdlX3NpemVzLnNnID4gSTkxNV9HVFRfUEFHRV9T SVpFKSB7Ci0JCWdlbjhfcHBndHRfaW5zZXJ0X2h1Z2VfZW50cmllcyh2bWEsIHBkcHMsICZpdGVy LCBjYWNoZV9sZXZlbCwKKwkJZ2VuOF9wcGd0dF9pbnNlcnRfaHVnZV9lbnRyaWVzKHZtYSwgcG1s NCwgJml0ZXIsIGNhY2hlX2xldmVsLAogCQkJCQkgICAgICAgZmxhZ3MpOwogCX0gZWxzZSB7CiAJ CXN0cnVjdCBnZW44X2luc2VydF9wdGUgaWR4ID0gZ2VuOF9pbnNlcnRfcHRlKHZtYS0+bm9kZS5z dGFydCk7CiAKLQkJd2hpbGUgKGdlbjhfcHBndHRfaW5zZXJ0X3B0ZV9lbnRyaWVzKHBwZ3R0LCBw ZHBzW2lkeC5wbWw0ZSsrXSwKKwkJd2hpbGUgKGdlbjhfcHBndHRfaW5zZXJ0X3B0ZV9lbnRyaWVz KHBwZ3R0LAorCQkJCQkJICAgICBpOTE1X3BkcF9lbnRyeShwbWw0LCBpZHgucG1sNGUrKyksCiAJ CQkJCQkgICAgICZpdGVyLCAmaWR4LCBjYWNoZV9sZXZlbCwKIAkJCQkJCSAgICAgZmxhZ3MpKQog CQkJR0VNX0JVR19PTihpZHgucG1sNGUgPj0gR0VOOF9QTUw0RVNfUEVSX1BNTDQpOwpAQCAtMTIx Nyw4ICsxMjA2LDggQEAgc3RhdGljIHZvaWQgZ2VuOF9mcmVlX3BhZ2VfdGFibGVzKHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEk5MTVf UERFUzsgaSsrKSB7Ci0JCWlmIChwZC0+cGFnZV90YWJsZVtpXSAhPSB2bS0+c2NyYXRjaF9wdCkK LQkJCWZyZWVfcHQodm0sIHBkLT5wYWdlX3RhYmxlW2ldKTsKKwkJaWYgKHBkLT5lbnRyeVtpXSAh PSB2bS0+c2NyYXRjaF9wdCkKKwkJCWZyZWVfcHQodm0sIHBkLT5lbnRyeVtpXSk7CiAJfQogfQog CkBAIC0xMjc3LDcgKzEyNjYsNyBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9zY3JhdGNoKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQogCWdlbjhfaW5pdGlhbGl6ZV9wdCh2bSwgdm0tPnNj cmF0Y2hfcHQpOwogCWdlbjhfaW5pdGlhbGl6ZV9wZCh2bSwgdm0tPnNjcmF0Y2hfcGQpOwogCWlm IChpOTE1X3ZtX2lzXzRsdmwodm0pKQotCQlnZW44X2luaXRpYWxpemVfcGRwKHZtLCB2bS0+c2Ny YXRjaF9wZHApOworCQlnZW44X2luaXRpYWxpemVfNGx2bF9wZHAodm0sIHZtLT5zY3JhdGNoX3Bk cCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTI5OSw3ICsxMjg4LDcgQEAgc3RhdGljIGludCBnZW44 X3BwZ3R0X25vdGlmeV92Z3Qoc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0LCBib29sIGNyZWF0ZSkK IAlpbnQgaTsKIAogCWlmIChpOTE1X3ZtX2lzXzRsdmwodm0pKSB7Ci0JCWNvbnN0IHU2NCBkYWRk ciA9IHB4X2RtYSgmcHBndHQtPnBtbDQpOworCQljb25zdCB1NjQgZGFkZHIgPSBweF9kbWEocHBn dHQtPnBkKTsKIAogCQlJOTE1X1dSSVRFKHZndGlmX3JlZyhwZHBbMF0ubG8pLCBsb3dlcl8zMl9i aXRzKGRhZGRyKSk7CiAJCUk5MTVfV1JJVEUodmd0aWZfcmVnKHBkcFswXS5oaSksIHVwcGVyXzMy X2JpdHMoZGFkZHIpKTsKQEAgLTEzMzYsMTcgKzEzMjUsMTcgQEAgc3RhdGljIHZvaWQgZ2VuOF9m cmVlX3NjcmF0Y2goc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCiB9CiAKIHN0YXRpYyB2 b2lkIGdlbjhfcHBndHRfY2xlYW51cF8zbHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt LAotCQkJCSAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyICpwZHApCisJCQkJ ICAgIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZHApCiB7CiAJY29uc3QgdW5zaWduZWQg aW50IHBkcGVzID0gaTkxNV9wZHBlc19wZXJfcGRwKHZtKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9 IDA7IGkgPCBwZHBlczsgaSsrKSB7Ci0JCWlmIChwZHAtPnBhZ2VfZGlyZWN0b3J5W2ldID09IHZt LT5zY3JhdGNoX3BkKQorCQlpZiAocGRwLT5lbnRyeVtpXSA9PSB2bS0+c2NyYXRjaF9wZCkKIAkJ CWNvbnRpbnVlOwogCi0JCWdlbjhfZnJlZV9wYWdlX3RhYmxlcyh2bSwgcGRwLT5wYWdlX2RpcmVj dG9yeVtpXSk7Ci0JCWZyZWVfcGQodm0sIHBkcC0+cGFnZV9kaXJlY3RvcnlbaV0pOworCQlnZW44 X2ZyZWVfcGFnZV90YWJsZXModm0sIHBkcC0+ZW50cnlbaV0pOworCQlmcmVlX3BkKHZtLCBwZHAt PmVudHJ5W2ldKTsKIAl9CiAKIAlmcmVlX3BkcCh2bSwgcGRwKTsKQEAgLTEzNTQsMTYgKzEzNDMs MTkgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhbnVwXzNsdmwoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sCiAKIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYW51cF80bHZsKHN0 cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCkKIHsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAq IGNvbnN0IHBtbDQgPSBwcGd0dC0+cGQ7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgR0VO OF9QTUw0RVNfUEVSX1BNTDQ7IGkrKykgewotCQlpZiAocHBndHQtPnBtbDQucGRwc1tpXSA9PSBw cGd0dC0+dm0uc2NyYXRjaF9wZHApCisJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZHAg PSBpOTE1X3BkcF9lbnRyeShwbWw0LCBpKTsKKworCQlpZiAocGRwID09IHBwZ3R0LT52bS5zY3Jh dGNoX3BkcCkKIAkJCWNvbnRpbnVlOwogCi0JCWdlbjhfcHBndHRfY2xlYW51cF8zbHZsKCZwcGd0 dC0+dm0sIHBwZ3R0LT5wbWw0LnBkcHNbaV0pOworCQlnZW44X3BwZ3R0X2NsZWFudXBfM2x2bCgm cHBndHQtPnZtLCBwZHApOwogCX0KIAotCWNsZWFudXBfcHgoJnBwZ3R0LT52bSwgJnBwZ3R0LT5w bWw0KTsKKwlmcmVlX3BkKCZwcGd0dC0+dm0sIHBtbDQpOwogfQogCiBzdGF0aWMgdm9pZCBnZW44 X3BwZ3R0X2NsZWFudXAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCkBAIC0xMzc3LDcg KzEzNjksNyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFudXAoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0pCiAJaWYgKGk5MTVfdm1faXNfNGx2bCh2bSkpCiAJCWdlbjhfcHBndHRf Y2xlYW51cF80bHZsKHBwZ3R0KTsKIAllbHNlCi0JCWdlbjhfcHBndHRfY2xlYW51cF8zbHZsKCZw cGd0dC0+dm0sICZwcGd0dC0+cGRwKTsKKwkJZ2VuOF9wcGd0dF9jbGVhbnVwXzNsdmwoJnBwZ3R0 LT52bSwgcHBndHQtPnBkKTsKIAogCWdlbjhfZnJlZV9zY3JhdGNoKHZtKTsKIH0KQEAgLTE0MDYs MTAgKzEzOTgsMTAgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jX3BkKHN0cnVjdCBpOTE1 X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJaWYgKGNvdW50IDwgR0VOOF9QVEVTIHx8IGludGVsX3Zn cHVfYWN0aXZlKHZtLT5pOTE1KSkKIAkJCQlnZW44X2luaXRpYWxpemVfcHQodm0sIHB0KTsKIAot CQkJb2xkID0gY21weGNoZygmcGQtPnBhZ2VfdGFibGVbcGRlXSwgdm0tPnNjcmF0Y2hfcHQsIHB0 KTsKKwkJCW9sZCA9IGNtcHhjaGcoJnBkLT5lbnRyeVtwZGVdLCB2bS0+c2NyYXRjaF9wdCwgcHQp OwogCQkJaWYgKG9sZCA9PSB2bS0+c2NyYXRjaF9wdCkgewogCQkJCWdlbjhfcHBndHRfc2V0X3Bk ZSh2bSwgcGQsIHB0LCBwZGUpOwotCQkJCWF0b21pY19pbmMoJnBkLT51c2VkX3BkZXMpOworCQkJ CWF0b21pY19pbmMoJnBkLT51c2VkKTsKIAkJCX0gZWxzZSB7CiAJCQkJZnJlZV9wdCh2bSwgcHQp OwogCQkJCXB0ID0gb2xkOwpAQCAtMTQxOCw3ICsxNDEwLDcgQEAgc3RhdGljIGludCBnZW44X3Bw Z3R0X2FsbG9jX3BkKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJc3Bpbl9sb2Nr KCZwZC0+bG9jayk7CiAJCX0KIAotCQlhdG9taWNfYWRkKGNvdW50LCAmcHQtPnVzZWRfcHRlcyk7 CisJCWF0b21pY19hZGQoY291bnQsICZwdC0+dXNlZCk7CiAJfQogCXNwaW5fdW5sb2NrKCZwZC0+ bG9jayk7CiAKQEAgLTE0MzAsNyArMTQyMiw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxv Y19wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIH0KIAogc3RhdGljIGludCBnZW44 X3BwZ3R0X2FsbG9jX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKLQkJCQlzdHJ1 Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyICpwZHAsCisJCQkJc3RydWN0IGk5MTVfcGFn ZV9kaXJlY3RvcnkgKnBkcCwKIAkJCQl1NjQgc3RhcnQsIHU2NCBsZW5ndGgpCiB7CiAJc3RydWN0 IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkOwpAQCAtMTQ1MSwxMSArMTQ0MywxMCBAQCBzdGF0aWMg aW50IGdlbjhfcHBndHRfYWxsb2NfcGRwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAog CiAJCQlnZW44X2luaXRpYWxpemVfcGQodm0sIHBkKTsKIAotCQkJb2xkID0gY21weGNoZygmcGRw LT5wYWdlX2RpcmVjdG9yeVtwZHBlXSwKLQkJCQkgICAgICB2bS0+c2NyYXRjaF9wZCwgcGQpOwor CQkJb2xkID0gY21weGNoZygmcGRwLT5lbnRyeVtwZHBlXSwgdm0tPnNjcmF0Y2hfcGQsIHBkKTsK IAkJCWlmIChvbGQgPT0gdm0tPnNjcmF0Y2hfcGQpIHsKIAkJCQlnZW44X3BwZ3R0X3NldF9wZHBl KHZtLCBwZHAsIHBkLCBwZHBlKTsKLQkJCQlhdG9taWNfaW5jKCZwZHAtPnVzZWRfcGRwZXMpOwor CQkJCWF0b21pY19pbmMoJnBkcC0+dXNlZCk7CiAJCQl9IGVsc2UgewogCQkJCWZyZWVfcGQodm0s IHBkKTsKIAkJCQlwZCA9IG9sZDsKQEAgLTE0NjMsNyArMTQ1NCw3IEBAIHN0YXRpYyBpbnQgZ2Vu OF9wcGd0dF9hbGxvY19wZHAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAKIAkJCXNw aW5fbG9jaygmcGRwLT5sb2NrKTsKIAkJfQotCQlhdG9taWNfaW5jKCZwZC0+dXNlZF9wZGVzKTsK KwkJYXRvbWljX2luYygmcGQtPnVzZWQpOwogCQlzcGluX3VubG9jaygmcGRwLT5sb2NrKTsKIAog CQlyZXQgPSBnZW44X3BwZ3R0X2FsbG9jX3BkKHZtLCBwZCwgc3RhcnQsIGxlbmd0aCk7CkBAIC0x NDcxLDcgKzE0NjIsNyBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfcGRwKHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJZ290byB1bndpbmRfcGQ7CiAKIAkJc3Bpbl9sb2Nr KCZwZHAtPmxvY2spOwotCQlhdG9taWNfZGVjKCZwZC0+dXNlZF9wZGVzKTsKKwkJYXRvbWljX2Rl YygmcGQtPnVzZWQpOwogCX0KIAlzcGluX3VubG9jaygmcGRwLT5sb2NrKTsKIApAQCAtMTQ3OSwx MCArMTQ3MCwxMCBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfcGRwKHN0cnVjdCBpOTE1 X2FkZHJlc3Nfc3BhY2UgKnZtLAogCiB1bndpbmRfcGQ6CiAJc3Bpbl9sb2NrKCZwZHAtPmxvY2sp OwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwZC0+dXNlZF9wZGVzKSkgeworCWlmIChhdG9t aWNfZGVjX2FuZF90ZXN0KCZwZC0+dXNlZCkpIHsKIAkJZ2VuOF9wcGd0dF9zZXRfcGRwZSh2bSwg cGRwLCB2bS0+c2NyYXRjaF9wZCwgcGRwZSk7Ci0JCUdFTV9CVUdfT04oIWF0b21pY19yZWFkKCZw ZHAtPnVzZWRfcGRwZXMpKTsKLQkJYXRvbWljX2RlYygmcGRwLT51c2VkX3BkcGVzKTsKKwkJR0VN X0JVR19PTighYXRvbWljX3JlYWQoJnBkcC0+dXNlZCkpOworCQlhdG9taWNfZGVjKCZwZHAtPnVz ZWQpOwogCQlmcmVlX3BkKHZtLCBwZCk7CiAJfQogCXNwaW5fdW5sb2NrKCZwZHAtPmxvY2spOwpA QCAtMTQ5NSwyMyArMTQ4NiwyNCBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfM2x2bChz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCQkgdTY0IHN0YXJ0LCB1NjQgbGVuZ3Ro KQogewogCXJldHVybiBnZW44X3BwZ3R0X2FsbG9jX3BkcCh2bSwKLQkJCQkgICAgJmk5MTVfdm1f dG9fcHBndHQodm0pLT5wZHAsIHN0YXJ0LCBsZW5ndGgpOworCQkJCSAgICBpOTE1X3ZtX3RvX3Bw Z3R0KHZtKS0+cGQsIHN0YXJ0LCBsZW5ndGgpOwogfQogCiBzdGF0aWMgaW50IGdlbjhfcHBndHRf YWxsb2NfNGx2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCQkgdTY0IHN0YXJ0 LCB1NjQgbGVuZ3RoKQogewogCXN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCA9IGk5MTVfdm1fdG9f cHBndHQodm0pOwotCXN0cnVjdCBpOTE1X3BtbDQgKnBtbDQgPSAmcHBndHQtPnBtbDQ7Ci0Jc3Ry dWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwOworCXN0cnVjdCBpOTE1X3BhZ2Vf ZGlyZWN0b3J5ICogY29uc3QgcG1sNCA9IHBwZ3R0LT5wZDsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2Rp cmVjdG9yeSAqcGRwOwogCXU2NCBmcm9tID0gc3RhcnQ7CiAJdTMyIHBtbDRlOwogCWludCByZXQ7 CiAKIAlzcGluX2xvY2soJnBtbDQtPmxvY2spOwogCWdlbjhfZm9yX2VhY2hfcG1sNGUocGRwLCBw bWw0LCBzdGFydCwgbGVuZ3RoLCBwbWw0ZSkgeworCiAJCWlmIChwZHAgPT0gdm0tPnNjcmF0Y2hf cGRwKSB7Ci0JCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyICpvbGQ7CisJCQlz dHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqb2xkOwogCiAJCQlzcGluX3VubG9jaygmcG1sNC0+ bG9jayk7CiAKQEAgLTE1MTksOSArMTUxMSw5IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxv Y180bHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJaWYgKElTX0VSUihwZHAp KQogCQkJCWdvdG8gdW53aW5kOwogCi0JCQlnZW44X2luaXRpYWxpemVfcGRwKHZtLCBwZHApOwor CQkJZ2VuOF9pbml0aWFsaXplXzRsdmxfcGRwKHZtLCBwZHApOwogCi0JCQlvbGQgPSBjbXB4Y2hn KCZwbWw0LT5wZHBzW3BtbDRlXSwgdm0tPnNjcmF0Y2hfcGRwLCBwZHApOworCQkJb2xkID0gY21w eGNoZygmcG1sNC0+ZW50cnlbcG1sNGVdLCB2bS0+c2NyYXRjaF9wZHAsIHBkcCk7CiAJCQlpZiAo b2xkID09IHZtLT5zY3JhdGNoX3BkcCkgewogCQkJCWdlbjhfcHBndHRfc2V0X3BtbDRlKHBtbDQs IHBkcCwgcG1sNGUpOwogCQkJfSBlbHNlIHsKQEAgLTE1MzEsNyArMTUyMyw3IEBAIHN0YXRpYyBp bnQgZ2VuOF9wcGd0dF9hbGxvY180bHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAog CiAJCQlzcGluX2xvY2soJnBtbDQtPmxvY2spOwogCQl9Ci0JCWF0b21pY19pbmMoJnBkcC0+dXNl ZF9wZHBlcyk7CisJCWF0b21pY19pbmMoJnBkcC0+dXNlZCk7CiAJCXNwaW5fdW5sb2NrKCZwbWw0 LT5sb2NrKTsKIAogCQlyZXQgPSBnZW44X3BwZ3R0X2FsbG9jX3BkcCh2bSwgcGRwLCBzdGFydCwg bGVuZ3RoKTsKQEAgLTE1MzksNyArMTUzMSw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxv Y180bHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJZ290byB1bndpbmRfcGRw OwogCiAJCXNwaW5fbG9jaygmcG1sNC0+bG9jayk7Ci0JCWF0b21pY19kZWMoJnBkcC0+dXNlZF9w ZHBlcyk7CisJCWF0b21pY19kZWMoJnBkcC0+dXNlZCk7CiAJfQogCXNwaW5fdW5sb2NrKCZwbWw0 LT5sb2NrKTsKIApAQCAtMTU0Nyw3ICsxNTM5LDcgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2Fs bG9jXzRsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAKIHVud2luZF9wZHA6CiAJ c3Bpbl9sb2NrKCZwbWw0LT5sb2NrKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGRwLT51 c2VkX3BkcGVzKSkgeworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwZHAtPnVzZWQpKSB7CiAJ CWdlbjhfcHBndHRfc2V0X3BtbDRlKHBtbDQsIHZtLT5zY3JhdGNoX3BkcCwgcG1sNGUpOwogCQlm cmVlX3BkcCh2bSwgcGRwKTsKIAl9CkBAIC0xNTYwLDcgKzE1NTIsNyBAQCBzdGF0aWMgaW50IGdl bjhfcHBndHRfYWxsb2NfNGx2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIHN0YXRp YyBpbnQgZ2VuOF9wcmVhbGxvY2F0ZV90b3BfbGV2ZWxfcGRwKHN0cnVjdCBpOTE1X3BwZ3R0ICpw cGd0dCkKIHsKIAlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9ICZwcGd0dC0+dm07Ci0J c3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwID0gJnBwZ3R0LT5wZHA7CisJ c3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkcCA9IHBwZ3R0LT5wZDsKIAlzdHJ1Y3QgaTkx NV9wYWdlX2RpcmVjdG9yeSAqcGQ7CiAJdTY0IHN0YXJ0ID0gMCwgbGVuZ3RoID0gcHBndHQtPnZt LnRvdGFsOwogCXU2NCBmcm9tID0gc3RhcnQ7CkBAIC0xNTczLDEwICsxNTY1LDEyIEBAIHN0YXRp YyBpbnQgZ2VuOF9wcmVhbGxvY2F0ZV90b3BfbGV2ZWxfcGRwKHN0cnVjdCBpOTE1X3BwZ3R0ICpw cGd0dCkKIAogCQlnZW44X2luaXRpYWxpemVfcGQodm0sIHBkKTsKIAkJZ2VuOF9wcGd0dF9zZXRf cGRwZSh2bSwgcGRwLCBwZCwgcGRwZSk7Ci0JCWF0b21pY19pbmMoJnBkcC0+dXNlZF9wZHBlcyk7 CisKKwkJYXRvbWljX2luYygmcGRwLT51c2VkKTsKIAl9CiAKLQlhdG9taWNfaW5jKCZwZHAtPnVz ZWRfcGRwZXMpOyAvKiBuZXZlciByZW1vdmUgKi8KKwlhdG9taWNfaW5jKCZwZHAtPnVzZWQpOyAv KiBuZXZlciByZW1vdmUgKi8KKwogCXJldHVybiAwOwogCiB1bndpbmQ6CkBAIC0xNTg1LDcgKzE1 NzksNyBAQCBzdGF0aWMgaW50IGdlbjhfcHJlYWxsb2NhdGVfdG9wX2xldmVsX3BkcChzdHJ1Y3Qg aTkxNV9wcGd0dCAqcHBndHQpCiAJCWdlbjhfcHBndHRfc2V0X3BkcGUodm0sIHBkcCwgdm0tPnNj cmF0Y2hfcGQsIHBkcGUpOwogCQlmcmVlX3BkKHZtLCBwZCk7CiAJfQotCWF0b21pY19zZXQoJnBk cC0+dXNlZF9wZHBlcywgMCk7CisJYXRvbWljX3NldCgmcGRwLT51c2VkLCAwKTsKIAlyZXR1cm4g LUVOT01FTTsKIH0KIApAQCAtMTY0MCwyNyArMTYzNCwyNSBAQCBzdGF0aWMgc3RydWN0IGk5MTVf cHBndHQgKmdlbjhfcHBndHRfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQog CWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKLQlpZiAoaTkxNV92bV9pc180bHZsKCZwcGd0 dC0+dm0pKSB7Ci0JCWVyciA9IHNldHVwX3B4KCZwcGd0dC0+dm0sICZwcGd0dC0+cG1sNCk7Ci0J CWlmIChlcnIpCi0JCQlnb3RvIGVycl9zY3JhdGNoOworCXBwZ3R0LT5wZCA9IGFsbG9jX3BkcCgm cHBndHQtPnZtKTsKKwlpZiAoSVNfRVJSKHBwZ3R0LT5wZCkpIHsKKwkJZXJyID0gUFRSX0VSUihw cGd0dC0+cGQpOworCQlnb3RvIGVycl9zY3JhdGNoOworCX0KIAotCQlnZW44X2luaXRpYWxpemVf cG1sNCgmcHBndHQtPnZtLCAmcHBndHQtPnBtbDQpOworCWlmIChpOTE1X3ZtX2lzXzRsdmwoJnBw Z3R0LT52bSkpIHsKKwkJZ2VuOF9pbml0aWFsaXplX3BtbDQoJnBwZ3R0LT52bSwgcHBndHQtPnBk KTsKIAogCQlwcGd0dC0+dm0uYWxsb2NhdGVfdmFfcmFuZ2UgPSBnZW44X3BwZ3R0X2FsbG9jXzRs dmw7CiAJCXBwZ3R0LT52bS5pbnNlcnRfZW50cmllcyA9IGdlbjhfcHBndHRfaW5zZXJ0XzRsdmw7 CiAJCXBwZ3R0LT52bS5jbGVhcl9yYW5nZSA9IGdlbjhfcHBndHRfY2xlYXJfNGx2bDsKIAl9IGVs c2UgewotCQllcnIgPSBfX3BkcF9pbml0KCZwcGd0dC0+dm0sICZwcGd0dC0+cGRwKTsKLQkJaWYg KGVycikKLQkJCWdvdG8gZXJyX3NjcmF0Y2g7CisJCWdlbjhfaW5pdGlhbGl6ZV8zbHZsX3BkcCgm cHBndHQtPnZtLCBwcGd0dC0+cGQpOwogCiAJCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShpOTE1KSkg ewogCQkJZXJyID0gZ2VuOF9wcmVhbGxvY2F0ZV90b3BfbGV2ZWxfcGRwKHBwZ3R0KTsKLQkJCWlm IChlcnIpIHsKLQkJCQlfX3BkcF9maW5pKCZwcGd0dC0+cGRwKTsKLQkJCQlnb3RvIGVycl9zY3Jh dGNoOwotCQkJfQorCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl9wZHA7CiAJCX0KIAogCQlwcGd0 dC0+dm0uYWxsb2NhdGVfdmFfcmFuZ2UgPSBnZW44X3BwZ3R0X2FsbG9jXzNsdmw7CkBAIC0xNjc1 LDYgKzE2NjcsOCBAQCBzdGF0aWMgc3RydWN0IGk5MTVfcHBndHQgKmdlbjhfcHBndHRfY3JlYXRl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCiAJcmV0dXJuIHBwZ3R0OwogCitlcnJf cGRwOgorCWZyZWVfcGRwKCZwcGd0dC0+dm0sIHBwZ3R0LT5wZCk7CiBlcnJfc2NyYXRjaDoKIAln ZW44X2ZyZWVfc2NyYXRjaCgmcHBndHQtPnZtKTsKIGVycl9mcmVlOgpAQCAtMTc0MCwxNSArMTcz NCwxNiBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2NsZWFyX3JhbmdlKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJCSAgIHU2NCBzdGFydCwgdTY0IGxlbmd0aCkK IHsKLQlzdHJ1Y3QgZ2VuNl9wcGd0dCAqcHBndHQgPSB0b19nZW42X3BwZ3R0KGk5MTVfdm1fdG9f cHBndHQodm0pKTsKLQl1bnNpZ25lZCBpbnQgZmlyc3RfZW50cnkgPSBzdGFydCAvIEk5MTVfR1RU X1BBR0VfU0laRTsKKwlzdHJ1Y3QgZ2VuNl9wcGd0dCAqIGNvbnN0IHBwZ3R0ID0gdG9fZ2VuNl9w cGd0dChpOTE1X3ZtX3RvX3BwZ3R0KHZtKSk7CisJY29uc3QgdW5zaWduZWQgaW50IGZpcnN0X2Vu dHJ5ID0gc3RhcnQgLyBJOTE1X0dUVF9QQUdFX1NJWkU7CisJY29uc3QgZ2VuNl9wdGVfdCBzY3Jh dGNoX3B0ZSA9IHZtLT5zY3JhdGNoX3B0ZTsKIAl1bnNpZ25lZCBpbnQgcGRlID0gZmlyc3RfZW50 cnkgLyBHRU42X1BURVM7CiAJdW5zaWduZWQgaW50IHB0ZSA9IGZpcnN0X2VudHJ5ICUgR0VONl9Q VEVTOwogCXVuc2lnbmVkIGludCBudW1fZW50cmllcyA9IGxlbmd0aCAvIEk5MTVfR1RUX1BBR0Vf U0laRTsKLQljb25zdCBnZW42X3B0ZV90IHNjcmF0Y2hfcHRlID0gdm0tPnNjcmF0Y2hfcHRlOwog CiAJd2hpbGUgKG51bV9lbnRyaWVzKSB7Ci0JCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGUgKnB0ID0g cHBndHQtPmJhc2UucGQucGFnZV90YWJsZVtwZGUrK107CisJCXN0cnVjdCBpOTE1X3BhZ2VfdGFi bGUgKiBjb25zdCBwdCA9CisJCQlpOTE1X3B0X2VudHJ5KHBwZ3R0LT5iYXNlLnBkLCBwZGUrKyk7 CiAJCWNvbnN0IHVuc2lnbmVkIGludCBjb3VudCA9IG1pbihudW1fZW50cmllcywgR0VONl9QVEVT IC0gcHRlKTsKIAkJZ2VuNl9wdGVfdCAqdmFkZHI7CiAKQEAgLTE3NTYsOCArMTc1MSw4IEBAIHN0 YXRpYyB2b2lkIGdlbjZfcHBndHRfY2xlYXJfcmFuZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0sCiAKIAkJbnVtX2VudHJpZXMgLT0gY291bnQ7CiAKLQkJR0VNX0JVR19PTihjb3VudCA+ IGF0b21pY19yZWFkKCZwdC0+dXNlZF9wdGVzKSk7Ci0JCWlmICghYXRvbWljX3N1Yl9yZXR1cm4o Y291bnQsICZwdC0+dXNlZF9wdGVzKSkKKwkJR0VNX0JVR19PTihjb3VudCA+IGF0b21pY19yZWFk KCZwdC0+dXNlZCkpOworCQlpZiAoIWF0b21pY19zdWJfcmV0dXJuKGNvdW50LCAmcHQtPnVzZWQp KQogCQkJcHBndHQtPnNjYW5fZm9yX3VudXNlZF9wdCA9IHRydWU7CiAKIAkJLyoKQEAgLTE3ODEs NiArMTc3Niw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfaW5zZXJ0X2VudHJpZXMoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJCQkJICAgICAgdTMyIGZsYWdzKQogewogCXN0cnVj dCBpOTE1X3BwZ3R0ICpwcGd0dCA9IGk5MTVfdm1fdG9fcHBndHQodm0pOworCXN0cnVjdCBpOTE1 X3BhZ2VfZGlyZWN0b3J5ICogY29uc3QgcGQgPSBwcGd0dC0+cGQ7CiAJdW5zaWduZWQgZmlyc3Rf ZW50cnkgPSB2bWEtPm5vZGUuc3RhcnQgLyBJOTE1X0dUVF9QQUdFX1NJWkU7CiAJdW5zaWduZWQg YWN0X3B0ID0gZmlyc3RfZW50cnkgLyBHRU42X1BURVM7CiAJdW5zaWduZWQgYWN0X3B0ZSA9IGZp cnN0X2VudHJ5ICUgR0VONl9QVEVTOwpAQCAtMTc4OCw5ICsxNzg0LDkgQEAgc3RhdGljIHZvaWQg Z2VuNl9wcGd0dF9pbnNlcnRfZW50cmllcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwK IAlzdHJ1Y3Qgc2d0X2RtYSBpdGVyID0gc2d0X2RtYSh2bWEpOwogCWdlbjZfcHRlX3QgKnZhZGRy OwogCi0JR0VNX0JVR19PTihwcGd0dC0+cGQucGFnZV90YWJsZVthY3RfcHRdID09IHZtLT5zY3Jh dGNoX3B0KTsKKwlHRU1fQlVHX09OKGk5MTVfcHRfZW50cnkocGQsIGFjdF9wdCkgPT0gdm0tPnNj cmF0Y2hfcHQpOwogCi0JdmFkZHIgPSBrbWFwX2F0b21pY19weChwcGd0dC0+cGQucGFnZV90YWJs ZVthY3RfcHRdKTsKKwl2YWRkciA9IGttYXBfYXRvbWljX3B4KGk5MTVfcHRfZW50cnkocGQsIGFj dF9wdCkpOwogCWRvIHsKIAkJdmFkZHJbYWN0X3B0ZV0gPSBwdGVfZW5jb2RlIHwgR0VONl9QVEVf QUREUl9FTkNPREUoaXRlci5kbWEpOwogCkBAIC0xODA2LDcgKzE4MDIsNyBAQCBzdGF0aWMgdm9p ZCBnZW42X3BwZ3R0X2luc2VydF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt LAogCiAJCWlmICgrK2FjdF9wdGUgPT0gR0VONl9QVEVTKSB7CiAJCQlrdW5tYXBfYXRvbWljKHZh ZGRyKTsKLQkJCXZhZGRyID0ga21hcF9hdG9taWNfcHgocHBndHQtPnBkLnBhZ2VfdGFibGVbKyth Y3RfcHRdKTsKKwkJCXZhZGRyID0ga21hcF9hdG9taWNfcHgoaTkxNV9wdF9lbnRyeShwZCwgKyth Y3RfcHQpKTsKIAkJCWFjdF9wdGUgPSAwOwogCQl9CiAJfSB3aGlsZSAoMSk7CkBAIC0xODE5LDYg KzE4MTUsNyBAQCBzdGF0aWMgaW50IGdlbjZfYWxsb2NfdmFfcmFuZ2Uoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sCiAJCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoKQogewogCXN0 cnVjdCBnZW42X3BwZ3R0ICpwcGd0dCA9IHRvX2dlbjZfcHBndHQoaTkxNV92bV90b19wcGd0dCh2 bSkpOworCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICogY29uc3QgcGQgPSBwcGd0dC0+YmFz ZS5wZDsKIAlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICpwdDsKIAlpbnRlbF93YWtlcmVmX3Qgd2Fr ZXJlZjsKIAl1NjQgZnJvbSA9IHN0YXJ0OwpAQCAtMTgyNywxNCArMTgyNCwxNCBAQCBzdGF0aWMg aW50IGdlbjZfYWxsb2NfdmFfcmFuZ2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAK IAl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJnZtLT5pOTE1LT5ydW50aW1lX3BtKTsK IAotCXNwaW5fbG9jaygmcHBndHQtPmJhc2UucGQubG9jayk7Ci0JZ2VuNl9mb3JfZWFjaF9wZGUo cHQsICZwcGd0dC0+YmFzZS5wZCwgc3RhcnQsIGxlbmd0aCwgcGRlKSB7CisJc3Bpbl9sb2NrKCZw ZC0+bG9jayk7CisJZ2VuNl9mb3JfZWFjaF9wZGUocHQsIHBkLCBzdGFydCwgbGVuZ3RoLCBwZGUp IHsKIAkJY29uc3QgdW5zaWduZWQgaW50IGNvdW50ID0gZ2VuNl9wdGVfY291bnQoc3RhcnQsIGxl bmd0aCk7CiAKIAkJaWYgKHB0ID09IHZtLT5zY3JhdGNoX3B0KSB7CiAJCQlzdHJ1Y3QgaTkxNV9w YWdlX3RhYmxlICpvbGQ7CiAKLQkJCXNwaW5fdW5sb2NrKCZwcGd0dC0+YmFzZS5wZC5sb2NrKTsK KwkJCXNwaW5fdW5sb2NrKCZwZC0+bG9jayk7CiAKIAkJCXB0ID0gYWxsb2NfcHQodm0pOwogCQkJ aWYgKElTX0VSUihwdCkpCkBAIC0xODQyLDEwICsxODM5LDggQEAgc3RhdGljIGludCBnZW42X2Fs bG9jX3ZhX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCiAJCQlnZW42X2lu aXRpYWxpemVfcHQodm0sIHB0KTsKIAotCQkJb2xkID0gY21weGNoZygmcHBndHQtPmJhc2UucGQu cGFnZV90YWJsZVtwZGVdLAotCQkJCSAgICAgIHZtLT5zY3JhdGNoX3B0LCBwdCk7CisJCQlvbGQg PSBjbXB4Y2hnKCZwZC0+ZW50cnlbcGRlXSwgdm0tPnNjcmF0Y2hfcHQsIHB0KTsKIAkJCWlmIChv bGQgPT0gdm0tPnNjcmF0Y2hfcHQpIHsKLQkJCQlwcGd0dC0+YmFzZS5wZC5wYWdlX3RhYmxlW3Bk ZV0gPSBwdDsKIAkJCQlpZiAoaTkxNV92bWFfaXNfYm91bmQocHBndHQtPnZtYSwKIAkJCQkJCSAg ICAgIEk5MTVfVk1BX0dMT0JBTF9CSU5EKSkgewogCQkJCQlnZW42X3dyaXRlX3BkZShwcGd0dCwg cGRlLCBwdCk7CkBAIC0xODU2LDEyICsxODUxLDEyIEBAIHN0YXRpYyBpbnQgZ2VuNl9hbGxvY192 YV9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCQlwdCA9IG9sZDsKIAkJ CX0KIAotCQkJc3Bpbl9sb2NrKCZwcGd0dC0+YmFzZS5wZC5sb2NrKTsKKwkJCXNwaW5fbG9jaygm cGQtPmxvY2spOwogCQl9CiAKLQkJYXRvbWljX2FkZChjb3VudCwgJnB0LT51c2VkX3B0ZXMpOwor CQlhdG9taWNfYWRkKGNvdW50LCAmcHQtPnVzZWQpOwogCX0KLQlzcGluX3VubG9jaygmcHBndHQt PmJhc2UucGQubG9jayk7CisJc3Bpbl91bmxvY2soJnBkLT5sb2NrKTsKIAogCWlmIChmbHVzaCkg ewogCQltYXJrX3RsYnNfZGlydHkoJnBwZ3R0LT5iYXNlKTsKQEAgLTE4ODEsNiArMTg3Niw3IEBA IHN0YXRpYyBpbnQgZ2VuNl9hbGxvY192YV9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSwKIHN0YXRpYyBpbnQgZ2VuNl9wcGd0dF9pbml0X3NjcmF0Y2goc3RydWN0IGdlbjZfcHBn dHQgKnBwZ3R0KQogewogCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKiBjb25zdCB2bSA9ICZw cGd0dC0+YmFzZS52bTsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBkID0g cHBndHQtPmJhc2UucGQ7CiAJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqdW51c2VkOwogCXUzMiBw ZGU7CiAJaW50IHJldDsKQEAgLTE5MDAsOSArMTg5Niw5IEBAIHN0YXRpYyBpbnQgZ2VuNl9wcGd0 dF9pbml0X3NjcmF0Y2goc3RydWN0IGdlbjZfcHBndHQgKnBwZ3R0KQogCX0KIAogCWdlbjZfaW5p dGlhbGl6ZV9wdCh2bSwgdm0tPnNjcmF0Y2hfcHQpOwotCWdlbjZfZm9yX2FsbF9wZGVzKHVudXNl ZCwgJnBwZ3R0LT5iYXNlLnBkLCBwZGUpCi0JCXBwZ3R0LT5iYXNlLnBkLnBhZ2VfdGFibGVbcGRl XSA9IHZtLT5zY3JhdGNoX3B0OwotCXNwaW5fbG9ja19pbml0KCZwcGd0dC0+YmFzZS5wZC5sb2Nr KTsKKworCWdlbjZfZm9yX2FsbF9wZGVzKHVudXNlZCwgcGQsIHBkZSkKKwkJcGQtPmVudHJ5W3Bk ZV0gPSB2bS0+c2NyYXRjaF9wdDsKIAogCXJldHVybiAwOwogfQpAQCAtMTkxNSwxMCArMTkxMSwx MSBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2ZyZWVfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSkKIAogc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9mcmVlX3BkKHN0cnVjdCBn ZW42X3BwZ3R0ICpwcGd0dCkKIHsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0 IHBkID0gcHBndHQtPmJhc2UucGQ7CiAJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqcHQ7CiAJdTMy IHBkZTsKIAotCWdlbjZfZm9yX2FsbF9wZGVzKHB0LCAmcHBndHQtPmJhc2UucGQsIHBkZSkKKwln ZW42X2Zvcl9hbGxfcGRlcyhwdCwgcGQsIHBkZSkKIAkJaWYgKHB0ICE9IHBwZ3R0LT5iYXNlLnZt LnNjcmF0Y2hfcHQpCiAJCQlmcmVlX3B0KCZwcGd0dC0+YmFzZS52bSwgcHQpOwogfQpAQCAtMTk4 Miw2ICsxOTc5LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhbnVwKHN0cnVjdCBpOTE1 X2FkZHJlc3Nfc3BhY2UgKnZtKQogCiAJZ2VuNl9wcGd0dF9mcmVlX3BkKHBwZ3R0KTsKIAlnZW42 X3BwZ3R0X2ZyZWVfc2NyYXRjaCh2bSk7CisJa2ZyZWUocHBndHQtPmJhc2UucGQpOwogfQogCiBz dGF0aWMgaW50IHBkX3ZtYV9zZXRfcGFnZXMoc3RydWN0IGk5MTVfdm1hICp2bWEpCkBAIC0yMDA3 LDEwICsyMDA1LDEwIEBAIHN0YXRpYyBpbnQgcGRfdm1hX2JpbmQoc3RydWN0IGk5MTVfdm1hICp2 bWEsCiAJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqcHQ7CiAJdW5zaWduZWQgaW50IHBkZTsKIAot CXBwZ3R0LT5iYXNlLnBkLmJhc2UuZ2d0dF9vZmZzZXQgPSBnZ3R0X29mZnNldCAqIHNpemVvZihn ZW42X3B0ZV90KTsKKwlwcGd0dC0+YmFzZS5wZC0+YmFzZS5nZ3R0X29mZnNldCA9IGdndHRfb2Zm c2V0ICogc2l6ZW9mKGdlbjZfcHRlX3QpOwogCXBwZ3R0LT5wZF9hZGRyID0gKGdlbjZfcHRlX3Qg X19pb21lbSAqKWdndHQtPmdzbSArIGdndHRfb2Zmc2V0OwogCi0JZ2VuNl9mb3JfYWxsX3BkZXMo cHQsICZwcGd0dC0+YmFzZS5wZCwgcGRlKQorCWdlbjZfZm9yX2FsbF9wZGVzKHB0LCBwcGd0dC0+ YmFzZS5wZCwgcGRlKQogCQlnZW42X3dyaXRlX3BkZShwcGd0dCwgcGRlLCBwdCk7CiAKIAltYXJr X3RsYnNfZGlydHkoJnBwZ3R0LT5iYXNlKTsKQEAgLTIwMjIsNiArMjAyMCw3IEBAIHN0YXRpYyBp bnQgcGRfdm1hX2JpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEsCiBzdGF0aWMgdm9pZCBwZF92bWFf dW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogewogCXN0cnVjdCBnZW42X3BwZ3R0ICpwcGd0 dCA9IHZtYS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBk ID0gcHBndHQtPmJhc2UucGQ7CiAJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqIGNvbnN0IHNjcmF0 Y2hfcHQgPSBwcGd0dC0+YmFzZS52bS5zY3JhdGNoX3B0OwogCXN0cnVjdCBpOTE1X3BhZ2VfdGFi bGUgKnB0OwogCXVuc2lnbmVkIGludCBwZGU7CkBAIC0yMDMwLDEyICsyMDI5LDEyIEBAIHN0YXRp YyB2b2lkIHBkX3ZtYV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCiAJCXJldHVybjsKIAog CS8qIEZyZWUgYWxsIG5vIGxvbmdlciB1c2VkIHBhZ2UgdGFibGVzICovCi0JZ2VuNl9mb3JfYWxs X3BkZXMocHQsICZwcGd0dC0+YmFzZS5wZCwgcGRlKSB7Ci0JCWlmIChhdG9taWNfcmVhZCgmcHQt PnVzZWRfcHRlcykgfHwgcHQgPT0gc2NyYXRjaF9wdCkKKwlnZW42X2Zvcl9hbGxfcGRlcyhwdCwg cHBndHQtPmJhc2UucGQsIHBkZSkgeworCQlpZiAoYXRvbWljX3JlYWQoJnB0LT51c2VkKSB8fCBw dCA9PSBzY3JhdGNoX3B0KQogCQkJY29udGludWU7CiAKIAkJZnJlZV9wdCgmcHBndHQtPmJhc2Uu dm0sIHB0KTsKLQkJcHBndHQtPmJhc2UucGQucGFnZV90YWJsZVtwZGVdID0gc2NyYXRjaF9wdDsK KwkJcGQtPmVudHJ5W3BkZV0gPSBzY3JhdGNoX3B0OwogCX0KIAogCXBwZ3R0LT5zY2FuX2Zvcl91 bnVzZWRfcHQgPSBmYWxzZTsKQEAgLTIxNjQsOSArMjE2MywxNSBAQCBzdGF0aWMgc3RydWN0IGk5 MTVfcHBndHQgKmdlbjZfcHBndHRfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQogCQlnb3RvIGVycl9mcmVlOwogCX0KIAorCXBwZ3R0LT5iYXNlLnBkID0gX19hbGxvY19wZCgp OworCWlmICghcHBndHQtPmJhc2UucGQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJf d29yazsKKwl9CisKIAllcnIgPSBnZW42X3BwZ3R0X2luaXRfc2NyYXRjaChwcGd0dCk7CiAJaWYg KGVycikKLQkJZ290byBlcnJfd29yazsKKwkJZ290byBlcnJfcGQ7CiAKIAlwcGd0dC0+dm1hID0g cGRfdm1hX2NyZWF0ZShwcGd0dCwgR0VONl9QRF9TSVpFKTsKIAlpZiAoSVNfRVJSKHBwZ3R0LT52 bWEpKSB7CkBAIC0yMTc4LDYgKzIxODMsOCBAQCBzdGF0aWMgc3RydWN0IGk5MTVfcHBndHQgKmdl bjZfcHBndHRfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCiBlcnJfc2Ny YXRjaDoKIAlnZW42X3BwZ3R0X2ZyZWVfc2NyYXRjaCgmcHBndHQtPmJhc2Uudm0pOworZXJyX3Bk OgorCWtmcmVlKHBwZ3R0LT5iYXNlLnBkKTsKIGVycl93b3JrOgogCWtmcmVlKHBwZ3R0LT53b3Jr KTsKIGVycl9mcmVlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAppbmRleCA2M2ZhMzU3 YzY5ZGUuLjgxMjcxN2NjYzY5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZ3R0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKQEAg LTI0OCwyOCArMjQ4LDE0IEBAIHN0cnVjdCBpOTE1X3BhZ2VfZG1hIHsKIAogc3RydWN0IGk5MTVf cGFnZV90YWJsZSB7CiAJc3RydWN0IGk5MTVfcGFnZV9kbWEgYmFzZTsKLQlhdG9taWNfdCB1c2Vk X3B0ZXM7CisJYXRvbWljX3QgdXNlZDsKIH07CiAKIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5 IHsKIAlzdHJ1Y3QgaTkxNV9wYWdlX2RtYSBiYXNlOwotCi0Jc3RydWN0IGk5MTVfcGFnZV90YWJs ZSAqcGFnZV90YWJsZVtJOTE1X1BERVNdOyAvKiBQREVzICovCi0JYXRvbWljX3QgdXNlZF9wZGVz OwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KLXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3Bv aW50ZXIgewotCXN0cnVjdCBpOTE1X3BhZ2VfZG1hIGJhc2U7Ci0Jc3RydWN0IGk5MTVfcGFnZV9k aXJlY3RvcnkgKipwYWdlX2RpcmVjdG9yeTsKLQlhdG9taWNfdCB1c2VkX3BkcGVzOwotCXNwaW5s b2NrX3QgbG9jazsKLX07Ci0KLXN0cnVjdCBpOTE1X3BtbDQgewotCXN0cnVjdCBpOTE1X3BhZ2Vf ZG1hIGJhc2U7Ci0Jc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwc1tHRU44 X1BNTDRFU19QRVJfUE1MNF07CisJYXRvbWljX3QgdXNlZDsKIAlzcGlubG9ja190IGxvY2s7CisJ dm9pZCAqZW50cnlbNTEyXTsKIH07CiAKIHN0cnVjdCBpOTE1X3ZtYV9vcHMgewpAQCAtMzIxLDcg KzMwNyw3IEBAIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgewogCXN0cnVjdCBpOTE1X3BhZ2Vf ZG1hIHNjcmF0Y2hfcGFnZTsKIAlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICpzY3JhdGNoX3B0Owog CXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpzY3JhdGNoX3BkOwotCXN0cnVjdCBpOTE1X3Bh Z2VfZGlyZWN0b3J5X3BvaW50ZXIgKnNjcmF0Y2hfcGRwOyAvKiBHRU44KyAmIDQ4YiBQUEdUVCAq LworCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpzY3JhdGNoX3BkcDsgLyogR0VOOCsgJiA0 OGIgUFBHVFQgKi8KIAogCS8qKgogCSAqIExpc3Qgb2Ygdm1hIGN1cnJlbnRseSBib3VuZC4KQEAg LTQyOCwxMSArNDE0LDcgQEAgc3RydWN0IGk5MTVfcHBndHQgewogCXN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2Ugdm07CiAKIAlpbnRlbF9lbmdpbmVfbWFza190IHBkX2RpcnR5X2VuZ2luZXM7Ci0J dW5pb24gewotCQlzdHJ1Y3QgaTkxNV9wbWw0IHBtbDQ7CQkvKiBHRU44KyAmIDQ4YiBQUEdUVCAq LwotCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyIHBkcDsJLyogR0VOOCsgKi8K LQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgcGQ7CQkvKiBHRU42LTcgKi8KLQl9OworCXN0 cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZDsKIH07CiAKIHN0cnVjdCBnZW42X3BwZ3R0IHsK QEAgLTQ2Niw3ICs0NDgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBnZW42X3BwZ3R0ICp0b19n ZW42X3BwZ3R0KHN0cnVjdCBpOTE1X3BwZ3R0ICpiYXNlKQogI2RlZmluZSBnZW42X2Zvcl9lYWNo X3BkZShwdCwgcGQsIHN0YXJ0LCBsZW5ndGgsIGl0ZXIpCQkJXAogCWZvciAoaXRlciA9IGdlbjZf cGRlX2luZGV4KHN0YXJ0KTsJCQkJXAogCSAgICAgbGVuZ3RoID4gMCAmJiBpdGVyIDwgSTkxNV9Q REVTICYmCQkJCVwKLQkJKHB0ID0gKHBkKS0+cGFnZV90YWJsZVtpdGVyXSwgdHJ1ZSk7CQkJXAor CQkgICAgIChwdCA9IGk5MTVfcHRfZW50cnkocGQsIGl0ZXIpLCB0cnVlKTsJCVwKIAkgICAgICh7 IHUzMiB0ZW1wID0gQUxJR04oc3RhcnQrMSwgMSA8PCBHRU42X1BERV9TSElGVCk7CQlcCiAJCSAg ICB0ZW1wID0gbWluKHRlbXAgLSBzdGFydCwgbGVuZ3RoKTsJCQlcCiAJCSAgICBzdGFydCArPSB0 ZW1wLCBsZW5ndGggLT0gdGVtcDsgfSksICsraXRlcikKQEAgLTQ3NCw3ICs0NTYsNyBAQCBzdGF0 aWMgaW5saW5lIHN0cnVjdCBnZW42X3BwZ3R0ICp0b19nZW42X3BwZ3R0KHN0cnVjdCBpOTE1X3Bw Z3R0ICpiYXNlKQogI2RlZmluZSBnZW42X2Zvcl9hbGxfcGRlcyhwdCwgcGQsIGl0ZXIpCQkJCQlc CiAJZm9yIChpdGVyID0gMDsJCQkJCQkJXAogCSAgICAgaXRlciA8IEk5MTVfUERFUyAmJgkJCQkJ XAotCQkocHQgPSAocGQpLT5wYWdlX3RhYmxlW2l0ZXJdLCB0cnVlKTsJCQlcCisJCSAgICAgKHB0 ID0gaTkxNV9wdF9lbnRyeShwZCwgaXRlciksIHRydWUpOwkJXAogCSAgICAgKytpdGVyKQogCiBz dGF0aWMgaW5saW5lIHUzMiBpOTE1X3B0ZV9pbmRleCh1NjQgYWRkcmVzcywgdW5zaWduZWQgaW50 IHBkZV9zaGlmdCkKQEAgLTUzMyw2ICs1MTUsMjcgQEAgaTkxNV9wZHBlc19wZXJfcGRwKGNvbnN0 IHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQogCXJldHVybiBHRU44XzNMVkxfUERQRVM7 CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqCitpOTE1X3B0X2Vu dHJ5KGNvbnN0IHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICogY29uc3QgcGQsCisJICAgICAg Y29uc3QgdW5zaWduZWQgc2hvcnQgbikKK3sKKwlyZXR1cm4gcGQtPmVudHJ5W25dOworfQorCitz dGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICoKK2k5MTVfcGRfZW50cnko Y29uc3Qgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKiBjb25zdCBwZHAsCisJICAgICAgY29u c3QgdW5zaWduZWQgc2hvcnQgbikKK3sKKwlyZXR1cm4gcGRwLT5lbnRyeVtuXTsKK30KKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqCitpOTE1X3BkcF9lbnRyeShj b25zdCBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBtbDQsCisJICAgICAgIGNv bnN0IHVuc2lnbmVkIHNob3J0IG4pCit7CisJcmV0dXJuIHBtbDQtPmVudHJ5W25dOworfQorCiAv KiBFcXVpdmFsZW50IHRvIHRoZSBnZW42IHZlcnNpb24sIEZvciBlYWNoIHBkZSBpdGVyYXRlcyBv dmVyIGV2ZXJ5IHBkZQogICogYmV0d2VlbiBmcm9tIHN0YXJ0IHVudGlsIHN0YXJ0ICsgbGVuZ3Ro LiBPbiBnZW44KyBpdCBzaW1wbHkgaXRlcmF0ZXMKICAqIG92ZXIgZXZlcnkgcGFnZSBkaXJlY3Rv cnkgZW50cnkgaW4gYSBwYWdlIGRpcmVjdG9yeS4KQEAgLTU0MCw3ICs1NDMsNyBAQCBpOTE1X3Bk cGVzX3Blcl9wZHAoY29uc3Qgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCiAjZGVmaW5l IGdlbjhfZm9yX2VhY2hfcGRlKHB0LCBwZCwgc3RhcnQsIGxlbmd0aCwgaXRlcikJCQlcCiAJZm9y IChpdGVyID0gZ2VuOF9wZGVfaW5kZXgoc3RhcnQpOwkJCQlcCiAJICAgICBsZW5ndGggPiAwICYm IGl0ZXIgPCBJOTE1X1BERVMgJiYJCQkJXAotCQkocHQgPSAocGQpLT5wYWdlX3RhYmxlW2l0ZXJd LCB0cnVlKTsJCQlcCisJCSAgICAgKHB0ID0gaTkxNV9wdF9lbnRyeShwZCwgaXRlciksIHRydWUp OwkJXAogCSAgICAgKHsgdTY0IHRlbXAgPSBBTElHTihzdGFydCsxLCAxIDw8IEdFTjhfUERFX1NI SUZUKTsJCVwKIAkJICAgIHRlbXAgPSBtaW4odGVtcCAtIHN0YXJ0LCBsZW5ndGgpOwkJCVwKIAkJ ICAgIHN0YXJ0ICs9IHRlbXAsIGxlbmd0aCAtPSB0ZW1wOyB9KSwgKytpdGVyKQpAQCAtNTQ4LDcg KzU1MSw3IEBAIGk5MTVfcGRwZXNfcGVyX3BkcChjb25zdCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSkKICNkZWZpbmUgZ2VuOF9mb3JfZWFjaF9wZHBlKHBkLCBwZHAsIHN0YXJ0LCBsZW5n dGgsIGl0ZXIpCQlcCiAJZm9yIChpdGVyID0gZ2VuOF9wZHBlX2luZGV4KHN0YXJ0KTsJCQkJXAog CSAgICAgbGVuZ3RoID4gMCAmJiBpdGVyIDwgaTkxNV9wZHBlc19wZXJfcGRwKHZtKSAmJgkJXAot CQkocGQgPSAocGRwKS0+cGFnZV9kaXJlY3RvcnlbaXRlcl0sIHRydWUpOwkJXAorCQkgICAgIChw ZCA9IGk5MTVfcGRfZW50cnkocGRwLCBpdGVyKSwgdHJ1ZSk7CQlcCiAJICAgICAoeyB1NjQgdGVt cCA9IEFMSUdOKHN0YXJ0KzEsIDEgPDwgR0VOOF9QRFBFX1NISUZUKTsJXAogCQkgICAgdGVtcCA9 IG1pbih0ZW1wIC0gc3RhcnQsIGxlbmd0aCk7CQkJXAogCQkgICAgc3RhcnQgKz0gdGVtcCwgbGVu Z3RoIC09IHRlbXA7IH0pLCArK2l0ZXIpCkBAIC01NTYsNyArNTU5LDcgQEAgaTkxNV9wZHBlc19w ZXJfcGRwKGNvbnN0IHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQogI2RlZmluZSBnZW44 X2Zvcl9lYWNoX3BtbDRlKHBkcCwgcG1sNCwgc3RhcnQsIGxlbmd0aCwgaXRlcikJCVwKIAlmb3Ig KGl0ZXIgPSBnZW44X3BtbDRlX2luZGV4KHN0YXJ0KTsJCQkJXAogCSAgICAgbGVuZ3RoID4gMCAm JiBpdGVyIDwgR0VOOF9QTUw0RVNfUEVSX1BNTDQgJiYJCVwKLQkJKHBkcCA9IChwbWw0KS0+cGRw c1tpdGVyXSwgdHJ1ZSk7CQkJXAorCQkgICAgIChwZHAgPSBpOTE1X3BkcF9lbnRyeShwbWw0LCBp dGVyKSwgdHJ1ZSk7CQlcCiAJICAgICAoeyB1NjQgdGVtcCA9IEFMSUdOKHN0YXJ0KzEsIDFVTEwg PDwgR0VOOF9QTUw0RV9TSElGVCk7CVwKIAkJICAgIHRlbXAgPSBtaW4odGVtcCAtIHN0YXJ0LCBs ZW5ndGgpOwkJCVwKIAkJICAgIHN0YXJ0ICs9IHRlbXAsIGxlbmd0aCAtPSB0ZW1wOyB9KSwgKytp dGVyKQpAQCAtNTg5LDcgKzU5MiwxMCBAQCBzdGF0aWMgaW5saW5lIHU2NCBnZW44X3B0ZV9jb3Vu dCh1NjQgYWRkcmVzcywgdTY0IGxlbmd0aCkKIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAogaTkx NV9wYWdlX2Rpcl9kbWFfYWRkcihjb25zdCBzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQsIGNvbnN0 IHVuc2lnbmVkIGludCBuKQogewotCXJldHVybiBweF9kbWEocHBndHQtPnBkcC5wYWdlX2RpcmVj dG9yeVtuXSk7CisJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkOworCisJcGQgPSBpOTE1 X3BkcF9lbnRyeShwcGd0dC0+cGQsIG4pOworCXJldHVybiBweF9kbWEocGQpOwogfQogCiBzdGF0 aWMgaW5saW5lIHN0cnVjdCBpOTE1X2dndHQgKgotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=