From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3CA9789F82 for ; Sun, 1 Dec 2019 19:09:52 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Sun, 1 Dec 2019 20:09:42 +0100 Message-Id: <20191201190942.6077-2-zbigniew.kempczynski@intel.com> In-Reply-To: <20191201190942.6077-1-zbigniew.kempczynski@intel.com> References: <20191201190942.6077-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 2/2] tests/gem_render_copy: Add software tiling / detiling support 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: QWRvcHQgdGVzdCBjb2RlIHRvIHVzZSBidWZmZXIgb3BlcmF0aW9ucyB0aHVzIGFsbG93aW5nIHNv ZnR3YXJlCnRpbGluZyAvIGRldGlsaW5nIG9uIHBsYXRmb3JtcyB3aGVyZSBIVyBmZW5jZXMgYXJl IG5vdCBzdXBwb3J0ZWQuCgpTaWduZWQtb2ZmLWJ5OiBaYmlnbmlldyBLZW1wY3p5xYRza2kgPHpi aWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hy aXMtd2lsc29uLmNvLnVrPgpDYzogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgpDYzog S2F0YXJ6eW5hIERlYyA8a2F0YXJ6eW5hLmRlY0BpbnRlbC5jb20+Ci0tLQogdGVzdHMvaTkxNS9n ZW1fcmVuZGVyX2NvcHkuYyB8IDI3OCArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDIzOSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9yZW5kZXJfY29weS5jIGIvdGVzdHMvaTkxNS9nZW1f cmVuZGVyX2NvcHkuYwppbmRleCA2N2JlMDc5Yy4uNGQ0NjIxNmIgMTAwNjQ0Ci0tLSBhL3Rlc3Rz L2k5MTUvZ2VtX3JlbmRlcl9jb3B5LmMKKysrIGIvdGVzdHMvaTkxNS9nZW1fcmVuZGVyX2NvcHku YwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGRybS5oPgogCiAjaW5jbHVkZSAiaW50ZWxf YnVmbWdyLmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCiAKIElHVF9URVNUX0RFU0NSSVBU SU9OKCJCYXNpYyB0ZXN0IGZvciB0aGUgcmVuZGVyX2NvcHkoKSBmdW5jdGlvbi4iKTsKIApAQCAt NTksNiArNjAsNyBAQCB0eXBlZGVmIHN0cnVjdCB7CiAJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdy OwogCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CiAJaWd0X3JlbmRlcl9jb3B5ZnVu Y190IHJlbmRlcl9jb3B5OworCXN0cnVjdCBidWZfb3BzICpib3BzOwogfSBkYXRhX3Q7CiBzdGF0 aWMgaW50IG9wdF9kdW1wX3BuZyA9IGZhbHNlOwogc3RhdGljIGludCBjaGVja19hbGxfcGl4ZWxz ID0gZmFsc2U7CkBAIC03MiwxMjkgKzc0LDEzIEBAIHN0YXRpYyBjb25zdCBjaGFyICptYWtlX2Zp bGVuYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyB2 b2lkICp5Zl9wdHIodm9pZCAqcHRyLAotCQkgICAgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGlu dCB5LAotCQkgICAgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNwcCkKK3N0YXRp YyB2b2lkICphbGxvY19hbGlnbmVkKHVpbnQ2NF90IHNpemUpCiB7Ci0JY29uc3QgaW50IHRpbGVf c2l6ZSA9IDQgKiAxMDI0OwotCWNvbnN0IGludCB0aWxlX3dpZHRoID0gMTI4OwotCWludCByb3df c2l6ZSA9IChzdHJpZGUgLyB0aWxlX3dpZHRoKSAqIHRpbGVfc2l6ZTsKKwl2b2lkICpwOwogCi0J eCAqPSBjcHA7IC8qIGNvbnZlcnQgdG8gQnl0ZSBvZmZzZXQgKi8KKwlpZ3RfYXNzZXJ0X2VxKHBv c2l4X21lbWFsaWduKCZwLCAxNiwgc2l6ZSksIDApOwogCi0KLQkvKgotCSAqIFdpdGhpbiBhIDRr IFlmIHRpbGUsIHRoZSBieXRlIHN3aXp6bGluZyBwYXR0ZXJuIGlzCi0JICogbXNiLi4uLi4ubHNi Ci0JICogeHl4eXh5eXl4eHh4Ci0JICogVGhlIHRpbGVzIHRoZW1zZWx2ZXMgYXJlIGxhaWQgb3V0 IGluIHJvdyBtYWpvciBvcmRlci4KLQkgKi8KLQlyZXR1cm4gcHRyICsKLQkJKCh4ICYgMHhmKSAq IDEpICsgLyogNHgxIHBpeGVscygzMmJwcCkgPSAxNkIgKi8KLQkJKCh5ICYgMHgzKSAqIDE2KSAr IC8qIDR4NCBwaXhlbHMgPSA2NEIgKi8KLQkJKCgoeSAmIDB4NCkgPj4gMikgKiA2NCkgKyAvKiAx eDIgNjRCIGJsb2NrcyAqLwotCQkoKCh4ICYgMHgxMCkgPj4gNCkgKiAxMjgpICsgLyogMngyIDY0 QiBibG9ja3MgPSAyNTZCIGJsb2NrICovCi0JCSgoKHkgJiAweDgpID4+IDMpICogMjU2KSArIC8q IDJ4MSAyNTZCIGJsb2NrcyAqLwotCQkoKCh4ICYgMHgyMCkgPj4gNSkgKiA1MTIpICsgLyogMngy IDI1NkIgYmxvY2tzICovCi0JCSgoKHkgJiAweDEwKSA+PiA0KSAqIDEwMjQpICsgLyogNHgyIDI1 NiBibG9ja3MgKi8KLQkJKCgoeCAmIDB4NDApID4+IDYpICogMjA0OCkgKyAvKiA0eDQgMjU2QiBi bG9ja3MgPSA0ayB0aWxlICovCi0JCSgoKHggJiB+MHg3ZikgPj4gNykgKiB0aWxlX3NpemUpICsg Lyogcm93IG9mIHRpbGVzICovCi0JCSgoKHkgJiB+MHgxZikgPj4gNSkgKiByb3dfc2l6ZSk7Ci19 Ci0KLXN0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX3lmKGRhdGFfdCAqZGF0YSwgc3RydWN0IGln dF9idWYgKmJ1ZiwKLQkJCSAgICAgIGNvbnN0IHVpbnQzMl90ICpsaW5lYXIpCi17Ci0JaW50IGhl aWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1Zik7Ci0JaW50IHdpZHRoID0gaWd0X2J1Zl93aWR0aChi dWYpOwotCXZvaWQgKm1hcDsKLQotCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgYnVmLT5i by0+aGFuZGxlLAotCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlO X0NQVSk7Ci0JbWFwID0gZ2VtX21tYXBfX2NwdShkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRs ZSwgMCwKLQkJCSAgICBidWYtPmJvLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLQot CWZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLQkJZm9yIChpbnQgeCA9IDA7IHgg PCB3aWR0aDsgeCsrKSB7Ci0JCQl1aW50MzJfdCAqcHRyID0geWZfcHRyKG1hcCwgeCwgeSwKLQkJ CQkJICAgICAgIGJ1Zi0+c3RyaWRlLCBidWYtPmJwcCAvIDgpOwotCi0JCQkqcHRyID0gbGluZWFy W3kgKiB3aWR0aCArIHhdOwotCQl9Ci0JfQotCi0JbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7 Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlfeWZfdG9fbGluZWFyKGRhdGFfdCAqZGF0YSwgc3RydWN0 IGlndF9idWYgKmJ1ZiwKLQkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCi17Ci0JaW50IGhlaWdo dCA9IGlndF9idWZfaGVpZ2h0KGJ1Zik7Ci0JaW50IHdpZHRoID0gaWd0X2J1Zl93aWR0aChidWYp OwotCXZvaWQgKm1hcDsKLQotCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgYnVmLT5iby0+ aGFuZGxlLAotCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7Ci0JbWFwID0gZ2VtX21t YXBfX2NwdShkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKLQkJCSAgICBidWYtPmJv LT5zaXplLCBQUk9UX1JFQUQpOwotCi0JZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykg ewotCQlmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLQkJCXVpbnQzMl90ICpwdHIg PSB5Zl9wdHIobWFwLCB4LCB5LAotCQkJCQkgICAgICAgYnVmLT5zdHJpZGUsIGJ1Zi0+YnBwIC8g OCk7Ci0KLQkJCWxpbmVhclt5ICogd2lkdGggKyB4XSA9ICpwdHI7Ci0JCX0KLQl9Ci0KLQltdW5t YXAobWFwLCBidWYtPmJvLT5zaXplKTsKLX0KLQotc3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9f Z3R0KGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwKLQkJCSAgICAgICBjb25zdCB1 aW50MzJfdCAqbGluZWFyKQotewotCXZvaWQgKm1hcDsKLQotCWdlbV9zZXRfZG9tYWluKGRhdGEt PmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLAotCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwg STkxNV9HRU1fRE9NQUlOX0dUVCk7Ci0KLQltYXAgPSBnZW1fbW1hcF9fZ3R0KGRhdGEtPmRybV9m ZCwgYnVmLT5iby0+aGFuZGxlLAotCQkJICAgIGJ1Zi0+Ym8tPnNpemUsIFBST1RfUkVBRCB8IFBS T1RfV1JJVEUpOwotCi0JbWVtY3B5KG1hcCwgbGluZWFyLCBidWYtPmJvLT5zaXplKTsKLQotCW11 bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBjb3B5X2d0dF90b19s aW5lYXIoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCQkJICAgICAgIHVpbnQz Ml90ICpsaW5lYXIpCi17Ci0Jdm9pZCAqbWFwOwotCi0JZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJt X2ZkLCBidWYtPmJvLT5oYW5kbGUsCi0JCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsK LQotCW1hcCA9IGdlbV9tbWFwX19ndHQoZGF0YS0+ZHJtX2ZkLCBidWYtPmJvLT5oYW5kbGUsCi0J CQkgICAgYnVmLT5iby0+c2l6ZSwgUFJPVF9SRUFEKTsKLQotCWlndF9tZW1jcHlfZnJvbV93Yyhs aW5lYXIsIG1hcCwgYnVmLT5iby0+c2l6ZSk7Ci0KLQltdW5tYXAobWFwLCBidWYtPmJvLT5zaXpl KTsKLX0KLQotc3RhdGljIHZvaWQgKmxpbmVhcl9jb3B5KGRhdGFfdCAqZGF0YSwgc3RydWN0IGln dF9idWYgKmJ1ZikKLXsKLQl2b2lkICpsaW5lYXI7Ci0KLQkvKiAxNkIgYWxpZ25tZW50IGFsbG93 cyB0byBwb3RlbnRpYWxseSBtYWtlIHVzZSBvZiBTU0U0IGZvciBjb3B5aW5nICovCi0JaWd0X2Fz c2VydF9lcShwb3NpeF9tZW1hbGlnbigmbGluZWFyLCAxNiwgYnVmLT5iby0+c2l6ZSksIDApOwot Ci0JaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1lmKQotCQljb3B5X3lmX3RvX2xpbmVh cihkYXRhLCBidWYsIGxpbmVhcik7Ci0JZWxzZQotCQljb3B5X2d0dF90b19saW5lYXIoZGF0YSwg YnVmLCBsaW5lYXIpOwotCi0JcmV0dXJuIGxpbmVhcjsKKwlyZXR1cm4gcDsKIH0KIAogc3RhdGlj IHZvaWQgc2NyYXRjaF9idWZfd3JpdGVfdG9fcG5nKGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9i dWYgKmJ1ZiwKQEAgLTIwNCw3ICs5MCw4IEBAIHN0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX3dyaXRl X3RvX3BuZyhkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCiAJY2Fpcm9fc3RhdHVz X3QgcmV0OwogCXZvaWQgKmxpbmVhcjsKIAotCWxpbmVhciA9IGxpbmVhcl9jb3B5KGRhdGEsIGJ1 Zik7CisJbGluZWFyID0gYWxsb2NfYWxpZ25lZChidWYtPmJvLT5zaXplKTsKKwljb3B5X2J1Zl90 b19saW5lYXIoZGF0YS0+Ym9wcywgYnVmLCBsaW5lYXIpOwogCiAJc3VyZmFjZSA9IGNhaXJvX2lt YWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGxpbmVhciwKIAkJCQkJCSAgICAgIENBSVJPX0ZP Uk1BVF9SR0IyNCwKQEAgLTI1MCwxMiArMTM3LDEyIEBAIHN0YXRpYyB2b2lkICpsaW5lYXJfY29w eV9hdXgoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmKQogCWludCBhdXhfc2l6ZSA9 IHNjcmF0Y2hfYnVmX2F1eF93aWR0aChkYXRhLT5kZXZpZCwgYnVmKSAqCiAJCXNjcmF0Y2hfYnVm X2F1eF9oZWlnaHQoZGF0YS0+ZGV2aWQsIGJ1Zik7CiAKLQlpZ3RfYXNzZXJ0X2VxKHBvc2l4X21l bWFsaWduKCZsaW5lYXIsIDE2LCBhdXhfc2l6ZSksIDApOworCWxpbmVhciA9IGFsbG9jX2FsaWdu ZWQoYXV4X3NpemUpOwogCiAJZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJtX2ZkLCBidWYtPmJvLT5o YW5kbGUsCiAJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKIAotCW1hcCA9IGdlbV9t bWFwX19ndHQoZGF0YS0+ZHJtX2ZkLCBidWYtPmJvLT5oYW5kbGUsCisJbWFwID0gZ2VtX21tYXBf X3djKGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLCAwLAogCQkJICAgIGJ1Zi0+Ym8tPnNp emUsIFBST1RfUkVBRCk7CiAKIAlpZ3RfbWVtY3B5X2Zyb21fd2MobGluZWFyLCBtYXAgKyBidWYt PmF1eC5vZmZzZXQsIGF1eF9zaXplKTsKQEAgLTI5Nyw3ICsxODQsNyBAQCBzdGF0aWMgdm9pZCBz Y3JhdGNoX2J1Zl9kcmF3X3BhdHRlcm4oZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVm LAogCWNhaXJvX3QgKmNyOwogCXZvaWQgKmxpbmVhcjsKIAotCWxpbmVhciA9IGxpbmVhcl9jb3B5 KGRhdGEsIGJ1Zik7CisJbGluZWFyID0gYWxsb2NfYWxpZ25lZChidWYtPmJvLT5zaXplKTsKIAog CXN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShsaW5lYXIsCiAJ CQkJCQkgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCkBAIC0zMzgsMTAgKzIyNSw3IEBAIHN0YXRp YyB2b2lkIHNjcmF0Y2hfYnVmX2RyYXdfcGF0dGVybihkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3Rf YnVmICpidWYsCiAKIAljYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CiAKLQlpZiAoYnVm LT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWWYpCi0JCWNvcHlfbGluZWFyX3RvX3lmKGRhdGEsIGJ1 ZiwgbGluZWFyKTsKLQllbHNlCi0JCWNvcHlfbGluZWFyX3RvX2d0dChkYXRhLCBidWYsIGxpbmVh cik7CisJY29weV9saW5lYXJfdG9fYnVmKGRhdGEtPmJvcHMsIGJ1ZiwgbGluZWFyKTsKIAogCWZy ZWUobGluZWFyKTsKIH0KQEAgLTM1NCw2ICsyMzgsNyBAQCBzY3JhdGNoX2J1Zl9jb3B5KGRhdGFf dCAqZGF0YSwKIAlpbnQgd2lkdGggPSBpZ3RfYnVmX3dpZHRoKGRzdCk7CiAJaW50IGhlaWdodCAg PSBpZ3RfYnVmX2hlaWdodChkc3QpOwogCXVpbnQzMl90ICpsaW5lYXJfZHN0OworCXVpbnQzMl90 ICpsaW5lYXJfc3JjOwogCiAJaWd0X2Fzc2VydF9lcShpZ3RfYnVmX3dpZHRoKGRzdCksIGlndF9i dWZfd2lkdGgoc3JjKSk7CiAJaWd0X2Fzc2VydF9lcShpZ3RfYnVmX2hlaWdodChkc3QpLCBpZ3Rf YnVmX2hlaWdodChzcmMpKTsKQEAgLTM2NiwxMjMgKzI1MSwyOSBAQCBzY3JhdGNoX2J1Zl9jb3B5 KGRhdGFfdCAqZGF0YSwKIAloID0gbWluKGgsIGhlaWdodCAtIHN5KTsKIAloID0gbWluKGgsIGhl aWdodCAtIGR5KTsKIAotCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgZHN0LT5iby0+aGFu ZGxlLAotCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7 Ci0JbGluZWFyX2RzdCA9IGdlbV9tbWFwX19ndHQoZGF0YS0+ZHJtX2ZkLCBkc3QtPmJvLT5oYW5k bGUsCi0JCQkJICAgZHN0LT5iby0+c2l6ZSwgUFJPVF9XUklURSk7Ci0KLQlpZiAoc3JjLT50aWxp bmcgPT0gSTkxNV9USUxJTkdfWWYpIHsKLQkJdm9pZCAqbWFwOwotCi0JCWdlbV9zZXRfZG9tYWlu KGRhdGEtPmRybV9mZCwgc3JjLT5iby0+aGFuZGxlLAotCQkJICAgICAgIEk5MTVfR0VNX0RPTUFJ Tl9DUFUsIDApOwotCQltYXAgPSBnZW1fbW1hcF9fY3B1KGRhdGEtPmRybV9mZCwgc3JjLT5iby0+ aGFuZGxlLCAwLAotCQkJCSAgICBzcmMtPmJvLT5zaXplLCBQUk9UX1JFQUQpOwotCi0JCWZvciAo aW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7Ci0JCQlmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykg ewotCQkJCWNvbnN0IHVpbnQzMl90ICpwdHIgPSB5Zl9wdHIobWFwLCBzeCt4LCBzeSt5LAotCQkJ CQkJCSAgICAgc3JjLT5zdHJpZGUsCi0JCQkJCQkJICAgICBzcmMtPmJwcCAvIDgpOwotCi0JCQkJ bGluZWFyX2RzdFsoZHkreSkgKiB3aWR0aCArIGR4K3hdID0gKnB0cjsKLQkJCX0KLQkJfQotCi0J CW11bm1hcChtYXAsIHNyYy0+Ym8tPnNpemUpOwotCX0gZWxzZSB7Ci0JCXVpbnQzMl90ICpsaW5l YXJfc3JjOwotCi0JCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgc3JjLT5iby0+aGFuZGxl LAotCQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIDApOwotCi0JCWxpbmVhcl9zcmMgPSBn ZW1fbW1hcF9fZ3R0KGRhdGEtPmRybV9mZCwgc3JjLT5iby0+aGFuZGxlLAotCQkJCQkgICBzcmMt PmJvLT5zaXplLCBQUk9UX1JFQUQpOworCWxpbmVhcl9kc3QgPSBhbGxvY19hbGlnbmVkKGRzdC0+ Ym8tPnNpemUpOworCWxpbmVhcl9zcmMgPSBhbGxvY19hbGlnbmVkKHNyYy0+Ym8tPnNpemUpOwor CWNvcHlfYnVmX3RvX2xpbmVhcihkYXRhLT5ib3BzLCBzcmMsIGxpbmVhcl9zcmMpOworCWNvcHlf YnVmX3RvX2xpbmVhcihkYXRhLT5ib3BzLCBkc3QsIGxpbmVhcl9kc3QpOwogCi0JCWZvciAoaW50 IHkgPSAwOyB5IDwgaDsgeSsrKSB7Ci0JCQlpZ3RfbWVtY3B5X2Zyb21fd2MoJmxpbmVhcl9kc3Rb KGR5K3kpICogd2lkdGggKyBkeF0sCi0JCQkJCSAgICZsaW5lYXJfc3JjWyhzeSt5KSAqIHdpZHRo ICsgc3hdLAotCQkJCQkgICB3ICogKHNyYy0+YnBwIC8gOCkpOwotCQl9Ci0KLQkJbXVubWFwKGxp bmVhcl9zcmMsIHNyYy0+Ym8tPnNpemUpOworCWZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7 CisJCW1lbWNweSgmbGluZWFyX2RzdFsoZHkreSkgKiB3aWR0aCArIGR4XSwKKwkJCQkmbGluZWFy X3NyY1soc3kreSkgKiB3aWR0aCArIHN4XSwKKwkJCQl3ICogKHNyYy0+YnBwIC8gOCkpOwogCX0K KwlmcmVlKGxpbmVhcl9zcmMpOwogCi0JbXVubWFwKGxpbmVhcl9kc3QsIGRzdC0+Ym8tPnNpemUp OworCWNvcHlfbGluZWFyX3RvX2J1ZihkYXRhLT5ib3BzLCBkc3QsIGxpbmVhcl9kc3QpOworCWZy ZWUobGluZWFyX2RzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX2luaXQoZGF0YV90 ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCQkJICAgICBpbnQgd2lkdGgsIGludCBoZWln aHQsCiAJCQkgICAgIHVpbnQzMl90IHJlcV90aWxpbmcsIGJvb2wgY2NzKQogewotCXVpbnQzMl90 IHRpbGluZyA9IHJlcV90aWxpbmc7Ci0JdW5zaWduZWQgbG9uZyBwaXRjaDsKIAlpbnQgYnBwID0g MzI7CiAKLQltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOwotCi0JaWYgKGNjcykgewotCQlp bnQgYXV4X3dpZHRoLCBhdXhfaGVpZ2h0OwotCQlpbnQgc2l6ZTsKLQotCQlpZ3RfcmVxdWlyZShp bnRlbF9nZW4oZGF0YS0+ZGV2aWQpID49IDkpOwotCQlpZ3RfYXNzZXJ0KHRpbGluZyA9PSBJOTE1 X1RJTElOR19ZIHx8Ci0JCQkgICB0aWxpbmcgPT0gSTkxNV9USUxJTkdfWWYpOwotCi0JCS8qCi0J CSAqIE9uIEdFTjEyKyB3ZSBhbGlnbiB0aGUgbWFpbiBzdXJmYWNlIHRvIDQgKiA0IG1haW4gc3Vy ZmFjZQotCQkgKiB0aWxlcywgd2hpY2ggaXMgNjRrQi4gVGhlc2UgMTYgdGlsZXMgYXJlIG1hcHBl ZCBieSA0IEFVWAotCQkgKiBDQ1MgdW5pdHMsIHRoYXQgaXMgNCAqIDY0IGJ5dGVzLiBUaGVzZSA0 IENDUyB1bml0cyBhcmUgaW4KLQkJICogdHVybiBtYXBwZWQgYnkgb25lIEwxIEFVWCBwYWdlIHRh YmxlIGVudHJ5LgotCQkgKi8KLQkJaWYgKGludGVsX2dlbihkYXRhLT5kZXZpZCkgPj0gMTIpCi0J CQlidWYtPnN0cmlkZSA9IEFMSUdOKHdpZHRoICogKGJwcCAvIDgpLCAxMjggKiA0KTsKLQkJZWxz ZQotCQkJYnVmLT5zdHJpZGUgPSBBTElHTih3aWR0aCAqIChicHAgLyA4KSwgMTI4KTsKLQotCQlp ZiAoaW50ZWxfZ2VuKGRhdGEtPmRldmlkKSA+PSAxMikKLQkJCWhlaWdodCA9IEFMSUdOKGhlaWdo dCwgNCAqIDMyKTsKLQotCQlidWYtPnNpemUgPSBidWYtPnN0cmlkZSAqIGhlaWdodDsKLQkJYnVm LT50aWxpbmcgPSB0aWxpbmc7Ci0JCWJ1Zi0+YnBwID0gYnBwOwotCi0JCWF1eF93aWR0aCA9IHNj cmF0Y2hfYnVmX2F1eF93aWR0aChkYXRhLT5kZXZpZCwgYnVmKTsKLQkJYXV4X2hlaWdodCA9IHNj cmF0Y2hfYnVmX2F1eF9oZWlnaHQoZGF0YS0+ZGV2aWQsIGJ1Zik7Ci0KLQkJYnVmLT5hdXgub2Zm c2V0ID0gYnVmLT5zdHJpZGUgKiBBTElHTihoZWlnaHQsIDMyKTsKLQkJYnVmLT5hdXguc3RyaWRl ID0gYXV4X3dpZHRoOwotCi0JCXNpemUgPSBidWYtPmF1eC5vZmZzZXQgKyBhdXhfd2lkdGggKiBh dXhfaGVpZ2h0OwotCi0JCWJ1Zi0+Ym8gPSBkcm1faW50ZWxfYm9fYWxsb2MoZGF0YS0+YnVmbWdy LCAiIiwgc2l6ZSwgNDA5Nik7Ci0KLQkJaWYgKHRpbGluZyA9PSBJOTE1X1RJTElOR19ZKSB7Ci0J CQlkcm1faW50ZWxfYm9fc2V0X3RpbGluZyhidWYtPmJvLCAmdGlsaW5nLCBidWYtPnN0cmlkZSk7 Ci0JCQlpZ3RfYXNzZXJ0X2VxKHRpbGluZywgcmVxX3RpbGluZyk7Ci0JCX0KLQl9IGVsc2UgaWYg KHJlcV90aWxpbmcgPT0gSTkxNV9USUxJTkdfWWYpIHsKLQkJaW50IHNpemU7Ci0KLQkJYnVmLT5z dHJpZGUgPSBBTElHTih3aWR0aCAqIChicHAgLyA4KSwgMTI4KTsKLQkJYnVmLT5zaXplID0gYnVm LT5zdHJpZGUgKiBoZWlnaHQ7Ci0JCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOwotCQlidWYtPmJwcCA9 IGJwcDsKLQotCQlzaXplID0gYnVmLT5zdHJpZGUgKiBBTElHTihoZWlnaHQsIDMyKTsKLQotCQli dWYtPmJvID0gZHJtX2ludGVsX2JvX2FsbG9jKGRhdGEtPmJ1Zm1nciwgIiIsIHNpemUsIDQwOTYp OwotCX0gZWxzZSB7Ci0JCWJ1Zi0+Ym8gPSBkcm1faW50ZWxfYm9fYWxsb2NfdGlsZWQoZGF0YS0+ YnVmbWdyLCAiIiwKLQkJCQkJCSAgIHdpZHRoLCBoZWlnaHQsIGJwcCAvIDgsCi0JCQkJCQkgICAm dGlsaW5nLCAmcGl0Y2gsIDApOwotCQlpZ3RfYXNzZXJ0X2VxKHRpbGluZywgcmVxX3RpbGluZyk7 Ci0KLQkJYnVmLT5zdHJpZGUgPSBwaXRjaDsKLQkJYnVmLT50aWxpbmcgPSB0aWxpbmc7Ci0JCWJ1 Zi0+c2l6ZSA9IHBpdGNoICogaGVpZ2h0OwotCQlidWYtPmJwcCA9IGJwcDsKLQl9CisJaWd0X2J1 Zl9pbml0KGRhdGEtPmJvcHMsIGJ1Ziwgd2lkdGgsIGhlaWdodCwgYnBwLCByZXFfdGlsaW5nLCBj Y3MpOwogCiAJaWd0X2Fzc2VydChpZ3RfYnVmX3dpZHRoKGJ1ZikgPT0gd2lkdGgpOwogCWlndF9h c3NlcnQoaWd0X2J1Zl9oZWlnaHQoYnVmKSA9PSBoZWlnaHQpOwpAQCAtNTA3LDExICsyOTgsMTMg QEAgc2NyYXRjaF9idWZfY2hlY2soZGF0YV90ICpkYXRhLAogCWlndF9hc3NlcnRfZXEoaWd0X2J1 Zl9oZWlnaHQoYnVmKSwgaWd0X2J1Zl9oZWlnaHQocmVmKSk7CiAJaWd0X2Fzc2VydF9lcShidWYt PmJvLT5zaXplLCByZWYtPmJvLT5zaXplKTsKIAotCWxpbmVhciA9IGxpbmVhcl9jb3B5KGRhdGEs IGJ1Zik7CisJbGluZWFyID0gYWxsb2NfYWxpZ25lZChidWYtPmJvLT5zaXplKTsKKwljb3B5X2J1 Zl90b19saW5lYXIoZGF0YS0+Ym9wcywgYnVmLCBsaW5lYXIpOwogCWJ1Zl92YWwgPSBsaW5lYXJb eSAqIHdpZHRoICsgeF07CiAJZnJlZShsaW5lYXIpOwogCi0JbGluZWFyID0gbGluZWFyX2NvcHko ZGF0YSwgcmVmKTsKKwlsaW5lYXIgPSBhbGxvY19hbGlnbmVkKHJlZi0+Ym8tPnNpemUpOworCWNv cHlfYnVmX3RvX2xpbmVhcihkYXRhLT5ib3BzLCBidWYsIGxpbmVhcik7CiAJcmVmX3ZhbCA9IGxp bmVhclt5ICogd2lkdGggKyB4XTsKIAlmcmVlKGxpbmVhcik7CiAKQEAgLTUzMyw4ICszMjYsMTAg QEAgc2NyYXRjaF9idWZfY2hlY2tfYWxsKGRhdGFfdCAqZGF0YSwKIAlpZ3RfYXNzZXJ0X2VxKGln dF9idWZfaGVpZ2h0KGJ1ZiksIGlndF9idWZfaGVpZ2h0KHJlZikpOwogCWlndF9hc3NlcnRfZXEo YnVmLT5iby0+c2l6ZSwgcmVmLT5iby0+c2l6ZSk7CiAKLQlsaW5lYXJfYnVmID0gbGluZWFyX2Nv cHkoZGF0YSwgYnVmKTsKLQlsaW5lYXJfcmVmID0gbGluZWFyX2NvcHkoZGF0YSwgcmVmKTsKKwls aW5lYXJfYnVmID0gYWxsb2NfYWxpZ25lZChidWYtPmJvLT5zaXplKTsKKwlsaW5lYXJfcmVmID0g YWxsb2NfYWxpZ25lZChyZWYtPmJvLT5zaXplKTsKKwljb3B5X2J1Zl90b19saW5lYXIoZGF0YS0+ Ym9wcywgYnVmLCBsaW5lYXJfYnVmKTsKKwljb3B5X2J1Zl90b19saW5lYXIoZGF0YS0+Ym9wcywg cmVmLCBsaW5lYXJfcmVmKTsKIAogCWZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsK IAkJZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CkBAIC02MjcsNiArNDIyLDcgQEAg c3RhdGljIHZvaWQgdGVzdChkYXRhX3QgKmRhdGEsIHVpbnQzMl90IHNyY190aWxpbmcsIHVpbnQz Ml90IGRzdF90aWxpbmcsCiAKIAlmb3IgKGludCBpID0gMDsgaSA8IG51bV9zcmM7IGkrKykKIAkJ c2NyYXRjaF9idWZfaW5pdChkYXRhLCAmc3JjW2ldLmJ1ZiwgV0lEVEgsIEhFSUdIVCwgc3JjW2ld LnRpbGluZywgZmFsc2UpOworCiAJc2NyYXRjaF9idWZfaW5pdChkYXRhLCAmZHN0LCBXSURUSCwg SEVJR0hULCBkc3RfdGlsaW5nLCBmYWxzZSk7CiAJaWYgKHNyY19jb21wcmVzc2VkKQogCQlzY3Jh dGNoX2J1Zl9pbml0KGRhdGEsICZzcmNfY2NzLCBXSURUSCwgSEVJR0hULApAQCAtNjM5LDcgKzQz NSw4IEBAIHN0YXRpYyB2b2lkIHRlc3QoZGF0YV90ICpkYXRhLCB1aW50MzJfdCBzcmNfdGlsaW5n LCB1aW50MzJfdCBkc3RfdGlsaW5nLAogCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3NyYzsgaSsr KQogCQlzY3JhdGNoX2J1Zl9kcmF3X3BhdHRlcm4oZGF0YSwgJnNyY1tpXS5idWYsCiAJCQkJCSAw LCAwLCBXSURUSCwgSEVJR0hULAotCQkJCQkgMCwgMCwgV0lEVEgsIEhFSUdIVCwgdHJ1ZSk7CisJ CQkJCSAwLCAwLCBXSURUSCwgSEVJR0hULCAoaSAlIDIpKTsKKwogCXNjcmF0Y2hfYnVmX2RyYXdf cGF0dGVybihkYXRhLCAmZHN0LAogCQkJCSAwLCAwLCBXSURUSCwgSEVJR0hULAogCQkJCSAwLCAw LCBXSURUSCwgSEVJR0hULCBmYWxzZSk7CkBAIC04MjYsNiArNjIzLDkgQEAgaWd0X21haW5fYXJn cygiZGEiLCBOVUxMLCBoZWxwX3N0ciwgb3B0X2hhbmRsZXIsIE5VTEwpCiAJCWRhdGEuYmF0Y2gg PSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLmJ1Zm1nciwgZGF0YS5kZXZpZCk7CiAJCWln dF9hc3NlcnQoZGF0YS5iYXRjaCk7CiAKKwkJZGF0YS5ib3BzID0gYnVmX29wc19nZXQoZGF0YS5k cm1fZmQsIGRhdGEuYnVmbWdyKTsKKwkJaWd0X2Fzc2VydChkYXRhLmJvcHMpOworCiAJCWlndF9m b3JrX2hhbmdfZGV0ZWN0b3IoZGF0YS5kcm1fZmQpOwogCX0KIAotLSAKMi4yMy4wCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcg bGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=