From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id A59A96E8AC for ; Fri, 5 Oct 2018 18:04:47 +0000 (UTC) From: Tomasz Lis Date: Fri, 5 Oct 2018 20:04:36 +0200 Message-Id: <1538762676-15259-4-git-send-email-tomasz.lis@intel.com> In-Reply-To: <1538762676-15259-1-git-send-email-tomasz.lis@intel.com> References: <1538762676-15259-1-git-send-email-tomasz.lis@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 3/3] igt: Add a test for Data Port Coherency. 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 Cc: bartosz.dunajski@intel.com List-ID: RnJvbTogIkxpcywgVG9tYXN6IiA8dG9tYXN6Lmxpc0BpbnRlbC5jb20+CgpUaGlzIG5ldyB0ZXN0 IHBlcmZvcm1zIGEgZ3BncHUgZmlsbCBvcGVyYXRpb24gd2l0aCBzcGluIGJ1ZmZlciBhdCBlbmQu CldoZW4gRGF0YSBQb3J0IENvaGVyZW5jeSBpcyBlbmFibGVkLCBhbGwgdGhlIG1lbW9yeSB3cml0 ZXMgYXJlIHJlcXVpcmVkCnRvIGJlIHZpc2libGUgb24gQ1BVIHNpZGUsIGV2ZW4gdGhvdWdoIHRo ZSBiYXRjaCBidWZmZXIgZGlkIG5vdCBmaW5pc2hlZAp5ZXQuIFdpdGhvdXQgdGhlIGNvaGVyZW5j eSBlbmFibGVkLCBtZW1vcnkgd3JpdGVzIG1hZGUgb24gR1BVIHNpZGUgYXJlCm5vdCBmdWxseSB2 aXNpYmxlIG9uIENQVSBzaWRlIHVudGlsIHRoZSBzcGluIGJ1ZmZlciBpcyByZWxlYXNlZCBhbmQg dGhlCmV4ZWN1dGlvbiBvZiB0aGF0IGJ1ZmZlciBpcyBmaW5pc2hlZC4KCkNjOiBKb29uYXMgTGFo dGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24g PGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IE1pY2hhbCBXaW5pYXJza2kgPG1pY2hhbC53 aW5pYXJza2lAaW50ZWwuY29tPgoKU2lnbmVkLW9mZi1ieTogVG9tYXN6IExpcyA8dG9tYXN6Lmxp c0BpbnRlbC5jb20+Ci0tLQogaW5jbHVkZS9kcm0tdWFwaS9pOTE1X2RybS5oICAgICB8ICAgNyAr CiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgICAgICAgIHwgICAxICsKIHRlc3RzL2dlbV9ncGdw dV9maWxsX2NvaGVyZW50LmMgfCAyOTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAzMDcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHRlc3RzL2dlbV9ncGdwdV9maWxsX2NvaGVyZW50LmMKCmRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS11YXBpL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS11YXBpL2k5MTVfZHJtLmgKaW5k ZXggMTZlNDUyYS4uODZiZmFjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0tdWFwaS9pOTE1X2Ry bS5oCisrKyBiL2luY2x1ZGUvZHJtLXVhcGkvaTkxNV9kcm0uaApAQCAtMTQ1Niw2ICsxNDU2LDEz IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSB7CiAjZGVmaW5lICAgSTkxNV9D T05URVhUX01BWF9VU0VSX1BSSU9SSVRZCTEwMjMgLyogaW5jbHVzaXZlICovCiAjZGVmaW5lICAg STkxNV9DT05URVhUX0RFRkFVTFRfUFJJT1JJVFkJCTAKICNkZWZpbmUgICBJOTE1X0NPTlRFWFRf TUlOX1VTRVJfUFJJT1JJVFkJLTEwMjMgLyogaW5jbHVzaXZlICovCisvKgorICogV2hlbiBkYXRh IHBvcnQgbGV2ZWwgY29oZXJlbmN5IGlzIGVuYWJsZWQsIHRoZSBHUFUgd2lsbCB1cGRhdGUgbWVt b3J5CisgKiBidWZmZXJzIHNoYXJlZCB3aXRoIENQVSwgYnkgZm9yY2luZyBpbnRlcm5hbCBjYWNo ZSB1bml0cyB0byBzZW5kIG1lbW9yeQorICogd3JpdGVzIHRvIGhpZ2hlciBsZXZlbCBjYWNoZXMg ZmFzdGVyLiBFbmFibGluZyBkYXRhIHBvcnQgY29oZXJlbmN5IGhhcworICogYSBwZXJmb3JtYW5j ZSBjb3N0LgorICovCisjZGVmaW5lIEk5MTVfQ09OVEVYVF9QQVJBTV9EQVRBX1BPUlRfQ09IRVJF TkNZIDB4NwogCV9fdTY0IHZhbHVlOwogfTsKIApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUu c291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggMDAxZjFhMi4uYjMzZDJkNSAx MDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzCkBAIC05Myw2ICs5Myw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWdlbV9mbGlua19iYXNp YyBcCiAJZ2VtX2ZsaW5rX3JhY2UgXAogCWdlbV9ncGdwdV9maWxsIFwKKwlnZW1fZ3BncHVfZmls bF9jb2hlcmVudCBcCiAJZ2VtX2d0dF9jcHVfdGxiIFwKIAlnZW1fZ3R0X2hvZyBcCiAJZ2VtX2d0 dF9zcGVlZCBcCmRpZmYgLS1naXQgYS90ZXN0cy9nZW1fZ3BncHVfZmlsbF9jb2hlcmVudC5jIGIv dGVzdHMvZ2VtX2dwZ3B1X2ZpbGxfY29oZXJlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5iZjg2N2MzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZ2VtX2dwZ3B1X2Zp bGxfY29oZXJlbnQuYwpAQCAtMCwwICsxLDI5OSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEz IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBEYW1pZW4gTGVzcGlhdSA8ZGFtaWVuLmxl c3BpYXVAaW50ZWwuY29tPgorICogICAgWGlhbmcsIEhhaWhhbyA8aGFpaGFvLnhpYW5nQGludGVs LmNvbT4KKyAqLworCisvKiogQGZpbGUgZ2VtX2dwZ3B1X2ZpbGxfY29oZXJlbnQuYworICoKKyAq IENoZWNrIHRoYXQgdGhlIERhdGEgcG9ydCBjb2hlcmVuY3kgb3B0aW9uIGhhbiBhbiBlZmZlY3Qg b24gd29ya2xvYWQKKyAqIGV4ZWN1dGlvbi4gUGVyZm9ybXMgZ3BncHVfZmlsbCgpIHdpdGggYSBz cGluIGJ1ZmZlciBhdCBlbmQsIGV4cGVjdHMKKyAqIGNvaGVyZW50IHdyaXRlcyB0byBiZSB2aXNp YmxlIGZyb20gQ1BVIGFuZCBub24tY29oZXJlbnQgb25lcyB0byBub3QgYmUKKyAqIHZpc2libGUg d2l0aGluIHNwZWNpZmljIHRpbWUgZnJhbWUuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2lu Y2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNp bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3Rp bWUuaD4KKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKKyNpbmNs dWRlICJncHVfY21kcy5oIgorCisjZGVmaW5lIFdJRFRIIDY0CisjZGVmaW5lIEhFSUdIVCA2NAor I2RlZmluZSBTSVpFIChIRUlHSFQqV0lEVEgpCisKKyNkZWZpbmUgQ09MT1JfQzQJMHhjNAorI2Rl ZmluZSBDT0xPUl80QwkweDRjCisKKyNkZWZpbmUgREVGQVVMVF9DT05URVhUX0lEWAkwCisKK3R5 cGVkZWYgc3RydWN0IHsKKwlpbnQgZHJtX2ZkOworCXVpbnQzMl90IGRldmlkOworCWRybV9pbnRl bF9idWZtZ3IgKmJ1Zm1ncjsKK30gZGF0YV90OworCisvKioKKyAqIF9fZ2VtX2NvbnRleHRfc2V0 X2NvaGVyZW5jeToKKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBj dHhfaWQ6IGk5MTUgY29udGV4dCBpZAorICogQGVuYWJsZTogZGVzaXJlZCBjb250ZXh0IGNvaGVy ZW5jeSBzdGF0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgRGF0YSBwb3J0IGNvaGVy ZW5jeSBwcm9wZXJ0eSBvZiB0aGUgY29udGV4dC4KKyAqCisgKiBSZXR1cm5zOiBBbiBpbnRlZ2Vy IGVxdWFsIHRvIHplcm8gZm9yIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIGZvciBmYWlsdXJlCisgKi8K K3N0YXRpYyBpbnQKK19fZ2VtX2NvbnRleHRfc2V0X2NvaGVyZW5jeShpbnQgZmQsIHVpbnQzMl90 IGN0eF9pZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFy YW0gcDsKKworCW1lbXNldCgmcCwgMCwgc2l6ZW9mKHApKTsKKwlwLmN0eF9pZCA9IGN0eF9pZDsK KwlwLnNpemUgPSAwOworCXAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fREFUQV9QT1JUX0NP SEVSRU5DWTsKKwlwLnZhbHVlID0gZW5hYmxlOworCisJcmV0dXJuIF9fZ2VtX2NvbnRleHRfc2V0 X3BhcmFtKGZkLCAmcCk7Cit9CisKKy8qKgorICogZ2VtX2NvbnRleHRfc2V0X2NvaGVyZW5jeToK KyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBjdHhfaWQ6IGk5MTUg Y29udGV4dCBpZAorICogQGVuYWJsZTogZGVzaXJlZCBjb250ZXh0IGNvaGVyZW5jeSBzdGF0ZQor ICoKKyAqIExpa2UgX19nZW1fY29udGV4dF9zZXRfY29oZXJlbmN5KCksIGV4Y2VwdCB3ZSBhc3Nl cnQgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK2dlbV9jb250ZXh0X3NldF9jb2hlcmVu Y3koaW50IGZkLCB1aW50MzJfdCBjdHhfaWQsIGludCBlbmFibGUpCit7CisJaWd0X2Fzc2VydChf X2dlbV9jb250ZXh0X3NldF9jb2hlcmVuY3koZmQsIGN0eF9pZCwgZW5hYmxlKSA9PSAwKTsKK30K KworLyoqCisgKiBnZW1fY29udGV4dF9nZXRfY29oZXJlbmN5OgorICogQGZkOiBvcGVuIGk5MTUg ZHJtIGZpbGUgZGVzY3JpcHRvcgorICogQGN0eF9pZDogaTkxNSBjb250ZXh0IGlkCisgKgorICog UmV0cmlldmVzIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRhdGEgcG9ydCBjb2hlcmVuY3kgcGFyYW0u CisgKi8KK3N0YXRpYyBpbnQKK2dlbV9jb250ZXh0X2dldF9jb2hlcmVuY3koaW50IGZkLCB1aW50 MzJfdCBjdHhfaWQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHA7CisJ bWVtc2V0KCZwLCAwLCBzaXplb2YocCkpOworCXAuY3R4X2lkID0gY3R4X2lkOworCXAuc2l6ZSA9 IDA7CisJcC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9EQVRBX1BPUlRfQ09IRVJFTkNZOwor CisJaWd0X2Fzc2VydChfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJnApID09IDApOworCisJ cmV0dXJuIHAudmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkCitzY3JhdGNoX2J1Zl9pbml0KGRhdGFf dCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJIGludCB3aWR0aCwgaW50IGhlaWdodCwg dWludDhfdCBjb2xvcikKK3sKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOworCisJYnVm LT5zdHJpZGUgPSB3aWR0aDsKKwlidWYtPnRpbGluZyA9IEk5MTVfVElMSU5HX05PTkU7CisJYnVm LT5zaXplID0gd2lkdGgqaGVpZ2h0OworCWJ1Zi0+Ym8gPSBkcm1faW50ZWxfYm9fYWxsb2MoZGF0 YS0+YnVmbWdyLCAiIiwgYnVmLT5zaXplLCA0MDk2KTsKKworCWJ1Zi0+ZGF0YSA9IGRybV9pbnRl bF9nZW1fYm9fbWFwX193YyhidWYtPmJvKTsKKwlpZiAoIWJ1Zi0+ZGF0YSkKKwkJYnVmLT5kYXRh ID0gZHJtX2ludGVsX2dlbV9ib19tYXBfX2d0dChidWYtPmJvKTsKKworCW1lbXNldChidWYtPmRh dGEsIGNvbG9yLCBidWYtPnNpemUpOworfQorCisvKioKKyAqIHNjcmF0Y2hfYnVmX2NoZWNrX3Bs YWluOgorICogQGJ1Zjogc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGJ1ZmZlciB0byBjaGVjawor ICogQHdpZHRoOiB3aWR0aCBkaW1lbnNpb24gb2YgdGhlIDJEIGJ1ZmZlciwgZXF1YWwgdG8gc3Ry aWRlCisgKiBAaGVpZ2h0OiBoZWlnaHQgZGltZW5zaW9uIG9mIHRoZSAyRCBidWZmZXIKKyAqCisg KiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyBjb21wbGV0ZWx5 IGZpbGxlZCB3aXRoIGdpdmVuIGNvbG9yLgorICoKKyAqIFJldHVybnM6IHZvaWQ7IGFzc2VydHMg aWYgdmVyaWZpY2F0aW9uIGZhaWxlZAorICovCitzdGF0aWMgdm9pZAorc2NyYXRjaF9idWZfY2hl Y2tfcGxhaW4oc3RydWN0IGlndF9idWYgKmJ1ZiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50 OF90IGNvbG9yKQoreworCWludCBpLCBqOworICAgICAgICB1aW50OF90IHZhbDsKKyAgICAgICAg dWludDhfdCAqbGluZWFyOworCisJbGluZWFyID0gKHVpbnQ4X3QgKilidWYtPmRhdGE7CisJZm9y IChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGhlaWdodDsgaisr KSB7CisJCQl2YWwgPSBsaW5lYXJbaiAqIHdpZHRoICsgaV07CisJICAgICAgICAgICAgICAgIGln dF9hc3NlcnRfZih2YWwgPT0gY29sb3IsCisJCQkJIkV4cGVjdGVkIDB4JTAyeCwgZm91bmQgMHgl MDJ4IGF0ICglZCwlZClcbiIsCisJCQkJY29sb3IsIHZhbCwgaSwgaik7CisJCX0KKwl9Cit9CisK Ky8qKgorICogc2NyYXRjaF9idWZfY2hlY2tfdnN0cmlwZXM6CisgKiBAYnVmOiBzdHJ1Y3R1cmUg Y29udGFpbmluZyB0aGUgYnVmZmVyIHRvIGNoZWNrCisgKiBAd2lkdGg6IHdpZHRoIGRpbWVuc2lv biBvZiB0aGUgMkQgYnVmZmVyLCBlcXVhbCB0byBzdHJpZGUKKyAqIEBoZWlnaHQ6IGhlaWdodCBk aW1lbnNpb24gb2YgdGhlIDJEIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMg Y29udGVudCBvZiB0aGUgYnVmZmVyIHdoaWxlIGl0IGlzIGJlaW5nIGZpbGxlZCBieSB0aGUgR1BV LgorICogVGhlIGJ1ZmZlciBzaG91bGQgY29udGFpbiAyIHZlcnRpY2FsIHN0cmlwZXMgb2YgZGlm ZmVyZW50IGNvbG9yLgorICoKKyAqIFJldHVybnM6IFRydWUgaWYgbGVmdCBzdHJpcGUgaXMgZmls bGVkLCBmYWxzZSBvbiB0aW1lb3V0OyBhc3NlcnRzIGlmIHJpZ2h0IHN0cmlwZSBpcyBub3QgZmls bGVkCisgKi8KK3N0YXRpYyBib29sCitzY3JhdGNoX2J1Zl9jaGVja192c3RyaXBlcyhzdHJ1Y3Qg aWd0X2J1ZiAqYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisJCQkgICB1aW50OF90IGNvbG9y bCwgdWludDhfdCBjb2xvcnIpCit7CisJaW50IGksIGo7CisJdWludDhfdCB2YWw7CisJdWludDhf dCAqbGluZWFyOworCisJbGluZWFyID0gKHVpbnQ4X3QgKilidWYtPmRhdGE7CisJZm9yIChpID0g MDsgaSA8IFdJRFRIOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IEhFSUdIVDsgaisrKSB7CisJ CQl2YWwgPSBsaW5lYXJbaiAqIHdpZHRoICsgaV07CisJCQlpZiAoaiA8IEhFSUdIVCAvIDIpIHsK KwkJCQlpZiAodmFsICE9IGNvbG9ybCkgcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQlp Z3RfYXNzZXJ0X2YodmFsID09IGNvbG9yciwKKwkJCQkJIkV4cGVjdGVkIDB4JTAyeCwgZm91bmQg MHglMDJ4IGF0ICglZCwlZClcbiIsCisJCQkJCWNvbG9yciwgdmFsLCBpLCBqKTsKKwkJCX0KKwkJ fQorCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHVpbnQzMl90CitpZ3RfYmF0Y2hidWZm ZXJfc3Bpbl9lbWl0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCit7CisJdWludDMy X3Qgc3Bpbl9vZmZzZXQ7CisJc3Bpbl9vZmZzZXQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRh X29mZnNldChiYXRjaCwgYmF0Y2gtPnB0cik7CisJT1VUX0JBVENIKE1JX05PT1ApOworCS8qIHJl Y3Vyc2UgKi8KKwlPVVRfQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4IHwgMSk7 CisJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQsIDAsIHNwaW5f b2Zmc2V0KTsKKwlyZXR1cm4gc3Bpbl9vZmZzZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitpZ3RfYmF0 Y2hidWZmZXJfc3Bpbl9maW5pc2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWlu dDMyX3Qgc3Bpbl9vZmZzZXQpCit7CisJdWludDhfdCAqIG1tYnVmZmVyOworCW1tYnVmZmVyID0g ZHJtX2ludGVsX2dlbV9ib19tYXBfX3djKGJhdGNoLT5ibyk7CisJaWYgKCFtbWJ1ZmZlcikKKwkJ bW1idWZmZXIgPSBkcm1faW50ZWxfZ2VtX2JvX21hcF9fZ3R0KGJhdGNoLT5ibyk7CisKKwkqKCh1 aW50MzJfdCAqKShtbWJ1ZmZlciArIHNwaW5fb2Zmc2V0KSkgPSBNSV9CQVRDSF9CVUZGRVJfRU5E OworCisJZHJtX2ludGVsX2JvX3VubWFwKGJhdGNoLT5ibyk7Cit9CisKK3N0YXRpYyB2b2lkCitp Z3RfYmF0Y2hidWZmZXJfY29oZXJlbmN5X3Rlc3QoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJICAgICAgIGlndF9maWxsZnVuY190IGVtaXRfZ3BncHVf ZmlsbCwgYm9vbCBjb2hlcmVudCkKK3sKKwlzdHJ1Y3QgaWd0X2J1ZiBkc3Q7CisgICAgICAgIHVp bnQzMl90IGJhdGNoX2VuZCwgc3Bpbl9vZmZzZXQ7CisJYm9vbCByZXM7CisKKwlzY3JhdGNoX2J1 Zl9pbml0KGRhdGEsICZkc3QsIFdJRFRILCBIRUlHSFQsIENPTE9SX0M0KTsKKwlzY3JhdGNoX2J1 Zl9jaGVja19wbGFpbigmZHN0LCBXSURUSCwgSEVJR0hULCBDT0xPUl9DNCk7CisKKyAgICAgICAg aW50ZWxfYmF0Y2hidWZmZXJfZmx1c2goYmF0Y2gpOworCWdlbV9jb250ZXh0X3NldF9jb2hlcmVu Y3koZGF0YS0+ZHJtX2ZkLCBERUZBVUxUX0NPTlRFWFRfSURYLCBjb2hlcmVudCk7CisKKwllbWl0 X2dwZ3B1X2ZpbGwoYmF0Y2gsCisJCSAgICZkc3QsIDAsIDAsIFdJRFRILCBIRUlHSFQgLyAyLAor CQkgICBDT0xPUl80Qyk7CisKKwlzcGluX29mZnNldCA9IGlndF9iYXRjaGJ1ZmZlcl9zcGluX2Vt aXQoYmF0Y2gpOworCisgICAgICAgIE9VVF9CQVRDSChNSV9CQVRDSF9CVUZGRVJfRU5EKTsKKyAg ICAgICAgYmF0Y2hfZW5kID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxpZ24oYmF0Y2gsIDgpOworCisg ICAgICAgIGdlbjdfcmVuZGVyX2ZsdXNoKGJhdGNoLCBiYXRjaF9lbmQpOworCisJcmVzID0gaWd0 X3dhaXQoc2NyYXRjaF9idWZfY2hlY2tfdnN0cmlwZXMoJmRzdCwgV0lEVEgsIEhFSUdIVCwgQ09M T1JfNEMsIENPTE9SX0M0KSwgMTAwLCAxKTsKKworCWlndF9iYXRjaGJ1ZmZlcl9zcGluX2Zpbmlz aChiYXRjaCwgc3Bpbl9vZmZzZXQpOworCisgICAgICAgIGludGVsX2JhdGNoYnVmZmVyX3Jlc2V0 KGJhdGNoKTsKKworCWlmIChjb2hlcmVudCkKKwkJaWd0X2Fzc2VydF9mKHJlcywKKwkJCSJjb2hl cmVudCBidWZmZXIgZmlsbCBub3QgdmlzaWJsZSBvbiBDUFUgc2lkZSBhZnRlciAxMDBtcyIpOwor CWVsc2UKKwkJaWd0X2Fzc2VydF9mKCFyZXMsCisJCQkibm9uLWNvaGVyZW50IGJ1ZmZlciBmaWxs IHZpc2libGUgb24gQ1BVIHNpZGUgd2l0aGluIDEwMG1zIik7Cit9CisKK2lndF9zaW1wbGVfbWFp bgoreworCWRhdGFfdCBkYXRhID0gezAsIH07CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCA9IE5VTEw7CisJaWd0X2ZpbGxmdW5jX3QgZW1pdF9ncGdwdV9maWxsID0gTlVMTDsKKwor CWRhdGEuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX3JlbmRlcihEUklWRVJfSU5URUwpOworCWRh dGEuZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRhdGEuZHJtX2ZkKTsKKwlpZ3RfcmVxdWly ZV9nZW0oZGF0YS5kcm1fZmQpOworCisJZGF0YS5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dl bV9pbml0KGRhdGEuZHJtX2ZkLCA0MDk2KTsKKwlpZ3RfYXNzZXJ0KGRhdGEuYnVmbWdyKTsKKwor CWVtaXRfZ3BncHVfZmlsbCA9IGlndF9nZXRfZW1pdF9ncGdwdV9maWxsZnVuYyhkYXRhLmRldmlk KTsKKworCWlndF9yZXF1aXJlX2YoZW1pdF9ncGdwdV9maWxsLAorCQkgICAgICAibm8gZ3BncHUt ZmlsbCBmdW5jdGlvblxuIik7CisJaWd0X3JlcXVpcmVfZihnZW1fY29udGV4dF9nZXRfY29oZXJl bmN5KGRhdGEuZHJtX2ZkLCAwKSA+PSAwLAorCQkiRGF0YSBQb3J0IENvaGVyZW5jeSBub3Qgc3Vw cG9ydGVkIGJ5IGtlcm5lbFxuIik7CisKKwliYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9j KGRhdGEuYnVmbWdyLCBkYXRhLmRldmlkKTsKKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKKworCS8qIFRl c3Qgd2l0aG91dCBjb2hlcmVuY3kgKi8KKwlpZ3RfYmF0Y2hidWZmZXJfY29oZXJlbmN5X3Rlc3Qo JmRhdGEsIGJhdGNoLCBlbWl0X2dwZ3B1X2ZpbGwsIDApOworCisJLyogTm93IHRlc3Qgd2l0aCBE YXRhIFBvcnQgY29oZXJlbmN5ICovCisJaWd0X2JhdGNoYnVmZmVyX2NvaGVyZW5jeV90ZXN0KCZk YXRhLCBiYXRjaCwgZW1pdF9ncGdwdV9maWxsLCAxKTsKK30KLS0gCjIuNy40CgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlz dAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK