From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: [PATCH 2/9] drm/i915/gtt: Use a common type for page directories Date: Tue, 11 Jun 2019 20:27:24 +0300 Message-ID: <20190611172731.19174-2-mika.kuoppala@linux.intel.com> References: <20190611172731.19174-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 mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 019C0891D4 for ; Tue, 11 Jun 2019 17:27:36 +0000 (UTC) In-Reply-To: <20190611172731.19174-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 ZGlyZWN0b3J5IGZ1bmN0aW9uYWxpdHkuCgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13 aWxzb24uY28udWs+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5p bnRlbC5jb20+CkNjOiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcud2lsbGlhbS5hdWxkQGdtYWlsLmNv bT4KQ2M6IEFiZGllbCBKYW51bGd1ZSA8YWJkaWVsLmphbnVsZ3VlQGxpbnV4LmludGVsLmNvbT4K U2lnbmVkLW9mZi1ieTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5j b20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYyB8ICAg MiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oICAgICB8ICAgMiAr LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ2J1ZmZlci5jICB8ICAgMiArLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5jICAgICAgICB8ICAzMCArLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgICAgICAgICB8IDM0OSArKysrKysrKysr LS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmggICAgICAgICB8 ICA2NCArKy0tCiA2IGZpbGVzIGNoYW5nZWQsIDIzNCBpbnNlcnRpb25zKCspLCAyMTUgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2Nv bnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKaW5k ZXggYzg2Y2E5ZjIxNTMyLi5kYmFiMGFiMWNlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX2NvbnRleHQuYwpAQCAtMTAzOCw3ICsxMDM4LDcgQEAgc3RhdGljIGludCBl bWl0X3BwZ3R0X3VwZGF0ZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSkKIAog CWlmIChpOTE1X3ZtX2lzXzRsdmwodm0pKSB7CiAJCXN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCA9 IGk5MTVfdm1fdG9fcHBndHQodm0pOwotCQljb25zdCBkbWFfYWRkcl90IHBkX2RhZGRyID0gcHhf ZG1hKCZwcGd0dC0+cG1sNCk7CisJCWNvbnN0IGRtYV9hZGRyX3QgcGRfZGFkZHIgPSBweF9kbWEo cHBndHQtPnBkKTsKIAogCQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDYpOwogCQlpZiAoSVNf RVJSKGNzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyY19y ZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyY19yZWcuaAppbmRleCA1ZWY5 MzJkODEwYTcuLjZiZjM0NzM4YjRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfbHJjX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xy Y19yZWcuaApAQCAtNTUsNyArNTUsNyBAQAogCiAjZGVmaW5lIEFTU0lHTl9DVFhfUE1MNChwcGd0 dCwgcmVnX3N0YXRlKSBkbyB7IFwKIAl1MzIgKnJlZ19zdGF0ZV9fID0gKHJlZ19zdGF0ZSk7IFwK LQljb25zdCB1NjQgYWRkcl9fID0gcHhfZG1hKCZwcGd0dC0+cG1sNCk7IFwKKwljb25zdCB1NjQg YWRkcl9fID0gcHhfZG1hKHBwZ3R0LT5wZCk7IFwKIAkocmVnX3N0YXRlX18pW0NUWF9QRFAwX1VE VyArIDFdID0gdXBwZXJfMzJfYml0cyhhZGRyX18pOyBcCiAJKHJlZ19zdGF0ZV9fKVtDVFhfUERQ MF9MRFcgKyAxXSA9IGxvd2VyXzMyX2JpdHMoYWRkcl9fKTsgXAogfSB3aGlsZSAoMCkKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JpbmdidWZmZXIuYwppbmRleCBjODM0ZDAxNmM5NjUu LjNiODU3OTk0OTQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf cmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JpbmdidWZm ZXIuYwpAQCAtMTUyMyw3ICsxNTIzLDcgQEAgc3RhdGljIGludCBsb2FkX3BkX2RpcihzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwgY29uc3Qgc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0KQogCiAJKmNz KysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKIAkqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zm c2V0KFJJTkdfUFBfRElSX0JBU0UoZW5naW5lLT5tbWlvX2Jhc2UpKTsKLQkqY3MrKyA9IHBwZ3R0 LT5wZC5iYXNlLmdndHRfb2Zmc2V0IDw8IDEwOworCSpjcysrID0gcHBndHQtPnBkLT5iYXNlLmdn dHRfb2Zmc2V0IDw8IDEwOwogCiAJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7CiAKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9zY2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9zY2hlZHVsZXIuYwppbmRleCBlMzAxZWZiMThkNDUuLmYxZTEyNjFhYzNk YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9zY2hlZHVsZXIuYwpAQCAtMzc1LDExICszNzUsMTMg QEAgc3RhdGljIGludCBzZXRfY29udGV4dF9wcGd0dF9mcm9tX3NoYWRvdyhzdHJ1Y3QgaW50ZWxf dmdwdV93b3JrbG9hZCAqd29ya2xvYWQsCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG1tLT5w cGd0dF9tbS5yb290X2VudHJ5X3R5cGUgPT0gR1RUX1RZUEVfUFBHVFRfUk9PVF9MNF9FTlRSWSkg ewotCQlweF9kbWEoJnBwZ3R0LT5wbWw0KSA9IG1tLT5wcGd0dF9tbS5zaGFkb3dfcGRwc1swXTsK KwkJcHhfZG1hKHBwZ3R0LT5wZCkgPSBtbS0+cHBndHRfbW0uc2hhZG93X3BkcHNbMF07CiAJfSBl bHNlIHsKIAkJZm9yIChpID0gMDsgaSA8IEdWVF9SSU5HX0NUWF9OUl9QRFBTOyBpKyspIHsKLQkJ CXB4X2RtYShwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldKSA9Ci0JCQkJbW0tPnBwZ3R0X21t LnNoYWRvd19wZHBzW2ldOworCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKiBjb25zdCBw ZCA9CisJCQkJaTkxNV9wZF9lbnRyeShwcGd0dC0+cGQsIGkpOworCisJCQlweF9kbWEocGQpID0g bW0tPnBwZ3R0X21tLnNoYWRvd19wZHBzW2ldOwogCQl9CiAJfQogCkBAIC0xMTI4LDExICsxMTMw LDE0IEBAIGk5MTVfY29udGV4dF9wcGd0dF9yb290X3Jlc3RvcmUoc3RydWN0IGludGVsX3ZncHVf c3VibWlzc2lvbiAqcywKIAlpbnQgaTsKIAogCWlmIChpOTE1X3ZtX2lzXzRsdmwoJnBwZ3R0LT52 bSkpIHsKLQkJcHhfZG1hKCZwcGd0dC0+cG1sNCkgPSBzLT5pOTE1X2NvbnRleHRfcG1sNDsKKwkJ cHhfZG1hKHBwZ3R0LT5wZCkgPSBzLT5pOTE1X2NvbnRleHRfcG1sNDsKIAl9IGVsc2UgewotCQlm b3IgKGkgPSAwOyBpIDwgR0VOOF8zTFZMX1BEUEVTOyBpKyspCi0JCQlweF9kbWEocHBndHQtPnBk cC5wYWdlX2RpcmVjdG9yeVtpXSkgPQotCQkJCXMtPmk5MTVfY29udGV4dF9wZHBzW2ldOworCQlm b3IgKGkgPSAwOyBpIDwgR0VOOF8zTFZMX1BEUEVTOyBpKyspIHsKKwkJCXN0cnVjdCBpOTE1X3Bh Z2VfZGlyZWN0b3J5ICogY29uc3QgcGQgPQorCQkJCWk5MTVfcGRfZW50cnkocHBndHQtPnBkLCBp KTsKKworCQkJcHhfZG1hKHBkKSA9IHMtPmk5MTVfY29udGV4dF9wZHBzW2ldOworCQl9CiAJfQog fQogCkBAIC0xMTg2LDExICsxMTkxLDE0IEBAIGk5MTVfY29udGV4dF9wcGd0dF9yb290X3NhdmUo c3RydWN0IGludGVsX3ZncHVfc3VibWlzc2lvbiAqcywKIAlpbnQgaTsKIAogCWlmIChpOTE1X3Zt X2lzXzRsdmwoJnBwZ3R0LT52bSkpIHsKLQkJcy0+aTkxNV9jb250ZXh0X3BtbDQgPSBweF9kbWEo JnBwZ3R0LT5wbWw0KTsKKwkJcy0+aTkxNV9jb250ZXh0X3BtbDQgPSBweF9kbWEocHBndHQtPnBk KTsKIAl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgR0VOOF8zTFZMX1BEUEVTOyBpKyspCi0J CQlzLT5pOTE1X2NvbnRleHRfcGRwc1tpXSA9Ci0JCQkJcHhfZG1hKHBwZ3R0LT5wZHAucGFnZV9k aXJlY3RvcnlbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgR0VOOF8zTFZMX1BEUEVTOyBpKyspIHsK KwkJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICogY29uc3QgcGQgPQorCQkJCWk5MTVfcGRf ZW50cnkocHBndHQtPnBkLCBpKTsKKworCQkJcy0+aTkxNV9jb250ZXh0X3BkcHNbaV0gPSBweF9k bWEocGQpOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCmluZGV4 IDA3Zjg2ZDQ3NGZhMi4uOWExZjk1NmE4MTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ndHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuYwpAQCAtNjYxLDcgKzY2MSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICph bGxvY19wdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKIAkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7CiAJfQogCi0JYXRvbWljX3NldCgmcHQtPnVzZWRfcHRlcywgMCk7CisJYXRvbWlj X3NldCgmcHQtPnVzZWQsIDApOworCiAJcmV0dXJuIHB0OwogfQogCkBAIC02ODMsMTEgKzY4NCwy OCBAQCBzdGF0aWMgdm9pZCBnZW42X2luaXRpYWxpemVfcHQoc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0sCiAJZmlsbDMyX3B4KHZtLCBwdCwgdm0tPnNjcmF0Y2hfcHRlKTsKIH0KIAorc3Rh dGljIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpfX2FsbG9jX3BkKGNvbnN0IHVuc2lnbmVk IGludCBlbnRyaWVzKQoreworCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZDsKKworCXBk ID0ga21hbGxvYyhzaXplb2YoKnBkKSArCisJCSAgICAgZW50cmllcyAqIHNpemVvZihwZC0+ZW50 cnlbMF0pLCBJOTE1X0dGUF9BTExPV19GQUlMKTsKKworCWlmICh1bmxpa2VseSghcGQpKQorCQly ZXR1cm4gTlVMTDsKKworCW1lbXNldCgmcGQtPmJhc2UsIDAsIHNpemVvZihwZC0+YmFzZSkpOwor CWF0b21pY19zZXQoJnBkLT51c2VkLCAwKTsKKwlzcGluX2xvY2tfaW5pdCgmcGQtPmxvY2spOwor CisJcmV0dXJuIHBkOworfQorCiBzdGF0aWMgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKmFs bG9jX3BkKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQogewogCXN0cnVjdCBpOTE1X3Bh Z2VfZGlyZWN0b3J5ICpwZDsKIAotCXBkID0ga21hbGxvYyhzaXplb2YoKnBkKSwgSTkxNV9HRlBf QUxMT1dfRkFJTCk7CisJcGQgPSBfX2FsbG9jX3BkKDUxMik7CiAJaWYgKHVubGlrZWx5KCFwZCkp CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC02OTYsOCArNzE0LDYgQEAgc3RhdGlj IHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICphbGxvY19wZChzdHJ1Y3QgaTkxNV9hZGRyZXNz X3NwYWNlICp2bSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCi0JYXRvbWljX3Nl dCgmcGQtPnVzZWRfcGRlcywgMCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnBkLT5sb2NrKTsKIAlyZXR1 cm4gcGQ7CiB9CiAKQEAgLTcxMyw4OCArNzI5LDU2IEBAIHN0YXRpYyB2b2lkIGdlbjhfaW5pdGlh bGl6ZV9wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIHsKIAlmaWxsX3B4KHZtLCBw ZCwKIAkJZ2VuOF9wZGVfZW5jb2RlKHB4X2RtYSh2bS0+c2NyYXRjaF9wdCksIEk5MTVfQ0FDSEVf TExDKSk7Ci0JbWVtc2V0X3AoKHZvaWQgKiopcGQtPnBhZ2VfdGFibGUsIHZtLT5zY3JhdGNoX3B0 LCBJOTE1X1BERVMpOworCW1lbXNldF9wKHBkLT5lbnRyeSwgdm0tPnNjcmF0Y2hfcHQsIEk5MTVf UERFUyk7CiB9CiAKLXN0YXRpYyBpbnQgX19wZHBfaW5pdChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKLQkJICAgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRw KQorc3RhdGljIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICphbGxvY19wZHAoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0pCiB7Ci0JY29uc3QgdW5zaWduZWQgaW50IHBkcGVzID0gaTkx NV9wZHBlc19wZXJfcGRwKHZtKTsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGRwOwog Ci0JcGRwLT5wYWdlX2RpcmVjdG9yeSA9IGttYWxsb2NfYXJyYXkocGRwZXMsIHNpemVvZigqcGRw LT5wYWdlX2RpcmVjdG9yeSksCi0JCQkJCSAgICBJOTE1X0dGUF9BTExPV19GQUlMKTsKLQlpZiAo dW5saWtlbHkoIXBkcC0+cGFnZV9kaXJlY3RvcnkpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1l bXNldF9wKCh2b2lkICoqKXBkcC0+cGFnZV9kaXJlY3RvcnksIHZtLT5zY3JhdGNoX3BkLCBwZHBl cyk7Ci0KLQlhdG9taWNfc2V0KCZwZHAtPnVzZWRfcGRwZXMsIDApOwotCXNwaW5fbG9ja19pbml0 KCZwZHAtPmxvY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX3BkcF9maW5pKHN0 cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBkcCkKLXsKLQlrZnJlZShwZHAtPnBh Z2VfZGlyZWN0b3J5KTsKLQlwZHAtPnBhZ2VfZGlyZWN0b3J5ID0gTlVMTDsKLX0KLQotc3RhdGlj IHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKgotYWxsb2NfcGRwKHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQotewotCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3Bv aW50ZXIgKnBkcDsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQotCUdFTV9CVUdfT04oIWk5MTVfdm1f aXNfNGx2bCh2bSkpOwotCi0JcGRwID0ga21hbGxvYyhzaXplb2YoKnBkcCksIEdGUF9LRVJORUwp OworCXBkcCA9IF9fYWxsb2NfcGQoaTkxNV9wZHBlc19wZXJfcGRwKHZtKSk7CiAJaWYgKCFwZHAp CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JcmV0ID0gX19wZHBfaW5pdCh2bSwgcGRw KTsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWxfYml0bWFwOwotCi0JcmV0ID0gc2V0dXBfcHgodm0s IHBkcCk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsX3BhZ2VfbTsKKwlpZiAoaTkxNV92bV9pc180 bHZsKHZtKSkgeworCQlpZiAodW5saWtlbHkoc2V0dXBfcHgodm0sIHBkcCkpKSB7CisJCQlrZnJl ZShwZHApOworCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCX0KKwl9CiAKIAlyZXR1cm4g cGRwOwotCi1mYWlsX3BhZ2VfbToKLQlfX3BkcF9maW5pKHBkcCk7Ci1mYWlsX2JpdG1hcDoKLQlr ZnJlZShwZHApOwotCi0JcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAogc3RhdGljIHZvaWQgZnJl ZV9wZHAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCi0JCSAgICAgc3RydWN0IGk5MTVf cGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwKQorCQkgICAgIHN0cnVjdCBpOTE1X3BhZ2VfZGly ZWN0b3J5ICpwZHApCiB7Ci0JX19wZHBfZmluaShwZHApOwotCi0JaWYgKCFpOTE1X3ZtX2lzXzRs dmwodm0pKQotCQlyZXR1cm47CisJaWYgKGk5MTVfdm1faXNfNGx2bCh2bSkpCisJCWNsZWFudXBf cHgodm0sIHBkcCk7CiAKLQljbGVhbnVwX3B4KHZtLCBwZHApOwogCWtmcmVlKHBkcCk7CiB9CiAK LXN0YXRpYyB2b2lkIGdlbjhfaW5pdGlhbGl6ZV9wZHAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0sCi0JCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwKQorc3Rh dGljIHZvaWQgZ2VuOF9pbml0aWFsaXplXzRsdmxfcGRwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtLAorCQkJCSAgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkcCkKIHsKIAlm aWxsX3B4KHZtLCBwZHAsCiAJCWdlbjhfcGRwZV9lbmNvZGUocHhfZG1hKHZtLT5zY3JhdGNoX3Bk KSwgSTkxNV9DQUNIRV9MTEMpKTsKKwltZW1zZXRfcChwZHAtPmVudHJ5LCB2bS0+c2NyYXRjaF9w ZCwgNTEyKTsKK30KKworc3RhdGljIHZvaWQgZ2VuOF9pbml0aWFsaXplXzNsdmxfcGRwKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJCSAgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJl Y3RvcnkgKnBkcCkKK3sKKwltZW1zZXRfcChwZHAtPmVudHJ5LCB2bS0+c2NyYXRjaF9wZCwgR0VO OF8zTFZMX1BEUEVTKTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuOF9pbml0aWFsaXplX3BtbDQoc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCi0JCQkJIHN0cnVjdCBpOTE1X3BtbDQgKnBtbDQp CisJCQkJIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwbWw0KQogewogCWZpbGxfcHgodm0s IHBtbDQsCiAJCWdlbjhfcG1sNGVfZW5jb2RlKHB4X2RtYSh2bS0+c2NyYXRjaF9wZHApLCBJOTE1 X0NBQ0hFX0xMQykpOwotCW1lbXNldF9wKCh2b2lkICoqKXBtbDQtPnBkcHMsIHZtLT5zY3JhdGNo X3BkcCwgR0VOOF9QTUw0RVNfUEVSX1BNTDQpOwotCXNwaW5fbG9ja19pbml0KCZwbWw0LT5sb2Nr KTsKKwltZW1zZXRfcChwbWw0LT5lbnRyeSwgdm0tPnNjcmF0Y2hfcGRwLCBHRU44X1BNTDRFU19Q RVJfUE1MNCk7CiB9CiAKIC8qCkBAIC04MjIsOCArODA2LDggQEAgc3RhdGljIGJvb2wgZ2VuOF9w cGd0dF9jbGVhcl9wdChjb25zdCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAltZW1z ZXQ2NCh2YWRkciArIGdlbjhfcHRlX2luZGV4KHN0YXJ0KSwgdm0tPnNjcmF0Y2hfcHRlLCBudW1f ZW50cmllcyk7CiAJa3VubWFwX2F0b21pYyh2YWRkcik7CiAKLQlHRU1fQlVHX09OKG51bV9lbnRy aWVzID4gYXRvbWljX3JlYWQoJnB0LT51c2VkX3B0ZXMpKTsKLQlyZXR1cm4gIWF0b21pY19zdWJf cmV0dXJuKG51bV9lbnRyaWVzLCAmcHQtPnVzZWRfcHRlcyk7CisJR0VNX0JVR19PTihudW1fZW50 cmllcyA+IGF0b21pY19yZWFkKCZwdC0+dXNlZCkpOworCXJldHVybiAhYXRvbWljX3N1Yl9yZXR1 cm4obnVtX2VudHJpZXMsICZwdC0+dXNlZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRf c2V0X3BkZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKQEAgLTg1NCwxMiArODM4LDEy IEBAIHN0YXRpYyBib29sIGdlbjhfcHBndHRfY2xlYXJfcGQoc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0sCiAJCQljb250aW51ZTsKIAogCQlzcGluX2xvY2soJnBkLT5sb2NrKTsKLQkJaWYg KCFhdG9taWNfcmVhZCgmcHQtPnVzZWRfcHRlcykpIHsKKwkJaWYgKCFhdG9taWNfcmVhZCgmcHQt PnVzZWQpKSB7CiAJCQlnZW44X3BwZ3R0X3NldF9wZGUodm0sIHBkLCB2bS0+c2NyYXRjaF9wdCwg cGRlKTsKLQkJCXBkLT5wYWdlX3RhYmxlW3BkZV0gPSB2bS0+c2NyYXRjaF9wdDsKKwkJCXBkLT5l bnRyeVtwZGVdID0gdm0tPnNjcmF0Y2hfcHQ7CiAKLQkJCUdFTV9CVUdfT04oIWF0b21pY19yZWFk KCZwZC0+dXNlZF9wZGVzKSk7Ci0JCQlhdG9taWNfZGVjKCZwZC0+dXNlZF9wZGVzKTsKKwkJCUdF TV9CVUdfT04oIWF0b21pY19yZWFkKCZwZC0+dXNlZCkpOworCQkJYXRvbWljX2RlYygmcGQtPnVz ZWQpOwogCQkJZnJlZSA9IHRydWU7CiAJCX0KIAkJc3Bpbl91bmxvY2soJnBkLT5sb2NrKTsKQEAg LTg2NywxMSArODUxLDExIEBAIHN0YXRpYyBib29sIGdlbjhfcHBndHRfY2xlYXJfcGQoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJCQlmcmVlX3B0KHZtLCBwdCk7CiAJfQogCi0JcmV0 dXJuICFhdG9taWNfcmVhZCgmcGQtPnVzZWRfcGRlcyk7CisJcmV0dXJuICFhdG9taWNfcmVhZCgm cGQtPnVzZWQpOwogfQogCiBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X3NldF9wZHBlKHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAotCQkJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3Bv aW50ZXIgKnBkcCwKKwkJCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGRwLAogCQkJCXN0 cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZCwKIAkJCQl1bnNpZ25lZCBpbnQgcGRwZSkKIHsK QEAgLTg4OSw3ICs4NzMsNyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X3NldF9wZHBlKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogICogQ2FsbGVyIGNhbiB1c2UgdGhlIHJldHVybiB2 YWx1ZSB0byB1cGRhdGUgaGlnaGVyLWxldmVsIGVudHJpZXMKICAqLwogc3RhdGljIGJvb2wgZ2Vu OF9wcGd0dF9jbGVhcl9wZHAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCi0JCQkJIHN0 cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBkcCwKKwkJCQkgc3RydWN0IGk5MTVf cGFnZV9kaXJlY3RvcnkgKiBjb25zdCBwZHAsCiAJCQkJIHU2NCBzdGFydCwgdTY0IGxlbmd0aCkK IHsKIAlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQ7CkBAIC05MDQsMTIgKzg4OCwxMiBA QCBzdGF0aWMgYm9vbCBnZW44X3BwZ3R0X2NsZWFyX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSwKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fbG9jaygmcGRwLT5sb2NrKTsKLQkJaWYg KCFhdG9taWNfcmVhZCgmcGQtPnVzZWRfcGRlcykpIHsKKwkJaWYgKCFhdG9taWNfcmVhZCgmcGQt PnVzZWQpKSB7CiAJCQlnZW44X3BwZ3R0X3NldF9wZHBlKHZtLCBwZHAsIHZtLT5zY3JhdGNoX3Bk LCBwZHBlKTsKLQkJCXBkcC0+cGFnZV9kaXJlY3RvcnlbcGRwZV0gPSB2bS0+c2NyYXRjaF9wZDsK KwkJCXBkcC0+ZW50cnlbcGRwZV0gPSB2bS0+c2NyYXRjaF9wZDsKIAotCQkJR0VNX0JVR19PTigh YXRvbWljX3JlYWQoJnBkcC0+dXNlZF9wZHBlcykpOwotCQkJYXRvbWljX2RlYygmcGRwLT51c2Vk X3BkcGVzKTsKKwkJCUdFTV9CVUdfT04oIWF0b21pY19yZWFkKCZwZHAtPnVzZWQpKTsKKwkJCWF0 b21pY19kZWMoJnBkcC0+dXNlZCk7CiAJCQlmcmVlID0gdHJ1ZTsKIAkJfQogCQlzcGluX3VubG9j aygmcGRwLT5sb2NrKTsKQEAgLTkxNywxNyArOTAxLDE3IEBAIHN0YXRpYyBib29sIGdlbjhfcHBn dHRfY2xlYXJfcGRwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJZnJlZV9wZCh2 bSwgcGQpOwogCX0KIAotCXJldHVybiAhYXRvbWljX3JlYWQoJnBkcC0+dXNlZF9wZHBlcyk7CisJ cmV0dXJuICFhdG9taWNfcmVhZCgmcGRwLT51c2VkKTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuOF9w cGd0dF9jbGVhcl8zbHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJCSAgdTY0 IHN0YXJ0LCB1NjQgbGVuZ3RoKQogewotCWdlbjhfcHBndHRfY2xlYXJfcGRwKHZtLCAmaTkxNV92 bV90b19wcGd0dCh2bSktPnBkcCwgc3RhcnQsIGxlbmd0aCk7CisJZ2VuOF9wcGd0dF9jbGVhcl9w ZHAodm0sIGk5MTVfdm1fdG9fcHBndHQodm0pLT5wZCwgc3RhcnQsIGxlbmd0aCk7CiB9CiAKLXN0 YXRpYyB2b2lkIGdlbjhfcHBndHRfc2V0X3BtbDRlKHN0cnVjdCBpOTE1X3BtbDQgKnBtbDQsCi0J CQkJIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBkcCwKK3N0YXRpYyB2b2lk IGdlbjhfcHBndHRfc2V0X3BtbDRlKHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwbWw0LAor CQkJCSBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGRwLAogCQkJCSB1bnNpZ25lZCBpbnQg cG1sNGUpCiB7CiAJZ2VuOF9wcGd0dF9wbWw0ZV90ICp2YWRkcjsKQEAgLTk0NSw4ICs5MjksOCBA QCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFyXzRsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0sCiAJCQkJICB1NjQgc3RhcnQsIHU2NCBsZW5ndGgpCiB7CiAJc3RydWN0IGk5MTVf cHBndHQgKnBwZ3R0ID0gaTkxNV92bV90b19wcGd0dCh2bSk7Ci0Jc3RydWN0IGk5MTVfcG1sNCAq cG1sNCA9ICZwcGd0dC0+cG1sNDsKLQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVy ICpwZHA7CisJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKiBjb25zdCBwbWw0ID0gcHBndHQt PnBkOworCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZHA7CiAJdW5zaWduZWQgaW50IHBt bDRlOwogCiAJR0VNX0JVR19PTighaTkxNV92bV9pc180bHZsKHZtKSk7CkBAIC05NTksOSArOTQz LDkgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhcl80bHZsKHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2UgKnZtLAogCQkJY29udGludWU7CiAKIAkJc3Bpbl9sb2NrKCZwbWw0LT5sb2NrKTsK LQkJaWYgKCFhdG9taWNfcmVhZCgmcGRwLT51c2VkX3BkcGVzKSkgeworCQlpZiAoIWF0b21pY19y ZWFkKCZwZHAtPnVzZWQpKSB7CiAJCQlnZW44X3BwZ3R0X3NldF9wbWw0ZShwbWw0LCB2bS0+c2Ny YXRjaF9wZHAsIHBtbDRlKTsKLQkJCXBtbDQtPnBkcHNbcG1sNGVdID0gdm0tPnNjcmF0Y2hfcGRw OworCQkJcG1sNC0+ZW50cnlbcG1sNGVdID0gdm0tPnNjcmF0Y2hfcGRwOwogCQkJZnJlZSA9IHRy dWU7CiAJCX0KIAkJc3Bpbl91bmxvY2soJnBtbDQtPmxvY2spOwpAQCAtOTk4LDcgKzk4Miw3IEBA IHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGdlbjhfaW5zZXJ0X3B0ZSBnZW44X2luc2Vy dF9wdGUodTY0IHN0YXJ0KQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wKIGdlbjhfcHBn dHRfaW5zZXJ0X3B0ZV9lbnRyaWVzKHN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCwKLQkJCSAgICAg IHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIgKnBkcCwKKwkJCSAgICAgIHN0cnVj dCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZHAsCiAJCQkgICAgICBzdHJ1Y3Qgc2d0X2RtYSAqaXRl ciwKIAkJCSAgICAgIHN0cnVjdCBnZW44X2luc2VydF9wdGUgKmlkeCwKIAkJCSAgICAgIGVudW0g aTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKQEAgLTEwMTAsOCArOTk0LDggQEAgZ2VuOF9w cGd0dF9pbnNlcnRfcHRlX2VudHJpZXMoc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0LAogCWJvb2wg cmV0OwogCiAJR0VNX0JVR19PTihpZHgtPnBkcGUgPj0gaTkxNV9wZHBlc19wZXJfcGRwKCZwcGd0 dC0+dm0pKTsKLQlwZCA9IHBkcC0+cGFnZV9kaXJlY3RvcnlbaWR4LT5wZHBlXTsKLQl2YWRkciA9 IGttYXBfYXRvbWljX3B4KHBkLT5wYWdlX3RhYmxlW2lkeC0+cGRlXSk7CisJcGQgPSBpOTE1X3Bk X2VudHJ5KHBkcCwgaWR4LT5wZHBlKTsKKwl2YWRkciA9IGttYXBfYXRvbWljX3B4KGk5MTVfcHRf ZW50cnkocGQsIGlkeC0+cGRlKSk7CiAJZG8gewogCQl2YWRkcltpZHgtPnB0ZV0gPSBwdGVfZW5j b2RlIHwgaXRlci0+ZG1hOwogCkBAIC0xMDQxLDExICsxMDI1LDExIEBAIGdlbjhfcHBndHRfaW5z ZXJ0X3B0ZV9lbnRyaWVzKHN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCwKIAkJCQl9CiAKIAkJCQlH RU1fQlVHX09OKGlkeC0+cGRwZSA+PSBpOTE1X3BkcGVzX3Blcl9wZHAoJnBwZ3R0LT52bSkpOwot CQkJCXBkID0gcGRwLT5wYWdlX2RpcmVjdG9yeVtpZHgtPnBkcGVdOworCQkJCXBkID0gcGRwLT5l bnRyeVtpZHgtPnBkcGVdOwogCQkJfQogCiAJCQlrdW5tYXBfYXRvbWljKHZhZGRyKTsKLQkJCXZh ZGRyID0ga21hcF9hdG9taWNfcHgocGQtPnBhZ2VfdGFibGVbaWR4LT5wZGVdKTsKKwkJCXZhZGRy ID0ga21hcF9hdG9taWNfcHgoaTkxNV9wdF9lbnRyeShwZCwgaWR4LT5wZGUpKTsKIAkJfQogCX0g d2hpbGUgKDEpOwogCWt1bm1hcF9hdG9taWModmFkZHIpOwpAQCAtMTA2MiwxNCArMTA0NiwxNCBA QCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2luc2VydF8zbHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtLAogCXN0cnVjdCBzZ3RfZG1hIGl0ZXIgPSBzZ3RfZG1hKHZtYSk7CiAJc3RydWN0 IGdlbjhfaW5zZXJ0X3B0ZSBpZHggPSBnZW44X2luc2VydF9wdGUodm1hLT5ub2RlLnN0YXJ0KTsK IAotCWdlbjhfcHBndHRfaW5zZXJ0X3B0ZV9lbnRyaWVzKHBwZ3R0LCAmcHBndHQtPnBkcCwgJml0 ZXIsICZpZHgsCisJZ2VuOF9wcGd0dF9pbnNlcnRfcHRlX2VudHJpZXMocHBndHQsIHBwZ3R0LT5w ZCwgJml0ZXIsICZpZHgsCiAJCQkJICAgICAgY2FjaGVfbGV2ZWwsIGZsYWdzKTsKIAogCXZtYS0+ cGFnZV9zaXplcy5ndHQgPSBJOTE1X0dUVF9QQUdFX1NJWkU7CiB9CiAKIHN0YXRpYyB2b2lkIGdl bjhfcHBndHRfaW5zZXJ0X2h1Z2VfZW50cmllcyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKLQkJCQkJ ICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqKnBkcHMsCisJCQkJCSAgIHN0 cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwbWw0LAogCQkJCQkgICBzdHJ1Y3Qgc2d0X2RtYSAq aXRlciwKIAkJCQkJICAgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAogCQkJCQkg ICB1MzIgZmxhZ3MpCkBAIC0xMDgwLDggKzEwNjQsOSBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0 X2luc2VydF9odWdlX2VudHJpZXMoc3RydWN0IGk5MTVfdm1hICp2bWEsCiAKIAlkbyB7CiAJCXN0 cnVjdCBnZW44X2luc2VydF9wdGUgaWR4ID0gZ2VuOF9pbnNlcnRfcHRlKHN0YXJ0KTsKLQkJc3Ry dWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAqcGRwID0gcGRwc1tpZHgucG1sNGVdOwot CQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQgPSBwZHAtPnBhZ2VfZGlyZWN0b3J5W2lk eC5wZHBlXTsKKwkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkcCA9CisJCQlpOTE1X3Bk cF9lbnRyeShwbWw0LCBpZHgucG1sNGUpOworCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAq cGQgPSBpOTE1X3BkX2VudHJ5KHBkcCwgaWR4LnBkcGUpOwogCQl1bnNpZ25lZCBpbnQgcGFnZV9z aXplOwogCQlib29sIG1heWJlXzY0SyA9IGZhbHNlOwogCQlnZW44X3B0ZV90IGVuY29kZSA9IHB0 ZV9lbmNvZGU7CkBAIC0xMDk5LDcgKzEwODQsNyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2lu c2VydF9odWdlX2VudHJpZXMoc3RydWN0IGk5MTVfdm1hICp2bWEsCiAKIAkJCXZhZGRyID0ga21h cF9hdG9taWNfcHgocGQpOwogCQl9IGVsc2UgewotCQkJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAq cHQgPSBwZC0+cGFnZV90YWJsZVtpZHgucGRlXTsKKwkJCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGUg KnB0ID0gaTkxNV9wdF9lbnRyeShwZCwgaWR4LnBkZSk7CiAKIAkJCWluZGV4ID0gaWR4LnB0ZTsK IAkJCW1heCA9IEdFTjhfUFRFUzsKQEAgLTExNzQsNyArMTE1OSw4IEBAIHN0YXRpYyB2b2lkIGdl bjhfcHBndHRfaW5zZXJ0X2h1Z2VfZW50cmllcyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAkJCQl1 MTYgaTsKIAogCQkJCWVuY29kZSA9IHZtYS0+dm0tPnNjcmF0Y2hfcHRlOwotCQkJCXZhZGRyID0g a21hcF9hdG9taWNfcHgocGQtPnBhZ2VfdGFibGVbaWR4LnBkZV0pOworCQkJCXZhZGRyID0ga21h cF9hdG9taWNfcHgoaTkxNV9wdF9lbnRyeShwZCwKKwkJCQkJCQkJICAgICBpZHgucGRlKSk7CiAK IAkJCQlmb3IgKGkgPSAxOyBpIDwgaW5kZXg7IGkgKz0gMTYpCiAJCQkJCW1lbXNldDY0KHZhZGRy ICsgaSwgZW5jb2RlLCAxNSk7CkBAIC0xMTk0LDE1ICsxMTgwLDE2IEBAIHN0YXRpYyB2b2lkIGdl bjhfcHBndHRfaW5zZXJ0XzRsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiB7CiAJ c3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0ID0gaTkxNV92bV90b19wcGd0dCh2bSk7CiAJc3RydWN0 IHNndF9kbWEgaXRlciA9IHNndF9kbWEodm1hKTsKLQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9y eV9wb2ludGVyICoqcGRwcyA9IHBwZ3R0LT5wbWw0LnBkcHM7CisJc3RydWN0IGk5MTVfcGFnZV9k aXJlY3RvcnkgKiBjb25zdCBwbWw0ID0gcHBndHQtPnBkOwogCiAJaWYgKHZtYS0+cGFnZV9zaXpl cy5zZyA+IEk5MTVfR1RUX1BBR0VfU0laRSkgewotCQlnZW44X3BwZ3R0X2luc2VydF9odWdlX2Vu dHJpZXModm1hLCBwZHBzLCAmaXRlciwgY2FjaGVfbGV2ZWwsCisJCWdlbjhfcHBndHRfaW5zZXJ0 X2h1Z2VfZW50cmllcyh2bWEsIHBtbDQsICZpdGVyLCBjYWNoZV9sZXZlbCwKIAkJCQkJICAgICAg IGZsYWdzKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZ2VuOF9pbnNlcnRfcHRlIGlkeCA9IGdlbjhf aW5zZXJ0X3B0ZSh2bWEtPm5vZGUuc3RhcnQpOwogCi0JCXdoaWxlIChnZW44X3BwZ3R0X2luc2Vy dF9wdGVfZW50cmllcyhwcGd0dCwgcGRwc1tpZHgucG1sNGUrK10sCisJCXdoaWxlIChnZW44X3Bw Z3R0X2luc2VydF9wdGVfZW50cmllcyhwcGd0dCwKKwkJCQkJCSAgICAgaTkxNV9wZHBfZW50cnko cG1sNCwgaWR4LnBtbDRlKyspLAogCQkJCQkJICAgICAmaXRlciwgJmlkeCwgY2FjaGVfbGV2ZWws CiAJCQkJCQkgICAgIGZsYWdzKSkKIAkJCUdFTV9CVUdfT04oaWR4LnBtbDRlID49IEdFTjhfUE1M NEVTX1BFUl9QTUw0KTsKQEAgLTEyMTcsOCArMTIwNCw4IEBAIHN0YXRpYyB2b2lkIGdlbjhfZnJl ZV9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAlpbnQgaTsKIAog CWZvciAoaSA9IDA7IGkgPCBJOTE1X1BERVM7IGkrKykgewotCQlpZiAocGQtPnBhZ2VfdGFibGVb aV0gIT0gdm0tPnNjcmF0Y2hfcHQpCi0JCQlmcmVlX3B0KHZtLCBwZC0+cGFnZV90YWJsZVtpXSk7 CisJCWlmIChwZC0+ZW50cnlbaV0gIT0gdm0tPnNjcmF0Y2hfcHQpCisJCQlmcmVlX3B0KHZtLCBw ZC0+ZW50cnlbaV0pOwogCX0KIH0KIApAQCAtMTI3Nyw3ICsxMjY0LDcgQEAgc3RhdGljIGludCBn ZW44X2luaXRfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKIAlnZW44X2lu aXRpYWxpemVfcHQodm0sIHZtLT5zY3JhdGNoX3B0KTsKIAlnZW44X2luaXRpYWxpemVfcGQodm0s IHZtLT5zY3JhdGNoX3BkKTsKIAlpZiAoaTkxNV92bV9pc180bHZsKHZtKSkKLQkJZ2VuOF9pbml0 aWFsaXplX3BkcCh2bSwgdm0tPnNjcmF0Y2hfcGRwKTsKKwkJZ2VuOF9pbml0aWFsaXplXzRsdmxf cGRwKHZtLCB2bS0+c2NyYXRjaF9wZHApOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEyOTksNyArMTI4 Niw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9ub3RpZnlfdmd0KHN0cnVjdCBpOTE1X3BwZ3R0 ICpwcGd0dCwgYm9vbCBjcmVhdGUpCiAJaW50IGk7CiAKIAlpZiAoaTkxNV92bV9pc180bHZsKHZt KSkgewotCQljb25zdCB1NjQgZGFkZHIgPSBweF9kbWEoJnBwZ3R0LT5wbWw0KTsKKwkJY29uc3Qg dTY0IGRhZGRyID0gcHhfZG1hKHBwZ3R0LT5wZCk7CiAKIAkJSTkxNV9XUklURSh2Z3RpZl9yZWco cGRwWzBdLmxvKSwgbG93ZXJfMzJfYml0cyhkYWRkcikpOwogCQlJOTE1X1dSSVRFKHZndGlmX3Jl ZyhwZHBbMF0uaGkpLCB1cHBlcl8zMl9iaXRzKGRhZGRyKSk7CkBAIC0xMzM2LDE3ICsxMzIzLDE3 IEBAIHN0YXRpYyB2b2lkIGdlbjhfZnJlZV9zY3JhdGNoKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtKQogfQogCiBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFudXBfM2x2bChzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKLQkJCQkgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rv cnlfcG9pbnRlciAqcGRwKQorCQkJCSAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGRw KQogewogCWNvbnN0IHVuc2lnbmVkIGludCBwZHBlcyA9IGk5MTVfcGRwZXNfcGVyX3BkcCh2bSk7 CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGRwZXM7IGkrKykgewotCQlpZiAocGRwLT5w YWdlX2RpcmVjdG9yeVtpXSA9PSB2bS0+c2NyYXRjaF9wZCkKKwkJaWYgKHBkcC0+ZW50cnlbaV0g PT0gdm0tPnNjcmF0Y2hfcGQpCiAJCQljb250aW51ZTsKIAotCQlnZW44X2ZyZWVfcGFnZV90YWJs ZXModm0sIHBkcC0+cGFnZV9kaXJlY3RvcnlbaV0pOwotCQlmcmVlX3BkKHZtLCBwZHAtPnBhZ2Vf ZGlyZWN0b3J5W2ldKTsKKwkJZ2VuOF9mcmVlX3BhZ2VfdGFibGVzKHZtLCBwZHAtPmVudHJ5W2ld KTsKKwkJZnJlZV9wZCh2bSwgcGRwLT5lbnRyeVtpXSk7CiAJfQogCiAJZnJlZV9wZHAodm0sIHBk cCk7CkBAIC0xMzU0LDE2ICsxMzQxLDE5IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYW51 cF8zbHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCiBzdGF0aWMgdm9pZCBnZW44 X3BwZ3R0X2NsZWFudXBfNGx2bChzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQpCiB7CisJc3RydWN0 IGk5MTVfcGFnZV9kaXJlY3RvcnkgKiBjb25zdCBwbWw0ID0gcHBndHQtPnBkOwogCWludCBpOwog CiAJZm9yIChpID0gMDsgaSA8IEdFTjhfUE1MNEVTX1BFUl9QTUw0OyBpKyspIHsKLQkJaWYgKHBw Z3R0LT5wbWw0LnBkcHNbaV0gPT0gcHBndHQtPnZtLnNjcmF0Y2hfcGRwKQorCQlzdHJ1Y3QgaTkx NV9wYWdlX2RpcmVjdG9yeSAqcGRwID0gaTkxNV9wZHBfZW50cnkocG1sNCwgaSk7CisKKwkJaWYg KHBkcCA9PSBwcGd0dC0+dm0uc2NyYXRjaF9wZHApCiAJCQljb250aW51ZTsKIAotCQlnZW44X3Bw Z3R0X2NsZWFudXBfM2x2bCgmcHBndHQtPnZtLCBwcGd0dC0+cG1sNC5wZHBzW2ldKTsKKwkJZ2Vu OF9wcGd0dF9jbGVhbnVwXzNsdmwoJnBwZ3R0LT52bSwgcGRwKTsKIAl9CiAKLQljbGVhbnVwX3B4 KCZwcGd0dC0+dm0sICZwcGd0dC0+cG1sNCk7CisJY2xlYW51cF9weCgmcHBndHQtPnZtLCBwbWw0 KTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhbnVwKHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2UgKnZtKQpAQCAtMTM3Nyw3ICsxMzY3LDcgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0 dF9jbGVhbnVwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQogCWlmIChpOTE1X3ZtX2lz XzRsdmwodm0pKQogCQlnZW44X3BwZ3R0X2NsZWFudXBfNGx2bChwcGd0dCk7CiAJZWxzZQotCQln ZW44X3BwZ3R0X2NsZWFudXBfM2x2bCgmcHBndHQtPnZtLCAmcHBndHQtPnBkcCk7CisJCWdlbjhf cHBndHRfY2xlYW51cF8zbHZsKCZwcGd0dC0+dm0sIHBwZ3R0LT5wZCk7CiAKIAlnZW44X2ZyZWVf c2NyYXRjaCh2bSk7CiB9CkBAIC0xNDA2LDEwICsxMzk2LDEwIEBAIHN0YXRpYyBpbnQgZ2VuOF9w cGd0dF9hbGxvY19wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCWlmIChjb3Vu dCA8IEdFTjhfUFRFUyB8fCBpbnRlbF92Z3B1X2FjdGl2ZSh2bS0+aTkxNSkpCiAJCQkJZ2VuOF9p bml0aWFsaXplX3B0KHZtLCBwdCk7CiAKLQkJCW9sZCA9IGNtcHhjaGcoJnBkLT5wYWdlX3RhYmxl W3BkZV0sIHZtLT5zY3JhdGNoX3B0LCBwdCk7CisJCQlvbGQgPSBjbXB4Y2hnKCZwZC0+ZW50cnlb cGRlXSwgdm0tPnNjcmF0Y2hfcHQsIHB0KTsKIAkJCWlmIChvbGQgPT0gdm0tPnNjcmF0Y2hfcHQp IHsKIAkJCQlnZW44X3BwZ3R0X3NldF9wZGUodm0sIHBkLCBwdCwgcGRlKTsKLQkJCQlhdG9taWNf aW5jKCZwZC0+dXNlZF9wZGVzKTsKKwkJCQlhdG9taWNfaW5jKCZwZC0+dXNlZCk7CiAJCQl9IGVs c2UgewogCQkJCWZyZWVfcHQodm0sIHB0KTsKIAkJCQlwdCA9IG9sZDsKQEAgLTE0MTgsNyArMTQw OCw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY19wZChzdHJ1Y3QgaTkxNV9hZGRyZXNz X3NwYWNlICp2bSwKIAkJCXNwaW5fbG9jaygmcGQtPmxvY2spOwogCQl9CiAKLQkJYXRvbWljX2Fk ZChjb3VudCwgJnB0LT51c2VkX3B0ZXMpOworCQlhdG9taWNfYWRkKGNvdW50LCAmcHQtPnVzZWQp OwogCX0KIAlzcGluX3VubG9jaygmcGQtPmxvY2spOwogCkBAIC0xNDMwLDcgKzE0MjAsNyBAQCBz dGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfcGQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0sCiB9CiAKIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY19wZHAoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sCi0JCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciAq cGRwLAorCQkJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZHAsCiAJCQkJdTY0IHN0YXJ0 LCB1NjQgbGVuZ3RoKQogewogCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZDsKQEAgLTE0 NTEsMTEgKzE0NDEsMTAgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jX3BkcChzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAogCQkJZ2VuOF9pbml0aWFsaXplX3BkKHZtLCBwZCk7 CiAKLQkJCW9sZCA9IGNtcHhjaGcoJnBkcC0+cGFnZV9kaXJlY3RvcnlbcGRwZV0sCi0JCQkJICAg ICAgdm0tPnNjcmF0Y2hfcGQsIHBkKTsKKwkJCW9sZCA9IGNtcHhjaGcoJnBkcC0+ZW50cnlbcGRw ZV0sIHZtLT5zY3JhdGNoX3BkLCBwZCk7CiAJCQlpZiAob2xkID09IHZtLT5zY3JhdGNoX3BkKSB7 CiAJCQkJZ2VuOF9wcGd0dF9zZXRfcGRwZSh2bSwgcGRwLCBwZCwgcGRwZSk7Ci0JCQkJYXRvbWlj X2luYygmcGRwLT51c2VkX3BkcGVzKTsKKwkJCQlhdG9taWNfaW5jKCZwZHAtPnVzZWQpOwogCQkJ fSBlbHNlIHsKIAkJCQlmcmVlX3BkKHZtLCBwZCk7CiAJCQkJcGQgPSBvbGQ7CkBAIC0xNDYzLDcg KzE0NTIsNyBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfcGRwKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtLAogCiAJCQlzcGluX2xvY2soJnBkcC0+bG9jayk7CiAJCX0KLQkJYXRv bWljX2luYygmcGQtPnVzZWRfcGRlcyk7CisJCWF0b21pY19pbmMoJnBkLT51c2VkKTsKIAkJc3Bp bl91bmxvY2soJnBkcC0+bG9jayk7CiAKIAkJcmV0ID0gZ2VuOF9wcGd0dF9hbGxvY19wZCh2bSwg cGQsIHN0YXJ0LCBsZW5ndGgpOwpAQCAtMTQ3MSw3ICsxNDYwLDcgQEAgc3RhdGljIGludCBnZW44 X3BwZ3R0X2FsbG9jX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCWdvdG8g dW53aW5kX3BkOwogCiAJCXNwaW5fbG9jaygmcGRwLT5sb2NrKTsKLQkJYXRvbWljX2RlYygmcGQt PnVzZWRfcGRlcyk7CisJCWF0b21pY19kZWMoJnBkLT51c2VkKTsKIAl9CiAJc3Bpbl91bmxvY2so JnBkcC0+bG9jayk7CiAKQEAgLTE0NzksMTAgKzE0NjgsMTAgQEAgc3RhdGljIGludCBnZW44X3Bw Z3R0X2FsbG9jX3BkcChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAogdW53aW5kX3Bk OgogCXNwaW5fbG9jaygmcGRwLT5sb2NrKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGQt PnVzZWRfcGRlcykpIHsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGQtPnVzZWQpKSB7CiAJ CWdlbjhfcHBndHRfc2V0X3BkcGUodm0sIHBkcCwgdm0tPnNjcmF0Y2hfcGQsIHBkcGUpOwotCQlH RU1fQlVHX09OKCFhdG9taWNfcmVhZCgmcGRwLT51c2VkX3BkcGVzKSk7Ci0JCWF0b21pY19kZWMo JnBkcC0+dXNlZF9wZHBlcyk7CisJCUdFTV9CVUdfT04oIWF0b21pY19yZWFkKCZwZHAtPnVzZWQp KTsKKwkJYXRvbWljX2RlYygmcGRwLT51c2VkKTsKIAkJZnJlZV9wZCh2bSwgcGQpOwogCX0KIAlz cGluX3VubG9jaygmcGRwLT5sb2NrKTsKQEAgLTE0OTUsMjMgKzE0ODQsMjQgQEAgc3RhdGljIGlu dCBnZW44X3BwZ3R0X2FsbG9jXzNsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJ CQkJIHU2NCBzdGFydCwgdTY0IGxlbmd0aCkKIHsKIAlyZXR1cm4gZ2VuOF9wcGd0dF9hbGxvY19w ZHAodm0sCi0JCQkJICAgICZpOTE1X3ZtX3RvX3BwZ3R0KHZtKS0+cGRwLCBzdGFydCwgbGVuZ3Ro KTsKKwkJCQkgICAgaTkxNV92bV90b19wcGd0dCh2bSktPnBkLCBzdGFydCwgbGVuZ3RoKTsKIH0K IAogc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jXzRsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0sCiAJCQkJIHU2NCBzdGFydCwgdTY0IGxlbmd0aCkKIHsKIAlzdHJ1Y3QgaTkxNV9w cGd0dCAqcHBndHQgPSBpOTE1X3ZtX3RvX3BwZ3R0KHZtKTsKLQlzdHJ1Y3QgaTkxNV9wbWw0ICpw bWw0ID0gJnBwZ3R0LT5wbWw0OwotCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIg KnBkcDsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBtbDQgPSBwcGd0dC0+ cGQ7CisJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkcDsKIAl1NjQgZnJvbSA9IHN0YXJ0 OwogCXUzMiBwbWw0ZTsKIAlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrKCZwbWw0LT5sb2NrKTsKIAln ZW44X2Zvcl9lYWNoX3BtbDRlKHBkcCwgcG1sNCwgc3RhcnQsIGxlbmd0aCwgcG1sNGUpIHsKKwog CQlpZiAocGRwID09IHZtLT5zY3JhdGNoX3BkcCkgewotCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJl Y3RvcnlfcG9pbnRlciAqb2xkOworCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKm9sZDsK IAogCQkJc3Bpbl91bmxvY2soJnBtbDQtPmxvY2spOwogCkBAIC0xNTE5LDkgKzE1MDksOSBAQCBz dGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfNGx2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSwKIAkJCWlmIChJU19FUlIocGRwKSkKIAkJCQlnb3RvIHVud2luZDsKIAotCQkJZ2VuOF9p bml0aWFsaXplX3BkcCh2bSwgcGRwKTsKKwkJCWdlbjhfaW5pdGlhbGl6ZV80bHZsX3BkcCh2bSwg cGRwKTsKIAotCQkJb2xkID0gY21weGNoZygmcG1sNC0+cGRwc1twbWw0ZV0sIHZtLT5zY3JhdGNo X3BkcCwgcGRwKTsKKwkJCW9sZCA9IGNtcHhjaGcoJnBtbDQtPmVudHJ5W3BtbDRlXSwgdm0tPnNj cmF0Y2hfcGRwLCBwZHApOwogCQkJaWYgKG9sZCA9PSB2bS0+c2NyYXRjaF9wZHApIHsKIAkJCQln ZW44X3BwZ3R0X3NldF9wbWw0ZShwbWw0LCBwZHAsIHBtbDRlKTsKIAkJCX0gZWxzZSB7CkBAIC0x NTMxLDcgKzE1MjEsNyBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfNGx2bChzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAogCQkJc3Bpbl9sb2NrKCZwbWw0LT5sb2NrKTsKIAkJ fQotCQlhdG9taWNfaW5jKCZwZHAtPnVzZWRfcGRwZXMpOworCQlhdG9taWNfaW5jKCZwZHAtPnVz ZWQpOwogCQlzcGluX3VubG9jaygmcG1sNC0+bG9jayk7CiAKIAkJcmV0ID0gZ2VuOF9wcGd0dF9h bGxvY19wZHAodm0sIHBkcCwgc3RhcnQsIGxlbmd0aCk7CkBAIC0xNTM5LDcgKzE1MjksNyBAQCBz dGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfNGx2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSwKIAkJCWdvdG8gdW53aW5kX3BkcDsKIAogCQlzcGluX2xvY2soJnBtbDQtPmxvY2spOwot CQlhdG9taWNfZGVjKCZwZHAtPnVzZWRfcGRwZXMpOworCQlhdG9taWNfZGVjKCZwZHAtPnVzZWQp OwogCX0KIAlzcGluX3VubG9jaygmcG1sNC0+bG9jayk7CiAKQEAgLTE1NDcsNyArMTUzNyw3IEBA IHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY180bHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtLAogCiB1bndpbmRfcGRwOgogCXNwaW5fbG9jaygmcG1sNC0+bG9jayk7Ci0JaWYgKGF0 b21pY19kZWNfYW5kX3Rlc3QoJnBkcC0+dXNlZF9wZHBlcykpIHsKKwlpZiAoYXRvbWljX2RlY19h bmRfdGVzdCgmcGRwLT51c2VkKSkgewogCQlnZW44X3BwZ3R0X3NldF9wbWw0ZShwbWw0LCB2bS0+ c2NyYXRjaF9wZHAsIHBtbDRlKTsKIAkJZnJlZV9wZHAodm0sIHBkcCk7CiAJfQpAQCAtMTU2MCw3 ICsxNTUwLDcgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jXzRsdmwoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCiBzdGF0aWMgaW50IGdlbjhfcHJlYWxsb2NhdGVfdG9wX2xldmVs X3BkcChzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQpCiB7CiAJc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0gPSAmcHBndHQtPnZtOwotCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50 ZXIgKnBkcCA9ICZwcGd0dC0+cGRwOworCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZHAg PSBwcGd0dC0+cGQ7CiAJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkOwogCXU2NCBzdGFy dCA9IDAsIGxlbmd0aCA9IHBwZ3R0LT52bS50b3RhbDsKIAl1NjQgZnJvbSA9IHN0YXJ0OwpAQCAt MTU3MywxMCArMTU2MywxMiBAQCBzdGF0aWMgaW50IGdlbjhfcHJlYWxsb2NhdGVfdG9wX2xldmVs X3BkcChzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQpCiAKIAkJZ2VuOF9pbml0aWFsaXplX3BkKHZt LCBwZCk7CiAJCWdlbjhfcHBndHRfc2V0X3BkcGUodm0sIHBkcCwgcGQsIHBkcGUpOwotCQlhdG9t aWNfaW5jKCZwZHAtPnVzZWRfcGRwZXMpOworCisJCWF0b21pY19pbmMoJnBkcC0+dXNlZCk7CiAJ fQogCi0JYXRvbWljX2luYygmcGRwLT51c2VkX3BkcGVzKTsgLyogbmV2ZXIgcmVtb3ZlICovCisJ YXRvbWljX2luYygmcGRwLT51c2VkKTsgLyogbmV2ZXIgcmVtb3ZlICovCisKIAlyZXR1cm4gMDsK IAogdW53aW5kOgpAQCAtMTU4NSw3ICsxNTc3LDcgQEAgc3RhdGljIGludCBnZW44X3ByZWFsbG9j YXRlX3RvcF9sZXZlbF9wZHAoc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0KQogCQlnZW44X3BwZ3R0 X3NldF9wZHBlKHZtLCBwZHAsIHZtLT5zY3JhdGNoX3BkLCBwZHBlKTsKIAkJZnJlZV9wZCh2bSwg cGQpOwogCX0KLQlhdG9taWNfc2V0KCZwZHAtPnVzZWRfcGRwZXMsIDApOworCWF0b21pY19zZXQo JnBkcC0+dXNlZCwgMCk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTE2NDAsMjcgKzE2MzIs MjUgQEAgc3RhdGljIHN0cnVjdCBpOTE1X3BwZ3R0ICpnZW44X3BwZ3R0X2NyZWF0ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlOwogCi0J aWYgKGk5MTVfdm1faXNfNGx2bCgmcHBndHQtPnZtKSkgewotCQllcnIgPSBzZXR1cF9weCgmcHBn dHQtPnZtLCAmcHBndHQtPnBtbDQpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfc2NyYXRjaDsK KwlwcGd0dC0+cGQgPSBhbGxvY19wZHAoJnBwZ3R0LT52bSk7CisJaWYgKElTX0VSUihwcGd0dC0+ cGQpKSB7CisJCWVyciA9IFBUUl9FUlIocHBndHQtPnBkKTsKKwkJZ290byBlcnJfc2NyYXRjaDsK Kwl9CiAKLQkJZ2VuOF9pbml0aWFsaXplX3BtbDQoJnBwZ3R0LT52bSwgJnBwZ3R0LT5wbWw0KTsK KwlpZiAoaTkxNV92bV9pc180bHZsKCZwcGd0dC0+dm0pKSB7CisJCWdlbjhfaW5pdGlhbGl6ZV9w bWw0KCZwcGd0dC0+dm0sIHBwZ3R0LT5wZCk7CiAKIAkJcHBndHQtPnZtLmFsbG9jYXRlX3ZhX3Jh bmdlID0gZ2VuOF9wcGd0dF9hbGxvY180bHZsOwogCQlwcGd0dC0+dm0uaW5zZXJ0X2VudHJpZXMg PSBnZW44X3BwZ3R0X2luc2VydF80bHZsOwogCQlwcGd0dC0+dm0uY2xlYXJfcmFuZ2UgPSBnZW44 X3BwZ3R0X2NsZWFyXzRsdmw7CiAJfSBlbHNlIHsKLQkJZXJyID0gX19wZHBfaW5pdCgmcHBndHQt PnZtLCAmcHBndHQtPnBkcCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9zY3JhdGNoOworCQln ZW44X2luaXRpYWxpemVfM2x2bF9wZHAoJnBwZ3R0LT52bSwgcHBndHQtPnBkKTsKIAogCQlpZiAo aW50ZWxfdmdwdV9hY3RpdmUoaTkxNSkpIHsKIAkJCWVyciA9IGdlbjhfcHJlYWxsb2NhdGVfdG9w X2xldmVsX3BkcChwcGd0dCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJX19wZHBfZmluaSgmcHBndHQt PnBkcCk7Ci0JCQkJZ290byBlcnJfc2NyYXRjaDsKLQkJCX0KKwkJCWlmIChlcnIpCisJCQkJZ290 byBlcnJfcGRwOwogCQl9CiAKIAkJcHBndHQtPnZtLmFsbG9jYXRlX3ZhX3JhbmdlID0gZ2VuOF9w cGd0dF9hbGxvY18zbHZsOwpAQCAtMTY3NSw2ICsxNjY1LDggQEAgc3RhdGljIHN0cnVjdCBpOTE1 X3BwZ3R0ICpnZW44X3BwZ3R0X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK IAogCXJldHVybiBwcGd0dDsKIAorZXJyX3BkcDoKKwlmcmVlX3BkcCgmcHBndHQtPnZtLCBwcGd0 dC0+cGQpOwogZXJyX3NjcmF0Y2g6CiAJZ2VuOF9mcmVlX3NjcmF0Y2goJnBwZ3R0LT52bSk7CiBl cnJfZnJlZToKQEAgLTE3NDAsMTUgKzE3MzIsMTYgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9l bmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogc3RhdGljIHZvaWQgZ2Vu Nl9wcGd0dF9jbGVhcl9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCQkg ICB1NjQgc3RhcnQsIHU2NCBsZW5ndGgpCiB7Ci0Jc3RydWN0IGdlbjZfcHBndHQgKnBwZ3R0ID0g dG9fZ2VuNl9wcGd0dChpOTE1X3ZtX3RvX3BwZ3R0KHZtKSk7Ci0JdW5zaWduZWQgaW50IGZpcnN0 X2VudHJ5ID0gc3RhcnQgLyBJOTE1X0dUVF9QQUdFX1NJWkU7CisJc3RydWN0IGdlbjZfcHBndHQg KiBjb25zdCBwcGd0dCA9IHRvX2dlbjZfcHBndHQoaTkxNV92bV90b19wcGd0dCh2bSkpOworCWNv bnN0IHVuc2lnbmVkIGludCBmaXJzdF9lbnRyeSA9IHN0YXJ0IC8gSTkxNV9HVFRfUEFHRV9TSVpF OworCWNvbnN0IGdlbjZfcHRlX3Qgc2NyYXRjaF9wdGUgPSB2bS0+c2NyYXRjaF9wdGU7CiAJdW5z aWduZWQgaW50IHBkZSA9IGZpcnN0X2VudHJ5IC8gR0VONl9QVEVTOwogCXVuc2lnbmVkIGludCBw dGUgPSBmaXJzdF9lbnRyeSAlIEdFTjZfUFRFUzsKIAl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXMg PSBsZW5ndGggLyBJOTE1X0dUVF9QQUdFX1NJWkU7Ci0JY29uc3QgZ2VuNl9wdGVfdCBzY3JhdGNo X3B0ZSA9IHZtLT5zY3JhdGNoX3B0ZTsKIAogCXdoaWxlIChudW1fZW50cmllcykgewotCQlzdHJ1 Y3QgaTkxNV9wYWdlX3RhYmxlICpwdCA9IHBwZ3R0LT5iYXNlLnBkLnBhZ2VfdGFibGVbcGRlKytd OworCQlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICogY29uc3QgcHQgPQorCQkJaTkxNV9wdF9lbnRy eShwcGd0dC0+YmFzZS5wZCwgcGRlKyspOwogCQljb25zdCB1bnNpZ25lZCBpbnQgY291bnQgPSBt aW4obnVtX2VudHJpZXMsIEdFTjZfUFRFUyAtIHB0ZSk7CiAJCWdlbjZfcHRlX3QgKnZhZGRyOwog CkBAIC0xNzU2LDggKzE3NDksOCBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2NsZWFyX3Jhbmdl KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCiAJCW51bV9lbnRyaWVzIC09IGNvdW50 OwogCi0JCUdFTV9CVUdfT04oY291bnQgPiBhdG9taWNfcmVhZCgmcHQtPnVzZWRfcHRlcykpOwot CQlpZiAoIWF0b21pY19zdWJfcmV0dXJuKGNvdW50LCAmcHQtPnVzZWRfcHRlcykpCisJCUdFTV9C VUdfT04oY291bnQgPiBhdG9taWNfcmVhZCgmcHQtPnVzZWQpKTsKKwkJaWYgKCFhdG9taWNfc3Vi X3JldHVybihjb3VudCwgJnB0LT51c2VkKSkKIAkJCXBwZ3R0LT5zY2FuX2Zvcl91bnVzZWRfcHQg PSB0cnVlOwogCiAJCS8qCkBAIC0xNzgxLDYgKzE3NzQsNyBAQCBzdGF0aWMgdm9pZCBnZW42X3Bw Z3R0X2luc2VydF9lbnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJCSAg ICAgIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQgPSBpOTE1X3ZtX3Rv X3BwZ3R0KHZtKTsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0IHBkID0gcHBn dHQtPnBkOwogCXVuc2lnbmVkIGZpcnN0X2VudHJ5ID0gdm1hLT5ub2RlLnN0YXJ0IC8gSTkxNV9H VFRfUEFHRV9TSVpFOwogCXVuc2lnbmVkIGFjdF9wdCA9IGZpcnN0X2VudHJ5IC8gR0VONl9QVEVT OwogCXVuc2lnbmVkIGFjdF9wdGUgPSBmaXJzdF9lbnRyeSAlIEdFTjZfUFRFUzsKQEAgLTE3ODgs OSArMTc4Miw5IEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfaW5zZXJ0X2VudHJpZXMoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJc3RydWN0IHNndF9kbWEgaXRlciA9IHNndF9kbWEo dm1hKTsKIAlnZW42X3B0ZV90ICp2YWRkcjsKIAotCUdFTV9CVUdfT04ocHBndHQtPnBkLnBhZ2Vf dGFibGVbYWN0X3B0XSA9PSB2bS0+c2NyYXRjaF9wdCk7CisJR0VNX0JVR19PTihpOTE1X3B0X2Vu dHJ5KHBkLCBhY3RfcHQpID09IHZtLT5zY3JhdGNoX3B0KTsKIAotCXZhZGRyID0ga21hcF9hdG9t aWNfcHgocHBndHQtPnBkLnBhZ2VfdGFibGVbYWN0X3B0XSk7CisJdmFkZHIgPSBrbWFwX2F0b21p Y19weChpOTE1X3B0X2VudHJ5KHBkLCBhY3RfcHQpKTsKIAlkbyB7CiAJCXZhZGRyW2FjdF9wdGVd ID0gcHRlX2VuY29kZSB8IEdFTjZfUFRFX0FERFJfRU5DT0RFKGl0ZXIuZG1hKTsKIApAQCAtMTgw Niw3ICsxODAwLDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9pbnNlcnRfZW50cmllcyhzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAogCQlpZiAoKythY3RfcHRlID09IEdFTjZfUFRF UykgewogCQkJa3VubWFwX2F0b21pYyh2YWRkcik7Ci0JCQl2YWRkciA9IGttYXBfYXRvbWljX3B4 KHBwZ3R0LT5wZC5wYWdlX3RhYmxlWysrYWN0X3B0XSk7CisJCQl2YWRkciA9IGttYXBfYXRvbWlj X3B4KGk5MTVfcHRfZW50cnkocGQsICsrYWN0X3B0KSk7CiAJCQlhY3RfcHRlID0gMDsKIAkJfQog CX0gd2hpbGUgKDEpOwpAQCAtMTgxOSw2ICsxODEzLDcgQEAgc3RhdGljIGludCBnZW42X2FsbG9j X3ZhX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCQkJICAgICAgIHU2NCBz dGFydCwgdTY0IGxlbmd0aCkKIHsKIAlzdHJ1Y3QgZ2VuNl9wcGd0dCAqcHBndHQgPSB0b19nZW42 X3BwZ3R0KGk5MTVfdm1fdG9fcHBndHQodm0pKTsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9y eSAqIGNvbnN0IHBkID0gcHBndHQtPmJhc2UucGQ7CiAJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAq cHQ7CiAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAJdTY0IGZyb20gPSBzdGFydDsKQEAgLTE4 MjcsMTQgKzE4MjIsMTQgQEAgc3RhdGljIGludCBnZW42X2FsbG9jX3ZhX3JhbmdlKHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogCiAJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0 KHZtLT5pOTE1KTsKIAotCXNwaW5fbG9jaygmcHBndHQtPmJhc2UucGQubG9jayk7Ci0JZ2VuNl9m b3JfZWFjaF9wZGUocHQsICZwcGd0dC0+YmFzZS5wZCwgc3RhcnQsIGxlbmd0aCwgcGRlKSB7CisJ c3Bpbl9sb2NrKCZwZC0+bG9jayk7CisJZ2VuNl9mb3JfZWFjaF9wZGUocHQsIHBkLCBzdGFydCwg bGVuZ3RoLCBwZGUpIHsKIAkJY29uc3QgdW5zaWduZWQgaW50IGNvdW50ID0gZ2VuNl9wdGVfY291 bnQoc3RhcnQsIGxlbmd0aCk7CiAKIAkJaWYgKHB0ID09IHZtLT5zY3JhdGNoX3B0KSB7CiAJCQlz dHJ1Y3QgaTkxNV9wYWdlX3RhYmxlICpvbGQ7CiAKLQkJCXNwaW5fdW5sb2NrKCZwcGd0dC0+YmFz ZS5wZC5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZwZC0+bG9jayk7CiAKIAkJCXB0ID0gYWxsb2Nf cHQodm0pOwogCQkJaWYgKElTX0VSUihwdCkpCkBAIC0xODQyLDEwICsxODM3LDggQEAgc3RhdGlj IGludCBnZW42X2FsbG9jX3ZhX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAog CiAJCQlnZW42X2luaXRpYWxpemVfcHQodm0sIHB0KTsKIAotCQkJb2xkID0gY21weGNoZygmcHBn dHQtPmJhc2UucGQucGFnZV90YWJsZVtwZGVdLAotCQkJCSAgICAgIHZtLT5zY3JhdGNoX3B0LCBw dCk7CisJCQlvbGQgPSBjbXB4Y2hnKCZwZC0+ZW50cnlbcGRlXSwgdm0tPnNjcmF0Y2hfcHQsIHB0 KTsKIAkJCWlmIChvbGQgPT0gdm0tPnNjcmF0Y2hfcHQpIHsKLQkJCQlwcGd0dC0+YmFzZS5wZC5w YWdlX3RhYmxlW3BkZV0gPSBwdDsKIAkJCQlpZiAoaTkxNV92bWFfaXNfYm91bmQocHBndHQtPnZt YSwKIAkJCQkJCSAgICAgIEk5MTVfVk1BX0dMT0JBTF9CSU5EKSkgewogCQkJCQlnZW42X3dyaXRl X3BkZShwcGd0dCwgcGRlLCBwdCk7CkBAIC0xODU2LDEyICsxODQ5LDEyIEBAIHN0YXRpYyBpbnQg Z2VuNl9hbGxvY192YV9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCQlw dCA9IG9sZDsKIAkJCX0KIAotCQkJc3Bpbl9sb2NrKCZwcGd0dC0+YmFzZS5wZC5sb2NrKTsKKwkJ CXNwaW5fbG9jaygmcGQtPmxvY2spOwogCQl9CiAKLQkJYXRvbWljX2FkZChjb3VudCwgJnB0LT51 c2VkX3B0ZXMpOworCQlhdG9taWNfYWRkKGNvdW50LCAmcHQtPnVzZWQpOwogCX0KLQlzcGluX3Vu bG9jaygmcHBndHQtPmJhc2UucGQubG9jayk7CisJc3Bpbl91bmxvY2soJnBkLT5sb2NrKTsKIAog CWlmIChmbHVzaCkgewogCQltYXJrX3RsYnNfZGlydHkoJnBwZ3R0LT5iYXNlKTsKQEAgLTE4ODEs NiArMTg3NCw3IEBAIHN0YXRpYyBpbnQgZ2VuNl9hbGxvY192YV9yYW5nZShzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bSwKIHN0YXRpYyBpbnQgZ2VuNl9wcGd0dF9pbml0X3NjcmF0Y2goc3Ry dWN0IGdlbjZfcHBndHQgKnBwZ3R0KQogewogCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKiBj b25zdCB2bSA9ICZwcGd0dC0+YmFzZS52bTsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAq IGNvbnN0IHBkID0gcHBndHQtPmJhc2UucGQ7CiAJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqdW51 c2VkOwogCXUzMiBwZGU7CiAJaW50IHJldDsKQEAgLTE5MDAsOSArMTg5NCw5IEBAIHN0YXRpYyBp bnQgZ2VuNl9wcGd0dF9pbml0X3NjcmF0Y2goc3RydWN0IGdlbjZfcHBndHQgKnBwZ3R0KQogCX0K IAogCWdlbjZfaW5pdGlhbGl6ZV9wdCh2bSwgdm0tPnNjcmF0Y2hfcHQpOwotCWdlbjZfZm9yX2Fs bF9wZGVzKHVudXNlZCwgJnBwZ3R0LT5iYXNlLnBkLCBwZGUpCi0JCXBwZ3R0LT5iYXNlLnBkLnBh Z2VfdGFibGVbcGRlXSA9IHZtLT5zY3JhdGNoX3B0OwotCXNwaW5fbG9ja19pbml0KCZwcGd0dC0+ YmFzZS5wZC5sb2NrKTsKKworCWdlbjZfZm9yX2FsbF9wZGVzKHVudXNlZCwgcGQsIHBkZSkKKwkJ cGQtPmVudHJ5W3BkZV0gPSB2bS0+c2NyYXRjaF9wdDsKIAogCXJldHVybiAwOwogfQpAQCAtMTkx NSwxMCArMTkwOSwxMSBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X2ZyZWVfc2NyYXRjaChzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKIAogc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9mcmVl X3BkKHN0cnVjdCBnZW42X3BwZ3R0ICpwcGd0dCkKIHsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVj dG9yeSAqIGNvbnN0IHBkID0gcHBndHQtPmJhc2UucGQ7CiAJc3RydWN0IGk5MTVfcGFnZV90YWJs ZSAqcHQ7CiAJdTMyIHBkZTsKIAotCWdlbjZfZm9yX2FsbF9wZGVzKHB0LCAmcHBndHQtPmJhc2Uu cGQsIHBkZSkKKwlnZW42X2Zvcl9hbGxfcGRlcyhwdCwgcGQsIHBkZSkKIAkJaWYgKHB0ICE9IHBw Z3R0LT5iYXNlLnZtLnNjcmF0Y2hfcHQpCiAJCQlmcmVlX3B0KCZwcGd0dC0+YmFzZS52bSwgcHQp OwogfQpAQCAtMTk4Miw2ICsxOTc3LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhbnVw KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQogCiAJZ2VuNl9wcGd0dF9mcmVlX3BkKHBw Z3R0KTsKIAlnZW42X3BwZ3R0X2ZyZWVfc2NyYXRjaCh2bSk7CisJa2ZyZWUocHBndHQtPmJhc2Uu cGQpOwogfQogCiBzdGF0aWMgaW50IHBkX3ZtYV9zZXRfcGFnZXMoc3RydWN0IGk5MTVfdm1hICp2 bWEpCkBAIC0yMDA3LDEwICsyMDAzLDEwIEBAIHN0YXRpYyBpbnQgcGRfdm1hX2JpbmQoc3RydWN0 IGk5MTVfdm1hICp2bWEsCiAJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAqcHQ7CiAJdW5zaWduZWQg aW50IHBkZTsKIAotCXBwZ3R0LT5iYXNlLnBkLmJhc2UuZ2d0dF9vZmZzZXQgPSBnZ3R0X29mZnNl dCAqIHNpemVvZihnZW42X3B0ZV90KTsKKwlwcGd0dC0+YmFzZS5wZC0+YmFzZS5nZ3R0X29mZnNl dCA9IGdndHRfb2Zmc2V0ICogc2l6ZW9mKGdlbjZfcHRlX3QpOwogCXBwZ3R0LT5wZF9hZGRyID0g KGdlbjZfcHRlX3QgX19pb21lbSAqKWdndHQtPmdzbSArIGdndHRfb2Zmc2V0OwogCi0JZ2VuNl9m b3JfYWxsX3BkZXMocHQsICZwcGd0dC0+YmFzZS5wZCwgcGRlKQorCWdlbjZfZm9yX2FsbF9wZGVz KHB0LCBwcGd0dC0+YmFzZS5wZCwgcGRlKQogCQlnZW42X3dyaXRlX3BkZShwcGd0dCwgcGRlLCBw dCk7CiAKIAltYXJrX3RsYnNfZGlydHkoJnBwZ3R0LT5iYXNlKTsKQEAgLTIwMjIsNiArMjAxOCw3 IEBAIHN0YXRpYyBpbnQgcGRfdm1hX2JpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEsCiBzdGF0aWMg dm9pZCBwZF92bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogewogCXN0cnVjdCBnZW42 X3BwZ3R0ICpwcGd0dCA9IHZtYS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9y eSAqIGNvbnN0IHBkID0gcHBndHQtPmJhc2UucGQ7CiAJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAq IGNvbnN0IHNjcmF0Y2hfcHQgPSBwcGd0dC0+YmFzZS52bS5zY3JhdGNoX3B0OwogCXN0cnVjdCBp OTE1X3BhZ2VfdGFibGUgKnB0OwogCXVuc2lnbmVkIGludCBwZGU7CkBAIC0yMDMwLDEyICsyMDI3 LDEyIEBAIHN0YXRpYyB2b2lkIHBkX3ZtYV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpCiAJ CXJldHVybjsKIAogCS8qIEZyZWUgYWxsIG5vIGxvbmdlciB1c2VkIHBhZ2UgdGFibGVzICovCi0J Z2VuNl9mb3JfYWxsX3BkZXMocHQsICZwcGd0dC0+YmFzZS5wZCwgcGRlKSB7Ci0JCWlmIChhdG9t aWNfcmVhZCgmcHQtPnVzZWRfcHRlcykgfHwgcHQgPT0gc2NyYXRjaF9wdCkKKwlnZW42X2Zvcl9h bGxfcGRlcyhwdCwgcHBndHQtPmJhc2UucGQsIHBkZSkgeworCQlpZiAoYXRvbWljX3JlYWQoJnB0 LT51c2VkKSB8fCBwdCA9PSBzY3JhdGNoX3B0KQogCQkJY29udGludWU7CiAKIAkJZnJlZV9wdCgm cHBndHQtPmJhc2Uudm0sIHB0KTsKLQkJcHBndHQtPmJhc2UucGQucGFnZV90YWJsZVtwZGVdID0g c2NyYXRjaF9wdDsKKwkJcGQtPmVudHJ5W3BkZV0gPSBzY3JhdGNoX3B0OwogCX0KIAogCXBwZ3R0 LT5zY2FuX2Zvcl91bnVzZWRfcHQgPSBmYWxzZTsKQEAgLTIxNjQsOSArMjE2MSwxNSBAQCBzdGF0 aWMgc3RydWN0IGk5MTVfcHBndHQgKmdlbjZfcHBndHRfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQogCQlnb3RvIGVycl9mcmVlOwogCX0KIAorCXBwZ3R0LT5iYXNlLnBkID0g X19hbGxvY19wZCg1MTIpOworCWlmICghcHBndHQtPmJhc2UucGQpIHsKKwkJZXJyID0gLUVOT01F TTsKKwkJZ290byBlcnJfd29yazsKKwl9CisKIAllcnIgPSBnZW42X3BwZ3R0X2luaXRfc2NyYXRj aChwcGd0dCk7CiAJaWYgKGVycikKLQkJZ290byBlcnJfd29yazsKKwkJZ290byBlcnJfcGQ7CiAK IAlwcGd0dC0+dm1hID0gcGRfdm1hX2NyZWF0ZShwcGd0dCwgR0VONl9QRF9TSVpFKTsKIAlpZiAo SVNfRVJSKHBwZ3R0LT52bWEpKSB7CkBAIC0yMTc4LDYgKzIxODEsOCBAQCBzdGF0aWMgc3RydWN0 IGk5MTVfcHBndHQgKmdlbjZfcHBndHRfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQogCiBlcnJfc2NyYXRjaDoKIAlnZW42X3BwZ3R0X2ZyZWVfc2NyYXRjaCgmcHBndHQtPmJh c2Uudm0pOworZXJyX3BkOgorCWtmcmVlKHBwZ3R0LT5iYXNlLnBkKTsKIGVycl93b3JrOgogCWtm cmVlKHBwZ3R0LT53b3JrKTsKIGVycl9mcmVlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZ3R0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu aAppbmRleCA4OTQzN2QwYTcyMWMuLjQ5ZjQ0MDcxZGVmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZ3R0LmgKQEAgLTI0OCwyOCArMjQ4LDE0IEBAIHN0cnVjdCBpOTE1X3BhZ2VfZG1hIHsK IAogc3RydWN0IGk5MTVfcGFnZV90YWJsZSB7CiAJc3RydWN0IGk5MTVfcGFnZV9kbWEgYmFzZTsK LQlhdG9taWNfdCB1c2VkX3B0ZXM7CisJYXRvbWljX3QgdXNlZDsKIH07CiAKIHN0cnVjdCBpOTE1 X3BhZ2VfZGlyZWN0b3J5IHsKIAlzdHJ1Y3QgaTkxNV9wYWdlX2RtYSBiYXNlOwotCi0Jc3RydWN0 IGk5MTVfcGFnZV90YWJsZSAqcGFnZV90YWJsZVtJOTE1X1BERVNdOyAvKiBQREVzICovCi0JYXRv bWljX3QgdXNlZF9wZGVzOwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KLXN0cnVjdCBpOTE1X3Bh Z2VfZGlyZWN0b3J5X3BvaW50ZXIgewotCXN0cnVjdCBpOTE1X3BhZ2VfZG1hIGJhc2U7Ci0Jc3Ry dWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKipwYWdlX2RpcmVjdG9yeTsKLQlhdG9taWNfdCB1c2Vk X3BkcGVzOwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KLXN0cnVjdCBpOTE1X3BtbDQgewotCXN0 cnVjdCBpOTE1X3BhZ2VfZG1hIGJhc2U7Ci0Jc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9p bnRlciAqcGRwc1tHRU44X1BNTDRFU19QRVJfUE1MNF07CisJYXRvbWljX3QgdXNlZDsKIAlzcGlu bG9ja190IGxvY2s7CisJdm9pZCAqZW50cnlbMF07CiB9OwogCiBzdHJ1Y3QgaTkxNV92bWFfb3Bz IHsKQEAgLTMyMSw3ICszMDcsNyBAQCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlIHsKIAlzdHJ1 Y3QgaTkxNV9wYWdlX2RtYSBzY3JhdGNoX3BhZ2U7CiAJc3RydWN0IGk5MTVfcGFnZV90YWJsZSAq c2NyYXRjaF9wdDsKIAlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqc2NyYXRjaF9wZDsKLQlz dHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9wb2ludGVyICpzY3JhdGNoX3BkcDsgLyogR0VOOCsg JiA0OGIgUFBHVFQgKi8KKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqc2NyYXRjaF9wZHA7 IC8qIEdFTjgrICYgNDhiIFBQR1RUICovCiAKIAkvKioKIAkgKiBMaXN0IG9mIHZtYSBjdXJyZW50 bHkgYm91bmQuCkBAIC00MTYsMTEgKzQwMiw3IEBAIHN0cnVjdCBpOTE1X3BwZ3R0IHsKIAlzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlIHZtOwogCiAJaW50ZWxfZW5naW5lX21hc2tfdCBwZF9kaXJ0 eV9lbmdpbmVzOwotCXVuaW9uIHsKLQkJc3RydWN0IGk5MTVfcG1sNCBwbWw0OwkJLyogR0VOOCsg JiA0OGIgUFBHVFQgKi8KLQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfcG9pbnRlciBwZHA7 CS8qIEdFTjgrICovCi0JCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5IHBkOwkJLyogR0VONi03 ICovCi0JfTsKKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQ7CiB9OwogCiBzdHJ1Y3Qg Z2VuNl9wcGd0dCB7CkBAIC00NTQsNyArNDM2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZ2Vu Nl9wcGd0dCAqdG9fZ2VuNl9wcGd0dChzdHJ1Y3QgaTkxNV9wcGd0dCAqYmFzZSkKICNkZWZpbmUg Z2VuNl9mb3JfZWFjaF9wZGUocHQsIHBkLCBzdGFydCwgbGVuZ3RoLCBpdGVyKQkJCVwKIAlmb3Ig KGl0ZXIgPSBnZW42X3BkZV9pbmRleChzdGFydCk7CQkJCVwKIAkgICAgIGxlbmd0aCA+IDAgJiYg aXRlciA8IEk5MTVfUERFUyAmJgkJCQlcCi0JCShwdCA9IChwZCktPnBhZ2VfdGFibGVbaXRlcl0s IHRydWUpOwkJCVwKKwkJICAgICAocHQgPSBpOTE1X3B0X2VudHJ5KHBkLCBpdGVyKSwgdHJ1ZSk7 CQlcCiAJICAgICAoeyB1MzIgdGVtcCA9IEFMSUdOKHN0YXJ0KzEsIDEgPDwgR0VONl9QREVfU0hJ RlQpOwkJXAogCQkgICAgdGVtcCA9IG1pbih0ZW1wIC0gc3RhcnQsIGxlbmd0aCk7CQkJXAogCQkg ICAgc3RhcnQgKz0gdGVtcCwgbGVuZ3RoIC09IHRlbXA7IH0pLCArK2l0ZXIpCkBAIC00NjIsNyAr NDQ0LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZ2VuNl9wcGd0dCAqdG9fZ2VuNl9wcGd0dChz dHJ1Y3QgaTkxNV9wcGd0dCAqYmFzZSkKICNkZWZpbmUgZ2VuNl9mb3JfYWxsX3BkZXMocHQsIHBk LCBpdGVyKQkJCQkJXAogCWZvciAoaXRlciA9IDA7CQkJCQkJCVwKIAkgICAgIGl0ZXIgPCBJOTE1 X1BERVMgJiYJCQkJCVwKLQkJKHB0ID0gKHBkKS0+cGFnZV90YWJsZVtpdGVyXSwgdHJ1ZSk7CQkJ XAorCQkgICAgIChwdCA9IGk5MTVfcHRfZW50cnkocGQsIGl0ZXIpLCB0cnVlKTsJCVwKIAkgICAg ICsraXRlcikKIAogc3RhdGljIGlubGluZSB1MzIgaTkxNV9wdGVfaW5kZXgodTY0IGFkZHJlc3Ms IHVuc2lnbmVkIGludCBwZGVfc2hpZnQpCkBAIC01MjEsNiArNTAzLDI3IEBAIGk5MTVfcGRwZXNf cGVyX3BkcChjb25zdCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKIAlyZXR1cm4gR0VO OF8zTFZMX1BEUEVTOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X3BhZ2VfdGFibGUg KgoraTkxNV9wdF9lbnRyeShjb25zdCBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqIGNvbnN0 IHBkLAorCSAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IG4pCit7CisJcmV0dXJuIHBkLT5lbnRy eVtuXTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqCitp OTE1X3BkX2VudHJ5KGNvbnN0IHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICogY29uc3QgcGRw LAorCSAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IG4pCit7CisJcmV0dXJuIHBkcC0+ZW50cnlb bl07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKgoraTkx NV9wZHBfZW50cnkoY29uc3Qgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKiBjb25zdCBwbWw0 LAorCSAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBuKQoreworCXJldHVybiBwbWw0LT5lbnRy eVtuXTsKK30KKwogLyogRXF1aXZhbGVudCB0byB0aGUgZ2VuNiB2ZXJzaW9uLCBGb3IgZWFjaCBw ZGUgaXRlcmF0ZXMgb3ZlciBldmVyeSBwZGUKICAqIGJldHdlZW4gZnJvbSBzdGFydCB1bnRpbCBz dGFydCArIGxlbmd0aC4gT24gZ2VuOCsgaXQgc2ltcGx5IGl0ZXJhdGVzCiAgKiBvdmVyIGV2ZXJ5 IHBhZ2UgZGlyZWN0b3J5IGVudHJ5IGluIGEgcGFnZSBkaXJlY3RvcnkuCkBAIC01MjgsNyArNTMx LDcgQEAgaTkxNV9wZHBlc19wZXJfcGRwKGNvbnN0IHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtKQogI2RlZmluZSBnZW44X2Zvcl9lYWNoX3BkZShwdCwgcGQsIHN0YXJ0LCBsZW5ndGgsIGl0 ZXIpCQkJXAogCWZvciAoaXRlciA9IGdlbjhfcGRlX2luZGV4KHN0YXJ0KTsJCQkJXAogCSAgICAg bGVuZ3RoID4gMCAmJiBpdGVyIDwgSTkxNV9QREVTICYmCQkJCVwKLQkJKHB0ID0gKHBkKS0+cGFn ZV90YWJsZVtpdGVyXSwgdHJ1ZSk7CQkJXAorCQkgICAgIChwdCA9IGk5MTVfcHRfZW50cnkocGQs IGl0ZXIpLCB0cnVlKTsJCVwKIAkgICAgICh7IHU2NCB0ZW1wID0gQUxJR04oc3RhcnQrMSwgMSA8 PCBHRU44X1BERV9TSElGVCk7CQlcCiAJCSAgICB0ZW1wID0gbWluKHRlbXAgLSBzdGFydCwgbGVu Z3RoKTsJCQlcCiAJCSAgICBzdGFydCArPSB0ZW1wLCBsZW5ndGggLT0gdGVtcDsgfSksICsraXRl cikKQEAgLTUzNiw3ICs1MzksNyBAQCBpOTE1X3BkcGVzX3Blcl9wZHAoY29uc3Qgc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0pCiAjZGVmaW5lIGdlbjhfZm9yX2VhY2hfcGRwZShwZCwgcGRw LCBzdGFydCwgbGVuZ3RoLCBpdGVyKQkJXAogCWZvciAoaXRlciA9IGdlbjhfcGRwZV9pbmRleChz dGFydCk7CQkJCVwKIAkgICAgIGxlbmd0aCA+IDAgJiYgaXRlciA8IGk5MTVfcGRwZXNfcGVyX3Bk cCh2bSkgJiYJCVwKLQkJKHBkID0gKHBkcCktPnBhZ2VfZGlyZWN0b3J5W2l0ZXJdLCB0cnVlKTsJ CVwKKwkJICAgICAocGQgPSBpOTE1X3BkX2VudHJ5KHBkcCwgaXRlciksIHRydWUpOwkJXAogCSAg ICAgKHsgdTY0IHRlbXAgPSBBTElHTihzdGFydCsxLCAxIDw8IEdFTjhfUERQRV9TSElGVCk7CVwK IAkJICAgIHRlbXAgPSBtaW4odGVtcCAtIHN0YXJ0LCBsZW5ndGgpOwkJCVwKIAkJICAgIHN0YXJ0 ICs9IHRlbXAsIGxlbmd0aCAtPSB0ZW1wOyB9KSwgKytpdGVyKQpAQCAtNTQ0LDcgKzU0Nyw3IEBA IGk5MTVfcGRwZXNfcGVyX3BkcChjb25zdCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkK ICNkZWZpbmUgZ2VuOF9mb3JfZWFjaF9wbWw0ZShwZHAsIHBtbDQsIHN0YXJ0LCBsZW5ndGgsIGl0 ZXIpCQlcCiAJZm9yIChpdGVyID0gZ2VuOF9wbWw0ZV9pbmRleChzdGFydCk7CQkJCVwKIAkgICAg IGxlbmd0aCA+IDAgJiYgaXRlciA8IEdFTjhfUE1MNEVTX1BFUl9QTUw0ICYmCQlcCi0JCShwZHAg PSAocG1sNCktPnBkcHNbaXRlcl0sIHRydWUpOwkJCVwKKwkJICAgICAocGRwID0gaTkxNV9wZHBf ZW50cnkocG1sNCwgaXRlciksIHRydWUpOwkJXAogCSAgICAgKHsgdTY0IHRlbXAgPSBBTElHTihz dGFydCsxLCAxVUxMIDw8IEdFTjhfUE1MNEVfU0hJRlQpOwlcCiAJCSAgICB0ZW1wID0gbWluKHRl bXAgLSBzdGFydCwgbGVuZ3RoKTsJCQlcCiAJCSAgICBzdGFydCArPSB0ZW1wLCBsZW5ndGggLT0g dGVtcDsgfSksICsraXRlcikKQEAgLTU3Nyw3ICs1ODAsMTAgQEAgc3RhdGljIGlubGluZSB1NjQg Z2VuOF9wdGVfY291bnQodTY0IGFkZHJlc3MsIHU2NCBsZW5ndGgpCiBzdGF0aWMgaW5saW5lIGRt YV9hZGRyX3QKIGk5MTVfcGFnZV9kaXJfZG1hX2FkZHIoY29uc3Qgc3RydWN0IGk5MTVfcHBndHQg KnBwZ3R0LCBjb25zdCB1bnNpZ25lZCBpbnQgbikKIHsKLQlyZXR1cm4gcHhfZG1hKHBwZ3R0LT5w ZHAucGFnZV9kaXJlY3Rvcnlbbl0pOworCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZDsK KworCXBkID0gaTkxNV9wZHBfZW50cnkocHBndHQtPnBkLCBuKTsKKwlyZXR1cm4gcHhfZG1hKHBk KTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaTkxNV9nZ3R0ICoKLS0gCjIuMTcuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4