From: Tvrtko Ursulin Subject: [RFC i-g-t] benchmarks/gem_wsim: Command submission workload simulator Date: Thu, 30 Mar 2017 14:45:53 +0100 Message-ID: <20170330134553.7870-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x243.google.com (mail-wr0-x243.google.com [IPv6:2a00:1450:400c:c0c::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id AE4C96E8C8 for ; Thu, 30 Mar 2017 13:46:02 +0000 (UTC) Received: by mail-wr0-x243.google.com with SMTP id u18so12353960wrc.0 for ; Thu, 30 Mar 2017 06:46:02 -0700 (PDT) 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 RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClRvb2wgd2hp Y2ggZW1pdHMgYmF0Y2ggYnVmZmVycyB0byBlbmdpbmVzIHdpdGggY29uZmlndXJhYmxlCnNlcXVl bmNlcywgZHVyYXRpb25zLCBjb250ZXh0cywgZGVwZW5kZW5jaWVzIGFuZCB1c2Vyc3BhY2Ugd2Fp dHMuCgpVbmZpbmlzaGVkIGJ1dCBzaG93cyBwcm9taXNlIHNvIHNlbmRpbmcgb3V0IGZvciBlYXJs eSBmZWVkYmFjay4KCkZpcnN0IHJ1biB0aGUgdG9vbCB3aXRoIG5vIGFyZ3VtZW50cyB0byBnZXQg dGhlIGNhbGlicmF0aW9uIG51bWJlcgp3aGljaCBuZWVkcyB0byBiZSBwYXNzZWQgdG8gc3Vic2Vx dWVudCBpbnZvY2F0aW9ucyB1c2luZyB0aGUgLW4KY29tbWFuZCBsaW5lIGFyZ3VtZW50LgoKRXhh bXBsZSBpbnZvY2F0aW9uOgoKICBnZW1fd3NpbSAtdyAiMS5WQ1MxLjMwMDAuMC4xLDEuUkNTLjEw MDAuLTEuMCwxLlJDUy4zNzAwLjAuMCwxLlJDUy4xMDAwLi0yLjAsMS5WQ1MyLjIzMDAuLTIuMCwx LlJDUy40NzAwLi0xLjAsMS5WQ1MyLjYwMC4tMS4xIiBcCgkgICAtbiA8bG9jYWxfY2FsaWJyYXRp b24+IC1yIDYwMAoKVGhpcyB3aWxsIHNlbmQgdGhlIHdvcmtsb2FkIGFzIGRlc2NyaWJlZCA2MDAg dGltZXMgdG8gdGhlIEdQVSBhbmQKb3V0cHV0IHRoZSBlbGFwc2VkIHRpbWUuCgpPdGhlciBpbnRl cmVzdGluZyBvcHRpb25zLgoKICAtYyBuCVNwYXduIG4gY2xpZW50cwogIC14ICAgIEZvciB3b3Jr bG9hZHMgd2hpY2ggcmVmZXJlbmNlIFZDUzEgYW5kIFZDUzIsIHN3YXAgdGhlbQogICAgICAgIGFy b3VuZCBmb3IgZXZlcnkgb3RoZXIgY2xpZW50IChpbiBjb21iaW5hdGlvbiB3aXRoIC1jKS4KCldv cmtsb2FkIGRlc2NyaXB0b3IgZm9ybWF0OgoKICogY3R4LmVuZ2luZS5kdXJhdGlvbi5kZXBlbmRl bmN5LndhaXQsLi4uCiAqIDx1aW50Pi48c3RyPi48dWludD4uPGludCA8PSAwPi48MHwxPiwuLi4K ICoKICogRW5naW5lIGlkczogUkNTLCBCQ1MsIFZDUywgVkNTMSwgVkNTMiwgVkVDUwoKRGVwZW5k ZW5jeSBpcyBhIGJhY2sgcmVmZXJlbmNlIHRvIGEgcHJldmlvdXMgYmF0Y2ggdGhlIGN1cnJlbnQK d2lsbCBkZXBlbmQgb24uCgpUT0RPIGxpc3Q6CgogKiBSZWFkaW5nIHdvcmtsb2FkcyBmcm9tIGZp bGVzIChmb3IgbW9yZSByZWFkYWJsZSB3b3JrbG9hZAogICBkZXNjcmlwdG9yIGZvcm1hdCkuCiAq IEJldHRlciBlcnJvciBoYW5kbGluZy4KICogTXVsdGktY29udGV4dCBzdXBwb3J0IGZvciBpbmRp dmlkdWFsIGNsaWVudHMuCiAqIFJhbmRvbS92YXJpYWJsZSBiYXRjaCBsZW5ndGguCiAqIExvYWQg YmFsYW5jaW5nIHBsdWctaW4uCiAqIEhlbHAgdGV4dC4KICogLi4uID8KClNpZ25lZC1vZmYtYnk6 IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6ICJSb2dvemhraW4sIERtaXRyeSBWIiA8 ZG1pdHJ5LnYucm9nb3poa2luQGludGVsLmNvbT4KLS0tCiBiZW5jaG1hcmtzL01ha2VmaWxlLnNv dXJjZXMgfCAgIDEgKwogYmVuY2htYXJrcy9nZW1fd3NpbS5jICAgICAgIHwgNDg5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDQ5 MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgYmVuY2htYXJrcy9nZW1fd3NpbS5j CgpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9NYWtlZmlsZS5zb3VyY2VzIGIvYmVuY2htYXJrcy9N YWtlZmlsZS5zb3VyY2VzCmluZGV4IDNhZjU0ZWJlMzZmMi4uM2E5NDExNTBhYmIzIDEwMDY0NAot LS0gYS9iZW5jaG1hcmtzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvYmVuY2htYXJrcy9NYWtlZmls ZS5zb3VyY2VzCkBAIC0xNCw2ICsxNCw3IEBAIGJlbmNobWFya3NfcHJvZ19saXN0ID0JCQlcCiAJ Z2VtX3BydwkJCQlcCiAJZ2VtX3NldF9kb21haW4JCQlcCiAJZ2VtX3N5c2xhdGVuY3kJCQlcCisJ Z2VtX3dzaW0JCQlcCiAJa21zX3ZibGFuawkJCVwKIAlwcmltZV9sb29rdXAJCQlcCiAJdmdlbV9t bWFwCQkJXApkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9nZW1fd3NpbS5jIGIvYmVuY2htYXJrcy9n ZW1fd3NpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDFmMWY0 MGM0OTJmCi0tLSAvZGV2L251bGwKKysrIGIvYmVuY2htYXJrcy9nZW1fd3NpbS5jCkBAIC0wLDAg KzEsNDg5IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNp bmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQu aD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZj bnRsLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1 ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3Rp bWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRl ICJkcm0uaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorI2luY2x1ZGUgImRybXRlc3Qu aCIKKyNpbmNsdWRlICJpbnRlbF9pby5oIgorCitzdHJ1Y3Qgd19zdGVwCit7CisJLyogV29ya2xv YWQgc3RlcCBtZXRhZGF0YSAqLworCXVuc2lnbmVkIGludCBjb250ZXh0OworCXVuc2lnbmVkIGlu dCBlbmdpbmU7CisJdW5zaWduZWQgaW50IGR1cmF0aW9uOworCWludCBkZXBlbmRlbmN5OworCWlu dCB3YWl0OworCisJLyogSW1wbGVtZW50YXRpb24gZGV0YWlscyAqLworCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY2J1ZmZlcjIgZWI7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg b2JqWzNdOworfTsKKworc3RydWN0IHdvcmtsb2FkCit7CisJdW5zaWduZWQgaW50IG5yX3N0ZXBz OworCXN0cnVjdCB3X3N0ZXAgKnN0ZXBzOworCisJdWludDMyX3QgY3R4X2lkOworfTsKKworZW51 bSBpbnRlbF9lbmdpbmVfaWQgeworCVJDUywKKwlCQ1MsCisJVkNTLAorCVZDUzEsCisJVkNTMiwK KwlWRUNTLAorCU5VTV9FTkdJTkVTCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVi X2VuZ2luZV9tYXBbTlVNX0VOR0lORVNdID0geworCVtSQ1NdID0gSTkxNV9FWEVDX1JFTkRFUiwK KwlbQkNTXSA9IEk5MTVfRVhFQ19CTFQsCisJW1ZDU10gPSBJOTE1X0VYRUNfQlNELAorCVtWQ1Mx XSA9IEk5MTVfRVhFQ19CU0QgfCBJOTE1X0VYRUNfQlNEX1JJTkcxLAorCVtWQ1MyXSA9IEk5MTVf RVhFQ19CU0QgfCBJOTE1X0VYRUNfQlNEX1JJTkcyLAorCVtWRUNTXSA9IEk5MTVfRVhFQ19WRUJP WCB9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgYmJlID0gMHhhIDw8IDIzOworc3RhdGljIGNv bnN0IHVuc2lnbmVkIGludCBub3BfY2FsaWJyYXRpb25fdXMgPSAxMDAwOworc3RhdGljIHVuc2ln bmVkIGxvbmcgbm9wX2NhbGlicmF0aW9uOworCitzdGF0aWMgYm9vbCBxdWlldDsKK3N0YXRpYyBp bnQgZmQ7CisKKy8qCisgKiBXb3JrbG9hZCBkZXNjcmlwdG9yOgorICoKKyAqIGN0eC5lbmdpbmUu ZHVyYXRpb24uZGVwZW5kZW5jeS53YWl0LC4uLgorICogPHVpbnQ+LjxzdHI+Ljx1aW50Pi48aW50 IDw9IDA+LjwwfDE+LC4uLgorICoKKyAqIEVuZ2luZSBpZHM6IFJDUywgQkNTLCBWQ1MsIFZDUzEs IFZDUzIsIFZFQ1MKKyAqCisgKiAiMS5WQ1MxLjMwMDAuMC4xLDEuUkNTLjEwMDAuLTEuMCwxLlJD Uy4zNzAwLjAuMCwxLlJDUy4xMDAwLi0yLjAsMS5WQ1MyLjIzMDAuLTIuMCwxLlJDUy40NzAwLi0x LjAsMS5WQ1MyLjYwMC4tMS4xIgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgd29ya2xvYWQgKnBhcnNl X3dvcmtsb2FkKGNoYXIgKmRlc2MpCit7CisJc3RydWN0IHdvcmtsb2FkICp3cms7CisJdW5zaWdu ZWQgaW50IG5yX3N0ZXBzID0gMDsKKwljaGFyICp0b2tlbiwgKnRjdHgsICp0c3RhcnQgPSBkZXNj OworCWNoYXIgKmZpZWxkLCAqZmN0eCwgKmZzdGFydDsKKwlzdHJ1Y3Qgd19zdGVwIHN0ZXAsICpz dGVwcyA9IE5VTEw7CisJdW5zaWduZWQgaW50IHZhbGlkOworCWludCB0bXA7CisKKwl3aGlsZSAo KHRva2VuID0gc3RydG9rX3IodHN0YXJ0LCAiLCIsICZ0Y3R4KSkgIT0gTlVMTCkgeworCQl0c3Rh cnQgPSBOVUxMOworCQlmc3RhcnQgPSB0b2tlbjsKKwkJdmFsaWQgPSAwOworCisJCWlmICgoZmll bGQgPSBzdHJ0b2tfcihmc3RhcnQsICIuIiwgJmZjdHgpKSAhPSBOVUxMKSB7CisJCQlmc3RhcnQg PSBOVUxMOworCisJCQl0bXAgPSBhdG9pKGZpZWxkKTsKKwkJCWlmICh0bXAgIT0gMSkgeworCQkJ CWlmICghcXVpZXQpCisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIkludmFsaWQgY3R4IGlk IGF0IHN0ZXAgJXUhXG4iLAorCQkJCQkJbnJfc3RlcHMpOworCQkJCXJldHVybiBOVUxMOworCQkJ fQorCQkJc3RlcC5jb250ZXh0ID0gdG1wOworCisJCQl2YWxpZCsrOworCQl9CisKKwkJaWYgKChm aWVsZCA9IHN0cnRva19yKGZzdGFydCwgIi4iLCAmZmN0eCkpICE9IE5VTEwpIHsKKwkJCWZzdGFy dCA9IE5VTEw7CisKKwkJCWlmICghc3RyY2FzZWNtcChmaWVsZCwgIlJDUyIpKSB7CisJCQkJc3Rl cC5lbmdpbmUgPSBSQ1M7CisJCQkJdmFsaWQrKzsKKwkJCX0gZWxzZSBpZiAoIXN0cmNhc2VjbXAo ZmllbGQsICJCQ1MiKSkgeworCQkJCXN0ZXAuZW5naW5lID0gQkNTOworCQkJCXZhbGlkKys7CisJ CQl9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGZpZWxkLCAiVkNTIikpIHsKKwkJCQlzdGVwLmVuZ2lu ZSA9IFZDUzsKKwkJCQl2YWxpZCsrOworCQkJfSBlbHNlIGlmICghc3RyY2FzZWNtcChmaWVsZCwg IlZDUzEiKSkgeworCQkJCXN0ZXAuZW5naW5lID0gVkNTMTsKKwkJCQl2YWxpZCsrOworCQkJfSBl bHNlIGlmICghc3RyY2FzZWNtcChmaWVsZCwgIlZDUzIiKSkgeworCQkJCXN0ZXAuZW5naW5lID0g VkNTMjsKKwkJCQl2YWxpZCsrOworCQkJfSBlbHNlIGlmICghc3RyY2FzZWNtcChmaWVsZCwgIlZF Q1MiKSkgeworCQkJCXN0ZXAuZW5naW5lID0gVkVDUzsKKwkJCQl2YWxpZCsrOworCQkJfSBlbHNl IHsKKwkJCQlpZiAoIXF1aWV0KQorCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSJJbnZhbGlk IGVuZ2luZSBpZCBhdCBzdGVwICV1IVxuIiwKKwkJCQkJCW5yX3N0ZXBzKTsKKwkJCQlyZXR1cm4g TlVMTDsKKwkJCX0KKwkJfQorCisJCWlmICgoZmllbGQgPSBzdHJ0b2tfcihmc3RhcnQsICIuIiwg JmZjdHgpKSAhPSBOVUxMKSB7CisJCQlmc3RhcnQgPSBOVUxMOworCisJCQl0bXAgPSBhdG9pKGZp ZWxkKTsKKwkJCWlmICh0bXAgPD0gMCkgeworCQkJCWlmICghcXVpZXQpCisJCQkJCWZwcmludGYo c3RkZXJyLAorCQkJCQkJIkludmFsaWQgZHVyYXRpb24gYXQgc3RlcCAldSFcbiIsCisJCQkJCQlu cl9zdGVwcyk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlzdGVwLmR1cmF0aW9uID0gdG1w OworCisJCQl2YWxpZCsrOworCQl9CisKKwkJaWYgKChmaWVsZCA9IHN0cnRva19yKGZzdGFydCwg Ii4iLCAmZmN0eCkpICE9IE5VTEwpIHsKKwkJCWZzdGFydCA9IE5VTEw7CisKKwkJCXRtcCA9IGF0 b2koZmllbGQpOworCQkJaWYgKHRtcCA+IDApIHsKKwkJCQlpZiAoIXF1aWV0KQorCQkJCQlmcHJp bnRmKHN0ZGVyciwKKwkJCQkJCSJJbnZhbGlkIGZvcndhcmQgZGVwZW5kZW5jeSBhdCBzdGVwICV1 IVxuIiwKKwkJCQkJCW5yX3N0ZXBzKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCXN0ZXAu ZGVwZW5kZW5jeSA9IHRtcDsKKworCQkJdmFsaWQrKzsKKwkJfQorCisJCWlmICgoZmllbGQgPSBz dHJ0b2tfcihmc3RhcnQsICIuIiwgJmZjdHgpKSAhPSBOVUxMKSB7CisJCQlmc3RhcnQgPSBOVUxM OworCisJCQl0bXAgPSBhdG9pKGZpZWxkKTsKKwkJCWlmICh0bXAgIT0gMCAmJiB0bXAgIT0gMSkg eworCQkJCWlmICghcXVpZXQpCisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIkludmFsaWQg d2FpdCBib29sZWFuIGF0IHN0ZXAgJXUhXG4iLAorCQkJCQkJbnJfc3RlcHMpOworCQkJCXJldHVy biBOVUxMOworCQkJfQorCQkJc3RlcC53YWl0ID0gdG1wOworCisJCQl2YWxpZCsrOworCQl9CisK KwkJaWYgKHZhbGlkICE9IDUpIHsKKwkJCWlmICghcXVpZXQpCisJCQkJZnByaW50ZihzdGRlcnIs ICJJbnZhbGlkIHJlY29yZCBhdCBzdGVwICV1IVxuIiwKKwkJCQkJbnJfc3RlcHMpOworCQkJcmV0 dXJuIE5VTEw7CisJCX0KKworCQlucl9zdGVwcysrOworCQlzdGVwcyA9IHJlYWxsb2Moc3RlcHMs IHNpemVvZihzdGVwKSAqIG5yX3N0ZXBzKTsKKwkJaWd0X2Fzc2VydChzdGVwcyk7CisKKwkJbWVt Y3B5KCZzdGVwc1tucl9zdGVwcyAtIDFdLCAmc3RlcCwgc2l6ZW9mKHN0ZXApKTsKKwl9CisKKwl3 cmsgPSBtYWxsb2Moc2l6ZW9mKCp3cmspKTsKKwlpZ3RfYXNzZXJ0KHdyayk7CisKKwl3cmstPm5y X3N0ZXBzID0gbnJfc3RlcHM7CisJd3JrLT5zdGVwcyA9IHN0ZXBzOworCisJcmV0dXJuIHdyazsK K30KKworc3RhdGljIHN0cnVjdCB3b3JrbG9hZCAqCitjbG9uZV93b3JrbG9hZChzdHJ1Y3Qgd29y a2xvYWQgKl93cmspCit7CisJc3RydWN0IHdvcmtsb2FkICp3cms7CisKKwl3cmsgPSBtYWxsb2Mo c2l6ZW9mKCp3cmspKTsKKwlpZ3RfYXNzZXJ0KHdyayk7CisKKwl3cmstPm5yX3N0ZXBzID0gX3dy ay0+bnJfc3RlcHM7CisJd3JrLT5zdGVwcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHdfc3RlcCkg KiB3cmstPm5yX3N0ZXBzKTsKKwlpZ3RfYXNzZXJ0KHdyay0+c3RlcHMpOworCisJbWVtY3B5KHdy ay0+c3RlcHMsIF93cmstPnN0ZXBzLCBzaXplb2Yoc3RydWN0IHdfc3RlcCkgKiB3cmstPm5yX3N0 ZXBzKTsKKworCXJldHVybiB3cms7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfd29ya2xvYWQo c3RydWN0IHdvcmtsb2FkICp3cmssIGJvb2wgc3dhcF92Y3MpCit7CisJc3RydWN0IGRybV9pOTE1 X2dlbV9jb250ZXh0X2NyZWF0ZSBhcmcgPSB7fTsKKwlzdHJ1Y3Qgd19zdGVwICp3OworCWludCBp OworCisJZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9DT05URVhUX0NSRUFURSwgJmFy Zyk7CisJd3JrLT5jdHhfaWQgPSBhcmcuY3R4X2lkOworCisJZm9yIChpID0gMCwgdyA9IHdyay0+ c3RlcHM7IGkgPCB3cmstPm5yX3N0ZXBzOyBpKyssIHcrKykgeworCQltZW1zZXQoJnctPmViLCAw LCBzaXplb2Yody0+ZWIpKTsKKwkJbWVtc2V0KCZ3LT5vYmosIDAsIHNpemVvZih3LT5vYmopKTsK Kwl9CisKKwlmb3IgKGkgPSAwLCB3ID0gd3JrLT5zdGVwczsgaSA8IHdyay0+bnJfc3RlcHM7IGkr KywgdysrKSB7CisJCXVuc2lnbmVkIGxvbmcgc3o7CisJCWVudW0gaW50ZWxfZW5naW5lX2lkIGVu Z2luZSA9IHctPmVuZ2luZTsKKworCQlzeiA9IEFMSUdOKHctPmR1cmF0aW9uICogbm9wX2NhbGli cmF0aW9uICogc2l6ZW9mKHVpbnQzMl90KSAvCisJCQkgICBub3BfY2FsaWJyYXRpb25fdXMsIHNp emVvZih1aW50MzJfdCkpOworCisJCWlndF9hc3NlcnQody0+Y29udGV4dCA9PSAxKTsgLyogVE9E TyAqLworCisJCXctPm9ialswXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwkJdy0+ b2JqWzBdLmZsYWdzID0gRVhFQ19PQkpFQ1RfV1JJVEU7CisKKwkJdy0+b2JqWzFdLmhhbmRsZSA9 IGdlbV9jcmVhdGUoZmQsIHN6KTsKKwkJZ2VtX3dyaXRlKGZkLCB3LT5vYmpbMV0uaGFuZGxlLCBz eiAtIHNpemVvZihiYmUpLCAmYmJlLAorCQkJICBzaXplb2YoYmJlKSk7CisKKwkJdy0+ZWIuYnVm ZmVyX2NvdW50ID0gMjsKKwkJdy0+ZWIuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIody0+ b2JqKTsKKwkJaWYgKHN3YXBfdmNzICYmIGVuZ2luZSA9PSBWQ1MxKQorCQkJZW5naW5lID0gVkNT MjsKKwkJZWxzZSBpZiAoc3dhcF92Y3MgJiYgZW5naW5lID09IFZDUzIpCisJCQllbmdpbmUgPSBW Q1MxOworCQl3LT5lYi5mbGFncyA9IGViX2VuZ2luZV9tYXBbZW5naW5lXTsKKwkJdy0+ZWIucnN2 ZDEgPSB3cmstPmN0eF9pZDsKKworCQlpZ3RfYXNzZXJ0KHctPmRlcGVuZGVuY3kgPD0gMCk7CisJ CWlmICh3LT5kZXBlbmRlbmN5KSB7CisJCQlpbnQgZGVwX2lkeCA9IGkgKyB3LT5kZXBlbmRlbmN5 OworCisJCQlpZ3RfYXNzZXJ0KGRlcF9pZHggPj0gMCAmJiBkZXBfaWR4IDwgd3JrLT5ucl9zdGVw cyk7CisKKwkJCXctPm9ialsyXS5oYW5kbGUgPSB3LT5vYmpbMV0uaGFuZGxlOworCQkJdy0+b2Jq WzFdLmhhbmRsZSA9IHdyay0+c3RlcHNbZGVwX2lkeF0ub2JqWzBdLmhhbmRsZTsKKwkJCXctPmVi LmJ1ZmZlcl9jb3VudCA9IDM7CisJCX0KKworI2lmZGVmIERFQlVHCisJCXByaW50ZigiJXU6ICV1 OiV4fCV4fCV4ICUxMGx1IGZsYWdzPSVsbHhcbiIsCisJCSAgICAgICBpLCB3LT5lYi5idWZmZXJf Y291bnQsCisJCSAgICAgICB3LT5vYmpbMF0uaGFuZGxlLCB3LT5vYmpbMV0uaGFuZGxlLCB3LT5v YmpbMl0uaGFuZGxlLAorCQkgICAgICAgc3osIHctPmViLmZsYWdzKTsKKyNlbmRpZgorCX0KK30K Kworc3RhdGljIGRvdWJsZSBlbGFwc2VkKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqc3RhcnQsIGNv bnN0IHN0cnVjdCB0aW1lc3BlYyAqZW5kKQoreworCXJldHVybiAoZW5kLT50dl9zZWMgLSBzdGFy dC0+dHZfc2VjKSArCisJICAgICAgIChlbmQtPnR2X25zZWMgLSBzdGFydC0+dHZfbnNlYykgLyAx ZTk7Cit9CisKK3N0YXRpYyB2b2lkCitydW5fd29ya2xvYWQodW5zaWduZWQgaW50IGlkLCBzdHJ1 Y3Qgd29ya2xvYWQgKndyaywgdW5zaWduZWQgaW50IHJlcGVhdCkKK3sKKwlzdHJ1Y3QgdGltZXNw ZWMgdF9zdGFydCwgdF9lbmQ7CisJc3RydWN0IHdfc3RlcCAqdzsKKwlkb3VibGUgdDsKKwlpbnQg aSwgajsKKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdF9zdGFydCk7CisKKwlm b3IgKGogPSAwOyBqIDwgcmVwZWF0OyBqKyspIHsKKwkJZm9yIChpID0gMCwgdyA9IHdyay0+c3Rl cHM7IGkgPCB3cmstPm5yX3N0ZXBzOyBpKyssIHcrKykgeworCQkJZ2VtX2V4ZWNidWYoZmQsICZ3 LT5lYik7CisJCQlpZiAody0+d2FpdCkKKwkJCQlnZW1fc3luYyhmZCwgdy0+b2JqWzBdLmhhbmRs ZSk7CisJCX0KKwl9CisKKwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRfZW5kKTsK KworCXQgPSBlbGFwc2VkKCZ0X3N0YXJ0LCAmdF9lbmQpOworCWlmICghcXVpZXQpCisJCXByaW50 ZigiJXU6ICVmcyBlbGFwc2VkICglZiB3b3JrbG9hZHMvcylcbiIsIGlkLCB0LCByZXBlYXQgLyB0 KTsKK30KKworc3RhdGljIHZvaWQgZmluaV93b3JrbG9hZChzdHJ1Y3Qgd29ya2xvYWQgKndyaykK K3sKKwlmcmVlKHdyay0+c3RlcHMpOworCWZyZWUod3JrKTsKK30KKworc3RhdGljIHVuc2lnbmVk IGxvbmcgY2FsaWJyYXRlX25vcCh2b2lkKQoreworCXVuc2lnbmVkIGludCBsb29wcyA9IDE3Owor CWludCB3YXJtdXAgPSAxNzsKKwl1bnNpZ25lZCBpbnQgdXNlY3MgPSBub3BfY2FsaWJyYXRpb25f dXM7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0ge307CisJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9CisJCXsgLmJ1ZmZlcl9jb3VudCA9IDEsIC5i dWZmZXJzX3B0ciA9ICh1aW50cHRyX3QpJm9ian07CisJbG9uZyBzaXplLCBsYXN0X3NpemU7CisJ c3RydWN0IHRpbWVzcGVjIHRfMCwgdF9lbmQ7CisKKwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9U T05JQywgJnRfMCk7CisKKwlzaXplID0gMjU2ICogMTAyNDsKKwlkbyB7CisJCXN0cnVjdCB0aW1l c3BlYyB0X3N0YXJ0OworCisJCW9iai5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBzaXplKTsKKwkJ Z2VtX3dyaXRlKGZkLCBvYmouaGFuZGxlLCBzaXplIC0gc2l6ZW9mKGJiZSksICZiYmUsCisJCQkg IHNpemVvZihiYmUpKTsKKwkJZ2VtX2V4ZWNidWYoZmQsICZlYik7CisJCWdlbV9zeW5jKGZkLCBv YmouaGFuZGxlKTsKKworCQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRfc3RhcnQp OworCQlmb3IgKGludCBsb29wID0gMDsgbG9vcCA8IGxvb3BzOyBsb29wKyspCisJCQlnZW1fZXhl Y2J1ZihmZCwgJmViKTsKKwkJZ2VtX3N5bmMoZmQsIG9iai5oYW5kbGUpOworCQljbG9ja19nZXR0 aW1lKENMT0NLX01PTk9UT05JQywgJnRfZW5kKTsKKworCQlnZW1fY2xvc2UoZmQsIG9iai5oYW5k bGUpOworCisJCWxhc3Rfc2l6ZSA9IHNpemU7CisJCXNpemUgPSBsb29wcyAqIHNpemUgLworCQkg ICAgICAgZWxhcHNlZCgmdF9zdGFydCwgJnRfZW5kKSAvIDFlNiAqIHVzZWNzOworCQlzaXplID0g QUxJR04oc2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7CisJfSB3aGlsZSAod2FybXVwLS0gPiAwIHx8 CisJCSBlbGFwc2VkKCZ0XzAsICZ0X2VuZCkgPCA1LjAgfHwKKwkJIGFicyhzaXplIC0gbGFzdF9z aXplKSA+IChzaXplICogNSAvIDEwMCkpOworCisJcmV0dXJuIHNpemUgLyBzaXplb2YodWludDMy X3QpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQg aW50IHJlcGVhdCA9IDE7CisJdW5zaWduZWQgaW50IGNsaWVudHMgPSAxOworCWJvb2wgc3dhcF92 Y3MgPSBmYWxzZTsKKwlzdHJ1Y3QgdGltZXNwZWMgdF9zdGFydCwgdF9lbmQ7CisJc3RydWN0IHdv cmtsb2FkICoqdywgKndyazsKKwljaGFyICp3X3N0ciA9IE5VTEw7CisJZG91YmxlIHQ7CisJaW50 IGksIGM7CisKKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOworCisJd2hpbGUg KChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJjOm46cjpxeHc6IikpICE9IC0xKSB7CisJCXN3aXRj aCAoYykgeworCQljYXNlICd3JzoKKwkJCXdfc3RyID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNh c2UgJ2MnOgorCQkJY2xpZW50cyA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApOworCQkJYnJlYWs7 CisJCWNhc2UgJ24nOgorCQkJbm9wX2NhbGlicmF0aW9uID0gc3RydG9sKG9wdGFyZywgTlVMTCwg MCk7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlyZXBlYXQgPSBzdHJ0b2wob3B0YXJnLCBO VUxMLCAwKTsKKwkJCWJyZWFrOworCQljYXNlICdxJzoKKwkJCXF1aWV0ID0gdHJ1ZTsKKwkJCWJy ZWFrOworCQljYXNlICd4JzoKKwkJCXN3YXBfdmNzID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIW5vcF9jYWxpYnJhdGlvbikgeworCQlp ZiAoIXF1aWV0KQorCQkJcHJpbnRmKCJDYWxpYnJhdGluZyBub3AgZGVsYXkuLi5cbiIpOworCQlu b3BfY2FsaWJyYXRpb24gPSBjYWxpYnJhdGVfbm9wKCk7CisJCWlmICghcXVpZXQpCisJCQlwcmlu dGYoIk5vcCBjYWxpYnJhdGlvbiBmb3IgJXV1cyBkZWxheSBpcyAlbHUuXG4iLAorCQkJICAgICAg IG5vcF9jYWxpYnJhdGlvbl91cywgbm9wX2NhbGlicmF0aW9uKTsKKworCQlyZXR1cm4gMDsKKwl9 IGVsc2UgeworCQlpZiAoIXdfc3RyKSB7CisJCQlpZiAoIXF1aWV0KQorCQkJCWZwcmludGYoc3Rk ZXJyLAorCQkJCQkiV29ya2xvYWQgZGVzY3JpcHRvciBtaXNzaW5nIVxuIik7CisJCQlyZXR1cm4g MTsKKwkJfQorCisJCXdyayA9IHBhcnNlX3dvcmtsb2FkKHdfc3RyKTsKKwkJaWYgKCF3cmspIHsK KwkJCWlmICghcXVpZXQpCisJCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2Ugd29y a2xvYWQhXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKCFxdWlldCkgeworCQlw cmludGYoIlVzaW5nICVsdSBub3AgY2FsaWJyYXRpb24gZm9yICV1dXMgZGVsYXkuXG4iLAorCQkg ICAgICAgbm9wX2NhbGlicmF0aW9uLCBub3BfY2FsaWJyYXRpb25fdXMpOworCQlwcmludGYoIiV1 IGNsaWVudCVzLlxuIiwgY2xpZW50cywgY2xpZW50cyA+IDEgPyAicyIgOiAiIik7CisJCWlmIChz d2FwX3ZjcykKKwkJCXByaW50ZigiU3dhcHBpbmcgVkNTIHJpbmdzIGJldHdlZW4gY2xpZW50cy5c biIpOworCX0KKworCXcgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB3b3JrbG9hZCAqKSAqIGNsaWVu dHMpOworCWlndF9hc3NlcnQodyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2xpZW50czsgaSsrKSB7 CisJCXdbaV0gPSBjbG9uZV93b3JrbG9hZCh3cmspOworCQlwcmVwYXJlX3dvcmtsb2FkKHdbaV0s IHN3YXBfdmNzICYmIChpICYgMSkpOworCX0KKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RP TklDLCAmdF9zdGFydCk7CisKKwlpZ3RfZm9yayhjaGlsZCwgY2xpZW50cykKKwkJcnVuX3dvcmts b2FkKGNoaWxkLCB3W2NoaWxkXSwgcmVwZWF0KTsKKworCWlndF93YWl0Y2hpbGRyZW4oKTsKKwor CWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdF9lbmQpOworCisJdCA9IGVsYXBzZWQo JnRfc3RhcnQsICZ0X2VuZCk7CisJaWYgKCFxdWlldCkKKwkJcHJpbnRmKCIlZnMgZWxhcHNlZCAo JWYgd29ya2xvYWRzL3MpXG4iLAorCQkgICAgICAgdCwgY2xpZW50cyAqIHJlcGVhdCAvIHQpOwor CisJZm9yIChpID0gMDsgaSA8IGNsaWVudHM7IGkrKykKKwkJZmluaV93b3JrbG9hZCh3W2ldKTsK KworCWZyZWUodyk7CisJZmluaV93b3JrbG9hZCh3cmspOworCisJcmV0dXJuIDA7Cit9Ci0tIAoy LjkuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==