From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH igt] tests/kms_mmio_vs_cs_flip: Add a test case to exercise mmio vs. CS flip races Date: Tue, 15 Apr 2014 21:41:39 +0300 Message-ID: <1397587299-2476-7-git-send-email-ville.syrjala@linux.intel.com> References: <1397587299-2476-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id D5D686E950 for ; Tue, 15 Apr 2014 11:42:25 -0700 (PDT) In-Reply-To: <1397587299-2476-1-git-send-email-ville.syrjala@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 RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCmtt c19tbWlvX3ZzX2NzX2ZsaXAgaGFzIHR3byBzdWJ0ZXN0czoKLSBzZXRwbGFuZV92c19jc19mbGlw IHRlc3RzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuCiAgZnVsbHNjcmVlbiBzcHJpdGVzIGFuZCBD UyBmbGlwcwotIHNldGNydGNfdnNfY3NfZmxpcCB0ZXN0cyB0aGUgaW50ZXJhY3Rpb24gYmV0d2Vl bgogIHByaW1hcnkgcGxhbmUgcGFubmluZyBhbmQgQ1MgZmxpcHMKClNpZ25lZC1vZmYtYnk6IFZp bGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogdGVzdHMv TWFrZWZpbGUuc291cmNlcyAgICAgIHwgICAxICsKIHRlc3RzL2ttc19tbWlvX3ZzX2NzX2ZsaXAu YyB8IDUxOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBm aWxlcyBjaGFuZ2VkLCA1MjAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3Rz L2ttc19tbWlvX3ZzX2NzX2ZsaXAuYwoKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGM5NTdhY2UuLjZmZjBhMzUgMTAwNjQ0 Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwpAQCAtNjAsNiArNjAsNyBAQCBURVNUU19wcm9nc19NID0gXAogCWttc19mYmNfY3JjIFwKIAlr bXNfZmxpcCBcCiAJa21zX2ZsaXBfdGlsaW5nIFwKKwlrbXNfbW1pb192c19jc19mbGlwIFwKIAlr bXNfcGlwZV9jcmNfYmFzaWMgXAogCWttc19wbGFuZSBcCiAJa21zX3JlbmRlciBcCmRpZmYgLS1n aXQgYS90ZXN0cy9rbXNfbW1pb192c19jc19mbGlwLmMgYi90ZXN0cy9rbXNfbW1pb192c19jc19m bGlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5YjAyYQotLS0gL2Rl di9udWxsCisrKyBiL3Rlc3RzL2ttc19tbWlvX3ZzX2NzX2ZsaXAuYwpAQCAtMCwwICsxLDUxOSBA QAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxlcnJu by5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImRybXRlc3QuaCIKKyNp bmNsdWRlICJpZ3RfZGVidWdmcy5oIgorI2luY2x1ZGUgImlndF9rbXMuaCIKKyNpbmNsdWRlICJp bnRlbF9jaGlwc2V0LmgiCisjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKKwordHlwZWRlZiBz dHJ1Y3QgeworCWludCBkcm1fZmQ7CisJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OworCWlndF9waXBl X2NyY190ICpwaXBlX2NyYzsKKwlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7CisJZHJtX2ludGVs X2JvICpidXN5X2JvOworCXVpbnQzMl90IGRldmlkOworCWJvb2wgZmxpcF9kb25lOworfSBkYXRh X3Q7CisKK3N0YXRpYyB2b2lkIGV4ZWNfbm9wKGRhdGFfdCAqZGF0YSwgdWludDMyX3QgaGFuZGxl LCB1bnNpZ25lZCBpbnQgcmluZykKK3sKKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo OworCWRybV9pbnRlbF9ibyAqYm87CisKKwliYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9j KGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZGV2aWQpOworCWlndF9hc3NlcnQoYmF0Y2gpOworCisJYm8g PSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwgIiIs IGhhbmRsZSk7CisJaWd0X2Fzc2VydChibyk7CisKKwkvKiBhZGQgcmVsb2NzIHRvIG1ha2Ugc3Vy ZSB0aGUga2VybmVsIHdpbGwgdGhpbmsgd2Ugd3JpdGUgdG8gZHN0ICovCisJQkVHSU5fQkFUQ0go NCk7CisJT1VUX0JBVENIKE1JX0JBVENIX0JVRkZFUl9FTkQpOworCU9VVF9CQVRDSChNSV9OT09Q KTsKKwlPVVRfUkVMT0MoYm8sIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIEk5MTVfR0VNX0RPTUFJ Tl9SRU5ERVIsIDApOworCU9VVF9CQVRDSChNSV9OT09QKTsKKwlBRFZBTkNFX0JBVENIKCk7CisK KwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKGJhdGNoLCByaW5nKTsKKwlpbnRlbF9i YXRjaGJ1ZmZlcl9mcmVlKGJhdGNoKTsKK30KKworc3RhdGljIHZvaWQgZXhlY19ibHQoZGF0YV90 ICpkYXRhKQoreworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisJaW50IHcsIGgs IHBpdGNoLCBpOworCisJYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLT5idWZt Z3IsIGRhdGEtPmRldmlkKTsKKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKKworCXcgPSA4MTkyOworCWgg PSBkYXRhLT5idXN5X2JvLT5zaXplIC8gKDgxOTIgKiA0KTsKKwlwaXRjaCA9IHcgKiA0OworCisJ Zm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJQkxJVF9DT1BZX0JBVENIX1NUQVJUKGRhdGEt PmRldmlkLCAwKTsKKwkJT1VUX0JBVENIKCgzIDw8IDI0KSB8IC8qIDMyIGJpdHMgKi8KKwkJCSAg KDB4Y2MgPDwgMTYpIHwgLyogY29weSBST1AgKi8KKwkJCSAgcGl0Y2gpOworCQlPVVRfQkFUQ0go MCA8PCAxNiB8IDApOworCQlPVVRfQkFUQ0goaCA8PCAxNiB8IHcpOworCQlPVVRfUkVMT0MoZGF0 YS0+YnVzeV9ibywgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRF UiwgMCk7CisJCUJMSVRfUkVMT0NfVURXKGRhdGEtPmRldmlkKTsKKwkJT1VUX0JBVENIKDAgPDwg MTYgfCAwKTsKKwkJT1VUX0JBVENIKHBpdGNoKTsKKwkJT1VUX1JFTE9DKGRhdGEtPmJ1c3lfYm8s IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIDAsIDApOworCQlCTElUX1JFTE9DX1VEVyhkYXRhLT5k ZXZpZCk7CisJCUFEVkFOQ0VfQkFUQ0goKTsKKwl9CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVz aChiYXRjaCk7CisJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7Cit9CisKK3N0YXRpYyB2 b2lkIHBhZ2VfZmxpcF9oYW5kbGVyKGludCBmZCwgdW5zaWduZWQgaW50IGZyYW1lLCB1bnNpZ25l ZCBpbnQgc2VjLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVzZWMsIHZvaWQgKl9kYXRhKQorewor CWRhdGFfdCAqZGF0YSA9IF9kYXRhOworCisJZGF0YS0+ZmxpcF9kb25lID0gdHJ1ZTsKK30KKwor c3RhdGljIHZvaWQgd2FpdF9mb3JfZmxpcChkYXRhX3QgKmRhdGEsIHVpbnQzMl90IGZsaXBfaGFu ZGxlKQoreworCXN0cnVjdCB0aW1ldmFsIHRpbWVvdXQgPSB7CisJCS50dl9zZWMgPSAzLAorCQku dHZfdXNlYyA9IDAsCisJfTsKKwlkcm1FdmVudENvbnRleHQgZXZjdHggPSB7CisJCS52ZXJzaW9u ID0gRFJNX0VWRU5UX0NPTlRFWFRfVkVSU0lPTiwKKwkJLnBhZ2VfZmxpcF9oYW5kbGVyID0gcGFn ZV9mbGlwX2hhbmRsZXIsCisJfTsKKwlmZF9zZXQgZmRzOworCisJRkRfWkVSTygmZmRzKTsKKwlG RF9TRVQoZGF0YS0+ZHJtX2ZkLCAmZmRzKTsKKworCXdoaWxlICghZGF0YS0+ZmxpcF9kb25lKSB7 CisJCWludCByZXQgPSBzZWxlY3QoZGF0YS0+ZHJtX2ZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwg JnRpbWVvdXQpOworCisJCWlmIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSKQorCQkJY29udGlu dWU7CisKKwkJaWd0X2Fzc2VydChyZXQgPj0gMCk7CisKKwkJZG9fb3JfZGllKGRybUhhbmRsZUV2 ZW50KGRhdGEtPmRybV9mZCwgJmV2Y3R4KSk7CisJfQorCisJLyoKKwkgKiBUaGUgZmxpcCBjb21w bGV0aW9uIG1heSBoYXZlIGJlZW4gc2lnbmFsbGVkIHByZW1hdHVyZWx5LCBzbworCSAqIGFsc28g c3VibWl0IGFub3RoZXIgbm9wIGJhdGNoIGFuZCB3YWl0IGZvciBpdCB0byBtYWtlIHN1cmUKKwkg KiB0aGUgcmluZyBoYXMgcmVhbGx5IGJlZW4gZHJhaW5lZC4KKwkgKi8KKwlpZiAoSVNfR0VONyhk YXRhLT5kZXZpZCkgfHwgSVNfR0VOOChkYXRhLT5kZXZpZCkpCisJCWV4ZWNfbm9wKGRhdGEsIGZs aXBfaGFuZGxlLCBJOTE1X0VYRUNfQkxUKTsKKwllbHNlCisJCWV4ZWNfbm9wKGRhdGEsIGZsaXBf aGFuZGxlLCBJOTE1X0VYRUNfUkVOREVSKTsKKwlnZW1fc3luYyhkYXRhLT5kcm1fZmQsIGZsaXBf aGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9ncHVfYnVzeShkYXRhX3QgKmRhdGEsIHVp bnQzMl90IGZsaXBfaGFuZGxlKQoreworCS8qCisJICogTWFrZSBzdXJlIGZsaXBfaGFuZGxlIGhh cyBiZWVuIHVzZWQgb24gdGhlIGJsdCByaW5nLgorCSAqIFRoaXMgc2hvdWxkIG1ha2UgdGhlIGZs aXAgdXNlIHRoZSBzYW1lIHJpbmcgb24gZ2VuNysuCisJICovCisJaWYgKElTX0dFTjcoZGF0YS0+ ZGV2aWQpIHx8IElTX0dFTjgoZGF0YS0+ZGV2aWQpKQorCQlleGVjX25vcChkYXRhLCBmbGlwX2hh bmRsZSwgSTkxNV9FWEVDX0JMVCk7CisKKwkvKgorCSAqIEFkZCBhIHBpbGUgY29tbWFuZHMgdG8g dGhlIHJpbmcuICBUaGUgZmxpcCB3aWxsIGJlCisJICogc3R1Y2sgYmVoaW5nIHRoZXNlIGNvbW1h bmRzIGFuZCBoZW5jZSBnZXRzIGRlbGF5ZWQKKwkgKiBzaWduaWZpY2FudGx5LgorCSAqLworCWV4 ZWNfYmx0KGRhdGEpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIHJlbmRlciByaW5nIHdpbGwg YmxvY2sgdW50aWwgdGhlIGJsdCByaW5nIGlzIGNsZWFyLgorCSAqIFRoaXMgaXMgaW4gY2FzZSB0 aGUgZmxpcCB3aWxsIGV4ZWN1dGUgb24gdGhlIHJlbmRlciByaW5nIGFuZCB0aGUKKwkgKiBibGl0 cyB3ZXJlIG9uIHRoZSBibHQgcmluZyAodGhpcyB3aWxsIGJlIHRoZSBjYXNlIG9uIGdlbjYgYXQg bGVhc3QpLgorCSAqCisJICogV2UgY2FuJ3QgYWRkIGFuIGV4cGxpY2l0IGRlcGVuZGVuY3kgYmV0 d2VlbiBmbGlwX2hhbmRsZSBhbmQgdGhlCisJICogYmxpdHMgc2luY2UgdGhhdCB3b3VsZCBjYXVz ZSB0aGUgZHJpdmVyIHRvIGJsb2NrIHVudGlsIHRoZSBibGl0cworCSAqIGhhdmUgY29tcGxldGVk IGJlZm9yZSBpdCB3aWxsIHBlcmZvcm0gYSBzdWJzZXF1ZW50IG1taW8gZmxpcCwKKwkgKiBhbmQg c28gdGhlIHRlc3Qgd291bGQgZmFpbCB0byBleGVyY2lzZSB0aGUgbW1pbyB2cy4gQ1MgZmxpcCBy YWNlLgorCSAqLworCWlmIChIQVNfQkxUX1JJTkcoZGF0YS0+ZGV2aWQpKQorCQlleGVjX25vcChk YXRhLCBkYXRhLT5idXN5X2JvLT5oYW5kbGUsIEk5MTVfRVhFQ19SRU5ERVIpOworfQorCisvKgor ICogMS4gc2V0IHByaW1hcnkgcGxhbmUgdG8gZnVsbCByZWQKKyAqIDIuIGdyYWIgYSByZWZlcmVu Y2UgY3JjCisgKiAzLiBzZXQgcHJpbWFyeSBwbGFuZSB0byBmdWxsIGJsdWUKKyAqIDQuIHF1ZXVl IGxvdHMgb2YgR1BVIGFjdGl2aXR5IHRvIGRlbGF5IHRoZSBzdWJzZXF1ZW50IHBhZ2UgZmxpcAor ICogNS4gcXVldWUgYSBwYWdlIGZsaXAgdG8gdGhlIHNhbWUgYmx1ZSBmYgorICogNi4gdG9nZ2xl IGEgZnVsbHNjcmVlbiBzcHJpdGUgKGdyZWVuKSBvbiBhbmQgYmFjayBvZmYgYWdhaW4KKyAqIDcu IHNldCBwcmltYXJ5IHBsYW5lIHRvIHJlZCBmYgorICogOC4gd2FpdCBmb3IgR1BVIHRvIGZpbmlz aAorICogOS4gY29tcGFyZSBjdXJyZW50IGNyYyB3aXRoIHJlZmVyZW5jZSBjcmMKKyAqCisgKiBX ZSBleHBlY3QgdGhlIHByaW1hcnkgcGxhbmUgdG8gZGlzcGxheSBmdWxsIHJlZCBhdCB0aGUgZW5k LgorICogSWYgdGhlIHNwcml0ZSBvcGVyYXRpb25zIGhhdmUgaW50ZXJmZXJlZCB3aXRoIHRoZSBw YWdlIGZsaXAsCisgKiB0aGUgZHJpdmVyIG1heSBoYXZlIG1pc3Rha2VubHkgY29tcGxldGVkIHRo ZSBmbGlwIGJlZm9yZQorICogaXQgd2FzIGV4ZWN1dGVkIGJ5IHRoZSBDUywgYW5kIGhlbmNlIHRo ZSBzdWJzZXF1ZW50IG1taW8KKyAqIGZsaXBzIG1heSBoYXZlIG92ZXJ0YWtlbiBpdC4gU28gb25j ZSB3ZSd2ZSBmaW5pc2hlZCBldmVyeXRoaW5nCisgKiB0aGUgQ1MgZmxpcCBtYXkgaGF2ZSBiZWVu IHRoZSBsYXN0IHRoaW5nIHRvIG9jY3VyLCB3aGljaCBtZWFucworICogdGhlIHByaW1hcnkgcGxh bmUgbWF5IGJlIGZ1bGwgYmx1ZSBpbnN0ZWFkIG9mIHRoZSByZWQgaXQncworICogc3VwcG9zZWQg dG8gYmUuCisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X3BsYW5lKGRhdGFfdCAqZGF0YSwgaWd0X291 dHB1dF90ICpvdXRwdXQsIGVudW0gcGlwZSBwaXBlLCBlbnVtIGlndF9wbGFuZSBwbGFuZSkKK3sK KwlzdHJ1Y3QgaWd0X2ZiIHJlZF9mYiwgZ3JlZW5fZmIsIGJsdWVfZmI7CisJZHJtTW9kZU1vZGVJ bmZvICptb2RlOworCWlndF9wbGFuZV90ICpwcmltYXJ5LCAqc3ByaXRlOworCWlndF9jcmNfdCBy ZWZfY3JjLCBjcmM7CisJaW50IHJldDsKKworCWlmIChkYXRhLT5waXBlX2NyYykKKwkJaWd0X3Bp cGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMpOworCWRhdGEtPnBpcGVfY3JjID0gaWd0X3BpcGVf Y3JjX25ldyhwaXBlLCBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7CisKKwlpZ3Rfb3V0cHV0 X3NldF9waXBlKG91dHB1dCwgcGlwZSk7CisJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5l KG91dHB1dCwgMCk7CisJc3ByaXRlID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBwbGFu ZSk7CisJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLT5kaXNwbGF5KTsKKworCW1vZGUgPSBpZ3Rf b3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1f ZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCSAgICBEUk1fRk9STUFUX1hS R0I4ODg4LAorCQkJICAgIGZhbHNlLCAvKiB0aWxlZCAqLworCQkJICAgIDEuMCwgMC4wLCAwLjAs CisJCQkgICAgJnJlZF9mYik7CisJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsIG1v ZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4 LAorCQkJICAgIGZhbHNlLCAvKiB0aWxlZCAqLworCQkJICAgIDAuMCwgMS4wLCAwLjAsCisJCQkg ICAgJmdyZWVuX2ZiKTsKKwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgbW9kZS0+ aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkJICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJ CQkgICAgZmFsc2UsIC8qIHRpbGVkICovCisJCQkgICAgMC4wLCAwLjAsIDEuMCwKKwkJCSAgICAm Ymx1ZV9mYik7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGVzZSBidWZmZXJzIGFyZSBzdWl0ZWQg Zm9yIGRpc3BsYXkgdXNlCisJICogYmVjYXVzZSBtb3N0IG9mIHRoZSBtb2Rlc2V0IG9wZXJhdGlv bnMgbXVzdCBiZSBmYXN0CisJICogbGF0ZXIgb24uCisJICovCisJaWd0X3BsYW5lX3NldF9mYihw cmltYXJ5LCAmYmx1ZV9mYik7CisJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLT5kaXNwbGF5KTsK KwlpZ3RfcGxhbmVfc2V0X2ZiKHNwcml0ZSwgJmdyZWVuX2ZiKTsKKwlpZ3RfZGlzcGxheV9jb21t aXQoJmRhdGEtPmRpc3BsYXkpOworCWlndF9wbGFuZV9zZXRfZmIoc3ByaXRlLCBOVUxMKTsKKwlp Z3RfZGlzcGxheV9jb21taXQoJmRhdGEtPmRpc3BsYXkpOworCisJLyogc2V0IHJlZCBmYiBhbmQg Z3JhYiByZWZlcmVuY2UgY3JjICovCisJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmcmVkX2Zi KTsKKwlpZ3RfZGlzcGxheV9jb21taXQoJmRhdGEtPmRpc3BsYXkpOworCWlndF9waXBlX2NyY19j b2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMpOworCisJcmV0ID0gZHJtTW9kZVNl dENydGMoZGF0YS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJICAg ICBibHVlX2ZiLmZiX2lkLCAwLCAwLCAmb3V0cHV0LT5pZCwgMSwKKwkJCSAgICAgbW9kZSk7CisJ aWd0X2Fzc2VydChyZXQgPT0gMCk7CisKKwltYWtlX2dwdV9idXN5KGRhdGEsIGJsdWVfZmIuZ2Vt X2hhbmRsZSk7CisKKwlkYXRhLT5mbGlwX2RvbmUgPSBmYWxzZTsKKwlyZXQgPSBkcm1Nb2RlUGFn ZUZsaXAoZGF0YS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJICAg ICAgYmx1ZV9mYi5mYl9pZCwgRFJNX01PREVfUEFHRV9GTElQX0VWRU5ULCBkYXRhKTsKKwlpZ3Rf YXNzZXJ0KHJldCA9PSAwKTsKKworCS8qCisJICogVG9nZ2xlIGEgZnVsbHNjcmVlbiBzcHJpdGUg b24gYW5kIGJhY2sgb2ZmLiBUaGlzIHdpbGwgcmVzdWx0CisJICogaW4gdGhlIHByaW1hcnkgcGxh bmUgZ2V0dGluZyBkaXNhYmxlZCBhbmQgcmUtZW5ibGVkLCBhbmQgdGhhdAorCSAqIGxlYWRzIHRv IG1taW8gZmxpcHMuIFRoZSBkcml2ZXIgbWF5IHRoZW4gbWlzdGFrZSB0aGUgZmxpcCBkb25lCisJ ICogaW50ZXJydXB0cyBmcm9tIHRoZSBtbWlvIGZsaXBzIGFzIHRoZSBmbGlwIGRvbmUgaW50ZXJy dXB0cyBmb3IKKwkgKiB0aGUgQ1MgZmxpcCwgYW5kIGhlbmNlIHN1YnNlcXVlbnQgbW1pbyBmbGlw cyB3b24ndCB3YWl0IGZvciB0aGUKKwkgKiBDUyBmbGlwcyBsaWtlIHRoZXkgc2hvdWxkLgorCSAq LworCXJldCA9IGRybU1vZGVTZXRQbGFuZShkYXRhLT5kcm1fZmQsCisJCQkgICAgICBzcHJpdGUt PmRybV9wbGFuZS0+cGxhbmVfaWQsCisJCQkgICAgICBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRj X2lkLAorCQkJICAgICAgZ3JlZW5fZmIuZmJfaWQsIDAsCisJCQkgICAgICAwLCAwLCBtb2RlLT5o ZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkgICAgICAwLCAwLCBtb2RlLT5oZGlzcGxheSA8 PCAxNiwgbW9kZS0+dmRpc3BsYXkgPDwgMTYpOworCWlndF9hc3NlcnQocmV0ID09IDApOworCXJl dCA9IGRybU1vZGVTZXRQbGFuZShkYXRhLT5kcm1fZmQsCisJCQkgICAgICBzcHJpdGUtPmRybV9w bGFuZS0+cGxhbmVfaWQsCisJCQkgICAgICBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAor CQkJICAgICAgMCwgMCwKKwkJCSAgICAgIDAsIDAsIDAsIDAsCisJCQkgICAgICAwLCAwLCAwLCAw KTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKKworCS8qCisJICogU2V0IHByaW1hcnkgcGxhbmUg dG8gcmVkIGZiLiBUaGlzIHNob3VsZCB3YWl0IGZvciB0aGUgQ1MgZmxpcAorCSAqIHRvIGNvbXBs ZXRlLiBCdXQgaWYgdGhlIGtlcm5lbCBtaXN0b29rIHRoZSBmbGlwIGRvbmUgaW50ZXJydXB0CisJ ICogZnJvbSB0aGUgbW1pbyBmbGlwIGFzIHRoZSBmbGlwIGRvbmUgZnJvbSB0aGUgQ1MgZmxpcCwg dGhpcyB3aWxsCisJICogbm90IHdhaXQgZm9yIGFueXRoaW5nLiBBbmQgaGVuY2UgdGhlIHRoZSBD UyBmbGlwIHdpbGwgYWN0dWFsbHkKKwkgKiBvY2N1ciBhZnRlciB0aGlzIG1taW8gZmxpcC4KKwkg Ki8KKwlyZXQgPSBkcm1Nb2RlU2V0Q3J0YyhkYXRhLT5kcm1fZmQsIG91dHB1dC0+Y29uZmlnLmNy dGMtPmNydGNfaWQsCisJCQkgICAgIHJlZF9mYi5mYl9pZCwgMCwgMCwgJm91dHB1dC0+aWQsIDEs CisJCQkgICAgIG1vZGUpOworCWlndF9hc3NlcnQocmV0ID09IDApOworCisJLyogTWFrZSBzdXJl IHRoZSBmbGlwIGhhcyBiZWVuIGV4ZWN1dGVkICovCisJd2FpdF9mb3JfZmxpcChkYXRhLCBibHVl X2ZiLmdlbV9oYW5kbGUpOworCisJLyogR3JhYiBjcmMgYW5kIGNvbXBhcmUgd2l0aCB0aGUgZXh0 ZWN0ZWQgcmVzdWx0ICovCisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3Jj LCAmY3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgTlVMTCk7CisJaWd0X2Rpc3Bs YXlfY29tbWl0KCZkYXRhLT5kaXNwbGF5KTsKKworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2Zk LCAmcmVkX2ZiKTsKKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmdyZWVuX2ZiKTsKKwlp Z3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmJsdWVfZmIpOworCisJaWd0X3BpcGVfY3JjX2Zy ZWUoZGF0YS0+cGlwZV9jcmMpOworCWRhdGEtPnBpcGVfY3JjID0gTlVMTDsKKworCWlndF9vdXRw dXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX0FOWSk7CisJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRh LT5kaXNwbGF5KTsKKworCWlndF9hc3NlcnQoaWd0X2NyY19lcXVhbCgmcmVmX2NyYywgJmNyYykp OworfQorCisvKgorICogMS4gc2V0IHByaW1hcnkgcGxhbmUgdG8gZnVsbCByZWQKKyAqIDIuIGdy YWIgYSByZWZlcmVuY2UgY3JjCisgKiAzLiBzZXQgcHJpbWFyeSBwbGFuZSB0byBmdWxsIGdyZWVu CisgKiA0LiB3YWl0IGZvciB2YmxhbmsKKyAqIDUuIHBhbiBwcmltYXJ5IHBsYW5lIGEgYml0ICh0 byBjYXVzZSBhIG1taW8gZmxpcCB3L28gdmJsYW5rIHdhaXQpCisgKiA2LiBxdWV1ZSBsb3RzIG9m IEdQVSBhY3Rpdml0eSB0byBkZWxheSB0aGUgc3Vic2VxdWVudCBwYWdlIGZsaXAKKyAqIDYuIHF1 ZXVlIGEgcGFnZSBmbGlwIHRvIGEgYmx1ZSBmYgorICogNy4gc2V0IHByaW1hcnkgcGxhbmUgdG8g cmVkIGZiCisgKiA4LiB3YWl0IGZvciBHUFUgdG8gZmluaXNoCisgKiA5LiBjb21wYXJlIGN1cnJl bnQgY3JjIHdpdGggcmVmZXJlbmNlIGNyYworICoKKyAqIFdlIGV4cGVjdCB0aGUgcHJpbWFyeSBw bGFuZSB0byBkaXNwbGF5IGZ1bGwgcmVkIGF0IHRoZSBlbmQuCisgKiBJZiB0aGUgcHJldmlvdXNs eSBzY2hlZHVsZSBwcmltYXJ5IHBsYW5lIHBhbiBvcGVyYXRpb24gaGFzIGludGVyZmVyZWQKKyAq IHdpdGggdGhlIGZvbGxvd2luZyBwYWdlIGZsaXAsIHRoZSBkcml2ZXIgbWF5IGhhdmUgbWlzdGFr ZW5seSBjb21wbGV0ZWQKKyAqIHRoZSBmbGlwIGJlZm9yZSBpdCB3YXMgZXhlY3V0ZWQgYnkgdGhl IENTLCBhbmQgaGVuY2UgdGhlIHN1YnNlcXVlbnQgbW1pbworICogZmxpcHMgbWF5IGhhdmUgb3Zl cnRha2VuIGl0LiBTbyBvbmNlIHdlJ3ZlIGZpbmlzaGVkIGV2ZXJ5dGhpbmcKKyAqIHRoZSBDUyBm bGlwIG1heSBoYXZlIGJlZW4gdGhlIGxhc3QgdGhpbmcgdG8gb2NjdXIsIHdoaWNoIG1lYW5zCisg KiB0aGUgcHJpbWFyeSBwbGFuZSBtYXkgYmUgZnVsbCBibHVlIGluc3RlYWQgb2YgdGhlIHJlZCBp dCdzCisgKiBzdXBwb3NlZCB0byBiZS4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfY3J0YyhkYXRh X3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVtIHBpcGUgcGlwZSkKK3sKKwlzdHJ1 Y3QgaWd0X2ZiIHJlZF9mYiwgZ3JlZW5fZmIsIGJsdWVfZmI7CisJZHJtTW9kZU1vZGVJbmZvICpt b2RlOworCWlndF9wbGFuZV90ICpwcmltYXJ5OworCWlndF9jcmNfdCByZWZfY3JjLCBjcmM7CisJ aW50IHJldDsKKworCWlmIChkYXRhLT5waXBlX2NyYykKKwkJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0 YS0+cGlwZV9jcmMpOworCWRhdGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhwaXBlLCBJ TlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7CisKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1 dCwgcGlwZSk7CisJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgMCk7CisK Kwltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCWlndF9jcmVhdGVfY29sb3Jf ZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkrMSwKKwkJCSAg ICBEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJICAgIGZhbHNlLCAvKiB0aWxlZCAqLworCQkJICAg IDEuMCwgMC4wLCAwLjAsCisJCQkgICAgJnJlZF9mYik7CisJaWd0X2NyZWF0ZV9jb2xvcl9mYihk YXRhLT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSsxLAorCQkJICAgIERS TV9GT1JNQVRfWFJHQjg4ODgsCisJCQkgICAgZmFsc2UsIC8qIHRpbGVkICovCisJCQkgICAgMC4w LCAwLjAsIDEuMCwKKwkJCSAgICAmYmx1ZV9mYik7CisJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRh LT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSsxLAorCQkJICAgIERSTV9G T1JNQVRfWFJHQjg4ODgsCisJCQkgICAgZmFsc2UsIC8qIHRpbGVkICovCisJCQkgICAgMC4wLCAx LjAsIDAuMCwKKwkJCSAgICAmZ3JlZW5fZmIpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlc2Ug YnVmZmVycyBhcmUgc3VpdGVkIGZvciBkaXNwbGF5IHVzZQorCSAqIGJlY2F1c2UgbW9zdCBvZiB0 aGUgbW9kZXNldCBvcGVyYXRpb25zIG11c3QgYmUgZmFzdAorCSAqIGxhdGVyIG9uLgorCSAqLwor CWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmdyZWVuX2ZiKTsKKwlpZ3RfZGlzcGxheV9jb21t aXQoJmRhdGEtPmRpc3BsYXkpOworCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmJsdWVfZmIp OworCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxheSk7CisKKwkvKiBzZXQgcmVkIGZi IGFuZCBncmFiIHJlZmVyZW5jZSBjcmMgKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksICZy ZWRfZmIpOworCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxheSk7CisJaWd0X3BpcGVf Y3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7CisKKwkvKgorCSAqIEZ1 cnRoZXIgZG93biB3ZSBuZWVkIHRvIGlzc3VlIGFuIG1taW8gZmxpcCB3L28gdGhlIGtlcm5lbAor CSAqIHdhaXRpbmcgZm9yIHZibGFuay4gVGhlIGVhc2llc3Qgd2F5IGlzIHRvIGp1c3QgcGFuIHdp dGhpbgorCSAqIHRoZSBzYW1lIEZCLiBTbyBwYW4gYXdheSBhIGJpdCBoZXJlLCBhbmQgbGF0ZXIg d2UgdW5kbyB0aGlzCisJICogd2l0aCBhbm90aGVyIHBhbiB3aGljaCB3aWxsIHJlc3VsdCBpbiB0 aGUgZGVzaXJlZCBtbWlvIGZsaXAuCisJICovCisJcmV0ID0gZHJtTW9kZVNldENydGMoZGF0YS0+ ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJICAgICBncmVlbl9mYi5m Yl9pZCwgMCwgMSwgJm91dHB1dC0+aWQsIDEsCisJCQkgICAgIG1vZGUpOworCWlndF9hc3NlcnQo cmV0ID09IDApOworCisJLyoKKwkgKiBNYWtlIGl0IG1vcmUgbGlrZWx5IHRoYXQgdGhlIENTIGZs aXAgaGFzIGJlZW4gc3VibWl0dGVkIGludG8gdGhlCisJICogcmluZyBieSB0aGUgdGltZSB0aGUg bW1pbyBmbGlwIGZyb20gdGhlIGRybU1vZGVTZXRDcnRjKCkgYmVsb3cKKwkgKiBjb21wbGV0ZXMu IFRoZSBkcml2ZXIgd2lsbCB0aGVuIG1pc3Rha2UgdGhlIGZsaXAgZG9uZSBpbnRlcnJ1cHQKKwkg KiBmcm9tIHRoZSBtbWlvIGZsaXAgYXMgdGhlIGZsaXAgZG9uZSBpbnRlcnJ1cHQgZnJvbSB0aGUg Q1MgZmxpcC4KKwkgKi8KKwlpZ3Rfd2FpdF9mb3JfdmJsYW5rKGRhdGEtPmRybV9mZCwgcGlwZSk7 CisKKwkvKiBub3cgaXNzdWUgdGhlIG1taW8gZmxpcCB3L28gdmJsYW5rIHdhaXRzIGluIHRoZSBr ZXJuZWwsIGllLiBwYW4gYSBiaXQgKi8KKwlyZXQgPSBkcm1Nb2RlU2V0Q3J0YyhkYXRhLT5kcm1f ZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQkgICAgIGdyZWVuX2ZiLmZiX2lk LCAwLCAwLCAmb3V0cHV0LT5pZCwgMSwKKwkJCSAgICAgbW9kZSk7CisJaWd0X2Fzc2VydChyZXQg PT0gMCk7CisKKwltYWtlX2dwdV9idXN5KGRhdGEsIGJsdWVfZmIuZ2VtX2hhbmRsZSk7CisKKwkv KgorCSAqIFN1Ym1pdCB0aGUgQ1MgZmxpcC4gVGhlIGNvbW1hbmRzIG11c3QgYmUgZW1pdHRlZCBp bnRvIHRoZSByaW5nCisJICogYmVmb3JlIHRoZSBtbWlvIGZsaXAgZnJvbSB0aGUgcGFubmluZyBv cGVyYXRpb24gY29tcGxldGVzLgorCSAqLworCWRhdGEtPmZsaXBfZG9uZSA9IGZhbHNlOworCXJl dCA9IGRybU1vZGVQYWdlRmxpcChkYXRhLT5kcm1fZmQsIG91dHB1dC0+Y29uZmlnLmNydGMtPmNy dGNfaWQsCisJCQkgICAgICBibHVlX2ZiLmZiX2lkLCBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQs IGRhdGEpOworCWlndF9hc3NlcnQocmV0ID09IDApOworCisJLyoKKwkgKiBTZXQgcHJpbWFyeSBw bGFuZSB0byByZWQgZmIuIFRoaXMgc2hvdWxkIHdhaXQgZm9yIHRoZSBDUyBmbGlwCisJICogdG8g Y29tcGxldGUuIEJ1dCBpZiB0aGUga2VybmVsIG1pc3Rvb2sgdGhlIGZsaXAgZG9uZSBpbnRlcnJ1 cHQKKwkgKiBmcm9tIHRoZSBtbWlvIGZsaXAgYXMgdGhlIGZsaXAgZG9uZSBmcm9tIHRoZSBDUyBm bGlwLCB0aGlzIHdpbGwKKwkgKiBub3Qgd2FpdCBmb3IgYW55dGhpbmcuIEFuZCBoZW5jZSB0aGUg dGhlIENTIGZsaXAgd2lsbCBhY3R1YWxseQorCSAqIG9jY3VyIGFmdGVyIHRoaXMgbW1pbyBmbGlw LgorCSAqLworCXJldCA9IGRybU1vZGVTZXRDcnRjKGRhdGEtPmRybV9mZCwgb3V0cHV0LT5jb25m aWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCSAgICAgcmVkX2ZiLmZiX2lkLCAwLCAwLCAmb3V0cHV0LT5p ZCwgMSwKKwkJCSAgICAgbW9kZSk7CisJaWd0X2Fzc2VydChyZXQgPT0gMCk7CisKKwkvKiBNYWtl IHN1cmUgdGhlIGZsaXAgaGFzIGJlZW4gZXhlY3V0ZWQgKi8KKwl3YWl0X2Zvcl9mbGlwKGRhdGEs IGJsdWVfZmIuZ2VtX2hhbmRsZSk7CisKKwkvKiBHcmFiIGNyYyBhbmQgY29tcGFyZSB3aXRoIHRo ZSBleHRlY3RlZCByZXN1bHQgKi8KKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlw ZV9jcmMsICZjcmMpOworCisJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKKwlpZ3Rf ZGlzcGxheV9jb21taXQoJmRhdGEtPmRpc3BsYXkpOworCisJaWd0X3JlbW92ZV9mYihkYXRhLT5k cm1fZmQsICZyZWRfZmIpOworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZ3JlZW5fZmIp OworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmYmx1ZV9mYik7CisKKwlpZ3RfcGlwZV9j cmNfZnJlZShkYXRhLT5waXBlX2NyYyk7CisJZGF0YS0+cGlwZV9jcmMgPSBOVUxMOworCisJaWd0 X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfQU5ZKTsKKwlpZ3RfZGlzcGxheV9jb21taXQo JmRhdGEtPmRpc3BsYXkpOworCisJaWd0X2Fzc2VydChpZ3RfY3JjX2VxdWFsKCZyZWZfY3JjLCAm Y3JjKSk7Cit9CisKK3N0YXRpYyB2b2lkCitydW5fcGxhbmVfdGVzdF9mb3JfcGlwZShkYXRhX3Qg KmRhdGEsIGVudW0gcGlwZSBwaXBlKQoreworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWVudW0g aWd0X3BsYW5lIHBsYW5lID0gMTsgLyogdGVzdGluZyB3aXRoIG9uZSBzcHJpdGUgaXMgZW5vdWdo ICovCisKKwlpZ3Rfc2tpcF9vbihwbGFuZSA+PSBkYXRhLT5kaXNwbGF5LnBpcGVzW3BpcGVdLm5f cGxhbmVzKTsKKworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91 dHB1dCkKKwkJdGVzdF9wbGFuZShkYXRhLCBvdXRwdXQsIHBpcGUsIHBsYW5lKTsKK30KKworc3Rh dGljIHZvaWQKK3J1bl9jcnRjX3Rlc3RfZm9yX3BpcGUoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUg cGlwZSkKK3sKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKworCWZvcl9lYWNoX2Nvbm5lY3RlZF9v dXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1dCkKKwkJdGVzdF9jcnRjKGRhdGEsIG91dHB1dCwg cGlwZSk7Cit9CisKK3N0YXRpYyBkYXRhX3QgZGF0YTsKKworaWd0X21haW4KK3sKKwlpbnQgcGlw ZTsKKworCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKKworCWlndF9maXh0dXJlIHsKKwkJZGF0 YS5kcm1fZmQgPSBkcm1fb3Blbl9hbnkoKTsKKworCQlpZ3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUo KTsKKworCQlkYXRhLmRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChkYXRhLmRybV9mZCk7CisK KwkJaWd0X3JlcXVpcmVfcGlwZV9jcmMoKTsKKwkJaWd0X2Rpc3BsYXlfaW5pdCgmZGF0YS5kaXNw bGF5LCBkYXRhLmRybV9mZCk7CisKKwkJZGF0YS5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dl bV9pbml0KGRhdGEuZHJtX2ZkLCA0MDk2KTsKKwkJaWd0X2Fzc2VydChkYXRhLmJ1Zm1ncik7CisJ CWRybV9pbnRlbF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShkYXRhLmJ1Zm1ncik7CisKKwkJZGF0 YS5idXN5X2JvID0gZHJtX2ludGVsX2JvX2FsbG9jKGRhdGEuYnVmbWdyLCAiYm8iLAorCQkJCQkJ ICAxMjgqMTAyNCoxMDI0LCA0MDk2KTsKKwkJZ2VtX3NldF90aWxpbmcoZGF0YS5kcm1fZmQsIGRh dGEuYnVzeV9iby0+aGFuZGxlLCAwLCA0MDk2KTsKKwl9CisKKwlpZ3Rfc3VidGVzdF9mKCJzZXRw bGFuZV92c19jc19mbGlwIikgeworCQlmb3IgKHBpcGUgPSAwOyBwaXBlIDwgZGF0YS5kaXNwbGF5 Lm5fcGlwZXM7IHBpcGUrKykKKwkJCXJ1bl9wbGFuZV90ZXN0X2Zvcl9waXBlKCZkYXRhLCBwaXBl KTsKKwl9CisKKwlpZ3Rfc3VidGVzdF9mKCJzZXRjcnRjX3ZzX2NzX2ZsaXAiKSB7CisJCWZvciAo cGlwZSA9IDA7IHBpcGUgPCBkYXRhLmRpc3BsYXkubl9waXBlczsgcGlwZSsrKQorCQkJcnVuX2Ny dGNfdGVzdF9mb3JfcGlwZSgmZGF0YSwgcGlwZSk7CisJfQorCisJaWd0X2ZpeHR1cmUgeworCQlk cm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koZGF0YS5idWZtZ3IpOworCQlpZ3RfZGlzcGxheV9maW5p KCZkYXRhLmRpc3BsYXkpOworCX0KK30KLS0gCjEuOC4zLjIKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==