From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 61D136E84F for ; Thu, 15 Mar 2018 12:56:28 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id e194so10223353wmd.3 for ; Thu, 15 Mar 2018 05:56:28 -0700 (PDT) From: Tvrtko Ursulin Date: Thu, 15 Mar 2018 12:56:17 +0000 Message-Id: <20180315125617.12062-1-tvrtko.ursulin@linux.intel.com> Subject: [igt-dev] [PATCH i-g-t] tests/perf_pmu: Improve accuracy by waiting on spinner to start List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 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: Intel-gfx@lists.freedesktop.org, Tvrtko Ursulin List-ID: RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCk1vcmUgdGhh biBvbmUgdGVzdCBhc3N1bWVzIHRoYXQgdGhlIHNwaW5uZXIgaXMgcnVubmluZyBwcmV0dHkgbXVj aAppbW1lZGlhdGVseSBhZnRlciB3ZSBoYXZlIGNyZWF0ZSBvciBzdWJtaXR0ZWQgaXQuCgpJbiBh Y3R1YWxpdHkgdGhlcmUgaXMgYSB2YXJpYWJsZSBkZWxheSwgZXNwZWNpYWxseSBvbiBleGVjbGlz dHMgcGxhdGZvcm1zLApiZXR3ZWVuIHN1Ym1pc3Npb24gYW5kIHNwaW4gYmF0Y2ggc3RhcnRpbmcg dG8gcnVuIG9uIHRoZSBoYXJkd2FyZS4KClRvIGVuYWJsZSB0ZXN0cyB3aGljaCBjYXJlIGFib3V0 IHRoaXMgbGV2ZWwgb2YgdGltaW5nIHRvIGFjY291bnQgZm9yIHRoaXMsCndlIGFkZCBhIG5ldyBz cGluIGJhdGNoIGNvbnN0cnVjdG9yIHdoaWNoIHByb3ZpZGVzIGFuIG91dHB1dCBmaWVsZCB3aGlj aApjYW4gYmUgcG9sbGVkIHRvIGRldGVybWluZSB3aGVuIHRoZSBiYXRjaCBhY3R1YWxseSBzdGFy dGVkIHJ1bm5pbmcuCgpUaGlzIGlzIGltcGxlbWVudGVkIHZpYSBNSV9TVE9SRURXX0lNTSBmcm9t IHRoZSBzcGluIGJhdGNoLCB3cml0aW5nIGludG8KbWVtb3J5IG1hcHBlZCBwYWdlIHNoYXJlZCB3 aXRoIHVzZXJzcGFjZS4KClVzaW5nIHRoaXMgZmFjaWxpdHkgZnJvbSBwZXJmX3BtdSwgd2hlcmUg YXBwbGljYWJsZSwgc2hvdWxkIGltcHJvdmUgdmVyeQpvY2Nhc2lvbmFsIHRlc3QgZmFpbHMgYWNy b3NzIHRoZSBzZXQgYW5kIHBsYXRmb3Jtcy4KClNpZ25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGlu IDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ClN1Z2dlc3RlZC1ieTogQ2hyaXMgV2lsc29uIDxj aHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogbGliL2lndF9kdW1teWxvYWQuYyB8ICA5OSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQogbGliL2lndF9kdW1teWxvYWQuaCB8 ICAgOSArKysrCiB0ZXN0cy9wZXJmX3BtdS5jICAgIHwgMTQ1ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTk2IGlu c2VydGlvbnMoKyksIDU3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZHVtbXls b2FkLmMgYi9saWIvaWd0X2R1bW15bG9hZC5jCmluZGV4IDRiMjBmMjNkZmUyNi4uMDQ0N2QyZjE0 ZDU3IDEwMDY0NAotLS0gYS9saWIvaWd0X2R1bW15bG9hZC5jCisrKyBiL2xpYi9pZ3RfZHVtbXls b2FkLmMKQEAgLTc0LDkgKzc0LDEyIEBAIGZpbGxfcmVsb2Moc3RydWN0IGRybV9pOTE1X2dlbV9y ZWxvY2F0aW9uX2VudHJ5ICpyZWxvYywKIAlyZWxvYy0+d3JpdGVfZG9tYWluID0gd3JpdGVfZG9t YWluczsKIH0KIAotc3RhdGljIGludCBlbWl0X3JlY3Vyc2l2ZV9iYXRjaChpZ3Rfc3Bpbl90ICpz cGluLAotCQkJCWludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUsCi0JCQkJdWlu dDMyX3QgZGVwLCBib29sIG91dF9mZW5jZSkKKyNkZWZpbmUgT1VUX0ZFTkNFCSgxIDw8IDApCisj ZGVmaW5lIFBPTExfUlVOCSgxIDw8IDEpCisKK3N0YXRpYyBpbnQKK2VtaXRfcmVjdXJzaXZlX2Jh dGNoKGlndF9zcGluX3QgKnNwaW4sIGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdp bmUsCisJCSAgICAgdWludDMyX3QgZGVwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAjZGVmaW5l IFNDUkFUQ0ggMAogI2RlZmluZSBCQVRDSCAxCkBAIC0xMTYsNiArMTE5LDggQEAgc3RhdGljIGlu dCBlbWl0X3JlY3Vyc2l2ZV9iYXRjaChpZ3Rfc3Bpbl90ICpzcGluLAogCWV4ZWNidWYuYnVmZmVy X2NvdW50Kys7CiAKIAlpZiAoZGVwKSB7CisJCWlndF9hc3NlcnQoIShmbGFncyAmIFBPTExfUlVO KSk7CisKIAkJLyogZHVtbXkgd3JpdGUgdG8gZGVwZW5kZW5jeSAqLwogCQlvYmpbU0NSQVRDSF0u aGFuZGxlID0gZGVwOwogCQlmaWxsX3JlbG9jKCZyZWxvY3Nbb2JqW0JBVENIXS5yZWxvY2F0aW9u X2NvdW50KytdLApAQCAtMTIzLDYgKzEyOCw0MSBAQCBzdGF0aWMgaW50IGVtaXRfcmVjdXJzaXZl X2JhdGNoKGlndF9zcGluX3QgKnNwaW4sCiAJCQkgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSLAog CQkJICAgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUik7CiAJCWV4ZWNidWYuYnVmZmVyX2NvdW50Kys7 CisJfSBlbHNlIGlmIChmbGFncyAmIFBPTExfUlVOKSB7CisJCXVuc2lnbmVkIGludCBvZmZzZXQ7 CisKKwkJaWd0X2Fzc2VydCghZGVwKTsKKworCQlzcGluLT5wb2xsX2hhbmRsZSA9IGdlbV9jcmVh dGUoZmQsIDQwOTYpOworCQlzcGluLT5ydW5uaW5nID0gX19nZW1fbW1hcF9fd2MoZmQsIHNwaW4t PnBvbGxfaGFuZGxlLAorCQkJCQkgICAgICAgMCwgNDA5NiwgUFJPVF9SRUFEIHwgUFJPVF9XUklU RSk7CisJCWlndF9hc3NlcnQoc3Bpbi0+cnVubmluZyk7CisJCWlndF9hc3NlcnRfZXEoKnNwaW4t PnJ1bm5pbmcsIDApOworCisJCSpiYXRjaCsrID0gTUlfU1RPUkVfRFdPUkRfSU1NIHwgKGdlbiA8 IDYgPyAxIDw8IDIyIDogMCk7CisKKwkJaWYgKGdlbiA+PSA4KSB7CisJCQlvZmZzZXQgPSBzaXpl b2YodWludDMyX3QpOworCQkJKmJhdGNoKysgPSAwOworCQkJKmJhdGNoKysgPSAwOworCQl9IGVs c2UgaWYgKGdlbiA+PSA0KSB7CisJCQlvZmZzZXQgPSAyICogc2l6ZW9mKHVpbnQzMl90KTsKKwkJ CSpiYXRjaCsrID0gMDsKKwkJCSpiYXRjaCsrID0gMDsKKwkJfSBlbHNlIHsKKwkJCW9mZnNldCA9 IHNpemVvZih1aW50MzJfdCk7CisJCQliYXRjaFstMV0tLTsKKwkJCSpiYXRjaCsrID0gMDsKKwkJ fQorCisJCSpiYXRjaCsrID0gMTsKKworCQlvYmpbU0NSQVRDSF0uaGFuZGxlID0gc3Bpbi0+cG9s bF9oYW5kbGU7CisJCWZpbGxfcmVsb2MoJnJlbG9jc1tvYmpbQkFUQ0hdLnJlbG9jYXRpb25fY291 bnQrK10sCisJCQkgICBzcGluLT5wb2xsX2hhbmRsZSwgb2Zmc2V0LAorCQkJICAgSTkxNV9HRU1f RE9NQUlOX0lOU1RSVUNUSU9OLAorCQkJICAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OKTsK KwkJZXhlY2J1Zi5idWZmZXJfY291bnQrKzsKIAl9CiAKIAlzcGluLT5iYXRjaCA9IGJhdGNoOwpA QCAtMTcwLDE0ICsyMTAsMTQgQEAgc3RhdGljIGludCBlbWl0X3JlY3Vyc2l2ZV9iYXRjaChpZ3Rf c3Bpbl90ICpzcGluLAogCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2Jq ICsgKDIgLSBleGVjYnVmLmJ1ZmZlcl9jb3VudCkpOwogCWV4ZWNidWYucnN2ZDEgPSBjdHg7CiAK LQlpZiAob3V0X2ZlbmNlKQorCWlmIChmbGFncyAmIE9VVF9GRU5DRSkKIAkJZXhlY2J1Zi5mbGFn cyB8PSBJOTE1X0VYRUNfRkVOQ0VfT1VUOwogCiAJZm9yIChpID0gMDsgaSA8IG5lbmdpbmU7IGkr KykgewogCQlleGVjYnVmLmZsYWdzICY9IH5FTkdJTkVfTUFTSzsKIAkJZXhlY2J1Zi5mbGFncyB8 PSBlbmdpbmVzW2ldOwogCQlnZW1fZXhlY2J1Zl93cihmZCwgJmV4ZWNidWYpOwotCQlpZiAob3V0 X2ZlbmNlKSB7CisJCWlmIChmbGFncyAmIE9VVF9GRU5DRSkgewogCQkJaW50IF9mZCA9IGV4ZWNi dWYucnN2ZDIgPj4gMzI7CiAKIAkJCWlndF9hc3NlcnQoX2ZkID49IDApOwpAQCAtMTk5LDcgKzIz OSw3IEBAIHN0YXRpYyBpbnQgZW1pdF9yZWN1cnNpdmVfYmF0Y2goaWd0X3NwaW5fdCAqc3BpbiwK IAogc3RhdGljIGlndF9zcGluX3QgKgogX19faWd0X3NwaW5fYmF0Y2hfbmV3KGludCBmZCwgdWlu dDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUsIHVpbnQzMl90IGRlcCwKLQkJICAgICAgaW50IG91 dF9mZW5jZSkKKwkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWlndF9zcGluX3QgKnNw aW47CiAKQEAgLTIwNyw3ICsyNDcsNyBAQCBfX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoaW50IGZkLCB1 aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVuZ2luZSwgdWludDMyX3QgZGVwLAogCWlndF9hc3NlcnQo c3Bpbik7CiAKIAlzcGluLT5vdXRfZmVuY2UgPSBlbWl0X3JlY3Vyc2l2ZV9iYXRjaChzcGluLCBm ZCwgY3R4LCBlbmdpbmUsIGRlcCwKLQkJCQkJICAgICAgIG91dF9mZW5jZSk7CisJCQkJCSAgICAg ICBmbGFncyk7CiAKIAlwdGhyZWFkX211dGV4X2xvY2soJmxpc3RfbG9jayk7CiAJaWd0X2xpc3Rf YWRkKCZzcGluLT5saW5rLCAmc3Bpbl9saXN0KTsKQEAgLTIxOSw3ICsyNTksNyBAQCBfX19pZ3Rf c3Bpbl9iYXRjaF9uZXcoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVuZ2luZSwgdWlu dDMyX3QgZGVwLAogaWd0X3NwaW5fdCAqCiBfX2lndF9zcGluX2JhdGNoX25ldyhpbnQgZmQsIHVp bnQzMl90IGN0eCwgdW5zaWduZWQgZW5naW5lLCB1aW50MzJfdCBkZXApCiB7Ci0JcmV0dXJuIF9f X2lndF9zcGluX2JhdGNoX25ldyhmZCwgY3R4LCBlbmdpbmUsIGRlcCwgZmFsc2UpOworCXJldHVy biBfX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZW5naW5lLCBkZXAsIDApOwogfQogCiAv KioKQEAgLTI1Myw3ICsyOTMsNyBAQCBpZ3Rfc3Bpbl9iYXRjaF9uZXcoaW50IGZkLCB1aW50MzJf dCBjdHgsIHVuc2lnbmVkIGVuZ2luZSwgdWludDMyX3QgZGVwKQogaWd0X3NwaW5fdCAqCiBfX2ln dF9zcGluX2JhdGNoX25ld19mZW5jZShpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5n aW5lKQogewotCXJldHVybiBfX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZW5naW5lLCAw LCB0cnVlKTsKKwlyZXR1cm4gX19faWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgsIGVuZ2luZSwg MCwgT1VUX0ZFTkNFKTsKIH0KIAogLyoqCkBAIC0yODYsNiArMzI2LDQyIEBAIGlndF9zcGluX2Jh dGNoX25ld19mZW5jZShpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5naW5lKQogCXJl dHVybiBzcGluOwogfQogCitpZ3Rfc3Bpbl90ICoKK19faWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGwo aW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVuZ2luZSkKK3sKKwlyZXR1cm4gX19faWd0 X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgsIGVuZ2luZSwgMCwgUE9MTF9SVU4pOworfQorCisvKioK KyAqIGlndF9zcGluX2JhdGNoX25ld19wb2xsOgorICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUg ZGVzY3JpcHRvcgorICogQGVuZ2luZTogUmluZyB0byBleGVjdXRlIGJhdGNoIE9SJ2Qgd2l0aCBl eGVjYnVmIGZsYWdzLiBJZiB2YWx1ZSBpcyBsZXNzCisgKiAgICAgICAgICB0aGFuIDAsIGV4ZWN1 dGUgb24gYWxsIGF2YWlsYWJsZSByaW5ncy4KKyAqCisgKiBTdGFydCBhIHJlY3Vyc2l2ZSBiYXRj aCBvbiBhIHJpbmcuIEltbWVkaWF0ZWx5IHJldHVybnMgYSAjaWd0X3NwaW5fdCB0aGF0CisgKiBj b250YWlucyB0aGUgYmF0Y2gncyBoYW5kbGUgdGhhdCBjYW4gYmUgd2FpdGVkIHVwb24uIFRoZSBy ZXR1cm5lZCBzdHJ1Y3R1cmUKKyAqIG11c3QgYmUgcGFzc2VkIHRvIGlndF9zcGluX2JhdGNoX2Zy ZWUoKSBmb3IgcG9zdC1wcm9jZXNzaW5nLgorICoKKyAqIGlndF9zcGluX3QtPnJ1bm5pbmcgd2ls bCBjb250YWludCBhIHBvaW50ZXIgd2hpY2ggdGFyZ2V0IHdpbGwgY2hhbmdlIGZyb20KKyAqIHpl cm8gdG8gb25lIG9uY2UgdGhlIHNwaW5uZXIgYWN0dWFsbHkgc3RhcnRzIGV4ZWN1dGluZyBvbiB0 aGUgR1BVLgorICoKKyAqIFJldHVybnM6CisgKiBTdHJ1Y3R1cmUgd2l0aCBoZWxwZXIgaW50ZXJu YWwgc3RhdGUgZm9yIGlndF9zcGluX2JhdGNoX2ZyZWUoKS4KKyAqLworaWd0X3NwaW5fdCAqCitp Z3Rfc3Bpbl9iYXRjaF9uZXdfcG9sbChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5n aW5lKQoreworCWlndF9zcGluX3QgKnNwaW47CisKKwlpZ3RfcmVxdWlyZV9nZW0oZmQpOworCWln dF9yZXF1aXJlKGdlbV9tbWFwX19oYXNfd2MoZmQpKTsKKworCXNwaW4gPSBfX2lndF9zcGluX2Jh dGNoX25ld19wb2xsKGZkLCBjdHgsIGVuZ2luZSk7CisJaWd0X2Fzc2VydChnZW1fYm9fYnVzeShm ZCwgc3Bpbi0+aGFuZGxlKSk7CisKKwlyZXR1cm4gc3BpbjsKK30KKwogc3RhdGljIHZvaWQgbm90 aWZ5KHVuaW9uIHNpZ3ZhbCBhcmcpCiB7CiAJaWd0X3NwaW5fdCAqc3BpbiA9IGFyZy5zaXZhbF9w dHI7CkBAIC0zNjcsNiArNDQzLDExIEBAIHZvaWQgaWd0X3NwaW5fYmF0Y2hfZnJlZShpbnQgZmQs IGlndF9zcGluX3QgKnNwaW4pCiAJaWd0X3NwaW5fYmF0Y2hfZW5kKHNwaW4pOwogCWdlbV9tdW5t YXAoc3Bpbi0+YmF0Y2gsIEJBVENIX1NJWkUpOwogCisJaWYgKHNwaW4tPnJ1bm5pbmcpIHsKKwkJ Z2VtX211bm1hcChzcGluLT5ydW5uaW5nLCA0MDk2KTsKKwkJZ2VtX2Nsb3NlKGZkLCBzcGluLT5w b2xsX2hhbmRsZSk7CisJfQorCiAJZ2VtX2Nsb3NlKGZkLCBzcGluLT5oYW5kbGUpOwogCiAJaWYg KHNwaW4tPm91dF9mZW5jZSA+PSAwKQpkaWZmIC0tZ2l0IGEvbGliL2lndF9kdW1teWxvYWQuaCBi L2xpYi9pZ3RfZHVtbXlsb2FkLmgKaW5kZXggNDEwM2U0YWI5ZTM2Li43ZWQ5M2EzODg0YjkgMTAw NjQ0Ci0tLSBhL2xpYi9pZ3RfZHVtbXlsb2FkLmgKKysrIGIvbGliL2lndF9kdW1teWxvYWQuaApA QCAtMzYsNiArMzYsOCBAQCB0eXBlZGVmIHN0cnVjdCBpZ3Rfc3BpbiB7CiAJc3RydWN0IGlndF9s aXN0IGxpbms7CiAJdWludDMyX3QgKmJhdGNoOwogCWludCBvdXRfZmVuY2U7CisJdWludDMyX3Qg cG9sbF9oYW5kbGU7CisJYm9vbCAqcnVubmluZzsKIH0gaWd0X3NwaW5fdDsKIAogaWd0X3NwaW5f dCAqX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoaW50IGZkLApAQCAtNTUsNiArNTcsMTMgQEAgaWd0X3Nw aW5fdCAqaWd0X3NwaW5fYmF0Y2hfbmV3X2ZlbmNlKGludCBmZCwKIAkJCQkgICAgIHVpbnQzMl90 IGN0eCwKIAkJCQkgICAgIHVuc2lnbmVkIGVuZ2luZSk7CiAKK2lndF9zcGluX3QgKl9faWd0X3Nw aW5fYmF0Y2hfbmV3X3BvbGwoaW50IGZkLAorCQkJCSAgICAgICB1aW50MzJfdCBjdHgsCisJCQkJ ICAgICAgIHVuc2lnbmVkIGVuZ2luZSk7CitpZ3Rfc3Bpbl90ICppZ3Rfc3Bpbl9iYXRjaF9uZXdf cG9sbChpbnQgZmQsCisJCQkJICAgIHVpbnQzMl90IGN0eCwKKwkJCQkgICAgdW5zaWduZWQgZW5n aW5lKTsKKwogdm9pZCBpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChpZ3Rfc3Bpbl90ICpzcGlu LCBpbnQ2NF90IG5zKTsKIHZvaWQgaWd0X3NwaW5fYmF0Y2hfZW5kKGlndF9zcGluX3QgKnNwaW4p Owogdm9pZCBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGludCBmZCwgaWd0X3NwaW5fdCAqc3Bpbik7CmRp ZmYgLS1naXQgYS90ZXN0cy9wZXJmX3BtdS5jIGIvdGVzdHMvcGVyZl9wbXUuYwppbmRleCAxOWZj Yzk1ZmZjN2YuLmQxYjdiMjNiYzY0NiAxMDA2NDQKLS0tIGEvdGVzdHMvcGVyZl9wbXUuYworKysg Yi90ZXN0cy9wZXJmX3BtdS5jCkBAIC0xODQsNiArMTg0LDM4IEBAIHN0YXRpYyB2b2lkIGVuZF9z cGluKGludCBmZCwgaWd0X3NwaW5fdCAqc3BpbiwgdW5zaWduZWQgaW50IGZsYWdzKQogCQl1c2xl ZXAoYmF0Y2hfZHVyYXRpb25fbnMgLyA1MDAwKTsKIH0KIAorc3RhdGljIGlndF9zcGluX3QgKiBf X3NwaW5fcG9sbChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sK KwlyZXR1cm4gX19pZ3Rfc3Bpbl9iYXRjaF9uZXdfcG9sbChmZCwgY3R4LCBmbGFncyk7Cit9CisK K3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fc3Bpbl93YWl0KGlndF9zcGluX3QgKnNwaW4pCit7CisJ c3RydWN0IHRpbWVzcGVjIHN0YXJ0ID0geyB9OworCisJaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQp OworCisJd2hpbGUgKCFzcGluLT5ydW5uaW5nKTsKKworCXJldHVybiBpZ3RfbnNlY19lbGFwc2Vk KCZzdGFydCk7Cit9CisKK3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGluX3N5bmMoaW50IGZkLCB1 aW50MzJfdCBjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWd0X3NwaW5fdCAqc3BpbiA9 IF9fc3Bpbl9wb2xsKGZkLCBjdHgsIGZsYWdzKTsKKworCV9fc3Bpbl93YWl0KHNwaW4pOworCisJ cmV0dXJuIHNwaW47Cit9CisKK3N0YXRpYyBpZ3Rfc3Bpbl90ICogc3Bpbl9zeW5jKGludCBmZCwg dWludDMyX3QgY3R4LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWlndF9yZXF1aXJlX2dlbShm ZCk7CisKKwlyZXR1cm4gX19zcGluX3N5bmMoZmQsIGN0eCwgZmxhZ3MpOworfQorCiBzdGF0aWMg dm9pZAogc2luZ2xlKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5n aW5lMiAqZSwgdW5zaWduZWQgaW50IGZsYWdzKQogewpAQCAtMTk1LDcgKzIyNyw3IEBAIHNpbmds ZShpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsIHVu c2lnbmVkIGludCBmbGFncykKIAlmZCA9IG9wZW5fcG11KEk5MTVfUE1VX0VOR0lORV9CVVNZKGUt PmNsYXNzLCBlLT5pbnN0YW5jZSkpOwogCiAJaWYgKGZsYWdzICYgVEVTVF9CVVNZKQotCQlzcGlu ID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSksIDApOwor CQlzcGluID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSkpOwogCWVsc2UK IAkJc3BpbiA9IE5VTEw7CiAKQEAgLTI1MSwxMyArMjgzLDcgQEAgYnVzeV9zdGFydChpbnQgZ2Vt X2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCiAJICovCiAJc2xl ZXAoMik7CiAKLQlzcGluID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlMnJpbmco Z2VtX2ZkLCBlKSwgMCk7Ci0KLQkvKgotCSAqIFNsZWVwIGZvciBhIGJpdCBhZnRlciBtYWtpbmcg dGhlIGVuZ2luZSBidXN5IHRvIG1ha2Ugc3VyZSB0aGUgUE1VCi0JICogZ2V0cyBlbmFibGVkIHdo ZW4gdGhlIGJhdGNoIGlzIGFscmVhZHkgcnVubmluZy4KLQkgKi8KLQl1c2xlZXAoNTAwZTMpOwor CXNwaW4gPSBfX3NwaW5fc3luYyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpKTsKIAogCWZk ID0gb3Blbl9wbXUoSTkxNV9QTVVfRU5HSU5FX0JVU1koZS0+Y2xhc3MsIGUtPmluc3RhbmNlKSk7 CiAKQEAgLTMwMCw3ICszMjYsNyBAQCBidXN5X2RvdWJsZV9zdGFydChpbnQgZ2VtX2ZkLCBjb25z dCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCiAJICogcmUtc3VibWlzc2lvbiBp biBleGVjbGlzdHMgbW9kZS4gTWFrZSBzdXJlIGJ1c3luZXNzIGlzIGNvcnJlY3RseQogCSAqIHJl cG9ydGVkIHdpdGggdGhlIGVuZ2luZSBidXN5LCBhbmQgYWZ0ZXIgdGhlIGVuZ2luZSB3ZW50IGlk bGUuCiAJICovCi0Jc3BpblswXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwgZTJy aW5nKGdlbV9mZCwgZSksIDApOworCXNwaW5bMF0gPSBfX3NwaW5fc3luYyhnZW1fZmQsIDAsIGUy cmluZyhnZW1fZmQsIGUpKTsKIAl1c2xlZXAoNTAwZTMpOwogCXNwaW5bMV0gPSBfX2lndF9zcGlu X2JhdGNoX25ldyhnZW1fZmQsIGN0eCwgZTJyaW5nKGdlbV9mZCwgZSksIDApOwogCkBAIC0zODYs NyArNDEyLDcgQEAgYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVs X2V4ZWN1dGlvbl9lbmdpbmUyICplLAogCiAJaWd0X2Fzc2VydF9lcShpLCBudW1fZW5naW5lcyk7 CiAKLQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwg ZSksIDApOworCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSk7 CiAJcG11X3JlYWRfbXVsdGkoZmRbMF0sIG51bV9lbmdpbmVzLCB0dmFsWzBdKTsKIAlzbGVwdCA9 IG1lYXN1cmVkX3VzbGVlcChiYXRjaF9kdXJhdGlvbl9ucyAvIDEwMDApOwogCWlmIChmbGFncyAm IFRFU1RfVFJBSUxJTkdfSURMRSkKQEAgLTQxMywxNSArNDM5LDI1IEBAIGJ1c3lfY2hlY2tfYWxs KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKIAog c3RhdGljIHZvaWQKIF9fc3VibWl0X3NwaW5fYmF0Y2goaW50IGdlbV9mZCwKKwkJICAgIGlndF9z cGluX3QgKnNwaW4sCiAJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqb2Jq LAogCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQogewogCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZWIgPSB7Ci0JCS5idWZmZXJfY291bnQgPSAx LAogCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKSwKIAkJLmZsYWdzID0gZTJy aW5nKGdlbV9mZCwgZSksCiAJfTsKIAorCWlmIChzcGluLT5ydW5uaW5nKSB7CisJCW9ialswXS5o YW5kbGUgPSBzcGluLT5wb2xsX2hhbmRsZTsKKwkJb2JqWzBdLmZsYWdzID0gRVhFQ19PQkpFQ1Rf QVNZTkM7CisJCW9ialsxXS5oYW5kbGUgPSBzcGluLT5oYW5kbGU7CisJCWViLmJ1ZmZlcl9jb3Vu dCA9IDI7CisJfSBlbHNlIHsKKwkJb2JqWzBdLmhhbmRsZSA9IHNwaW4tPmhhbmRsZTsKKwkJZWIu YnVmZmVyX2NvdW50ID0gMTsKKwl9CisKIAlnZW1fZXhlY2J1ZihnZW1fZmQsICZlYik7CiB9CiAK QEAgLTQyOSw3ICs0NjUsNyBAQCBzdGF0aWMgdm9pZAogbW9zdF9idXN5X2NoZWNrX2FsbChpbnQg Z2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCiAJCSAgICBj b25zdCB1bnNpZ25lZCBpbnQgbnVtX2VuZ2luZXMsIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmogPSB7fTsKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbMl07CiAJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplXzsKIAl1aW50NjRfdCB0dmFsWzJdW251bV9lbmdpbmVzXTsKIAl1aW50NjRf dCB2YWxbbnVtX2VuZ2luZXNdOwpAQCAtNDM4LDIwICs0NzQsMTkgQEAgbW9zdF9idXN5X2NoZWNr X2FsbChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUs CiAJaWd0X3NwaW5fdCAqc3BpbiA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGlkbGVfaWR4LCBpOwog CisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCiAJaSA9IDA7CiAJZm9yX2VhY2hfZW5n aW5lX2NsYXNzX2luc3RhbmNlKGZkLCBlXykgewogCQlpZiAoIWdlbV9oYXNfZW5naW5lKGdlbV9m ZCwgZV8tPmNsYXNzLCBlXy0+aW5zdGFuY2UpKQogCQkJY29udGludWU7CiAKLQkJaWYgKGUgPT0g ZV8pIHsKKwkJaWYgKGUgPT0gZV8pCiAJCQlpZGxlX2lkeCA9IGk7Ci0JCX0gZWxzZSBpZiAoc3Bp bikgewotCQkJX19zdWJtaXRfc3Bpbl9iYXRjaChnZW1fZmQsICZvYmosIGVfKTsKLQkJfSBlbHNl IHsKLQkJCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLAotCQkJCQkJICBlMnJp bmcoZ2VtX2ZkLCBlXyksIDApOwotCQkJb2JqLmhhbmRsZSA9IHNwaW4tPmhhbmRsZTsKLQkJfQor CQllbHNlIGlmIChzcGluKQorCQkJX19zdWJtaXRfc3Bpbl9iYXRjaChnZW1fZmQsIHNwaW4sIG9i aiwgZV8pOworCQllbHNlCisJCQlzcGluID0gX19zcGluX3BvbGwoZ2VtX2ZkLCAwLCBlMnJpbmco Z2VtX2ZkLCBlXykpOwogCiAJCXZhbFtpKytdID0gSTkxNV9QTVVfRU5HSU5FX0JVU1koZV8tPmNs YXNzLCBlXy0+aW5zdGFuY2UpOwogCX0KQEAgLTQ2MSw2ICs0OTYsOSBAQCBtb3N0X2J1c3lfY2hl Y2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAq ZSwKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2VuZ2luZXM7IGkrKykKIAkJZmRbaV0gPSBvcGVuX2dy b3VwKHZhbFtpXSwgZmRbMF0pOwogCisJLyogU21hbGwgZGVsYXkgdG8gYWxsb3cgZW5naW5lcyB0 byBzdGFydC4gKi8KKwl1c2xlZXAoX19zcGluX3dhaXQoc3BpbikgKiBudW1fZW5naW5lcyAvIDFl Myk7CisKIAlwbXVfcmVhZF9tdWx0aShmZFswXSwgbnVtX2VuZ2luZXMsIHR2YWxbMF0pOwogCXNs ZXB0ID0gbWVhc3VyZWRfdXNsZWVwKGJhdGNoX2R1cmF0aW9uX25zIC8gMTAwMCk7CiAJaWYgKGZs YWdzICYgVEVTVF9UUkFJTElOR19JRExFKQpAQCAtNDg5LDcgKzUyNyw3IEBAIHN0YXRpYyB2b2lk CiBhbGxfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3QgdW5zaWduZWQgaW50IG51bV9l bmdpbmVzLAogCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dl bV9leGVjX29iamVjdDIgb2JqID0ge307CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgb2JqWzJdOwogCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZTsKIAl1 aW50NjRfdCB0dmFsWzJdW251bV9lbmdpbmVzXTsKIAl1aW50NjRfdCB2YWxbbnVtX2VuZ2luZXNd OwpAQCAtNDk4LDE4ICs1MzYsMTcgQEAgYWxsX2J1c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNv bnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5lcywKIAlpZ3Rfc3Bpbl90ICpzcGluID0gTlVMTDsK IAl1bnNpZ25lZCBpbnQgaTsKIAorCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKKwogCWkg PSAwOwogCWZvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShmZCwgZSkgewogCQlpZiAoIWdl bV9oYXNfZW5naW5lKGdlbV9mZCwgZS0+Y2xhc3MsIGUtPmluc3RhbmNlKSkKIAkJCWNvbnRpbnVl OwogCi0JCWlmIChzcGluKSB7Ci0JCQlfX3N1Ym1pdF9zcGluX2JhdGNoKGdlbV9mZCwgJm9iaiwg ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwK LQkJCQkJCSAgZTJyaW5nKGdlbV9mZCwgZSksIDApOwotCQkJb2JqLmhhbmRsZSA9IHNwaW4tPmhh bmRsZTsKLQkJfQorCQlpZiAoc3BpbikKKwkJCV9fc3VibWl0X3NwaW5fYmF0Y2goZ2VtX2ZkLCBz cGluLCBvYmosIGUpOworCQllbHNlCisJCQlzcGluID0gX19zcGluX3BvbGwoZ2VtX2ZkLCAwLCBl MnJpbmcoZ2VtX2ZkLCBlKSk7CiAKIAkJdmFsW2krK10gPSBJOTE1X1BNVV9FTkdJTkVfQlVTWShl LT5jbGFzcywgZS0+aW5zdGFuY2UpOwogCX0KQEAgLTUxOSw2ICs1NTYsOSBAQCBhbGxfYnVzeV9j aGVja19hbGwoaW50IGdlbV9mZCwgY29uc3QgdW5zaWduZWQgaW50IG51bV9lbmdpbmVzLAogCWZv ciAoaSA9IDA7IGkgPCBudW1fZW5naW5lczsgaSsrKQogCQlmZFtpXSA9IG9wZW5fZ3JvdXAodmFs W2ldLCBmZFswXSk7CiAKKwkvKiBTbWFsbCBkZWxheSB0byBhbGxvdyBlbmdpbmVzIHRvIHN0YXJ0 LiAqLworCXVzbGVlcChfX3NwaW5fd2FpdChzcGluKSAqIG51bV9lbmdpbmVzIC8gMWUzKTsKKwog CXBtdV9yZWFkX211bHRpKGZkWzBdLCBudW1fZW5naW5lcywgdHZhbFswXSk7CiAJc2xlcHQgPSBt ZWFzdXJlZF91c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMgLyAxMDAwKTsKIAlpZiAoZmxhZ3MgJiBU RVNUX1RSQUlMSU5HX0lETEUpCkBAIC01NTAsNyArNTkwLDcgQEAgbm9fc2VtYShpbnQgZ2VtX2Zk LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsIHVuc2lnbmVkIGludCBm bGFncykKIAlvcGVuX2dyb3VwKEk5MTVfUE1VX0VOR0lORV9XQUlUKGUtPmNsYXNzLCBlLT5pbnN0 YW5jZSksIGZkKTsKIAogCWlmIChmbGFncyAmIFRFU1RfQlVTWSkKLQkJc3BpbiA9IGlndF9zcGlu X2JhdGNoX25ldyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpLCAwKTsKKwkJc3BpbiA9IHNw aW5fc3luYyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpKTsKIAllbHNlCiAJCXNwaW4gPSBO VUxMOwogCkBAIC04ODQsNyArOTI0LDcgQEAgbXVsdGlfY2xpZW50KGludCBnZW1fZmQsIGNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKIAkgKi8KIAlmZFsxXSA9IG9wZW5f cG11KGNvbmZpZyk7CiAKLQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwgZTJy aW5nKGdlbV9mZCwgZSksIDApOworCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2ZkLCAwLCBlMnJpbmco Z2VtX2ZkLCBlKSk7CiAKIAl2YWxbMF0gPSB2YWxbMV0gPSBfX3BtdV9yZWFkX3NpbmdsZShmZFsw XSwgJnRzWzBdKTsKIAlzbGVwdFsxXSA9IG1lYXN1cmVkX3VzbGVlcChiYXRjaF9kdXJhdGlvbl9u cyAvIDEwMDApOwpAQCAtMTI0OCw3ICsxMjg4LDcgQEAgdGVzdF9mcmVxdWVuY3koaW50IGdlbV9m ZCkKIAlpZ3RfcmVxdWlyZShpZ3Rfc3lzZnNfZ2V0X3UzMihzeXNmcywgImd0X2Jvb3N0X2ZyZXFf bWh6IikgPT0gbWluX2ZyZXEpOwogCiAJZ2VtX3F1aWVzY2VudF9ncHUoZ2VtX2ZkKTsgLyogSWRs ZSB0byBiZSBzdXJlIHRoZSBjaGFuZ2UgdGFrZXMgZWZmZWN0ICovCi0Jc3BpbiA9IGlndF9zcGlu X2JhdGNoX25ldyhnZW1fZmQsIDAsIEk5MTVfRVhFQ19SRU5ERVIsIDApOworCXNwaW4gPSBzcGlu X3N5bmMoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSKTsKIAogCXNsZXB0ID0gcG11X3JlYWRf bXVsdGkoZmQsIDIsIHN0YXJ0KTsKIAltZWFzdXJlZF91c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMg LyAxMDAwKTsKQEAgLTEyNzQsNyArMTMxNCw3IEBAIHRlc3RfZnJlcXVlbmN5KGludCBnZW1fZmQp CiAJaWd0X3JlcXVpcmUoaWd0X3N5c2ZzX2dldF91MzIoc3lzZnMsICJndF9taW5fZnJlcV9taHoi KSA9PSBtYXhfZnJlcSk7CiAKIAlnZW1fcXVpZXNjZW50X2dwdShnZW1fZmQpOwotCXNwaW4gPSBp Z3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSLCAwKTsKKwlzcGlu ID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgSTkxNV9FWEVDX1JFTkRFUik7CiAKIAlzbGVwdCA9IHBt dV9yZWFkX211bHRpKGZkLCAyLCBzdGFydCk7CiAJbWVhc3VyZWRfdXNsZWVwKGJhdGNoX2R1cmF0 aW9uX25zIC8gMTAwMCk7CkBAIC0xNDU1LDYgKzE0OTUsOCBAQCBzdGF0aWMgdm9pZCBfX3JlYXJt X3NwaW5fYmF0Y2goaWd0X3NwaW5fdCAqc3BpbikKIHsKIAljb25zdCB1aW50MzJfdCBtaV9hcmJf Y2hrID0gMHg1IDw8IDIzOwogCisJaWYgKHNwaW4tPnJ1bm5pbmcpCisJCSpzcGluLT5ydW5uaW5n ID0gMDsKICAgICAgICAqc3Bpbi0+YmF0Y2ggPSBtaV9hcmJfY2hrOwogICAgICAgIF9fc3luY19z eW5jaHJvbml6ZSgpOwogfQpAQCAtMTUxNyw3ICsxNTU5LDcgQEAgYWNjdXJhY3koaW50IGdlbV9m ZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAogCQljb25zdCB1bnNp Z25lZCBsb25nIHRpbWVvdXRbXSA9IHsKIAkJCXB3bV9jYWxpYnJhdGlvbl91cyAqIDEwMDAsIHRl c3RfdXMgKiAxMDAwCiAJCX07Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9i aiA9IHt9OworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbMl07CiAJCXVp bnQ2NF90IHRvdGFsX2J1c3lfbnMgPSAwLCB0b3RhbF9pZGxlX25zID0gMDsKIAkJaWd0X3NwaW5f dCAqc3BpbjsKIAkJaW50IHJldDsKQEAgLTE1MzAsMTIgKzE1NzIsMTMgQEAgYWNjdXJhY3koaW50 IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAogCQkJaWd0 X3dhcm4oIkZhaWxlZCB0byBzZXQgc2NoZWR1bGluZyBwb2xpY3khXG4iKTsKIAogCQkvKiBBbGxv Y2F0ZSBvdXIgc3BpbiBiYXRjaCBhbmQgaWRsZSBpdC4gKi8KLQkJc3BpbiA9IGlndF9zcGluX2Jh dGNoX25ldyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpLCAwKTsKLQkJb2JqLmhhbmRsZSA9 IHNwaW4tPmhhbmRsZTsKLQkJX19zdWJtaXRfc3Bpbl9iYXRjaChnZW1fZmQsICZvYmosIGUpOyAv KiByZWNvcmQgaXRzIGxvY2F0aW9uICovCisJCXNwaW4gPSBfX3NwaW5fcG9sbChnZW1fZmQsIDAs IGUycmluZyhnZW1fZmQsIGUpKTsKKwkJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCQlf X3N1Ym1pdF9zcGluX2JhdGNoKGdlbV9mZCwgc3Bpbiwgb2JqLCBlKTsgLyogcmVjb3JkIGl0cyBs b2NhdGlvbiAqLwogCQlpZ3Rfc3Bpbl9iYXRjaF9lbmQoc3Bpbik7Ci0JCWdlbV9zeW5jKGdlbV9m ZCwgb2JqLmhhbmRsZSk7Ci0JCW9iai5mbGFncyB8PSBFWEVDX09CSkVDVF9QSU5ORUQ7CisJCWdl bV9zeW5jKGdlbV9mZCwgc3Bpbi0+aGFuZGxlKTsKKwkJb2JqWzBdLmZsYWdzIHw9IEVYRUNfT0JK RUNUX1BJTk5FRDsKKwkJb2JqWzFdLmZsYWdzIHw9IEVYRUNfT0JKRUNUX1BJTk5FRDsKIAogCQkv KiAxc3QgcGFzcyBpcyBjYWxpYnJhdGlvbiwgc2Vjb25kIHBhc3MgaXMgdGhlIHRlc3QuICovCiAJ CWZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgQVJSQVlfU0laRSh0aW1lb3V0KTsgcGFzcysrKSB7 CkBAIC0xNTQ1LDI0ICsxNTg4LDMwIEBAIGFjY3VyYWN5KGludCBnZW1fZmQsIGNvbnN0IHN0cnVj dCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKIAogCQkJaWd0X25zZWNfZWxhcHNlZCgmdGVz dF9zdGFydCk7CiAJCQlkbyB7Ci0JCQkJdW5zaWduZWQgaW50IHRhcmdldF9pZGxlX3VzLCB0X2J1 c3k7CisJCQkJdW5zaWduZWQgaW50IHRhcmdldF9pZGxlX3VzOworCQkJCXN0cnVjdCB0aW1lc3Bl YyBzdGFydCA9IHsgfTsKKwkJCQl1bnNpZ25lZCBsb25nIHByZXBfZGVsYXlfbnM7CiAKIAkJCQkv KiBSZXN0YXJ0IHRoZSBzcGluYmF0Y2guICovCisJCQkJaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQp OwogCQkJCV9fcmVhcm1fc3Bpbl9iYXRjaChzcGluKTsKLQkJCQlfX3N1Ym1pdF9zcGluX2JhdGNo KGdlbV9mZCwgJm9iaiwgZSk7CisJCQkJX19zdWJtaXRfc3Bpbl9iYXRjaChnZW1fZmQsIHNwaW4s IG9iaiwgZSk7CiAKLQkJCQkvKgotCQkJCSAqIE5vdGUgdGhhdCB0aGUgc3VibWlzc2lvbiBtYXkg YmUgZGVsYXllZCB0byBhCi0JCQkJICogdGFza2xldCAoa3NvZnRpcnFkKSB3aGljaCBjYW5ub3Qg cnVuIHVudGlsIHdlCi0JCQkJICogc2xlZXAgYXMgd2UgaG9nIHRoZSBjcHUgKHdlIGFyZSBSVCku Ci0JCQkJICovCisJCQkJIC8qIFdhaXQgZm9yIGJhdGNoIHRvIHN0YXJ0IGV4ZWN1dGluZy4gKi8K KwkJCQlfX3NwaW5fd2FpdChzcGluKTsKKwkJCQlwcmVwX2RlbGF5X25zID0gaWd0X25zZWNfZWxh cHNlZCgmc3RhcnQpOwogCi0JCQkJdF9idXN5ID0gbWVhc3VyZWRfdXNsZWVwKGJ1c3lfdXMpOwor CQkJCS8qIFBXTSBidXN5IHNsZWVwLiAqLworCQkJCW1lbXNldCgmc3RhcnQsIDAsIHNpemVvZihz dGFydCkpOworCQkJCWlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKKwkJCQltZWFzdXJlZF91c2xl ZXAoYnVzeV91cyk7CiAJCQkJaWd0X3NwaW5fYmF0Y2hfZW5kKHNwaW4pOwotCQkJCWdlbV9zeW5j KGdlbV9mZCwgb2JqLmhhbmRsZSk7CisJCQkJZ2VtX3N5bmMoZ2VtX2ZkLCBzcGluLT5oYW5kbGUp OwogCi0JCQkJdG90YWxfYnVzeV9ucyArPSB0X2J1c3k7CisJCQkJdG90YWxfYnVzeV9ucyArPSBp Z3RfbnNlY19lbGFwc2VkKCZzdGFydCk7CisJCQkJdG90YWxfaWRsZV9ucyArPSBwcmVwX2RlbGF5 X25zOwogCisJCQkJLyogUmUtY2FsaWJyYXRlLiAqLwogCQkJCXRhcmdldF9pZGxlX3VzID0KIAkJ CQkJKDEwMCAqIHRvdGFsX2J1c3lfbnMgLyB0YXJnZXRfYnVzeV9wY3QgLSAodG90YWxfYnVzeV9u cyArIHRvdGFsX2lkbGVfbnMpKSAvIDEwMDA7CiAJCQkJdG90YWxfaWRsZV9ucyArPSBtZWFzdXJl ZF91c2xlZXAodGFyZ2V0X2lkbGVfdXMpOwotLSAKMi4xNC4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2lndC1kZXYK