From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id E3AAD6E184 for ; Wed, 8 Jan 2020 07:54:39 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Wed, 8 Jan 2020 08:54:11 +0100 Message-Id: <20200108075411.8943-4-zbigniew.kempczynski@intel.com> In-Reply-To: <20200108075411.8943-1-zbigniew.kempczynski@intel.com> References: <20200108075411.8943-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5 3/3] i915/gem_render_copy.c: Simplify code by switch to rendercopy bufmgr List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: U3dpdGNoIHRvIHJlbmRlcmNvcHkgYnVmbWdyIHRvIHNpbXBsaWZ5IHdvcmtpbmcgd2l0aCB0aWxl ZCBzdXJmYWNlcy4KClNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBjennFhHNraSA8emJpZ25p ZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13 aWxzb24uY28udWs+CkNjOiBLYXRhcnp5bmEgRGVjIDxrYXRhcnp5bmEuZGVjQGludGVsLmNvbT4K LS0tCiBsaWIvaW50ZWxfYmF0Y2hidWZmZXIuYyAgICAgIHwgIDQ3ICsrKysrCiBsaWIvaW50ZWxf YmF0Y2hidWZmZXIuaCAgICAgIHwgICAyICsKIHRlc3RzL2k5MTUvZ2VtX3JlbmRlcl9jb3B5LmMg fCAzNzAgKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdl ZCwgMTIyIGluc2VydGlvbnMoKyksIDI5NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIv aW50ZWxfYmF0Y2hidWZmZXIuYyBiL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5jCmluZGV4IDNkYzg5 MDI0Li5jMjNlNWU0OCAxMDA2NDQKLS0tIGEvbGliL2ludGVsX2JhdGNoYnVmZmVyLmMKKysrIGIv bGliL2ludGVsX2JhdGNoYnVmZmVyLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJpb2N0 bF93cmFwcGVycy5oIgogI2luY2x1ZGUgIm1lZGlhX3NwaW4uaCIKICNpbmNsdWRlICJncGdwdV9m aWxsLmgiCisjaW5jbHVkZSAiaWd0X2F1eC5oIgogCiAjaW5jbHVkZSA8aTkxNV9kcm0uaD4KIApA QCAtNTI5LDYgKzUzMCw1MiBAQCB1bnNpZ25lZCBpZ3RfYnVmX2hlaWdodChjb25zdCBzdHJ1Y3Qg aWd0X2J1ZiAqYnVmKQogCXJldHVybiBidWYtPnN1cmZhY2VbMF0uc2l6ZS9idWYtPnN1cmZhY2Vb MF0uc3RyaWRlOwogfQogCisvKioKKyAqIGlndF9idWZfY2NzX3dpZHRoOgorICogQGJ1ZjogdGhl IGktZy10IGJ1ZmZlciBvYmplY3QKKyAqIEBnZW46IGRldmljZSBnZW5lcmF0aW9uCisgKgorICog Q29tcHV0ZXMgdGhlIHdpZHRoIG9mIGNjcyBidWZmZXIgZGF0YS4KKyAqCisgKiBSZXR1cm5zOgor ICogVGhlIHdpZHRoIG9mIHRoZSBjY3MgYnVmZmVyIGRhdGEuCisgKi8KK3Vuc2lnbmVkIGludCBp Z3RfYnVmX2Njc193aWR0aChpbnQgZ2VuLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmKQorewor CS8qCisJICogR0VOMTIrOiBUaGUgQ0NTIHVuaXQgc2l6ZSBpcyA2NCBieXRlcyBtYXBwaW5nIDQg bWFpbiBzdXJmYWNlCisJICogdGlsZXMuIFRodXMgdGhlIHdpZHRoIG9mIHRoZSBDQ1MgdW5pdCBp cyA0KjMyPTEyOCBwaXhlbHMgb24gdGhlCisJICogbWFpbiBzdXJmYWNlLgorCSAqLworCWlmIChn ZW4gPj0gMTIpCisJCXJldHVybiBESVZfUk9VTkRfVVAoaWd0X2J1Zl93aWR0aChidWYpLCAxMjgp ICogNjQ7CisKKwlyZXR1cm4gRElWX1JPVU5EX1VQKGlndF9idWZfd2lkdGgoYnVmKSwgMTAyNCkg KiAxMjg7Cit9CisKKy8qKgorICogaWd0X2J1Zl9jY3NfaGVpZ2h0OgorICogQGJ1ZjogdGhlIGkt Zy10IGJ1ZmZlciBvYmplY3QKKyAqIEBnZW46IGRldmljZSBnZW5lcmF0aW9uCisgKgorICogQ29t cHV0ZXMgdGhlIGhlaWdodCBvZiBjY3MgYnVmZmVyIGRhdGEuCisgKgorICogUmV0dXJuczoKKyAq IFRoZSBoZWlnaHQgb2YgdGhlIGNjcyBidWZmZXIgZGF0YS4KKyAqLwordW5zaWduZWQgaW50IGln dF9idWZfY2NzX2hlaWdodChpbnQgZ2VuLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmKQorewor CS8qCisJICogR0VOMTIrOiBUaGUgQ0NTIHVuaXQgc2l6ZSBpcyA2NCBieXRlcyBtYXBwaW5nIDQg bWFpbiBzdXJmYWNlCisJICogdGlsZXMuIFRodXMgdGhlIGhlaWdodCBvZiB0aGUgQ0NTIHVuaXQg aXMgMzIgcGl4ZWwgcm93cyBvbiB0aGUgbWFpbgorCSAqIHN1cmZhY2UuCisJICovCisJaWYgKGdl biA+PSAxMikKKwkJcmV0dXJuIERJVl9ST1VORF9VUChpZ3RfYnVmX2hlaWdodChidWYpLCAzMik7 CisKKwlyZXR1cm4gRElWX1JPVU5EX1VQKGlndF9idWZfaGVpZ2h0KGJ1ZiksIDUxMikgKiAzMjsK K30KKwogLyoKICAqIHBpdGNoZXMgYXJlIGluIGJ5dGVzIGlmIHRoZSBzdXJmYWNlcyBhcmUgbGlu ZWFyLCBudW1iZXIgb2YgZHdvcmRzCiAgKiBvdGhlcndpc2UKZGlmZiAtLWdpdCBhL2xpYi9pbnRl bF9iYXRjaGJ1ZmZlci5oIGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmgKaW5kZXggZmQ3ZWYwM2Yu LjU4NmZiZDJlIDEwMDY0NAotLS0gYS9saWIvaW50ZWxfYmF0Y2hidWZmZXIuaAorKysgYi9saWIv aW50ZWxfYmF0Y2hidWZmZXIuaApAQCAtMjYyLDYgKzI2Miw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v bCBpZ3RfYnVmX2NvbXByZXNzZWQoY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZikKIAogdW5zaWdu ZWQgaWd0X2J1Zl93aWR0aChjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmKTsKIHVuc2lnbmVkIGln dF9idWZfaGVpZ2h0KGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYpOwordW5zaWduZWQgaW50IGln dF9idWZfY2NzX3dpZHRoKGludCBnZW4sIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYpOwordW5z aWduZWQgaW50IGlndF9idWZfY2NzX2hlaWdodChpbnQgZ2VuLCBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqYnVmKTsKIAogdm9pZCBpZ3RfYmxpdHRlcl9mYXN0X2NvcHkoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwKIAkJCSAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVk IHNyY19kZWx0YSwKZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX3JlbmRlcl9jb3B5LmMgYi90 ZXN0cy9pOTE1L2dlbV9yZW5kZXJfY29weS5jCmluZGV4IDVhYmIyMDM2Li5hZmFlNmUzYSAxMDA2 NDQKLS0tIGEvdGVzdHMvaTkxNS9nZW1fcmVuZGVyX2NvcHkuYworKysgYi90ZXN0cy9pOTE1L2dl bV9yZW5kZXJfY29weS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8ZHJtLmg+CiAKICNp bmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKKyNpbmNsdWRlICJyZW5kZXJjb3B5X2J1Zm1nci5oIgog CiBJR1RfVEVTVF9ERVNDUklQVElPTigiQmFzaWMgdGVzdCBmb3IgdGhlIHJlbmRlcl9jb3B5KCkg ZnVuY3Rpb24uIik7CiAKQEAgLTYwLDYgKzYxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgewogCXN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CiAJaWd0X3JlbmRlcl9jb3B5ZnVuY190IHJlbmRl cl9jb3B5OwogCWlndF92ZWJveF9jb3B5ZnVuY190IHZlYm94X2NvcHk7CisJc3RydWN0IHJlbmRl cmNvcHlfYnVmbWdyICpibWdyOwogfSBkYXRhX3Q7CiBzdGF0aWMgaW50IG9wdF9kdW1wX3BuZyA9 IGZhbHNlOwogc3RhdGljIGludCBjaGVja19hbGxfcGl4ZWxzID0gZmFsc2U7CkBAIC03MywxMzEg Kzc1LDEzIEBAIHN0YXRpYyBjb25zdCBjaGFyICptYWtlX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZp bGVuYW1lKQogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyB2b2lkICp5Zl9wdHIodm9pZCAqcHRy LAotCQkgICAgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LAotCQkgICAgdW5zaWduZWQg aW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNwcCkKK3N0YXRpYyB2b2lkICphbGxvY19hbGlnbmVk KHVpbnQ2NF90IHNpemUpCiB7Ci0JY29uc3QgaW50IHRpbGVfc2l6ZSA9IDQgKiAxMDI0OwotCWNv bnN0IGludCB0aWxlX3dpZHRoID0gMTI4OwotCWludCByb3dfc2l6ZSA9IChzdHJpZGUgLyB0aWxl X3dpZHRoKSAqIHRpbGVfc2l6ZTsKKwl2b2lkICpwOwogCi0JeCAqPSBjcHA7IC8qIGNvbnZlcnQg dG8gQnl0ZSBvZmZzZXQgKi8KKwlpZ3RfYXNzZXJ0X2VxKHBvc2l4X21lbWFsaWduKCZwLCAxNiwg c2l6ZSksIDApOwogCi0KLQkvKgotCSAqIFdpdGhpbiBhIDRrIFlmIHRpbGUsIHRoZSBieXRlIHN3 aXp6bGluZyBwYXR0ZXJuIGlzCi0JICogbXNiLi4uLi4ubHNiCi0JICogeHl4eXh5eXl4eHh4Ci0J ICogVGhlIHRpbGVzIHRoZW1zZWx2ZXMgYXJlIGxhaWQgb3V0IGluIHJvdyBtYWpvciBvcmRlci4K LQkgKi8KLQlyZXR1cm4gcHRyICsKLQkJKCh4ICYgMHhmKSAqIDEpICsgLyogNHgxIHBpeGVscygz MmJwcCkgPSAxNkIgKi8KLQkJKCh5ICYgMHgzKSAqIDE2KSArIC8qIDR4NCBwaXhlbHMgPSA2NEIg Ki8KLQkJKCgoeSAmIDB4NCkgPj4gMikgKiA2NCkgKyAvKiAxeDIgNjRCIGJsb2NrcyAqLwotCQko KCh4ICYgMHgxMCkgPj4gNCkgKiAxMjgpICsgLyogMngyIDY0QiBibG9ja3MgPSAyNTZCIGJsb2Nr ICovCi0JCSgoKHkgJiAweDgpID4+IDMpICogMjU2KSArIC8qIDJ4MSAyNTZCIGJsb2NrcyAqLwot CQkoKCh4ICYgMHgyMCkgPj4gNSkgKiA1MTIpICsgLyogMngyIDI1NkIgYmxvY2tzICovCi0JCSgo KHkgJiAweDEwKSA+PiA0KSAqIDEwMjQpICsgLyogNHgyIDI1NiBibG9ja3MgKi8KLQkJKCgoeCAm IDB4NDApID4+IDYpICogMjA0OCkgKyAvKiA0eDQgMjU2QiBibG9ja3MgPSA0ayB0aWxlICovCi0J CSgoKHggJiB+MHg3ZikgPj4gNykgKiB0aWxlX3NpemUpICsgLyogcm93IG9mIHRpbGVzICovCi0J CSgoKHkgJiB+MHgxZikgPj4gNSkgKiByb3dfc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlf bGluZWFyX3RvX3lmKGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwKLQkJCSAgICAg IGNvbnN0IHVpbnQzMl90ICpsaW5lYXIpCi17Ci0JaW50IGhlaWdodCA9IGlndF9idWZfaGVpZ2h0 KGJ1Zik7Ci0JaW50IHdpZHRoID0gaWd0X2J1Zl93aWR0aChidWYpOwotCXZvaWQgKm1hcDsKLQot CWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLAotCQkgICAgICAg STkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Ci0JbWFwID0gZ2VtX21t YXBfX2NwdShkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKLQkJCSAgICBidWYtPmJv LT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLQotCWZvciAoaW50IHkgPSAwOyB5IDwg aGVpZ2h0OyB5KyspIHsKLQkJZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0JCQl1 aW50MzJfdCAqcHRyID0geWZfcHRyKG1hcCwgeCwgeSwKLQkJCQkJICAgICAgIGJ1Zi0+c3VyZmFj ZVswXS5zdHJpZGUsCi0JCQkJCSAgICAgICBidWYtPmJwcCAvIDgpOwotCi0JCQkqcHRyID0gbGlu ZWFyW3kgKiB3aWR0aCArIHhdOwotCQl9Ci0JfQotCi0JbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6 ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlfeWZfdG9fbGluZWFyKGRhdGFfdCAqZGF0YSwgc3Ry dWN0IGlndF9idWYgKmJ1ZiwKLQkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCi17Ci0JaW50IGhl aWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1Zik7Ci0JaW50IHdpZHRoID0gaWd0X2J1Zl93aWR0aChi dWYpOwotCXZvaWQgKm1hcDsKLQotCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgYnVmLT5i by0+aGFuZGxlLAotCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7Ci0JbWFwID0gZ2Vt X21tYXBfX2NwdShkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKLQkJCSAgICBidWYt PmJvLT5zaXplLCBQUk9UX1JFQUQpOwotCi0JZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr KykgewotCQlmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLQkJCXVpbnQzMl90ICpw dHIgPSB5Zl9wdHIobWFwLCB4LCB5LAotCQkJCQkgICAgICAgYnVmLT5zdXJmYWNlWzBdLnN0cmlk ZSwKLQkJCQkJICAgICAgIGJ1Zi0+YnBwIC8gOCk7Ci0KLQkJCWxpbmVhclt5ICogd2lkdGggKyB4 XSA9ICpwdHI7Ci0JCX0KLQl9Ci0KLQltdW5tYXAobWFwLCBidWYtPmJvLT5zaXplKTsKLX0KLQot c3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9fZ3R0KGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9i dWYgKmJ1ZiwKLQkJCSAgICAgICBjb25zdCB1aW50MzJfdCAqbGluZWFyKQotewotCXZvaWQgKm1h cDsKLQotCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLAotCQkg ICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Ci0KLQltYXAg PSBnZW1fbW1hcF9fZ3R0KGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLAotCQkJICAgIGJ1 Zi0+Ym8tPnNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwotCi0JbWVtY3B5KG1hcCwgbGlu ZWFyLCBidWYtPmJvLT5zaXplKTsKLQotCW11bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUpOwotfQot Ci1zdGF0aWMgdm9pZCBjb3B5X2d0dF90b19saW5lYXIoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0 X2J1ZiAqYnVmLAotCQkJICAgICAgIHVpbnQzMl90ICpsaW5lYXIpCi17Ci0Jdm9pZCAqbWFwOwot Ci0JZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJtX2ZkLCBidWYtPmJvLT5oYW5kbGUsCi0JCSAgICAg ICBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKLQotCW1hcCA9IGdlbV9tbWFwX19ndHQoZGF0YS0+ ZHJtX2ZkLCBidWYtPmJvLT5oYW5kbGUsCi0JCQkgICAgYnVmLT5iby0+c2l6ZSwgUFJPVF9SRUFE KTsKLQotCWlndF9tZW1jcHlfZnJvbV93YyhsaW5lYXIsIG1hcCwgYnVmLT5iby0+c2l6ZSk7Ci0K LQltdW5tYXAobWFwLCBidWYtPmJvLT5zaXplKTsKLX0KLQotc3RhdGljIHZvaWQgKmxpbmVhcl9j b3B5KGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZikKLXsKLQl2b2lkICpsaW5lYXI7 Ci0KLQkvKiAxNkIgYWxpZ25tZW50IGFsbG93cyB0byBwb3RlbnRpYWxseSBtYWtlIHVzZSBvZiBT U0U0IGZvciBjb3B5aW5nICovCi0JaWd0X2Fzc2VydF9lcShwb3NpeF9tZW1hbGlnbigmbGluZWFy LCAxNiwgYnVmLT5iby0+c2l6ZSksIDApOwotCi0JaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElM SU5HX1lmKQotCQljb3B5X3lmX3RvX2xpbmVhcihkYXRhLCBidWYsIGxpbmVhcik7Ci0JZWxzZQot CQljb3B5X2d0dF90b19saW5lYXIoZGF0YSwgYnVmLCBsaW5lYXIpOwotCi0JcmV0dXJuIGxpbmVh cjsKKwlyZXR1cm4gcDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIwOSwxMyArOTMsMTMgQEAgY29w eV9mcm9tX2xpbmVhcl9idWYoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLCBzdHJ1 Y3QgaWd0X2J1ZiAqZHN0KQogCiAJZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJtX2ZkLCBzcmMtPmJv LT5oYW5kbGUsCiAJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsKLQlsaW5lYXIgPSBn ZW1fbW1hcF9fY3B1KGRhdGEtPmRybV9mZCwgc3JjLT5iby0+aGFuZGxlLCAwLAotCQkJICAgICAg IHNyYy0+Ym8tPnNpemUsIFBST1RfUkVBRCk7CisJbGluZWFyID0gX19nZW1fbW1hcF9vZmZzZXRf X2NwdShkYXRhLT5kcm1fZmQsIHNyYy0+Ym8tPmhhbmRsZSwgMCwKKwkJCQkJc3JjLT5iby0+c2l6 ZSwgUFJPVF9SRUFEKTsKKwlpZiAoIWxpbmVhcikKKwkJbGluZWFyID0gZ2VtX21tYXBfX2NwdShk YXRhLT5kcm1fZmQsIHNyYy0+Ym8tPmhhbmRsZSwgMCwKKwkJCQkgICAgICAgc3JjLT5iby0+c2l6 ZSwgUFJPVF9SRUFEKTsKIAotCWlmIChkc3QtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZZikKLQkJ Y29weV9saW5lYXJfdG9feWYoZGF0YSwgZHN0LCBsaW5lYXIpOwotCWVsc2UKLQkJY29weV9saW5l YXJfdG9fZ3R0KGRhdGEsIGRzdCwgbGluZWFyKTsKKwlsaW5lYXJfdG9faWd0X2J1ZihkYXRhLT5i bWdyLCBkc3QsIGxpbmVhcik7CiAKIAltdW5tYXAobGluZWFyLCBzcmMtPmJvLT5zaXplKTsKIH0K QEAgLTIyNyw3ICsxMTEsOCBAQCBzdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl93cml0ZV90b19wbmco ZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCWNhaXJvX3N0YXR1c190IHJldDsK IAl2b2lkICpsaW5lYXI7CiAKLQlsaW5lYXIgPSBsaW5lYXJfY29weShkYXRhLCBidWYpOworCWxp bmVhciA9IGFsbG9jX2FsaWduZWQoYnVmLT5iby0+c2l6ZSk7CisJaWd0X2J1Zl90b19saW5lYXIo ZGF0YS0+Ym1nciwgYnVmLCBsaW5lYXIpOwogCiAJc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZh Y2VfY3JlYXRlX2Zvcl9kYXRhKGxpbmVhciwKIAkJCQkJCSAgICAgIENBSVJPX0ZPUk1BVF9SR0Iy NCwKQEAgLTI0MSw2NyArMTI2LDQ0IEBAIHN0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX3dyaXRlX3Rv X3BuZyhkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCiAJZnJlZShsaW5lYXIpOwog fQogCi1zdGF0aWMgaW50IHNjcmF0Y2hfYnVmX2F1eF93aWR0aCh1aW50MzJfdCBkZXZpZCwgY29u c3Qgc3RydWN0IGlndF9idWYgKmJ1ZikKLXsKLQkvKgotCSAqIEdFTjEyKzogVGhlIEFVWCBDQ1Mg dW5pdCBzaXplIGlzIDY0IGJ5dGVzIG1hcHBpbmcgNCBtYWluIHN1cmZhY2UKLQkgKiB0aWxlcy4g VGh1cyB0aGUgd2lkdGggb2YgdGhlIENDUyB1bml0IGlzIDQqMzI9MTI4IHBpeGVscyBvbiB0aGUK LQkgKiBtYWluIHN1cmZhY2UuCi0JICovCi0JaWYgKGludGVsX2dlbihkZXZpZCkgPj0gMTIpCi0J CXJldHVybiBESVZfUk9VTkRfVVAoaWd0X2J1Zl93aWR0aChidWYpLCAxMjgpICogNjQ7Ci0KLQly ZXR1cm4gRElWX1JPVU5EX1VQKGlndF9idWZfd2lkdGgoYnVmKSwgMTAyNCkgKiAxMjg7Ci19Ci0K LXN0YXRpYyBpbnQgc2NyYXRjaF9idWZfYXV4X2hlaWdodCh1aW50MzJfdCBkZXZpZCwgY29uc3Qg c3RydWN0IGlndF9idWYgKmJ1ZikKLXsKLQkvKgotCSAqIEdFTjEyKzogVGhlIEFVWCBDQ1MgdW5p dCBzaXplIGlzIDY0IGJ5dGVzIG1hcHBpbmcgNCBtYWluIHN1cmZhY2UKLQkgKiB0aWxlcy4gVGh1 cyB0aGUgaGVpZ2h0IG9mIHRoZSBDQ1MgdW5pdCBpcyAzMiBwaXhlbCByb3dzIG9uIHRoZSBtYWlu Ci0JICogc3VyZmFjZS4KLQkgKi8KLQlpZiAoaW50ZWxfZ2VuKGRldmlkKSA+PSAxMikKLQkJcmV0 dXJuIERJVl9ST1VORF9VUChpZ3RfYnVmX2hlaWdodChidWYpLCAzMik7Ci0KLQlyZXR1cm4gRElW X1JPVU5EX1VQKGlndF9idWZfaGVpZ2h0KGJ1ZiksIDUxMikgKiAzMjsKLX0KLQotc3RhdGljIHZv aWQgKmxpbmVhcl9jb3B5X2F1eChkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYpCitz dGF0aWMgdm9pZCAqbGluZWFyX2NvcHlfY2NzKGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYg KmJ1ZikKIHsKIAl2b2lkICptYXAsICpsaW5lYXI7Ci0JaW50IGF1eF9zaXplID0gc2NyYXRjaF9i dWZfYXV4X3dpZHRoKGRhdGEtPmRldmlkLCBidWYpICoKLQkJc2NyYXRjaF9idWZfYXV4X2hlaWdo dChkYXRhLT5kZXZpZCwgYnVmKTsKKwlpbnQgZ2VuID0gaW50ZWxfZ2VuKGRhdGEtPmRldmlkKTsK KwlpbnQgY2NzX3NpemUgPSBpZ3RfYnVmX2Njc193aWR0aChnZW4sIGJ1ZikgKgorCQlpZ3RfYnVm X2Njc19oZWlnaHQoZ2VuLCBidWYpOwogCi0JaWd0X2Fzc2VydF9lcShwb3NpeF9tZW1hbGlnbigm bGluZWFyLCAxNiwgYXV4X3NpemUpLCAwKTsKKwlsaW5lYXIgPSBhbGxvY19hbGlnbmVkKGNjc19z aXplKTsKIAogCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLAog CQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7CiAKLQltYXAgPSBnZW1fbW1hcF9fZ3R0 KGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLAotCQkJICAgIGJ1Zi0+Ym8tPnNpemUsIFBS T1RfUkVBRCk7CisJbWFwID0gZ2VtX21tYXBfX2RldmljZV9jb2hlcmVudChkYXRhLT5kcm1fZmQs IGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKKwkJCQkJYnVmLT5iby0+c2l6ZSwgUFJPVF9SRUFEKTsKIAot CWlndF9tZW1jcHlfZnJvbV93YyhsaW5lYXIsIG1hcCArIGJ1Zi0+Y2NzWzBdLm9mZnNldCwgYXV4 X3NpemUpOworCWlndF9tZW1jcHlfZnJvbV93YyhsaW5lYXIsIG1hcCArIGJ1Zi0+Y2NzWzBdLm9m ZnNldCwgY2NzX3NpemUpOwogCiAJbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7CiAKIAlyZXR1 cm4gbGluZWFyOwogfQogCi1zdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl9hdXhfd3JpdGVfdG9fcG5n KGRhdGFfdCAqZGF0YSwKK3N0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2Njc193cml0ZV90b19wbmco ZGF0YV90ICpkYXRhLAogCQkJCQkgc3RydWN0IGlndF9idWYgKmJ1ZiwKIAkJCQkJIGNvbnN0IGNo YXIgKmZpbGVuYW1lKQogewogCWNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZTsKIAljYWlyb19zdGF0 dXNfdCByZXQ7CiAJdm9pZCAqbGluZWFyOworCWludCBnZW4gPSBpbnRlbF9nZW4oZGF0YS0+ZGV2 aWQpOworCXVuc2lnbmVkIGludCBjY3Nfd2lkdGggPSBpZ3RfYnVmX2Njc193aWR0aChnZW4sIGJ1 Zik7CisJdW5zaWduZWQgaW50IGNjc19oZWlnaHQgPSBpZ3RfYnVmX2Njc19oZWlnaHQoZ2VuLCBi dWYpOwogCi0JbGluZWFyID0gbGluZWFyX2NvcHlfYXV4KGRhdGEsIGJ1Zik7CisJbGluZWFyID0g bGluZWFyX2NvcHlfY2NzKGRhdGEsIGJ1Zik7CiAKIAlzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3Vy ZmFjZV9jcmVhdGVfZm9yX2RhdGEobGluZWFyLAogCQkJCQkJICAgICAgQ0FJUk9fRk9STUFUX0E4 LAotCQkJCQkJICAgICAgc2NyYXRjaF9idWZfYXV4X3dpZHRoKGRhdGEtPmRldmlkLCBidWYpLAot CQkJCQkJICAgICAgc2NyYXRjaF9idWZfYXV4X2hlaWdodChkYXRhLT5kZXZpZCwgYnVmKSwKKwkJ CQkJCSAgICAgIGNjc193aWR0aCwgY2NzX2hlaWdodCwKIAkJCQkJCSAgICAgIGJ1Zi0+Y2NzWzBd LnN0cmlkZSk7CiAJcmV0ID0gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmcoc3VyZmFjZSwgbWFr ZV9maWxlbmFtZShmaWxlbmFtZSkpOwogCWlndF9hc3NlcnQocmV0ID09IENBSVJPX1NUQVRVU19T VUNDRVNTKTsKQEAgLTMyMCw3ICsxODIsNyBAQCBzdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl9kcmF3 X3BhdHRlcm4oZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCWNhaXJvX3QgKmNy OwogCXZvaWQgKmxpbmVhcjsKIAotCWxpbmVhciA9IGxpbmVhcl9jb3B5KGRhdGEsIGJ1Zik7CisJ bGluZWFyID0gYWxsb2NfYWxpZ25lZChidWYtPmJvLT5zaXplKTsKIAogCXN1cmZhY2UgPSBjYWly b19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShsaW5lYXIsCiAJCQkJCQkgICAgICBDQUlS T19GT1JNQVRfUkdCMjQsCkBAIC0zNjEsMTAgKzIyMyw3IEBAIHN0YXRpYyB2b2lkIHNjcmF0Y2hf YnVmX2RyYXdfcGF0dGVybihkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCiAKIAlj YWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CiAKLQlpZiAoYnVmLT50aWxpbmcgPT0gSTkx NV9USUxJTkdfWWYpCi0JCWNvcHlfbGluZWFyX3RvX3lmKGRhdGEsIGJ1ZiwgbGluZWFyKTsKLQll bHNlCi0JCWNvcHlfbGluZWFyX3RvX2d0dChkYXRhLCBidWYsIGxpbmVhcik7CisJbGluZWFyX3Rv X2lndF9idWYoZGF0YS0+Ym1nciwgYnVmLCBsaW5lYXIpOwogCiAJZnJlZShsaW5lYXIpOwogfQpA QCAtMzc3LDYgKzIzNiw3IEBAIHNjcmF0Y2hfYnVmX2NvcHkoZGF0YV90ICpkYXRhLAogCWludCB3 aWR0aCA9IGlndF9idWZfd2lkdGgoZHN0KTsKIAlpbnQgaGVpZ2h0ICA9IGlndF9idWZfaGVpZ2h0 KGRzdCk7CiAJdWludDMyX3QgKmxpbmVhcl9kc3Q7CisJdWludDMyX3QgKmxpbmVhcl9zcmM7CiAK IAlpZ3RfYXNzZXJ0X2VxKGlndF9idWZfd2lkdGgoZHN0KSwgaWd0X2J1Zl93aWR0aChzcmMpKTsK IAlpZ3RfYXNzZXJ0X2VxKGlndF9idWZfaGVpZ2h0KGRzdCksIGlndF9idWZfaGVpZ2h0KHNyYykp OwpAQCAtMzg5LDQ5ICsyNDksMjAgQEAgc2NyYXRjaF9idWZfY29weShkYXRhX3QgKmRhdGEsCiAJ aCA9IG1pbihoLCBoZWlnaHQgLSBzeSk7CiAJaCA9IG1pbihoLCBoZWlnaHQgLSBkeSk7CiAKLQln ZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIGRzdC0+Ym8tPmhhbmRsZSwKLQkJICAgICAgIEk5 MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOwotCWxpbmVhcl9kc3QgPSBn ZW1fbW1hcF9fZ3R0KGRhdGEtPmRybV9mZCwgZHN0LT5iby0+aGFuZGxlLAotCQkJCSAgIGRzdC0+ Ym8tPnNpemUsIFBST1RfV1JJVEUpOworCWxpbmVhcl9kc3QgPSBhbGxvY19hbGlnbmVkKGRzdC0+ Ym8tPnNpemUpOworCWxpbmVhcl9zcmMgPSBhbGxvY19hbGlnbmVkKHNyYy0+Ym8tPnNpemUpOwor CWlndF9idWZfdG9fbGluZWFyKGRhdGEtPmJtZ3IsIHNyYywgbGluZWFyX3NyYyk7CisJaWd0X2J1 Zl90b19saW5lYXIoZGF0YS0+Ym1nciwgZHN0LCBsaW5lYXJfZHN0KTsKIAotCWlmIChzcmMtPnRp bGluZyA9PSBJOTE1X1RJTElOR19ZZikgewotCQl2b2lkICptYXA7Ci0KLQkJZ2VtX3NldF9kb21h aW4oZGF0YS0+ZHJtX2ZkLCBzcmMtPmJvLT5oYW5kbGUsCi0JCQkgICAgICAgSTkxNV9HRU1fRE9N QUlOX0NQVSwgMCk7Ci0JCW1hcCA9IGdlbV9tbWFwX19jcHUoZGF0YS0+ZHJtX2ZkLCBzcmMtPmJv LT5oYW5kbGUsIDAsCi0JCQkJICAgIHNyYy0+Ym8tPnNpemUsIFBST1RfUkVBRCk7Ci0KLQkJZm9y IChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsKLQkJCWZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsr KSB7Ci0JCQkJY29uc3QgdWludDMyX3QgKnB0ciA9IHlmX3B0cihtYXAsIHN4K3gsIHN5K3ksCi0J CQkJCQkJICAgICBzcmMtPnN1cmZhY2VbMF0uc3RyaWRlLAotCQkJCQkJCSAgICAgc3JjLT5icHAg LyA4KTsKLQotCQkJCWxpbmVhcl9kc3RbKGR5K3kpICogd2lkdGggKyBkeCt4XSA9ICpwdHI7Ci0J CQl9Ci0JCX0KLQotCQltdW5tYXAobWFwLCBzcmMtPmJvLT5zaXplKTsKLQl9IGVsc2UgewotCQl1 aW50MzJfdCAqbGluZWFyX3NyYzsKLQotCQlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIHNy Yy0+Ym8tPmhhbmRsZSwKLQkJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKLQotCQls aW5lYXJfc3JjID0gZ2VtX21tYXBfX2d0dChkYXRhLT5kcm1fZmQsIHNyYy0+Ym8tPmhhbmRsZSwK LQkJCQkJICAgc3JjLT5iby0+c2l6ZSwgUFJPVF9SRUFEKTsKLQotCQlmb3IgKGludCB5ID0gMDsg eSA8IGg7IHkrKykgewotCQkJaWd0X21lbWNweV9mcm9tX3djKCZsaW5lYXJfZHN0WyhkeSt5KSAq IHdpZHRoICsgZHhdLAotCQkJCQkgICAmbGluZWFyX3NyY1soc3kreSkgKiB3aWR0aCArIHN4XSwK LQkJCQkJICAgdyAqIChzcmMtPmJwcCAvIDgpKTsKLQkJfQotCi0JCW11bm1hcChsaW5lYXJfc3Jj LCBzcmMtPmJvLT5zaXplKTsKKwlmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgeworCQltZW1j cHkoJmxpbmVhcl9kc3RbKGR5K3kpICogd2lkdGggKyBkeF0sCisJCQkJJmxpbmVhcl9zcmNbKHN5 K3kpICogd2lkdGggKyBzeF0sCisJCQkJdyAqIChzcmMtPmJwcCAvIDgpKTsKIAl9CisJZnJlZShs aW5lYXJfc3JjKTsKIAotCW11bm1hcChsaW5lYXJfZHN0LCBkc3QtPmJvLT5zaXplKTsKKwlsaW5l YXJfdG9faWd0X2J1ZihkYXRhLT5ibWdyLCBkc3QsIGxpbmVhcl9kc3QpOworCWZyZWUobGluZWFy X2RzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2luaXQoZGF0YV90ICpkYXRhLCBz dHJ1Y3QgaWd0X2J1ZiAqYnVmLApAQCAtNDM5LDc2ICsyNzAsMTAgQEAgc3RhdGljIHZvaWQgc2Ny YXRjaF9idWZfaW5pdChkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCiAJCQkgICAg IHVpbnQzMl90IHJlcV90aWxpbmcsCiAJCQkgICAgIGVudW0gaTkxNV9jb21wcmVzc2lvbiBjb21w cmVzc2lvbikKIHsKLQl1aW50MzJfdCB0aWxpbmcgPSByZXFfdGlsaW5nOwotCXVuc2lnbmVkIGxv bmcgcGl0Y2g7CiAJaW50IGJwcCA9IDMyOwogCi0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYp KTsKLQotCWlmIChjb21wcmVzc2lvbiAhPSBJOTE1X0NPTVBSRVNTSU9OX05PTkUpIHsKLQkJaW50 IGF1eF93aWR0aCwgYXV4X2hlaWdodDsKLQkJaW50IHNpemU7Ci0KLQkJaWd0X3JlcXVpcmUoaW50 ZWxfZ2VuKGRhdGEtPmRldmlkKSA+PSA5KTsKLQkJaWd0X2Fzc2VydCh0aWxpbmcgPT0gSTkxNV9U SUxJTkdfWSB8fAotCQkJICAgdGlsaW5nID09IEk5MTVfVElMSU5HX1lmKTsKLQotCQkvKgotCQkg KiBPbiBHRU4xMisgd2UgYWxpZ24gdGhlIG1haW4gc3VyZmFjZSB0byA0ICogNCBtYWluIHN1cmZh Y2UKLQkJICogdGlsZXMsIHdoaWNoIGlzIDY0a0IuIFRoZXNlIDE2IHRpbGVzIGFyZSBtYXBwZWQg YnkgNCBBVVgKLQkJICogQ0NTIHVuaXRzLCB0aGF0IGlzIDQgKiA2NCBieXRlcy4gVGhlc2UgNCBD Q1MgdW5pdHMgYXJlIGluCi0JCSAqIHR1cm4gbWFwcGVkIGJ5IG9uZSBMMSBBVVggcGFnZSB0YWJs ZSBlbnRyeS4KLQkJICovCi0JCWlmIChpbnRlbF9nZW4oZGF0YS0+ZGV2aWQpID49IDEyKQotCQkJ YnVmLT5zdXJmYWNlWzBdLnN0cmlkZSA9IEFMSUdOKHdpZHRoICogKGJwcCAvIDgpLCAxMjggKiA0 KTsKLQkJZWxzZQotCQkJYnVmLT5zdXJmYWNlWzBdLnN0cmlkZSA9IEFMSUdOKHdpZHRoICogKGJw cCAvIDgpLCAxMjgpOwotCi0JCWlmIChpbnRlbF9nZW4oZGF0YS0+ZGV2aWQpID49IDEyKQotCQkJ aGVpZ2h0ID0gQUxJR04oaGVpZ2h0LCA0ICogMzIpOwotCi0JCWJ1Zi0+c3VyZmFjZVswXS5zaXpl ID0gYnVmLT5zdXJmYWNlWzBdLnN0cmlkZSAqIGhlaWdodDsKLQkJYnVmLT50aWxpbmcgPSB0aWxp bmc7Ci0JCWJ1Zi0+YnBwID0gYnBwOwotCi0JCWF1eF93aWR0aCA9IHNjcmF0Y2hfYnVmX2F1eF93 aWR0aChkYXRhLT5kZXZpZCwgYnVmKTsKLQkJYXV4X2hlaWdodCA9IHNjcmF0Y2hfYnVmX2F1eF9o ZWlnaHQoZGF0YS0+ZGV2aWQsIGJ1Zik7Ci0KLQkJYnVmLT5jb21wcmVzc2lvbiA9IGNvbXByZXNz aW9uOwotCQlidWYtPmNjc1swXS5vZmZzZXQgPSBidWYtPnN1cmZhY2VbMF0uc3RyaWRlICogQUxJ R04oaGVpZ2h0LCAzMik7Ci0JCWJ1Zi0+Y2NzWzBdLnN0cmlkZSA9IGF1eF93aWR0aDsKLQotCQlz aXplID0gYnVmLT5jY3NbMF0ub2Zmc2V0ICsgYXV4X3dpZHRoICogYXV4X2hlaWdodDsKLQotCQli dWYtPmJvID0gZHJtX2ludGVsX2JvX2FsbG9jKGRhdGEtPmJ1Zm1nciwgIiIsIHNpemUsIDQwOTYp OwotCi0JCWlmICh0aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkgewotCQkJZHJtX2ludGVsX2JvX3Nl dF90aWxpbmcoYnVmLT5ibywgJnRpbGluZywKLQkJCQkJCWJ1Zi0+c3VyZmFjZVswXS5zdHJpZGUp OwotCQkJaWd0X2Fzc2VydF9lcSh0aWxpbmcsIHJlcV90aWxpbmcpOwotCQl9Ci0JfSBlbHNlIGlm IChyZXFfdGlsaW5nID09IEk5MTVfVElMSU5HX1lmKSB7Ci0JCWludCBzaXplOwotCi0JCWJ1Zi0+ c3VyZmFjZVswXS5zdHJpZGUgPSBBTElHTih3aWR0aCAqIChicHAgLyA4KSwgMTI4KTsKLQkJYnVm LT5zdXJmYWNlWzBdLnNpemUgPSBidWYtPnN1cmZhY2VbMF0uc3RyaWRlICogaGVpZ2h0OwotCQli dWYtPnRpbGluZyA9IHRpbGluZzsKLQkJYnVmLT5icHAgPSBicHA7Ci0KLQkJc2l6ZSA9IGJ1Zi0+ c3VyZmFjZVswXS5zdHJpZGUgKiBBTElHTihoZWlnaHQsIDMyKTsKLQotCQlidWYtPmJvID0gZHJt X2ludGVsX2JvX2FsbG9jKGRhdGEtPmJ1Zm1nciwgIiIsIHNpemUsIDQwOTYpOwotCX0gZWxzZSB7 Ci0JCWJ1Zi0+Ym8gPSBkcm1faW50ZWxfYm9fYWxsb2NfdGlsZWQoZGF0YS0+YnVmbWdyLCAiIiwK LQkJCQkJCSAgIHdpZHRoLCBoZWlnaHQsIGJwcCAvIDgsCi0JCQkJCQkgICAmdGlsaW5nLCAmcGl0 Y2gsIDApOwotCQlpZ3RfYXNzZXJ0X2VxKHRpbGluZywgcmVxX3RpbGluZyk7Ci0KLQkJYnVmLT5z dXJmYWNlWzBdLnN0cmlkZSA9IHBpdGNoOwotCQlidWYtPnRpbGluZyA9IHRpbGluZzsKLQkJYnVm LT5zdXJmYWNlWzBdLnNpemUgPSBwaXRjaCAqIGhlaWdodDsKLQkJYnVmLT5icHAgPSBicHA7Ci0J fQorCWlndF9idWZfaW5pdChkYXRhLT5ibWdyLCBidWYsIHdpZHRoLCBoZWlnaHQsIGJwcCwgcmVx X3RpbGluZywKKwkJICAgICBjb21wcmVzc2lvbik7CiAKIAlpZ3RfYXNzZXJ0KGlndF9idWZfd2lk dGgoYnVmKSA9PSB3aWR0aCk7CiAJaWd0X2Fzc2VydChpZ3RfYnVmX2hlaWdodChidWYpID09IGhl aWdodCk7CkBAIC01MzMsMTEgKzI5OCwxMyBAQCBzY3JhdGNoX2J1Zl9jaGVjayhkYXRhX3QgKmRh dGEsCiAJaWd0X2Fzc2VydF9lcShpZ3RfYnVmX2hlaWdodChidWYpLCBpZ3RfYnVmX2hlaWdodChy ZWYpKTsKIAlpZ3RfYXNzZXJ0X2VxKGJ1Zi0+Ym8tPnNpemUsIHJlZi0+Ym8tPnNpemUpOwogCi0J bGluZWFyID0gbGluZWFyX2NvcHkoZGF0YSwgYnVmKTsKKwlsaW5lYXIgPSBhbGxvY19hbGlnbmVk KGJ1Zi0+Ym8tPnNpemUpOworCWlndF9idWZfdG9fbGluZWFyKGRhdGEtPmJtZ3IsIGJ1ZiwgbGlu ZWFyKTsKIAlidWZfdmFsID0gbGluZWFyW3kgKiB3aWR0aCArIHhdOwogCWZyZWUobGluZWFyKTsK IAotCWxpbmVhciA9IGxpbmVhcl9jb3B5KGRhdGEsIHJlZik7CisJbGluZWFyID0gYWxsb2NfYWxp Z25lZChyZWYtPmJvLT5zaXplKTsKKwlpZ3RfYnVmX3RvX2xpbmVhcihkYXRhLT5ibWdyLCBidWYs IGxpbmVhcik7CiAJcmVmX3ZhbCA9IGxpbmVhclt5ICogd2lkdGggKyB4XTsKIAlmcmVlKGxpbmVh cik7CiAKQEAgLTU1OSw4ICszMjYsMTAgQEAgc2NyYXRjaF9idWZfY2hlY2tfYWxsKGRhdGFfdCAq ZGF0YSwKIAlpZ3RfYXNzZXJ0X2VxKGlndF9idWZfaGVpZ2h0KGJ1ZiksIGlndF9idWZfaGVpZ2h0 KHJlZikpOwogCWlndF9hc3NlcnRfZXEoYnVmLT5iby0+c2l6ZSwgcmVmLT5iby0+c2l6ZSk7CiAK LQlsaW5lYXJfYnVmID0gbGluZWFyX2NvcHkoZGF0YSwgYnVmKTsKLQlsaW5lYXJfcmVmID0gbGlu ZWFyX2NvcHkoZGF0YSwgcmVmKTsKKwlsaW5lYXJfYnVmID0gYWxsb2NfYWxpZ25lZChidWYtPmJv LT5zaXplKTsKKwlsaW5lYXJfcmVmID0gYWxsb2NfYWxpZ25lZChyZWYtPmJvLT5zaXplKTsKKwlp Z3RfYnVmX3RvX2xpbmVhcihkYXRhLT5ibWdyLCBidWYsIGxpbmVhcl9idWYpOworCWlndF9idWZf dG9fbGluZWFyKGRhdGEtPmJtZ3IsIHJlZiwgbGluZWFyX3JlZik7CiAKIAlmb3IgKGludCB5ID0g MDsgeSA8IGhlaWdodDsgeSsrKSB7CiAJCWZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykg ewpAQCAtNTc3LDI1ICszNDYsMjYgQEAgc2NyYXRjaF9idWZfY2hlY2tfYWxsKGRhdGFfdCAqZGF0 YSwKIAlmcmVlKGxpbmVhcl9idWYpOwogfQogCi1zdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl9hdXhf Y2hlY2soZGF0YV90ICpkYXRhLAorc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfY2NzX2NoZWNrKGRh dGFfdCAqZGF0YSwKIAkJCQkgIHN0cnVjdCBpZ3RfYnVmICpidWYpCiB7Ci0JaW50IGF1eF9zaXpl ID0gc2NyYXRjaF9idWZfYXV4X3dpZHRoKGRhdGEtPmRldmlkLCBidWYpICoKLQkJc2NyYXRjaF9i dWZfYXV4X2hlaWdodChkYXRhLT5kZXZpZCwgYnVmKTsKKwlpbnQgZ2VuID0gaW50ZWxfZ2VuKGRh dGEtPmRldmlkKTsKKwlpbnQgY2NzX3NpemUgPSBpZ3RfYnVmX2Njc193aWR0aChnZW4sIGJ1Zikg KgorCQlpZ3RfYnVmX2Njc19oZWlnaHQoZ2VuLCBidWYpOwogCXVpbnQ4X3QgKmxpbmVhcjsKIAlp bnQgaTsKIAotCWxpbmVhciA9IGxpbmVhcl9jb3B5X2F1eChkYXRhLCBidWYpOworCWxpbmVhciA9 IGxpbmVhcl9jb3B5X2NjcyhkYXRhLCBidWYpOwogCi0JZm9yIChpID0gMDsgaSA8IGF1eF9zaXpl OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgY2NzX3NpemU7IGkrKykgewogCQlpZiAobGluZWFy W2ldKQogCQkJYnJlYWs7CiAJfQogCiAJZnJlZShsaW5lYXIpOwogCi0JaWd0X2Fzc2VydF9mKGkg PCBhdXhfc2l6ZSwKLQkJICAgICAiQXV4IHN1cmZhY2UgaW5kaWNhdGVzIHRoYXQgbm90aGluZyB3 YXMgY29tcHJlc3NlZFxuIik7CisJaWd0X2Fzc2VydF9mKGkgPCBjY3Nfc2l6ZSwKKwkJICAgICAi Q2NzIHN1cmZhY2UgaW5kaWNhdGVzIHRoYXQgbm90aGluZyB3YXMgY29tcHJlc3NlZFxuIik7CiB9 CiAKICNkZWZpbmUgU09VUkNFX01JWEVEX1RJTEVECTEKQEAgLTY3MSw2ICs0NDEsNyBAQCBzdGF0 aWMgdm9pZCB0ZXN0KGRhdGFfdCAqZGF0YSwgdWludDMyX3Qgc3JjX3RpbGluZywgdWludDMyX3Qg ZHN0X3RpbGluZywKIAkJCQkgSTkxNV9DT01QUkVTU0lPTl9OT05FKTsKIAlzY3JhdGNoX2J1Zl9p bml0KGRhdGEsICZkc3QsIFdJRFRILCBIRUlHSFQsIGRzdF90aWxpbmcsCiAJCQkgSTkxNV9DT01Q UkVTU0lPTl9OT05FKTsKKwogCWlmIChzcmNfY29tcHJlc3NlZCkKIAkJc2NyYXRjaF9idWZfaW5p dChkYXRhLCAmc3JjX2NjcywgV0lEVEgsIEhFSUdIVCwKIAkJCQkgc3JjX3RpbGluZywgc3JjX2Nv bXByZXNzaW9uKTsKQEAgLTY4Myw3ICs0NTQsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0KGRhdGFfdCAq ZGF0YSwgdWludDMyX3Qgc3JjX3RpbGluZywgdWludDMyX3QgZHN0X3RpbGluZywKIAlmb3IgKGlu dCBpID0gMDsgaSA8IG51bV9zcmM7IGkrKykKIAkJc2NyYXRjaF9idWZfZHJhd19wYXR0ZXJuKGRh dGEsICZzcmNbaV0uYnVmLAogCQkJCQkgMCwgMCwgV0lEVEgsIEhFSUdIVCwKLQkJCQkJIDAsIDAs IFdJRFRILCBIRUlHSFQsIHRydWUpOworCQkJCQkgMCwgMCwgV0lEVEgsIEhFSUdIVCwgKGkgJSAy KSk7CisKIAlzY3JhdGNoX2J1Zl9kcmF3X3BhdHRlcm4oZGF0YSwgJmRzdCwKIAkJCQkgMCwgMCwg V0lEVEgsIEhFSUdIVCwKIAkJCQkgMCwgMCwgV0lEVEgsIEhFSUdIVCwgZmFsc2UpOwpAQCAtNzkz LDE0ICs1NjUsMTQgQEAgc3RhdGljIHZvaWQgdGVzdChkYXRhX3QgKmRhdGEsIHVpbnQzMl90IHNy Y190aWxpbmcsIHVpbnQzMl90IGRzdF90aWxpbmcsCiAJCWlmIChzcmNfY29tcHJlc3NlZCkgewog CQkJc2NyYXRjaF9idWZfd3JpdGVfdG9fcG5nKGRhdGEsICZzcmNfY2NzLAogCQkJCQkJICJjb21w cmVzc2VkLXNyYy5wbmciKTsKLQkJCXNjcmF0Y2hfYnVmX2F1eF93cml0ZV90b19wbmcoZGF0YSwg JnNyY19jY3MsCi0JCQkJCQkgICAgICJjb21wcmVzc2VkLXNyYy1hdXgucG5nIik7CisJCQlzY3Jh dGNoX2J1Zl9jY3Nfd3JpdGVfdG9fcG5nKGRhdGEsICZzcmNfY2NzLAorCQkJCQkJICAgICAiY29t cHJlc3NlZC1zcmMtY2NzLnBuZyIpOwogCQl9CiAJCWlmIChkc3RfY29tcHJlc3NlZCkgewogCQkJ c2NyYXRjaF9idWZfd3JpdGVfdG9fcG5nKGRhdGEsICZkc3RfY2NzLAogCQkJCQkJICJjb21wcmVz c2VkLWRzdC5wbmciKTsKLQkJCXNjcmF0Y2hfYnVmX2F1eF93cml0ZV90b19wbmcoZGF0YSwgJmRz dF9jY3MsCi0JCQkJCQkgICAgICJjb21wcmVzc2VkLWRzdC1hdXgucG5nIik7CisJCQlzY3JhdGNo X2J1Zl9jY3Nfd3JpdGVfdG9fcG5nKGRhdGEsICZkc3RfY2NzLAorCQkJCQkJICAgICAiY29tcHJl c3NlZC1kc3QtY2NzLnBuZyIpOwogCQl9CiAJfQogCkBAIC04MTksOSArNTkxLDkgQEAgc3RhdGlj IHZvaWQgdGVzdChkYXRhX3QgKmRhdGEsIHVpbnQzMl90IHNyY190aWxpbmcsIHVpbnQzMl90IGRz dF90aWxpbmcsCiAJfQogCiAJaWYgKHNyY19jb21wcmVzc2VkKQotCQlzY3JhdGNoX2J1Zl9hdXhf Y2hlY2soZGF0YSwgJnNyY19jY3MpOworCQlzY3JhdGNoX2J1Zl9jY3NfY2hlY2soZGF0YSwgJnNy Y19jY3MpOwogCWlmIChkc3RfY29tcHJlc3NlZCkKLQkJc2NyYXRjaF9idWZfYXV4X2NoZWNrKGRh dGEsICZkc3RfY2NzKTsKKwkJc2NyYXRjaF9idWZfY2NzX2NoZWNrKGRhdGEsICZkc3RfY2NzKTsK IAogCXNjcmF0Y2hfYnVmX2ZpbmkoJnJlZik7CiAJaWYgKGRzdF9jb21wcmVzc2VkKQpAQCAtMTA1 NCw2ICs4MjYsOSBAQCBpZ3RfbWFpbl9hcmdzKCJkYSIsIE5VTEwsIGhlbHBfc3RyLCBvcHRfaGFu ZGxlciwgTlVMTCkKIAkJZGF0YS5iYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEu YnVmbWdyLCBkYXRhLmRldmlkKTsKIAkJaWd0X2Fzc2VydChkYXRhLmJhdGNoKTsKIAorCQlkYXRh LmJtZ3IgPSByZW5kZXJjb3B5X2J1Zm1ncl9jcmVhdGUoZGF0YS5kcm1fZmQsIGRhdGEuYnVmbWdy KTsKKwkJaWd0X2Fzc2VydChkYXRhLmJtZ3IpOworCiAJCWlndF9mb3JrX2hhbmdfZGV0ZWN0b3Io ZGF0YS5kcm1fZmQpOwogCX0KIApAQCAtMTEwNyw1ICs4ODIsNiBAQCBpZ3RfbWFpbl9hcmdzKCJk YSIsIE5VTEwsIGhlbHBfc3RyLCBvcHRfaGFuZGxlciwgTlVMTCkKIAkJaWd0X3N0b3BfaGFuZ19k ZXRlY3RvcigpOwogCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGRhdGEuYmF0Y2gpOwogCQlkcm1f aW50ZWxfYnVmbWdyX2Rlc3Ryb3koZGF0YS5idWZtZ3IpOworCQlyZW5kZXJjb3B5X2J1Zm1ncl9k ZXN0cm95KGRhdGEuYm1ncik7CiAJfQogfQotLSAKMi4yMy4wCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2lndC1kZXYK