From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-x229.google.com (mail-wm0-x229.google.com [IPv6:2a00:1450:400c:c09::229]) by gabe.freedesktop.org (Postfix) with ESMTPS id D571D6EABD for ; Fri, 16 Mar 2018 10:17:22 +0000 (UTC) Received: by mail-wm0-x229.google.com with SMTP id w128so2044367wmw.0 for ; Fri, 16 Mar 2018 03:17:22 -0700 (PDT) From: Tvrtko Ursulin Date: Fri, 16 Mar 2018 10:17:10 +0000 Message-Id: <20180316101710.23688-1-tvrtko.ursulin@linux.intel.com> In-Reply-To: <20180316073643.21816-1-tvrtko.ursulin@linux.intel.com> References: <20180316073643.21816-1-tvrtko.ursulin@linux.intel.com> Subject: [igt-dev] [PATCH i-g-t v4] 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 b3NzIHRoZSBzZXQgYW5kIHBsYXRmb3Jtcy4KCnYyOgogQ2hyaXMgV2lsc29uOgogKiBVc2UgY2Fj aGluZyBtYXBwaW5nIGlmIGF2YWlsYWJsZS4KICogSGFuZGxlIG9sZCBnZW5zIGJldHRlci4KICog VXNlIGdlbV9jYW5fc3RvcmVfZHdvcmQuCiAqIENhY2hlIGV4ZWMgb2JqIGFycmF5IGluIHNwaW5f YmF0Y2hfdCBmb3IgZWFzaWVyIHJlc3VibWl0LgoKdjM6CiAqIEZvcmdvdCBJOTE1X0VYRUNfTk9f UkVMT0MuIChDaHJpcyBXaWxzb24pCgp2NDoKICogTWFzayBvdXQgYWxsIG5vbi1lbmdpbmUgZmxh Z3MgaW4gZ2VtX2Nhbl9zdG9yZV9kd29yZC4KICogQWRkZWQgc29tZSBkZWJ1ZyBsb2dnaW5nLgoK U2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4K U3VnZ2VzdGVkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0t CiBsaWIvaWd0X2R1bW15bG9hZC5jICB8IDE0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0tCiBsaWIvaWd0X2R1bW15bG9hZC5oICB8ICAxMSArKysrCiBsaWIvaWd0 X2d0LmMgICAgICAgICB8ICAgMiArLQogbGliL2lvY3RsX3dyYXBwZXJzLmMgfCAgIDIgKy0KIGxp Yi9pb2N0bF93cmFwcGVycy5oIHwgICAxICsKIHRlc3RzL3BlcmZfcG11LmMgICAgIHwgMTc1ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogNiBmaWxl cyBjaGFuZ2VkLCAyNjAgaW5zZXJ0aW9ucygrKSwgODAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvbGliL2lndF9kdW1teWxvYWQuYyBiL2xpYi9pZ3RfZHVtbXlsb2FkLmMKaW5kZXggNGIyMGYy M2RmZTI2Li44M2I5NzI3NDk5ZmYgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfZHVtbXlsb2FkLmMKKysr IGIvbGliL2lndF9kdW1teWxvYWQuYwpAQCAtNzQsMTYgKzc0LDE5IEBAIGZpbGxfcmVsb2Moc3Ry dWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvYywKIAlyZWxvYy0+d3JpdGVf ZG9tYWluID0gd3JpdGVfZG9tYWluczsKIH0KIAotc3RhdGljIGludCBlbWl0X3JlY3Vyc2l2ZV9i YXRjaChpZ3Rfc3Bpbl90ICpzcGluLAotCQkJCWludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25l ZCBlbmdpbmUsCi0JCQkJdWludDMyX3QgZGVwLCBib29sIG91dF9mZW5jZSkKKyNkZWZpbmUgT1VU X0ZFTkNFCSgxIDw8IDApCisjZGVmaW5lIFBPTExfUlVOCSgxIDw8IDEpCisKK3N0YXRpYyBpbnQK K2VtaXRfcmVjdXJzaXZlX2JhdGNoKGlndF9zcGluX3QgKnNwaW4sIGludCBmZCwgdWludDMyX3Qg Y3R4LCB1bnNpZ25lZCBlbmdpbmUsCisJCSAgICAgdWludDMyX3QgZGVwLCB1bnNpZ25lZCBpbnQg ZmxhZ3MpCiB7CiAjZGVmaW5lIFNDUkFUQ0ggMAogI2RlZmluZSBCQVRDSCAxCiAJY29uc3QgaW50 IGdlbiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSk7Ci0Jc3RydWN0IGRybV9p OTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2Nh dGlvbl9lbnRyeSByZWxvY3NbMl07Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjYnVmOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWNidWY7CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKm9iajsKIAl1bnNpZ25lZCBpbnQgZW5naW5l c1sxNl07CiAJdW5zaWduZWQgaW50IG5lbmdpbmU7CiAJaW50IGZlbmNlX2ZkID0gLTE7CkBAIC0x MDEsOCArMTA0LDEwIEBAIHN0YXRpYyBpbnQgZW1pdF9yZWN1cnNpdmVfYmF0Y2goaWd0X3NwaW5f dCAqc3BpbiwKIAl9CiAJaWd0X3JlcXVpcmUobmVuZ2luZSk7CiAKLQltZW1zZXQoJmV4ZWNidWYs IDAsIHNpemVvZihleGVjYnVmKSk7Ci0JbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW1l bXNldCgmc3Bpbi0+ZXhlY2J1ZiwgMCwgc2l6ZW9mKHNwaW4tPmV4ZWNidWYpKTsKKwlleGVjYnVm ID0gJnNwaW4tPmV4ZWNidWY7CisJbWVtc2V0KHNwaW4tPm9iaiwgMCwgc2l6ZW9mKHNwaW4tPm9i aikpOworCW9iaiA9IHNwaW4tPm9iajsKIAltZW1zZXQocmVsb2NzLCAwLCBzaXplb2YocmVsb2Nz KSk7CiAKIAlvYmpbQkFUQ0hdLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJBVENIX1NJWkUpOwpA QCAtMTEzLDE2ICsxMTgsNjIgQEAgc3RhdGljIGludCBlbWl0X3JlY3Vyc2l2ZV9iYXRjaChpZ3Rf c3Bpbl90ICpzcGluLAogCQkJCSAgICAgICAJQkFUQ0hfU0laRSwgUFJPVF9XUklURSk7CiAJZ2Vt X3NldF9kb21haW4oZmQsIG9ialtCQVRDSF0uaGFuZGxlLAogCQkJSTkxNV9HRU1fRE9NQUlOX0dU VCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Ci0JZXhlY2J1Zi5idWZmZXJfY291bnQrKzsKKwlleGVj YnVmLT5idWZmZXJfY291bnQrKzsKIAogCWlmIChkZXApIHsKKwkJaWd0X2Fzc2VydCghKGZsYWdz ICYgUE9MTF9SVU4pKTsKKwogCQkvKiBkdW1teSB3cml0ZSB0byBkZXBlbmRlbmN5ICovCiAJCW9i altTQ1JBVENIXS5oYW5kbGUgPSBkZXA7CiAJCWZpbGxfcmVsb2MoJnJlbG9jc1tvYmpbQkFUQ0hd LnJlbG9jYXRpb25fY291bnQrK10sCiAJCQkgICBkZXAsIDEwMjAsCiAJCQkgICBJOTE1X0dFTV9E T01BSU5fUkVOREVSLAogCQkJICAgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUik7Ci0JCWV4ZWNidWYu YnVmZmVyX2NvdW50Kys7CisJCWV4ZWNidWYtPmJ1ZmZlcl9jb3VudCsrOworCX0gZWxzZSBpZiAo ZmxhZ3MgJiBQT0xMX1JVTikgeworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJCWlndF9hc3Nl cnQoIWRlcCk7CisKKwkJaWYgKGdlbiA9PSA0IHx8IGdlbiA9PSA1KQorCQkJZXhlY2J1Zi0+Zmxh Z3MgfD0gSTkxNV9FWEVDX1NFQ1VSRTsKKworCQlzcGluLT5wb2xsX2hhbmRsZSA9IGdlbV9jcmVh dGUoZmQsIDQwOTYpOworCisJCWlmIChfX2dlbV9zZXRfY2FjaGluZyhmZCwgc3Bpbi0+cG9sbF9o YW5kbGUsCisJCQkJICAgICAgSTkxNV9DQUNISU5HX0NBQ0hFRCkgPT0gMCkKKwkJCXNwaW4tPnJ1 bm5pbmcgPSBfX2dlbV9tbWFwX19jcHUoZmQsIHNwaW4tPnBvbGxfaGFuZGxlLAorCQkJCQkJCTAs IDQwOTYsCisJCQkJCQkJUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisJCWVsc2UKKwkJCXNwaW4t PnJ1bm5pbmcgPSBfX2dlbV9tbWFwX193YyhmZCwgc3Bpbi0+cG9sbF9oYW5kbGUsCisJCQkJCQkg ICAgICAgMCwgNDA5NiwKKwkJCQkJCSAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKwkJ aWd0X2Fzc2VydChzcGluLT5ydW5uaW5nKTsKKwkJaWd0X2Fzc2VydF9lcSgqc3Bpbi0+cnVubmlu ZywgMCk7CisKKwkJKmJhdGNoKysgPSBNSV9TVE9SRV9EV09SRF9JTU0gfCAoZ2VuIDwgNiA/IDEg PDwgMjIgOiAwKTsKKworCQlpZiAoZ2VuID49IDgpIHsKKwkJCW9mZnNldCA9IHNpemVvZih1aW50 MzJfdCk7CisJCQkqYmF0Y2grKyA9IDA7CisJCQkqYmF0Y2grKyA9IDA7CisJCX0gZWxzZSBpZiAo Z2VuID49IDQpIHsKKwkJCW9mZnNldCA9IDIgKiBzaXplb2YodWludDMyX3QpOworCQkJKmJhdGNo KysgPSAwOworCQkJKmJhdGNoKysgPSAwOworCQl9IGVsc2UgeworCQkJb2Zmc2V0ID0gc2l6ZW9m KHVpbnQzMl90KTsKKwkJCWJhdGNoWy0xXS0tOworCQkJKmJhdGNoKysgPSAwOworCQl9CisKKwkJ KmJhdGNoKysgPSAxOworCisJCW9ialtTQ1JBVENIXS5oYW5kbGUgPSBzcGluLT5wb2xsX2hhbmRs ZTsKKwkJZmlsbF9yZWxvYygmcmVsb2NzW29ialtCQVRDSF0ucmVsb2NhdGlvbl9jb3VudCsrXSwK KwkJCSAgIHNwaW4tPnBvbGxfaGFuZGxlLCBvZmZzZXQsIDAsIDApOworCQlleGVjYnVmLT5idWZm ZXJfY291bnQrKzsKIAl9CiAKIAlzcGluLT5iYXRjaCA9IGJhdGNoOwpAQCAtMTY3LDE4ICsyMTgs MjMgQEAgc3RhdGljIGludCBlbWl0X3JlY3Vyc2l2ZV9iYXRjaChpZ3Rfc3Bpbl90ICpzcGluLAog CW9ialtCQVRDSF0ucmVsb2NhdGlvbl9jb3VudCsrOwogCW9ialtCQVRDSF0ucmVsb2NzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcihyZWxvY3MpOwogCi0JZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3Vz ZXJfcG9pbnRlcihvYmogKyAoMiAtIGV4ZWNidWYuYnVmZmVyX2NvdW50KSk7Ci0JZXhlY2J1Zi5y c3ZkMSA9IGN0eDsKKwlleGVjYnVmLT5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmog KworCQkJCQkgICAgICAgKDIgLSBleGVjYnVmLT5idWZmZXJfY291bnQpKTsKKwlleGVjYnVmLT5y c3ZkMSA9IGN0eDsKIAotCWlmIChvdXRfZmVuY2UpCi0JCWV4ZWNidWYuZmxhZ3MgfD0gSTkxNV9F WEVDX0ZFTkNFX09VVDsKKwlpZiAoZmxhZ3MgJiBPVVRfRkVOQ0UpCisJCWV4ZWNidWYtPmZsYWdz IHw9IEk5MTVfRVhFQ19GRU5DRV9PVVQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbmVuZ2luZTsgaSsr KSB7Ci0JCWV4ZWNidWYuZmxhZ3MgJj0gfkVOR0lORV9NQVNLOwotCQlleGVjYnVmLmZsYWdzIHw9 IGVuZ2luZXNbaV07Ci0JCWdlbV9leGVjYnVmX3dyKGZkLCAmZXhlY2J1Zik7Ci0JCWlmIChvdXRf ZmVuY2UpIHsKLQkJCWludCBfZmQgPSBleGVjYnVmLnJzdmQyID4+IDMyOworCQlleGVjYnVmLT5m bGFncyAmPSB+RU5HSU5FX01BU0s7CisJCWV4ZWNidWYtPmZsYWdzIHw9IGVuZ2luZXNbaV07CisK KwkJaWYgKGZsYWdzICYgUE9MTF9SVU4pCisJCQlpZ3RfcmVxdWlyZShnZW1fY2FuX3N0b3JlX2R3 b3JkKGZkLCBleGVjYnVmLT5mbGFncykpOworCisJCWdlbV9leGVjYnVmX3dyKGZkLCBleGVjYnVm KTsKKwkJaWYgKGZsYWdzICYgT1VUX0ZFTkNFKSB7CisJCQlpbnQgX2ZkID0gZXhlY2J1Zi0+cnN2 ZDIgPj4gMzI7CiAKIAkJCWlndF9hc3NlcnQoX2ZkID49IDApOwogCQkJaWYgKGZlbmNlX2ZkID09 IC0xKSB7CkBAIC0xOTQsMTIgKzI1MCwyMCBAQCBzdGF0aWMgaW50IGVtaXRfcmVjdXJzaXZlX2Jh dGNoKGlndF9zcGluX3QgKnNwaW4sCiAJCX0KIAl9CiAKKwkvKiBNYWtlIGl0IGVhc2llciBmb3Ig Y2FsbGVycyB0byByZXN1Ym1pdC4gKi8KKworCW9ialtCQVRDSF0ucmVsb2NhdGlvbl9jb3VudCA9 IDA7CisJb2JqW0JBVENIXS5yZWxvY3NfcHRyID0gMDsKKworCW9ialtTQ1JBVENIXS5mbGFncyA9 IEVYRUNfT0JKRUNUX1BJTk5FRDsKKwlvYmpbQkFUQ0hdLmZsYWdzID0gRVhFQ19PQkpFQ1RfUElO TkVEOworCiAJcmV0dXJuIGZlbmNlX2ZkOwogfQogCiBzdGF0aWMgaWd0X3NwaW5fdCAqCiBfX19p Z3Rfc3Bpbl9iYXRjaF9uZXcoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVuZ2luZSwg dWludDMyX3QgZGVwLAotCQkgICAgICBpbnQgb3V0X2ZlbmNlKQorCQkgICAgICB1bnNpZ25lZCBp bnQgZmxhZ3MpCiB7CiAJaWd0X3NwaW5fdCAqc3BpbjsKIApAQCAtMjA3LDcgKzI3MSw3IEBAIF9f X2lndF9zcGluX2JhdGNoX25ldyhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5naW5l LCB1aW50MzJfdCBkZXAsCiAJaWd0X2Fzc2VydChzcGluKTsKIAogCXNwaW4tPm91dF9mZW5jZSA9 IGVtaXRfcmVjdXJzaXZlX2JhdGNoKHNwaW4sIGZkLCBjdHgsIGVuZ2luZSwgZGVwLAotCQkJCQkg ICAgICAgb3V0X2ZlbmNlKTsKKwkJCQkJICAgICAgIGZsYWdzKTsKIAogCXB0aHJlYWRfbXV0ZXhf bG9jaygmbGlzdF9sb2NrKTsKIAlpZ3RfbGlzdF9hZGQoJnNwaW4tPmxpbmssICZzcGluX2xpc3Qp OwpAQCAtMjE5LDcgKzI4Myw3IEBAIF9fX2lndF9zcGluX2JhdGNoX25ldyhpbnQgZmQsIHVpbnQz Ml90IGN0eCwgdW5zaWduZWQgZW5naW5lLCB1aW50MzJfdCBkZXAsCiBpZ3Rfc3Bpbl90ICoKIF9f aWd0X3NwaW5fYmF0Y2hfbmV3KGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUs IHVpbnQzMl90IGRlcCkKIHsKLQlyZXR1cm4gX19faWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgs IGVuZ2luZSwgZGVwLCBmYWxzZSk7CisJcmV0dXJuIF9fX2lndF9zcGluX2JhdGNoX25ldyhmZCwg Y3R4LCBlbmdpbmUsIGRlcCwgMCk7CiB9CiAKIC8qKgpAQCAtMjUzLDcgKzMxNyw3IEBAIGlndF9z cGluX2JhdGNoX25ldyhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5naW5lLCB1aW50 MzJfdCBkZXApCiBpZ3Rfc3Bpbl90ICoKIF9faWd0X3NwaW5fYmF0Y2hfbmV3X2ZlbmNlKGludCBm ZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUpCiB7Ci0JcmV0dXJuIF9fX2lndF9zcGlu X2JhdGNoX25ldyhmZCwgY3R4LCBlbmdpbmUsIDAsIHRydWUpOworCXJldHVybiBfX19pZ3Rfc3Bp bl9iYXRjaF9uZXcoZmQsIGN0eCwgZW5naW5lLCAwLCBPVVRfRkVOQ0UpOwogfQogCiAvKioKQEAg LTI4Niw2ICszNTAsNDIgQEAgaWd0X3NwaW5fYmF0Y2hfbmV3X2ZlbmNlKGludCBmZCwgdWludDMy X3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUpCiAJcmV0dXJuIHNwaW47CiB9CiAKK2lndF9zcGluX3Qg KgorX19pZ3Rfc3Bpbl9iYXRjaF9uZXdfcG9sbChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWdu ZWQgZW5naW5lKQoreworCXJldHVybiBfX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZW5n aW5lLCAwLCBQT0xMX1JVTik7Cit9CisKKy8qKgorICogaWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGw6 CisgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiBAZW5naW5lOiBSaW5n IHRvIGV4ZWN1dGUgYmF0Y2ggT1InZCB3aXRoIGV4ZWNidWYgZmxhZ3MuIElmIHZhbHVlIGlzIGxl c3MKKyAqICAgICAgICAgIHRoYW4gMCwgZXhlY3V0ZSBvbiBhbGwgYXZhaWxhYmxlIHJpbmdzLgor ICoKKyAqIFN0YXJ0IGEgcmVjdXJzaXZlIGJhdGNoIG9uIGEgcmluZy4gSW1tZWRpYXRlbHkgcmV0 dXJucyBhICNpZ3Rfc3Bpbl90IHRoYXQKKyAqIGNvbnRhaW5zIHRoZSBiYXRjaCdzIGhhbmRsZSB0 aGF0IGNhbiBiZSB3YWl0ZWQgdXBvbi4gVGhlIHJldHVybmVkIHN0cnVjdHVyZQorICogbXVzdCBi ZSBwYXNzZWQgdG8gaWd0X3NwaW5fYmF0Y2hfZnJlZSgpIGZvciBwb3N0LXByb2Nlc3NpbmcuCisg KgorICogaWd0X3NwaW5fdC0+cnVubmluZyB3aWxsIGNvbnRhaW50IGEgcG9pbnRlciB3aGljaCB0 YXJnZXQgd2lsbCBjaGFuZ2UgZnJvbQorICogemVybyB0byBvbmUgb25jZSB0aGUgc3Bpbm5lciBh Y3R1YWxseSBzdGFydHMgZXhlY3V0aW5nIG9uIHRoZSBHUFUuCisgKgorICogUmV0dXJuczoKKyAq IFN0cnVjdHVyZSB3aXRoIGhlbHBlciBpbnRlcm5hbCBzdGF0ZSBmb3IgaWd0X3NwaW5fYmF0Y2hf ZnJlZSgpLgorICovCitpZ3Rfc3Bpbl90ICoKK2lndF9zcGluX2JhdGNoX25ld19wb2xsKGludCBm ZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUpCit7CisJaWd0X3NwaW5fdCAqc3BpbjsK KworCWlndF9yZXF1aXJlX2dlbShmZCk7CisJaWd0X3JlcXVpcmUoZ2VtX21tYXBfX2hhc193Yyhm ZCkpOworCisJc3BpbiA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGwoZmQsIGN0eCwgZW5naW5l KTsKKwlpZ3RfYXNzZXJ0KGdlbV9ib19idXN5KGZkLCBzcGluLT5oYW5kbGUpKTsKKworCXJldHVy biBzcGluOworfQorCiBzdGF0aWMgdm9pZCBub3RpZnkodW5pb24gc2lndmFsIGFyZykKIHsKIAlp Z3Rfc3Bpbl90ICpzcGluID0gYXJnLnNpdmFsX3B0cjsKQEAgLTM2Nyw2ICs0NjcsMTEgQEAgdm9p ZCBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGludCBmZCwgaWd0X3NwaW5fdCAqc3BpbikKIAlpZ3Rfc3Bp bl9iYXRjaF9lbmQoc3Bpbik7CiAJZ2VtX211bm1hcChzcGluLT5iYXRjaCwgQkFUQ0hfU0laRSk7 CiAKKwlpZiAoc3Bpbi0+cnVubmluZykgeworCQlnZW1fbXVubWFwKHNwaW4tPnJ1bm5pbmcsIDQw OTYpOworCQlnZW1fY2xvc2UoZmQsIHNwaW4tPnBvbGxfaGFuZGxlKTsKKwl9CisKIAlnZW1fY2xv c2UoZmQsIHNwaW4tPmhhbmRsZSk7CiAKIAlpZiAoc3Bpbi0+b3V0X2ZlbmNlID49IDApCmRpZmYg LS1naXQgYS9saWIvaWd0X2R1bW15bG9hZC5oIGIvbGliL2lndF9kdW1teWxvYWQuaAppbmRleCA0 MTAzZTRhYjllMzYuLjMxMDM5MzVhMzA5YiAxMDA2NDQKLS0tIGEvbGliL2lndF9kdW1teWxvYWQu aAorKysgYi9saWIvaWd0X2R1bW15bG9hZC5oCkBAIC0zNiw2ICszNiwxMCBAQCB0eXBlZGVmIHN0 cnVjdCBpZ3Rfc3BpbiB7CiAJc3RydWN0IGlndF9saXN0IGxpbms7CiAJdWludDMyX3QgKmJhdGNo OwogCWludCBvdXRfZmVuY2U7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2Jq WzJdOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKKwl1aW50MzJf dCBwb2xsX2hhbmRsZTsKKwlib29sICpydW5uaW5nOwogfSBpZ3Rfc3Bpbl90OwogCiBpZ3Rfc3Bp bl90ICpfX2lndF9zcGluX2JhdGNoX25ldyhpbnQgZmQsCkBAIC01NSw2ICs1OSwxMyBAQCBpZ3Rf c3Bpbl90ICppZ3Rfc3Bpbl9iYXRjaF9uZXdfZmVuY2UoaW50IGZkLAogCQkJCSAgICAgdWludDMy X3QgY3R4LAogCQkJCSAgICAgdW5zaWduZWQgZW5naW5lKTsKIAoraWd0X3NwaW5fdCAqX19pZ3Rf c3Bpbl9iYXRjaF9uZXdfcG9sbChpbnQgZmQsCisJCQkJICAgICAgIHVpbnQzMl90IGN0eCwKKwkJ CQkgICAgICAgdW5zaWduZWQgZW5naW5lKTsKK2lndF9zcGluX3QgKmlndF9zcGluX2JhdGNoX25l d19wb2xsKGludCBmZCwKKwkJCQkgICAgdWludDMyX3QgY3R4LAorCQkJCSAgICB1bnNpZ25lZCBl bmdpbmUpOworCiB2b2lkIGlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KGlndF9zcGluX3QgKnNw aW4sIGludDY0X3QgbnMpOwogdm9pZCBpZ3Rfc3Bpbl9iYXRjaF9lbmQoaWd0X3NwaW5fdCAqc3Bp bik7CiB2b2lkIGlndF9zcGluX2JhdGNoX2ZyZWUoaW50IGZkLCBpZ3Rfc3Bpbl90ICpzcGluKTsK ZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZ3QuYyBiL2xpYi9pZ3RfZ3QuYwppbmRleCAwMWFlYmM2NzA4 NjIuLjQ1NjlmZDM2YmQ4NSAxMDA2NDQKLS0tIGEvbGliL2lndF9ndC5jCisrKyBiL2xpYi9pZ3Rf Z3QuYwpAQCAtNjA5LDcgKzYwOSw3IEBAIGJvb2wgZ2VtX2Nhbl9zdG9yZV9kd29yZChpbnQgZmQs IHVuc2lnbmVkIGludCBlbmdpbmUpCiAJaWYgKGdlbiA9PSAzICYmIChpbmZvLT5pc19ncmFudHNk YWxlIHx8IGluZm8tPmlzX2FsdmlzbykpCiAJCXJldHVybiBmYWxzZTsgLyogb25seSBzdXBwb3J0 cyBwaHlzaWNhbCBhZGRyZXNzZXMgKi8KIAotCWlmIChnZW4gPT0gNiAmJiAoZW5naW5lICYgfigz PDwxMykpID09IEk5MTVfRVhFQ19CU0QpCisJaWYgKGdlbiA9PSA2ICYmICgoZW5naW5lICYgMHgz ZikgPT0gSTkxNV9FWEVDX0JTRCkpCiAJCXJldHVybiBmYWxzZTsgLyoga2lsbHMgdGhlIG1hY2hp bmUhICovCiAKIAlpZiAoaW5mby0+aXNfYnJvYWR3YXRlcikKZGlmZiAtLWdpdCBhL2xpYi9pb2N0 bF93cmFwcGVycy5jIGIvbGliL2lvY3RsX3dyYXBwZXJzLmMKaW5kZXggODc0OGNmY2ZjMDRmLi40 ZTFhMDhiZjA2YjQgMTAwNjQ0Ci0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5jCisrKyBiL2xpYi9p b2N0bF93cmFwcGVycy5jCkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBnZW1fc2V0X3RpbGluZyhp bnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgdGlsaW5nLCB1aW50MzJfdCBzdHJpZGUp CiAJaWd0X2Fzc2VydChfX2dlbV9zZXRfdGlsaW5nKGZkLCBoYW5kbGUsIHRpbGluZywgc3RyaWRl KSA9PSAwKTsKIH0KIAotc3RhdGljIGludCBfX2dlbV9zZXRfY2FjaGluZyhpbnQgZmQsIHVpbnQz Ml90IGhhbmRsZSwgdWludDMyX3QgY2FjaGluZykKK2ludCBfX2dlbV9zZXRfY2FjaGluZyhpbnQg ZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgY2FjaGluZykKIHsKIAlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2NhY2hpbmcgYXJnOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9saWIvaW9jdGxfd3Jh cHBlcnMuaCBiL2xpYi9pb2N0bF93cmFwcGVycy5oCmluZGV4IDEzZmJlM2MxMDNjMC4uYjk2NmY3 MmM5MGE4IDEwMDY0NAotLS0gYS9saWIvaW9jdGxfd3JhcHBlcnMuaAorKysgYi9saWIvaW9jdGxf d3JhcHBlcnMuaApAQCAtNjEsNiArNjEsNyBAQCBib29sIGdlbV9nZXRfdGlsaW5nKGludCBmZCwg dWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCAqdGlsaW5nLCB1aW50MzJfdCAqc3dpenpsZQogdm9p ZCBnZW1fc2V0X3RpbGluZyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgdGlsaW5n LCB1aW50MzJfdCBzdHJpZGUpOwogaW50IF9fZ2VtX3NldF90aWxpbmcoaW50IGZkLCB1aW50MzJf dCBoYW5kbGUsIHVpbnQzMl90IHRpbGluZywgdWludDMyX3Qgc3RyaWRlKTsKIAoraW50IF9fZ2Vt X3NldF9jYWNoaW5nKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBjYWNoaW5nKTsK IHZvaWQgZ2VtX3NldF9jYWNoaW5nKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBj YWNoaW5nKTsKIHVpbnQzMl90IGdlbV9nZXRfY2FjaGluZyhpbnQgZmQsIHVpbnQzMl90IGhhbmRs ZSk7CiB1aW50MzJfdCBnZW1fZmxpbmsoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpOwpkaWZmIC0t Z2l0IGEvdGVzdHMvcGVyZl9wbXUuYyBiL3Rlc3RzL3BlcmZfcG11LmMKaW5kZXggMTlmY2M5NWZm YzdmLi4yN2VjMzA1MDc5ZTEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3BlcmZfcG11LmMKKysrIGIvdGVz dHMvcGVyZl9wbXUuYwpAQCAtMTcwLDYgKzE3MCw1NiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGUy cmluZyhpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUp CiAjZGVmaW5lIEZMQUdfTE9ORyAoMTYpCiAjZGVmaW5lIEZMQUdfSEFORyAoMzIpCiAKK3N0YXRp YyBpZ3Rfc3Bpbl90ICogX19zcGluX3BvbGwoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVk IGxvbmcgZmxhZ3MpCit7CisJaWYgKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIGZsYWdzKSkKKwkJ cmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGwoZmQsIGN0eCwgZmxhZ3MpOworCWVsc2UK KwkJcmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCBjdHgsIGZsYWdzLCAwKTsKK30KKwor c3RhdGljIHVuc2lnbmVkIGxvbmcgX19zcGluX3dhaXQoaW50IGZkLCBpZ3Rfc3Bpbl90ICpzcGlu KQoreworCXN0cnVjdCB0aW1lc3BlYyBzdGFydCA9IHsgfTsKKworCWlndF9uc2VjX2VsYXBzZWQo JnN0YXJ0KTsKKworCWlmIChnZW1fY2FuX3N0b3JlX2R3b3JkKGZkLCBzcGluLT5leGVjYnVmLmZs YWdzKSkgeworCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOworCisJCXdoaWxlICghc3Bpbi0+ cnVubmluZykgeworCQkJdW5zaWduZWQgbG9uZyB0ID0gaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQp OworCisJCQlpZiAoKHQgLSB0aW1lb3V0KSA+IDI1MGU2KSB7CisJCQkJdGltZW91dCA9IHQ7CisJ CQkJaWd0X3dhcm4oIlNwaW5uZXIgbm90IHJ1bm5pbmcgYWZ0ZXIgJS4yZm1zXG4iLAorCQkJCQkg KGRvdWJsZSl0IC8gMWU2KTsKKwkJCX0KKwkJfTsKKwl9IGVsc2UgeworCQlpZ3RfZGVidWcoIl9f c3Bpbl93YWl0IC0gdXNsZWVwIG1vZGVcbiIpOworCQl1c2xlZXAoNTAwZTMpOyAvKiBCZXR0ZXIg dGhhbiBub3RoaW5nISAqLworCX0KKworCXJldHVybiBpZ3RfbnNlY19lbGFwc2VkKCZzdGFydCk7 Cit9CisKK3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGluX3N5bmMoaW50IGZkLCB1aW50MzJfdCBj dHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWd0X3NwaW5fdCAqc3BpbiA9IF9fc3Bpbl9w b2xsKGZkLCBjdHgsIGZsYWdzKTsKKworCV9fc3Bpbl93YWl0KGZkLCBzcGluKTsKKworCXJldHVy biBzcGluOworfQorCitzdGF0aWMgaWd0X3NwaW5fdCAqIHNwaW5fc3luYyhpbnQgZmQsIHVpbnQz Ml90IGN0eCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlpZ3RfcmVxdWlyZV9nZW0oZmQpOwor CisJcmV0dXJuIF9fc3Bpbl9zeW5jKGZkLCBjdHgsIGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQg ZW5kX3NwaW4oaW50IGZkLCBpZ3Rfc3Bpbl90ICpzcGluLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7 CiAJaWYgKCFzcGluKQpAQCAtMTgwLDggKzIzMCwyNSBAQCBzdGF0aWMgdm9pZCBlbmRfc3Bpbihp bnQgZmQsIGlndF9zcGluX3QgKnNwaW4sIHVuc2lnbmVkIGludCBmbGFncykKIAlpZiAoZmxhZ3Mg JiBGTEFHX1NZTkMpCiAJCWdlbV9zeW5jKGZkLCBzcGluLT5oYW5kbGUpOwogCi0JaWYgKGZsYWdz ICYgVEVTVF9UUkFJTElOR19JRExFKQotCQl1c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMgLyA1MDAw KTsKKwlpZiAoZmxhZ3MgJiBURVNUX1RSQUlMSU5HX0lETEUpIHsKKwkJdW5zaWduZWQgbG9uZyB0 LCB0aW1lb3V0ID0gMDsKKwkJc3RydWN0IHRpbWVzcGVjIHN0YXJ0ID0geyB9OworCisJCWlndF9u c2VjX2VsYXBzZWQoJnN0YXJ0KTsKKworCQlkbyB7CisJCQl0ID0gaWd0X25zZWNfZWxhcHNlZCgm c3RhcnQpOworCisJCQlpZiAoZ2VtX2JvX2J1c3koZmQsIHNwaW4tPmhhbmRsZSkgJiYKKwkJCSAg ICAodCAtIHRpbWVvdXQpID4gMTBlNikgeworCQkJCXRpbWVvdXQgPSB0OworCQkJCWlndF93YXJu KCJTcGlubmVyIG5vdCBpZGxlIGFmdGVyICUuMmZtc1xuIiwKKwkJCQkJIChkb3VibGUpdCAvIDFl Nik7CisJCQl9CisKKwkJCXVzbGVlcCgxZTMpOworCQl9IHdoaWxlICh0IDwgYmF0Y2hfZHVyYXRp b25fbnMgLyA1KTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xOTUsNyArMjYyLDcgQEAgc2lu Z2xlKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwg dW5zaWduZWQgaW50IGZsYWdzKQogCWZkID0gb3Blbl9wbXUoSTkxNV9QTVVfRU5HSU5FX0JVU1ko ZS0+Y2xhc3MsIGUtPmluc3RhbmNlKSk7CiAKIAlpZiAoZmxhZ3MgJiBURVNUX0JVU1kpCi0JCXNw aW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSwgMCk7 CisJCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSk7CiAJZWxz ZQogCQlzcGluID0gTlVMTDsKIApAQCAtMjUxLDEzICszMTgsNyBAQCBidXN5X3N0YXJ0KGludCBn ZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKIAkgKi8KIAlz bGVlcCgyKTsKIAotCXNwaW4gPSBfX2lndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIDAsIGUycmlu ZyhnZW1fZmQsIGUpLCAwKTsKLQotCS8qCi0JICogU2xlZXAgZm9yIGEgYml0IGFmdGVyIG1ha2lu ZyB0aGUgZW5naW5lIGJ1c3kgdG8gbWFrZSBzdXJlIHRoZSBQTVUKLQkgKiBnZXRzIGVuYWJsZWQg d2hlbiB0aGUgYmF0Y2ggaXMgYWxyZWFkeSBydW5uaW5nLgotCSAqLwotCXVzbGVlcCg1MDBlMyk7 CisJc3BpbiA9IF9fc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSkpOwogCiAJ ZmQgPSBvcGVuX3BtdShJOTE1X1BNVV9FTkdJTkVfQlVTWShlLT5jbGFzcywgZS0+aW5zdGFuY2Up KTsKIApAQCAtMzAwLDcgKzM2MSw3IEBAIGJ1c3lfZG91YmxlX3N0YXJ0KGludCBnZW1fZmQsIGNv bnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKIAkgKiByZS1zdWJtaXNzaW9u IGluIGV4ZWNsaXN0cyBtb2RlLiBNYWtlIHN1cmUgYnVzeW5lc3MgaXMgY29ycmVjdGx5CiAJICog cmVwb3J0ZWQgd2l0aCB0aGUgZW5naW5lIGJ1c3ksIGFuZCBhZnRlciB0aGUgZW5naW5lIHdlbnQg aWRsZS4KIAkgKi8KLQlzcGluWzBdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBl MnJpbmcoZ2VtX2ZkLCBlKSwgMCk7CisJc3BpblswXSA9IF9fc3Bpbl9zeW5jKGdlbV9mZCwgMCwg ZTJyaW5nKGdlbV9mZCwgZSkpOwogCXVzbGVlcCg1MDBlMyk7CiAJc3BpblsxXSA9IF9faWd0X3Nw aW5fYmF0Y2hfbmV3KGdlbV9mZCwgY3R4LCBlMnJpbmcoZ2VtX2ZkLCBlKSwgMCk7CiAKQEAgLTM4 Niw3ICs0NDcsNyBAQCBidXN5X2NoZWNrX2FsbChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCiAKIAlpZ3RfYXNzZXJ0X2VxKGksIG51bV9lbmdpbmVz KTsKIAotCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2Zk LCBlKSwgMCk7CisJc3BpbiA9IHNwaW5fc3luYyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUp KTsKIAlwbXVfcmVhZF9tdWx0aShmZFswXSwgbnVtX2VuZ2luZXMsIHR2YWxbMF0pOwogCXNsZXB0 ID0gbWVhc3VyZWRfdXNsZWVwKGJhdGNoX2R1cmF0aW9uX25zIC8gMTAwMCk7CiAJaWYgKGZsYWdz ICYgVEVTVF9UUkFJTElOR19JRExFKQpAQCAtNDEyLDE1ICs0NzMsMTMgQEAgYnVzeV9jaGVja19h bGwoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAog fQogCiBzdGF0aWMgdm9pZAotX19zdWJtaXRfc3Bpbl9iYXRjaChpbnQgZ2VtX2ZkLAotCQkgICAg c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKm9iaiwKK19fc3VibWl0X3NwaW5fYmF0 Y2goaW50IGdlbV9mZCwgaWd0X3NwaW5fdCAqc3BpbiwKIAkJICAgIGNvbnN0IHN0cnVjdCBpbnRl bF9leGVjdXRpb25fZW5naW5lMiAqZSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyIGViID0gewotCQkuYnVmZmVyX2NvdW50ID0gMSwKLQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNl cl9wb2ludGVyKG9iaiksCi0JCS5mbGFncyA9IGUycmluZyhnZW1fZmQsIGUpLAotCX07CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHNwaW4tPmV4ZWNidWY7CisKKwllYi5m bGFncyAmPSB+KDB4M2YgfCBJOTE1X0VYRUNfQlNEX01BU0spOworCWViLmZsYWdzIHw9IGUycmlu ZyhnZW1fZmQsIGUpIHwgSTkxNV9FWEVDX05PX1JFTE9DOwogCiAJZ2VtX2V4ZWNidWYoZ2VtX2Zk LCAmZWIpOwogfQpAQCAtNDI5LDcgKzQ4OCw2IEBAIHN0YXRpYyB2b2lkCiBtb3N0X2J1c3lfY2hl Y2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAq ZSwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5lcywgdW5zaWduZWQgaW50IGZs YWdzKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHt9OwogCWNv bnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZV87CiAJdWludDY0X3QgdHZhbFsy XVtudW1fZW5naW5lc107CiAJdWludDY0X3QgdmFsW251bV9lbmdpbmVzXTsKQEAgLTQ0MywxNSAr NTAxLDEyIEBAIG1vc3RfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGlu dGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAogCQlpZiAoIWdlbV9oYXNfZW5naW5lKGdlbV9mZCwg ZV8tPmNsYXNzLCBlXy0+aW5zdGFuY2UpKQogCQkJY29udGludWU7CiAKLQkJaWYgKGUgPT0gZV8p IHsKKwkJaWYgKGUgPT0gZV8pCiAJCQlpZGxlX2lkeCA9IGk7Ci0JCX0gZWxzZSBpZiAoc3Bpbikg ewotCQkJX19zdWJtaXRfc3Bpbl9iYXRjaChnZW1fZmQsICZvYmosIGVfKTsKLQkJfSBlbHNlIHsK LQkJCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLAotCQkJCQkJICBlMnJpbmco Z2VtX2ZkLCBlXyksIDApOwotCQkJb2JqLmhhbmRsZSA9IHNwaW4tPmhhbmRsZTsKLQkJfQorCQll bHNlIGlmIChzcGluKQorCQkJX19zdWJtaXRfc3Bpbl9iYXRjaChnZW1fZmQsIHNwaW4sIGVfKTsK KwkJZWxzZQorCQkJc3BpbiA9IF9fc3Bpbl9wb2xsKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwg ZV8pKTsKIAogCQl2YWxbaSsrXSA9IEk5MTVfUE1VX0VOR0lORV9CVVNZKGVfLT5jbGFzcywgZV8t Pmluc3RhbmNlKTsKIAl9CkBAIC00NjEsNiArNTE2LDkgQEAgbW9zdF9idXN5X2NoZWNrX2FsbChp bnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCiAJZm9y IChpID0gMDsgaSA8IG51bV9lbmdpbmVzOyBpKyspCiAJCWZkW2ldID0gb3Blbl9ncm91cCh2YWxb aV0sIGZkWzBdKTsKIAorCS8qIFNtYWxsIGRlbGF5IHRvIGFsbG93IGVuZ2luZXMgdG8gc3RhcnQu ICovCisJdXNsZWVwKF9fc3Bpbl93YWl0KGdlbV9mZCwgc3BpbikgKiBudW1fZW5naW5lcyAvIDFl Myk7CisKIAlwbXVfcmVhZF9tdWx0aShmZFswXSwgbnVtX2VuZ2luZXMsIHR2YWxbMF0pOwogCXNs ZXB0ID0gbWVhc3VyZWRfdXNsZWVwKGJhdGNoX2R1cmF0aW9uX25zIC8gMTAwMCk7CiAJaWYgKGZs YWdzICYgVEVTVF9UUkFJTElOR19JRExFKQpAQCAtNDg5LDcgKzU0Nyw2IEBAIHN0YXRpYyB2b2lk CiBhbGxfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3QgdW5zaWduZWQgaW50IG51bV9l bmdpbmVzLAogCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dl bV9leGVjX29iamVjdDIgb2JqID0ge307CiAJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUyICplOwogCXVpbnQ2NF90IHR2YWxbMl1bbnVtX2VuZ2luZXNdOwogCXVpbnQ2NF90IHZh bFtudW1fZW5naW5lc107CkBAIC01MDMsMTMgKzU2MCwxMCBAQCBhbGxfYnVzeV9jaGVja19hbGwo aW50IGdlbV9mZCwgY29uc3QgdW5zaWduZWQgaW50IG51bV9lbmdpbmVzLAogCQlpZiAoIWdlbV9o YXNfZW5naW5lKGdlbV9mZCwgZS0+Y2xhc3MsIGUtPmluc3RhbmNlKSkKIAkJCWNvbnRpbnVlOwog Ci0JCWlmIChzcGluKSB7Ci0JCQlfX3N1Ym1pdF9zcGluX2JhdGNoKGdlbV9mZCwgJm9iaiwgZSk7 Ci0JCX0gZWxzZSB7Ci0JCQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwKLQkJ CQkJCSAgZTJyaW5nKGdlbV9mZCwgZSksIDApOwotCQkJb2JqLmhhbmRsZSA9IHNwaW4tPmhhbmRs ZTsKLQkJfQorCQlpZiAoc3BpbikKKwkJCV9fc3VibWl0X3NwaW5fYmF0Y2goZ2VtX2ZkLCBzcGlu LCBlKTsKKwkJZWxzZQorCQkJc3BpbiA9IF9fc3Bpbl9wb2xsKGdlbV9mZCwgMCwgZTJyaW5nKGdl bV9mZCwgZSkpOwogCiAJCXZhbFtpKytdID0gSTkxNV9QTVVfRU5HSU5FX0JVU1koZS0+Y2xhc3Ms IGUtPmluc3RhbmNlKTsKIAl9CkBAIC01MTksNiArNTczLDkgQEAgYWxsX2J1c3lfY2hlY2tfYWxs KGludCBnZW1fZmQsIGNvbnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5lcywKIAlmb3IgKGkgPSAw OyBpIDwgbnVtX2VuZ2luZXM7IGkrKykKIAkJZmRbaV0gPSBvcGVuX2dyb3VwKHZhbFtpXSwgZmRb MF0pOwogCisJLyogU21hbGwgZGVsYXkgdG8gYWxsb3cgZW5naW5lcyB0byBzdGFydC4gKi8KKwl1 c2xlZXAoX19zcGluX3dhaXQoZ2VtX2ZkLCBzcGluKSAqIG51bV9lbmdpbmVzIC8gMWUzKTsKKwog CXBtdV9yZWFkX211bHRpKGZkWzBdLCBudW1fZW5naW5lcywgdHZhbFswXSk7CiAJc2xlcHQgPSBt ZWFzdXJlZF91c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMgLyAxMDAwKTsKIAlpZiAoZmxhZ3MgJiBU RVNUX1RSQUlMSU5HX0lETEUpCkBAIC01NTAsNyArNjA3LDcgQEAgbm9fc2VtYShpbnQgZ2VtX2Zk LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsIHVuc2lnbmVkIGludCBm bGFncykKIAlvcGVuX2dyb3VwKEk5MTVfUE1VX0VOR0lORV9XQUlUKGUtPmNsYXNzLCBlLT5pbnN0 YW5jZSksIGZkKTsKIAogCWlmIChmbGFncyAmIFRFU1RfQlVTWSkKLQkJc3BpbiA9IGlndF9zcGlu X2JhdGNoX25ldyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpLCAwKTsKKwkJc3BpbiA9IHNw aW5fc3luYyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpKTsKIAllbHNlCiAJCXNwaW4gPSBO VUxMOwogCkBAIC04ODQsNyArOTQxLDcgQEAgbXVsdGlfY2xpZW50KGludCBnZW1fZmQsIGNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKIAkgKi8KIAlmZFsxXSA9IG9wZW5f cG11KGNvbmZpZyk7CiAKLQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwgZTJy aW5nKGdlbV9mZCwgZSksIDApOworCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2ZkLCAwLCBlMnJpbmco Z2VtX2ZkLCBlKSk7CiAKIAl2YWxbMF0gPSB2YWxbMV0gPSBfX3BtdV9yZWFkX3NpbmdsZShmZFsw XSwgJnRzWzBdKTsKIAlzbGVwdFsxXSA9IG1lYXN1cmVkX3VzbGVlcChiYXRjaF9kdXJhdGlvbl9u cyAvIDEwMDApOwpAQCAtMTI0OCw3ICsxMzA1LDcgQEAgdGVzdF9mcmVxdWVuY3koaW50IGdlbV9m ZCkKIAlpZ3RfcmVxdWlyZShpZ3Rfc3lzZnNfZ2V0X3UzMihzeXNmcywgImd0X2Jvb3N0X2ZyZXFf bWh6IikgPT0gbWluX2ZyZXEpOwogCiAJZ2VtX3F1aWVzY2VudF9ncHUoZ2VtX2ZkKTsgLyogSWRs ZSB0byBiZSBzdXJlIHRoZSBjaGFuZ2UgdGFrZXMgZWZmZWN0ICovCi0Jc3BpbiA9IGlndF9zcGlu X2JhdGNoX25ldyhnZW1fZmQsIDAsIEk5MTVfRVhFQ19SRU5ERVIsIDApOworCXNwaW4gPSBzcGlu X3N5bmMoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSKTsKIAogCXNsZXB0ID0gcG11X3JlYWRf bXVsdGkoZmQsIDIsIHN0YXJ0KTsKIAltZWFzdXJlZF91c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMg LyAxMDAwKTsKQEAgLTEyNzQsNyArMTMzMSw3IEBAIHRlc3RfZnJlcXVlbmN5KGludCBnZW1fZmQp CiAJaWd0X3JlcXVpcmUoaWd0X3N5c2ZzX2dldF91MzIoc3lzZnMsICJndF9taW5fZnJlcV9taHoi KSA9PSBtYXhfZnJlcSk7CiAKIAlnZW1fcXVpZXNjZW50X2dwdShnZW1fZmQpOwotCXNwaW4gPSBp Z3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSLCAwKTsKKwlzcGlu ID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgSTkxNV9FWEVDX1JFTkRFUik7CiAKIAlzbGVwdCA9IHBt dV9yZWFkX211bHRpKGZkLCAyLCBzdGFydCk7CiAJbWVhc3VyZWRfdXNsZWVwKGJhdGNoX2R1cmF0 aW9uX25zIC8gMTAwMCk7CkBAIC0xNDU1LDYgKzE1MTIsMTAgQEAgc3RhdGljIHZvaWQgX19yZWFy bV9zcGluX2JhdGNoKGlndF9zcGluX3QgKnNwaW4pCiB7CiAJY29uc3QgdWludDMyX3QgbWlfYXJi X2NoayA9IDB4NSA8PCAyMzsKIAorCWlmIChzcGluLT5ydW5uaW5nKSB7CisJCWlndF9hc3NlcnQo KnNwaW4tPnJ1bm5pbmcpOworCQkqc3Bpbi0+cnVubmluZyA9IDA7CisJfQogICAgICAgICpzcGlu LT5iYXRjaCA9IG1pX2FyYl9jaGs7CiAgICAgICAgX19zeW5jX3N5bmNocm9uaXplKCk7CiB9CkBA IC0xNTE3LDcgKzE1NzgsNiBAQCBhY2N1cmFjeShpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCiAJCWNvbnN0IHVuc2lnbmVkIGxvbmcgdGltZW91dFtd ID0gewogCQkJcHdtX2NhbGlicmF0aW9uX3VzICogMTAwMCwgdGVzdF91cyAqIDEwMDAKIAkJfTsK LQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0ge307CiAJCXVpbnQ2NF90 IHRvdGFsX2J1c3lfbnMgPSAwLCB0b3RhbF9pZGxlX25zID0gMDsKIAkJaWd0X3NwaW5fdCAqc3Bp bjsKIAkJaW50IHJldDsKQEAgLTE1MzAsMTIgKzE1OTAsOSBAQCBhY2N1cmFjeShpbnQgZ2VtX2Zk LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCiAJCQlpZ3Rfd2Fybigi RmFpbGVkIHRvIHNldCBzY2hlZHVsaW5nIHBvbGljeSFcbiIpOwogCiAJCS8qIEFsbG9jYXRlIG91 ciBzcGluIGJhdGNoIGFuZCBpZGxlIGl0LiAqLwotCQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3 KGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSksIDApOwotCQlvYmouaGFuZGxlID0gc3Bpbi0+ aGFuZGxlOwotCQlfX3N1Ym1pdF9zcGluX2JhdGNoKGdlbV9mZCwgJm9iaiwgZSk7IC8qIHJlY29y ZCBpdHMgbG9jYXRpb24gKi8KKwkJc3BpbiA9IHNwaW5fc3luYyhnZW1fZmQsIDAsIGUycmluZyhn ZW1fZmQsIGUpKTsKIAkJaWd0X3NwaW5fYmF0Y2hfZW5kKHNwaW4pOwotCQlnZW1fc3luYyhnZW1f ZmQsIG9iai5oYW5kbGUpOwotCQlvYmouZmxhZ3MgfD0gRVhFQ19PQkpFQ1RfUElOTkVEOworCQln ZW1fc3luYyhnZW1fZmQsIHNwaW4tPmhhbmRsZSk7CiAKIAkJLyogMXN0IHBhc3MgaXMgY2FsaWJy YXRpb24sIHNlY29uZCBwYXNzIGlzIHRoZSB0ZXN0LiAqLwogCQlmb3IgKGludCBwYXNzID0gMDsg cGFzcyA8IEFSUkFZX1NJWkUodGltZW91dCk7IHBhc3MrKykgewpAQCAtMTU0NSwyNCArMTYwMiwz MCBAQCBhY2N1cmFjeShpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZTIgKmUsCiAKIAkJCWlndF9uc2VjX2VsYXBzZWQoJnRlc3Rfc3RhcnQpOwogCQkJZG8gewot CQkJCXVuc2lnbmVkIGludCB0YXJnZXRfaWRsZV91cywgdF9idXN5OworCQkJCXVuc2lnbmVkIGlu dCB0YXJnZXRfaWRsZV91czsKKwkJCQlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQgPSB7IH07CisJCQkJ dW5zaWduZWQgbG9uZyBwcmVwX2RlbGF5X25zOwogCiAJCQkJLyogUmVzdGFydCB0aGUgc3BpbmJh dGNoLiAqLworCQkJCWlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKIAkJCQlfX3JlYXJtX3NwaW5f YmF0Y2goc3Bpbik7Ci0JCQkJX19zdWJtaXRfc3Bpbl9iYXRjaChnZW1fZmQsICZvYmosIGUpOwor CQkJCV9fc3VibWl0X3NwaW5fYmF0Y2goZ2VtX2ZkLCBzcGluLCBlKTsKIAotCQkJCS8qCi0JCQkJ ICogTm90ZSB0aGF0IHRoZSBzdWJtaXNzaW9uIG1heSBiZSBkZWxheWVkIHRvIGEKLQkJCQkgKiB0 YXNrbGV0IChrc29mdGlycWQpIHdoaWNoIGNhbm5vdCBydW4gdW50aWwgd2UKLQkJCQkgKiBzbGVl cCBhcyB3ZSBob2cgdGhlIGNwdSAod2UgYXJlIFJUKS4KLQkJCQkgKi8KKwkJCQkgLyogV2FpdCBm b3IgYmF0Y2ggdG8gc3RhcnQgZXhlY3V0aW5nLiAqLworCQkJCV9fc3Bpbl93YWl0KGdlbV9mZCwg c3Bpbik7CisJCQkJcHJlcF9kZWxheV9ucyA9IGlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKIAot CQkJCXRfYnVzeSA9IG1lYXN1cmVkX3VzbGVlcChidXN5X3VzKTsKKwkJCQkvKiBQV00gYnVzeSBz bGVlcC4gKi8KKwkJCQltZW1zZXQoJnN0YXJ0LCAwLCBzaXplb2Yoc3RhcnQpKTsKKwkJCQlpZ3Rf bnNlY19lbGFwc2VkKCZzdGFydCk7CisJCQkJbWVhc3VyZWRfdXNsZWVwKGJ1c3lfdXMpOwogCQkJ CWlndF9zcGluX2JhdGNoX2VuZChzcGluKTsKLQkJCQlnZW1fc3luYyhnZW1fZmQsIG9iai5oYW5k bGUpOworCQkJCWdlbV9zeW5jKGdlbV9mZCwgc3Bpbi0+aGFuZGxlKTsKIAotCQkJCXRvdGFsX2J1 c3lfbnMgKz0gdF9idXN5OworCQkJCXRvdGFsX2J1c3lfbnMgKz0gaWd0X25zZWNfZWxhcHNlZCgm c3RhcnQpOworCQkJCXRvdGFsX2lkbGVfbnMgKz0gcHJlcF9kZWxheV9uczsKIAorCQkJCS8qIFJl LWNhbGlicmF0ZS4gKi8KIAkJCQl0YXJnZXRfaWRsZV91cyA9CiAJCQkJCSgxMDAgKiB0b3RhbF9i dXN5X25zIC8gdGFyZ2V0X2J1c3lfcGN0IC0gKHRvdGFsX2J1c3lfbnMgKyB0b3RhbF9pZGxlX25z KSkgLyAxMDAwOwogCQkJCXRvdGFsX2lkbGVfbnMgKz0gbWVhc3VyZWRfdXNsZWVwKHRhcmdldF9p ZGxlX3VzKTsKLS0gCjIuMTQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3Qt ZGV2Cg==