From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abdiel Janulgue Subject: [i-g-t PATCH v12 2/5] lib: add igt_dummyload Date: Thu, 24 Nov 2016 12:16:11 +0200 Message-ID: <1479982571-24369-1-git-send-email-abdiel.janulgue@linux.intel.com> References: <20161123161715.GA17701@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id E61B16E970 for ; Thu, 24 Nov 2016 10:16:09 +0000 (UTC) In-Reply-To: <20161123161715.GA17701@nuc-i3427.alporthouse.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 Cc: Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org QSBsb3Qgb2YgaWd0IHRlc3RjYXNlcyBuZWVkIHNvbWUgR1BVIHdvcmtsb2FkIHRvIG1ha2Ugc3Vy ZSBhIHJhY2UKd2luZG93IGlzIGJpZyBlbm91Z2guIFVuZm9ydHVuYXRlbHkgaGF2aW5nIGEgZml4 ZWQgYW1vdW50IG9mCndvcmtsb2FkIGxlYWRzIHRvIHNwdXJpb3VzIHRlc3QgZmFpbHVyZXMgb3Ig b3Zlcmx5IGxvbmcgcnVudGltZXMKb24gc29tZSBmYXN0L3Nsb3cgcGxhdGZvcm1zLiBUaGlzIGxp YnJhcnkgY29udGFpbnMgZnVuY3Rpb25hbGl0eQp0byBzdWJtaXQgR1BVIHdvcmtsb2FkcyB0aGF0 IHNob3VsZCBjb25zdW1lIGV4YWN0bHkgYSBzcGVjaWZpYwphbW91bnQgb2YgdGltZS4KCnYyIDog QWRkIHJlY3Vyc2l2ZSBiYXRjaCBmZWF0dXJlIGZyb20gQ2hyaXMKdjMgOiBEcm9wIGF1dG8tdHVu ZWQgc3R1ZmYuIEFkZCBibyBkZXBlbmRlY3kgdG8gcmVjdXJzaXZlIGJhdGNoCiAgICAgYnkgYWRk aW5nIGEgZHVtbXkgcmVsb2MgdG8gdGhlIGJvIGFzIHN1Z2dlc3RlZCBieSBWaWxsZS4KdjQ6ICBG aXggZGVwZW5kZW5jeSByZWxvYyBhcyB3cml0ZSBpbnN0ZWFkIG9mIHJlYWQgKFZpbGxlKS4KICAg ICBGaXggd3JvbmcgaGFuZGxpbmcgb2YgYmF0Y2hidWZmZXIgc3RhcnQgb24gSUxLIGNhdXNpbmcK ICAgICB0ZXN0IGZhaWx1cmUKdjU6ICBDb252ZXJ0IGttc19idXN5IHRvIHVzZSB0aGlzIGFwaQp2 NjogIEFkZCB0aGlzIGxpYnJhcnkgdG8gZG9jcwp2NzogIERvY3VtZW50IGdsb2JhbCB1c2Ugb2Yg YmF0Y2gsIHJldXNlIGRlZmluZXMKICAgICBNaW5vciBjb2RlIGNsZWFudXBzLgogICAgIFJlbmFt ZSBpZ3Rfc3Bpbl9iYXRjaCBhbmQgaWd0X3Bvc3Rfc3Bpbl9iYXRjaCB0bwogICAgIGlndF9zcGlu X2JhdGNoX25ldyBhbmQgaWd0X3NwaW5fYmF0Y2hfZnJlZQogICAgIHJlc3BlY3RpdmVseSAoVG9t ZXUgVml6b3NvKS4KICAgICBGaXggZXJyb3IgaW4gZGVwZW5kZW5jeSByZWxvY2F0aW9uIGhhbmRs aW5nIGluIEhTVyBjYXVzaW5nCiAgICAgdGVzdHMgdG8gZmFpbC4Kdjg6ICBSZXN0b3JlIGNvcnJl Y3Qgb3JkZXIgb2Ygb2JqZWN0cyBpbiB0aGUgZXhlY2J1ZmZlci4gQmF0Y2gKICAgICBvYmplY3Qg c2hvdWxkIGFsd2F5cyBiZSBsYXN0Lgp2OSA6IEFkZCBoZWxwZXIgdG8gdGVybWluYXRlIGJhdGNo IG1hbnVhbGx5CnYxMDogU3BsaXQgdGltZW91dCBmdW5jdGlvbi4gQ2xhcmlmeSBmdW5jdGlvbiBu YW1lcyAoQ2hyaXMpCnYxMTogRnJvbSBDaHJpczoKICAgICAqIEFkZCBnZW1fcXVpZXNjZW50X2dw dSBleGl0IGhhbmRsZXIKICAgICAqIFVzZSBnZW1fYm9fYnVzeQogICAgICogU2tpcCBzcGluLT5o YW5kbGUgPiAwIGNoZWNrcwogICAgICogRW5zdXJlIHRlcm1pbmF0ZSBiYXRjaCBvbiBmcmVlCiAg ICAgKiBSZW1vdmUgaWd0X3NwaW5fYmF0Y2hfd2FpdAogICAgICogUmVtb3ZlIHNpbmdsZS1yaW5n IGxpbWl0YXRpb24KdjEyOiBIb29rIGludG8gZ2VtX3F1aWVzY2VudF9ncHUgZXhpdCBoYW5kbGVy IHRvIGlkbGUgdGhlIEdQVSBpZgogICAgIHRoZSB1c2VyIHRlcm1pbmF0ZXMgdGVzdHMgd2l0aCBe QwoKQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+CkNjOiBWaWxsZSBT eXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29u IDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiB0b21ldUB0b21ldXZpem9zby5uZXQKUmV2 aWV3ZWQtYnk6IFRvbWV1IFZpem9zbyA8dG9tZXUudml6b3NvQGNvbGxhYm9yYS5jb20+ClNpZ25l ZC1vZmYtYnk6IEFiZGllbCBKYW51bGd1ZSA8YWJkaWVsLmphbnVsZ3VlQGxpbnV4LmludGVsLmNv bT4KLS0tCiAuLi4vaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10b29scy1kb2NzLnhtbCAgICAg ICB8ICAgMSArCiBsaWIvTWFrZWZpbGUuc291cmNlcyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMiArCiBsaWIvZHJtdGVzdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgMyArCiBsaWIvaWd0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBsaWIvaWd0X2R1bW15bG9hZC5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDMwMiArKysrKysrKysrKysrKysrKysrKysKIGxpYi9pZ3RfZHVtbXls b2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ2ICsrKysKIDYgZmlsZXMg Y2hhbmdlZCwgMzU1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2R1 bW15bG9hZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9kdW1teWxvYWQuaAoKZGlmZiAt LWdpdCBhL2RvY3MvcmVmZXJlbmNlL2ludGVsLWdwdS10b29scy9pbnRlbC1ncHUtdG9vbHMtZG9j cy54bWwgYi9kb2NzL3JlZmVyZW5jZS9pbnRlbC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRvb2xzLWRv Y3MueG1sCmluZGV4IGM4NjJmMmEuLjU1OTAyYWIgMTAwNjQ0Ci0tLSBhL2RvY3MvcmVmZXJlbmNl L2ludGVsLWdwdS10b29scy9pbnRlbC1ncHUtdG9vbHMtZG9jcy54bWwKKysrIGIvZG9jcy9yZWZl cmVuY2UvaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10b29scy1kb2NzLnhtbApAQCAtMzIsNiAr MzIsNyBAQAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pbnRlbF9pby54bWwiLz4KICAgICA8 eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X3ZjNC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVm PSJ4bWwvaWd0X3ZnZW0ueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kdW1t eWxvYWQueG1sIi8+CiAgIDwvY2hhcHRlcj4KICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF90 ZXN0X3Byb2dyYW1zLnhtbCIvPgogCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBi L2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGU4ZTI3N2IuLjdmYzVlYzIgMTAwNjQ0Ci0tLSBh L2xpYi9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC03NSw2 ICs3NSw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAogCWlndF9kcmF3LmgJCVwKIAlpZ3RfcG0u YwkJXAogCWlndF9wbS5oCQlcCisJaWd0X2R1bW15bG9hZC5jCQlcCisJaWd0X2R1bW15bG9hZC5o CQlcCiAJdXdpbGRtYXQvdXdpbGRtYXQuaAlcCiAJdXdpbGRtYXQvdXdpbGRtYXQuYwlcCiAJJChO VUxMKQpkaWZmIC0tZ2l0IGEvbGliL2RybXRlc3QuYyBiL2xpYi9kcm10ZXN0LmMKaW5kZXggNDRh YmM3ZS4uYmUxZGM5MyAxMDA2NDQKLS0tIGEvbGliL2RybXRlc3QuYworKysgYi9saWIvZHJtdGVz dC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiaW50 ZWxfcmVnLmgiCiAjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKKyNpbmNsdWRlICJpZ3RfZHVt bXlsb2FkLmgiCiAKIC8qKgogICogU0VDVElPTjpkcm10ZXN0CkBAIC0xNTksNiArMTYwLDggQEAg dm9pZCBnZW1fcXVpZXNjZW50X2dwdShpbnQgZmQpCiAJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgb2JqOwogCXVuc2lnbmVkIHJpbmc7CiAKKwlpZ3RfdGVybWluYXRlX3NwaW5fYmF0 Y2hlcygpOworCiAJbWVtc2V0KCZvYmosIDAsIHNpemVvZihvYmopKTsKIAlvYmouaGFuZGxlID0g Z2VtX2NyZWF0ZShmZCwgNDA5Nik7CiAJZ2VtX3dyaXRlKGZkLCBvYmouaGFuZGxlLCAwLCAmYmJl LCBzaXplb2YoJmJiZSkpOwpkaWZmIC0tZ2l0IGEvbGliL2lndC5oIGIvbGliL2lndC5oCmluZGV4 IGQ3NTFmMjQuLmEwMDI4ZDUgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3QuaAorKysgYi9saWIvaWd0LmgK QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJpZ3RfY29yZS5oIgogI2luY2x1ZGUgImlndF9k ZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAiaWd0X2RyYXcuaCIKKyNpbmNsdWRlICJpZ3RfZHVtbXlsb2Fk LmgiCiAjaW5jbHVkZSAiaWd0X2ZiLmgiCiAjaW5jbHVkZSAiaWd0X2d0LmgiCiAjaW5jbHVkZSAi aWd0X2ttcy5oIgpkaWZmIC0tZ2l0IGEvbGliL2lndF9kdW1teWxvYWQuYyBiL2xpYi9pZ3RfZHVt bXlsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3MGMzOAotLS0g L2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfZHVtbXlsb2FkLmMKQEAgLTAsMCArMSwzMDIgQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImlndC5o IgorI2luY2x1ZGUgImlndF9kdW1teWxvYWQuaCIKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVk ZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKworLyoqCisgKiBTRUNUSU9O OmlndF9kdW1teWxvYWQKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTGlicmFyeSBmb3Igc3VibWl0 dGluZyBHUFUgd29ya2xvYWRzCisgKiBAdGl0bGU6IER1bW15bG9hZAorICogQGluY2x1ZGU6IGln dC5oCisgKgorICogQSBsb3Qgb2YgaWd0IHRlc3RjYXNlcyBuZWVkIHNvbWUgR1BVIHdvcmtsb2Fk IHRvIG1ha2Ugc3VyZSBhIHJhY2Ugd2luZG93IGlzCisgKiBiaWcgZW5vdWdoLiBVbmZvcnR1bmF0 ZWx5IGhhdmluZyBhIGZpeGVkIGFtb3VudCBvZiB3b3JrbG9hZCBsZWFkcyB0bworICogc3B1cmlv dXMgdGVzdCBmYWlsdXJlcyBvciBvdmVybHkgbG9uZyBydW50aW1lcyBvbiBzb21lIGZhc3Qvc2xv dyBwbGF0Zm9ybXMuCisgKiBUaGlzIGxpYnJhcnkgY29udGFpbnMgZnVuY3Rpb25hbGl0eSB0byBz dWJtaXQgR1BVIHdvcmtsb2FkcyB0aGF0IHNob3VsZAorICogY29uc3VtZSBleGFjdGx5IGEgc3Bl Y2lmaWMgYW1vdW50IG9mIHRpbWUuCisgKi8KKworI2RlZmluZSBMT0NBTF9JOTE1X0VYRUNfQlNE X1NISUZUICAgICAgKDEzKQorI2RlZmluZSBMT0NBTF9JOTE1X0VYRUNfQlNEX01BU0sgICAgICAg KDMgPDwgTE9DQUxfSTkxNV9FWEVDX0JTRF9TSElGVCkKKworI2RlZmluZSBFTkdJTkVfTUFTSyAg KEk5MTVfRVhFQ19SSU5HX01BU0sgfCBMT0NBTF9JOTE1X0VYRUNfQlNEX01BU0spCisKK3N0YXRp YyBjb25zdCBpbnQgYm9fc2l6ZSA9IDQwOTY7CisKK3N0YXRpYyB2b2lkCitmaWxsX29iamVjdChz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqb2JqLCB1aW50MzJfdCBnZW1faGFuZGxl LAorCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jcywgdWlu dDMyX3QgY291bnQpCit7CisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKCpvYmopKTsKKwlvYmotPmhh bmRsZSA9IGdlbV9oYW5kbGU7CisJb2JqLT5yZWxvY2F0aW9uX2NvdW50ID0gY291bnQ7CisJb2Jq LT5yZWxvY3NfcHRyID0gKHVpbnRwdHJfdClyZWxvY3M7Cit9CisKK3N0YXRpYyB2b2lkCitmaWxs X3JlbG9jKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2MsCisJICAg dWludDMyX3QgZ2VtX2hhbmRsZSwgdWludDMyX3Qgb2Zmc2V0LAorCSAgIHVpbnQzMl90IHJlYWRf ZG9tYWlucywgdWludDMyX3Qgd3JpdGVfZG9tYWlucykKK3sKKwlyZWxvYy0+dGFyZ2V0X2hhbmRs ZSA9IGdlbV9oYW5kbGU7CisJcmVsb2MtPmRlbHRhID0gMDsKKwlyZWxvYy0+b2Zmc2V0ID0gb2Zm c2V0ICogc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gMDsKKwly ZWxvYy0+cmVhZF9kb21haW5zID0gcmVhZF9kb21haW5zOworCXJlbG9jLT53cml0ZV9kb21haW4g PSB3cml0ZV9kb21haW5zOworfQorCisvKgorICogTmVlZHMgdG8gYmUgZ2xvYmFsLiBTaWduYWwg aGFuZGxlcnMgZG9uJ3QgYWNjZXB0IGFyZ3VtZW50cworICovCitzdGF0aWMgdWludDMyX3QgKmJh dGNoOworCitzdGF0aWMgdWludDMyX3QgZW1pdF9yZWN1cnNpdmVfYmF0Y2goaW50IGZkLCBpbnQg ZW5naW5lLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGRlcF9oYW5kbGUpCit7CisJY29uc3QgaW50 IGdlbiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSk7CisJc3RydWN0IGRybV9p OTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2Nh dGlvbl9lbnRyeSByZWxvY3NbMl07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjYnVmOworCXVuc2lnbmVkIGludCBlbmdpbmVzWzE2XTsKKwl1bnNpZ25lZCBpbnQgbmVuZ2lu ZSwgaGFuZGxlOworCWludCBpID0gMCwgcmVsb2NfY291bnQgPSAwLCBidWZfY291bnQgPSAwOwor CisJYnVmX2NvdW50ID0gMDsKKwluZW5naW5lID0gMDsKKwlpZiAoZW5naW5lIDwgMCkgeworCQlm b3JfZWFjaF9lbmdpbmUoZmQsIGVuZ2luZSkKKwkJCWlmIChlbmdpbmUpCisJCQkJZW5naW5lc1tu ZW5naW5lKytdID0gZW5naW5lOworCX0gZWxzZSB7CisJCWdlbV9yZXF1aXJlX3JpbmcoZmQsIGVu Z2luZSk7CisJCWVuZ2luZXNbbmVuZ2luZSsrXSA9IGVuZ2luZTsKKwl9CisJaWd0X3JlcXVpcmUo bmVuZ2luZSk7CisKKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7CisJbWVt c2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW1lbXNldChyZWxvY3MsIDAsIHNpemVvZihyZWxv Y3MpKTsKKworCWV4ZWNidWYuYnVmZmVyc19wdHIgPSAodWludHB0cl90KSBvYmo7CisJaGFuZGxl ID0gZ2VtX2NyZWF0ZShmZCwgYm9fc2l6ZSk7CisJYmF0Y2ggPSBnZW1fbW1hcF9fZ3R0KGZkLCBo YW5kbGUsIGJvX3NpemUsIFBST1RfV1JJVEUpOworCWlndF9hc3NlcnQoYmF0Y2gpOworCWdlbV9z ZXRfZG9tYWluKGZkLCBoYW5kbGUsCisJCQlJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9E T01BSU5fR1RUKTsKKworCWlmIChkZXBfaGFuZGxlID4gMCkgeworCQkvKiBkdW1teSB3cml0ZSB0 byBkZXBlbmRlbmN5ICovCisJCWZpbGxfb2JqZWN0KCZvYmpbYnVmX2NvdW50XSwgZGVwX2hhbmRs ZSwgTlVMTCwgMCk7CisJCWJ1Zl9jb3VudCsrOworCisJCWZpbGxfcmVsb2MoJnJlbG9jc1tyZWxv Y19jb3VudF0sIGRlcF9oYW5kbGUsIDI1NiwKKwkJCSAgIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIs CisJCQkgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSKTsKKwkJcmVsb2NfY291bnQrKzsKKwl9CisK KwlpZiAoZ2VuID49IDgpIHsKKwkJYmF0Y2hbaSsrXSA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8 IDEgPDwgOCB8IDE7CisJCS8qIHJlY3Vyc2UgKi8KKwkJZmlsbF9yZWxvYygmcmVsb2NzW3JlbG9j X2NvdW50XSwgaGFuZGxlLCBpLAorCQkJICAgSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQsIDApOwor CQliYXRjaFtpKytdID0gMDsKKwkJYmF0Y2hbaSsrXSA9IDA7CisJfSBlbHNlIGlmIChnZW4gPj0g NikgeworCQliYXRjaFtpKytdID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4OworCQkv KiByZWN1cnNlICovCisJCWZpbGxfcmVsb2MoJnJlbG9jc1tyZWxvY19jb3VudF0sIGhhbmRsZSwg aSwKKwkJCSAgIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5ELCAwKTsKKwkJYmF0Y2hbaSsrXSA9IDA7 CisJfSBlbHNlIHsKKwkJYmF0Y2hbaSsrXSA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IDIgPDwg NiB8CisJCQkoKGdlbiA8IDQpID8gMSA6IDApOworCQkvKiByZWN1cnNlICovCisJCWZpbGxfcmVs b2MoJnJlbG9jc1tyZWxvY19jb3VudF0sIGhhbmRsZSwgaSwKKwkJCSAgIEk5MTVfR0VNX0RPTUFJ Tl9DT01NQU5ELCAwKTsKKwkJYmF0Y2hbaSsrXSA9IDA7CisJCWlmIChnZW4gPCA0KQorCQkJcmVs b2NzW3JlbG9jX2NvdW50XS5kZWx0YSA9IDE7CisJfQorCXJlbG9jX2NvdW50Kys7CisKKwlmaWxs X29iamVjdCgmb2JqW2J1Zl9jb3VudF0sIGhhbmRsZSwgcmVsb2NzLCByZWxvY19jb3VudCk7CisJ YnVmX2NvdW50Kys7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVuZ2luZTsgaSsrKSB7CisJCWV4ZWNi dWYuZmxhZ3MgPSBlbmdpbmVzW2ldOworCQlleGVjYnVmLmZsYWdzICY9IH5FTkdJTkVfTUFTSzsK KwkJZXhlY2J1Zi5idWZmZXJfY291bnQgPSBidWZfY291bnQ7CisJCWdlbV9leGVjYnVmKGZkLCAm ZXhlY2J1Zik7CisJfQorCisJcmV0dXJuIGhhbmRsZTsKK30KKworc3RhdGljIHZvaWQgZXhpdF9i YXRjaF9oYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCAqaW5mbywgdm9pZCAqc3BpbikKK3sKKwkq YmF0Y2ggPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCV9fc3luY19zeW5jaHJvbml6ZSgpOworfQor CitpbnQgbnVtX3NwaW5fb2JqZWN0czsKK2ludCBzcGluX29iamVjdHNfc3o7CitpZ3Rfc3Bpbl90 ICoqc3Bpbl9vYmplY3RzOworCitzdGF0aWMgdm9pZCBzYXZlX3NwaW5fYmF0Y2goaWd0X3NwaW5f dCAqc3BpbikKK3sKKwlpZiAobnVtX3NwaW5fb2JqZWN0cyA+PSBzcGluX29iamVjdHNfc3opIHsK KwkJaWYgKCFzcGluX29iamVjdHNfc3opCisJCQlzcGluX29iamVjdHNfc3ogPSA0OworCQllbHNl CisJCQlzcGluX29iamVjdHNfc3ogKj0gMjsKKworCQlzcGluX29iamVjdHMgPSByZWFsbG9jKHNw aW5fb2JqZWN0cywKKwkJCQkgICAgICAgc2l6ZW9mKGlndF9zcGluX3QgKikgKiBzcGluX29iamVj dHNfc3opOworCQlpZ3RfYXNzZXJ0KHNwaW5fb2JqZWN0cyk7CisJfQorCXNwaW5fb2JqZWN0c1tu dW1fc3Bpbl9vYmplY3RzKytdID0gc3BpbjsKK30KKwordm9pZCBpZ3RfdGVybWluYXRlX3NwaW5f YmF0Y2hlcyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8ICBudW1fc3Bpbl9v YmplY3RzOyBpKyspCisJCWlndF9zcGluX2JhdGNoX2VuZChzcGluX29iamVjdHNbaV0pOworfQor CisvKioKKyAqIGlndF9zcGluX2JhdGNoX25ldzoKKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxl IGRlc2NyaXB0b3IKKyAqIEBlbmdpbmU6IFJpbmcgdG8gZXhlY3V0ZSBiYXRjaCBPUidkIHdpdGgg ZXhlY2J1ZiBmbGFncy4gSWYgdmFsdWUgaXMgbGVzcworICogICAgICAgICAgdGhhbiAwLCBleGVj dXRlIG9uIGFsbCBhdmFpbGFibGUgcmluZ3MuCisgKiBAZGVwX2hhbmRsZTogaGFuZGxlIHRvIGEg YnVmZmVyIG9iamVjdCBkZXBlbmRlbmN5LiBJZiBncmVhdGVyIHRoYW4gMCwgYWRkIGEKKyAqICAg ICAgICAgICAgICByZWxvY2F0aW9uIGVudHJ5IHRvIHRoaXMgYnVmZmVyIHdpdGhpbiB0aGUgYmF0 Y2guCisgKgorICogU3RhcnQgYSByZWN1cnNpdmUgYmF0Y2ggb24gYSByaW5nLiBJbW1lZGlhdGVs eSByZXR1cm5zIGEgI2lndF9zcGluX3QgdGhhdAorICogY29udGFpbnMgdGhlIGJhdGNoJ3MgaGFu ZGxlIHRoYXQgY2FuIGJlIHdhaXRlZCB1cG9uLiBUaGUgcmV0dXJuZWQgc3RydWN0dXJlCisgKiBt dXN0IGJlIHBhc3NlZCB0byBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKCkgZm9yIHBvc3QtcHJvY2Vzc2lu Zy4KKyAqCisgKiBSZXR1cm5zOgorICogU3RydWN0dXJlIHdpdGggaGVscGVyIGludGVybmFsIHN0 YXRlIGZvciBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKCkuCisgKi8KK2lndF9zcGluX3QgKgoraWd0X3Nw aW5fYmF0Y2hfbmV3KGludCBmZCwgaW50IGVuZ2luZSwgdW5zaWduZWQgaW50IGRlcF9oYW5kbGUp Cit7CisJaWd0X3NwaW5fdCAqc3BpbiA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGlndF9zcGlu KSk7CisJdWludDMyX3QgaGFuZGxlID0gZW1pdF9yZWN1cnNpdmVfYmF0Y2goZmQsIGVuZ2luZSwg ZGVwX2hhbmRsZSk7CisKKwlpZ3RfYXNzZXJ0KGdlbV9ib19idXN5KGZkLCBoYW5kbGUpKTsKKwlz cGluLT5oYW5kbGUgPSBoYW5kbGU7CisJc3Bpbi0+YmF0Y2ggPSBiYXRjaDsKKwlzcGluLT50aW1l ciA9IE5VTEw7CisJc2F2ZV9zcGluX2JhdGNoKHNwaW4pOworCisJcmV0dXJuIHNwaW47Cit9CisK Ky8qKgorICogaWd0X3NwaW5fYmF0Y2hfc2V0X3RpbWVvdXQ6CisgKiBAc3Bpbjogc3BpbiBiYXRj aCBzdGF0ZSBmcm9tIGlndF9zcGluX2JhdGNoX25ldygpCisgKiBAbnM6IGFtb3VudCBvZiB0aW1l IGluIG5hbm9zZWNvbmRzIHRoZSBiYXRjaCBjb250aW51ZXMgdG8gZXhlY3V0ZQorICogICAgICBi ZWZvcmUgZmluaXNoaW5nLgorICoKKyAqIFNwZWNpZnkgYSB0aW1lb3V0LiBUaGlzIGVuZHMgdGhl IHJlY3Vyc2l2ZSBiYXRjaCBhc3NvY2lhdGVkIHdpdGggQHNwaW4gYWZ0ZXIKKyAqIHRoZSB0aW1l b3V0IGhhcyBlbGFwc2VkLgorICovCit2b2lkIGlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KGln dF9zcGluX3QgKnNwaW4sIGludDY0X3QgbnMpCit7CisJdGltZXJfdCB0aW1lcjsKKwlzdHJ1Y3Qg c2lnZXZlbnQgc2V2OworCXN0cnVjdCBzaWdhY3Rpb24gYWN0OworCXN0cnVjdCBpdGltZXJzcGVj IGl0czsKKworCWlndF9hc3NlcnQobnMgPiAwKTsKKwlpZiAoIXNwaW4pCisJCXJldHVybjsKKwor CW1lbXNldCgmc2V2LCAwLCBzaXplb2Yoc2V2KSk7CisJc2V2LnNpZ2V2X25vdGlmeSA9IFNJR0VW X1NJR05BTCB8IFNJR0VWX1RIUkVBRF9JRDsKKwlzZXYuc2lnZXZfbm90aWZ5X3RocmVhZF9pZCA9 IGdldHRpZCgpOworCXNldi5zaWdldl9zaWdubyA9IFNJR1JUTUlOICsgMTsKKwlpZ3RfYXNzZXJ0 KHRpbWVyX2NyZWF0ZShDTE9DS19NT05PVE9OSUMsICZzZXYsICZ0aW1lcikgPT0gMCk7CisJaWd0 X2Fzc2VydCh0aW1lciA+IDApOworCisJbWVtc2V0KCZhY3QsIDAsIHNpemVvZihhY3QpKTsKKwlh Y3Quc2Ffc2lnYWN0aW9uID0gZXhpdF9iYXRjaF9oYW5kbGVyOworCWFjdC5zYV9mbGFncyA9IFNB X1NJR0lORk87CisJaWd0X2Fzc2VydChzaWdhY3Rpb24oU0lHUlRNSU4gKyAxLCAmYWN0LCBOVUxM KSA9PSAwKTsKKworCW1lbXNldCgmaXRzLCAwLCBzaXplb2YoaXRzKSk7CisJaXRzLml0X3ZhbHVl LnR2X3NlYyA9IG5zIC8gTlNFQ19QRVJfU0VDOworCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gbnMg JSBOU0VDX1BFUl9TRUM7CisJaWd0X2Fzc2VydCh0aW1lcl9zZXR0aW1lKHRpbWVyLCAwLCAmaXRz LCBOVUxMKSA9PSAwKTsKKworCXNwaW4tPnRpbWVyID0gdGltZXI7Cit9CisKKy8qKgorICogaWd0 X3NwaW5fYmF0Y2hfZW5kOgorICogQHNwaW46IHNwaW4gYmF0Y2ggc3RhdGUgZnJvbSBpZ3Rfc3Bp bl9iYXRjaF9uZXcoKQorICoKKyAqIEVuZCB0aGUgcmVjdXJzaXZlIGJhdGNoIGFzc29jaWF0ZWQg d2l0aCBAc3BpbiBtYW51YWxseS4KKyAqLwordm9pZCBpZ3Rfc3Bpbl9iYXRjaF9lbmQoaWd0X3Nw aW5fdCAqc3BpbikKK3sKKwlpZiAoIXNwaW4pCisJCXJldHVybjsKKworCSpzcGluLT5iYXRjaCA9 IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisJX19zeW5jX3N5bmNocm9uaXplKCk7Cit9CisKKy8qKgor ICogaWd0X3NwaW5fYmF0Y2hfZnJlZToKKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2Ny aXB0b3IKKyAqIEBzcGluOiBzcGluIGJhdGNoIHN0YXRlIGZyb20gaWd0X3NwaW5fYmF0Y2hfbmV3 KCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIG5lY2Vzc2FyeSBwb3N0LXByb2Nlc3Np bmcgYWZ0ZXIgc3RhcnRpbmcgYSByZWN1cnNpdmUKKyAqIGJhdGNoIHdpdGggaWd0X3NwaW5fYmF0 Y2hfbmV3KCkuCisgKi8KK3ZvaWQgaWd0X3NwaW5fYmF0Y2hfZnJlZShpbnQgZmQsIGlndF9zcGlu X3QgKnNwaW4pCit7CisJaWYgKCFzcGluKQorCQlyZXR1cm47CisKKwlpZiAoc3Bpbi0+dGltZXIg PiAwKQorCQl0aW1lcl9kZWxldGUoc3Bpbi0+dGltZXIpOworCisJaWd0X3NwaW5fYmF0Y2hfZW5k KHNwaW4pOworCW11bm1hcChzcGluLT5iYXRjaCwgYm9fc2l6ZSk7CisJZ2VtX2Nsb3NlKGZkLCBz cGluLT5oYW5kbGUpOworCWZyZWUoc3Bpbik7CisKKwludW1fc3Bpbl9vYmplY3RzLS07Cit9CmRp ZmYgLS1naXQgYS9saWIvaWd0X2R1bW15bG9hZC5oIGIvbGliL2lndF9kdW1teWxvYWQuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNhMjQxCi0tLSAvZGV2L251bGwKKysr IGIvbGliL2lndF9kdW1teWxvYWQuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0 IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQK KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJ TiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19JR1RfRFVNTVlMT0FEX0hfXwor I2RlZmluZSBfX0lHVF9EVU1NWUxPQURfSF9fCisKK3R5cGVkZWYgc3RydWN0IGlndF9zcGluIHsK Kwl1bnNpZ25lZCBpbnQgaGFuZGxlOworCXVpbnQzMl90ICpiYXRjaDsKKwl0aW1lcl90IHRpbWVy OworfSBpZ3Rfc3Bpbl90OworCisKK2lndF9zcGluX3QgKgoraWd0X3NwaW5fYmF0Y2hfbmV3KGlu dCBmZCwgaW50IGVuZ2luZSwgdW5zaWduZWQgaW50IGRlcF9oYW5kbGUpOworCit2b2lkIGlndF9z cGluX2JhdGNoX3NldF90aW1lb3V0KGlndF9zcGluX3QgKnNwaW4sIGludDY0X3QgbnMpOworCit2 b2lkIGlndF9zcGluX2JhdGNoX2VuZChpZ3Rfc3Bpbl90ICpzcGluKTsKKwordm9pZCBpZ3Rfc3Bp bl9iYXRjaF9mcmVlKGludCBmZCwgaWd0X3NwaW5fdCAqc3Bpbik7CisKK3ZvaWQgaWd0X3Rlcm1p bmF0ZV9zcGluX2JhdGNoZXModm9pZCk7CisKKyNlbmRpZiAvKiBfX0lHVF9EVU1NWUxPQURfSF9f ICovCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==