From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abdiel Janulgue Subject: [i-g-t PATCH v11 2/5] lib: add igt_dummyload Date: Wed, 23 Nov 2016 17:53:50 +0200 Message-ID: <1479916430-11448-1-git-send-email-abdiel.janulgue@linux.intel.com> References: <20161123114725.GF19956@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id D0F7A6E835 for ; Wed, 23 Nov 2016 15:53:56 +0000 (UTC) In-Reply-To: <20161123114725.GF19956@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 IGxpbWl0YXRpb24KCkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgpD YzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KQ2M6IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogdG9tZXVAdG9tZXV2aXpv c28ubmV0ClJldmlld2VkLWJ5OiBUb21ldSBWaXpvc28gPHRvbWV1LnZpem9zb0Bjb2xsYWJvcmEu Y29tPgpTaWduZWQtb2ZmLWJ5OiBBYmRpZWwgSmFudWxndWUgPGFiZGllbC5qYW51bGd1ZUBsaW51 eC5pbnRlbC5jb20+Ci0tLQogLi4uL2ludGVsLWdwdS10b29scy9pbnRlbC1ncHUtdG9vbHMtZG9j cy54bWwgICAgICAgfCAgIDEgKwogbGliL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogbGliL2lndC5oICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDEgKwogbGliL2lndF9kdW1teWxvYWQuYyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAyODMgKysrKysrKysrKysrKysrKysrKysrCiBsaWIvaWd0 X2R1bW15bG9hZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0NCArKysrCiA1 IGZpbGVzIGNoYW5nZWQsIDMzMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2lndF9kdW1teWxvYWQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfZHVtbXlsb2FkLmgK CmRpZmYgLS1naXQgYS9kb2NzL3JlZmVyZW5jZS9pbnRlbC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRv b2xzLWRvY3MueG1sIGIvZG9jcy9yZWZlcmVuY2UvaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10 b29scy1kb2NzLnhtbAppbmRleCBjODYyZjJhLi41NTkwMmFiIDEwMDY0NAotLS0gYS9kb2NzL3Jl ZmVyZW5jZS9pbnRlbC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRvb2xzLWRvY3MueG1sCisrKyBiL2Rv Y3MvcmVmZXJlbmNlL2ludGVsLWdwdS10b29scy9pbnRlbC1ncHUtdG9vbHMtZG9jcy54bWwKQEAg LTMyLDYgKzMyLDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaW50ZWxfaW8ueG1sIi8+ CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF92YzQueG1sIi8+CiAgICAgPHhpOmluY2x1 ZGUgaHJlZj0ieG1sL2lndF92Z2VtLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9p Z3RfZHVtbXlsb2FkLnhtbCIvPgogICA8L2NoYXB0ZXI+CiAgIDx4aTppbmNsdWRlIGhyZWY9Inht bC9pZ3RfdGVzdF9wcm9ncmFtcy54bWwiLz4KIApkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNv dXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwppbmRleCBlOGUyNzdiLi43ZmM1ZWMyIDEwMDY0 NAotLS0gYS9saWIvTWFrZWZpbGUuc291cmNlcworKysgYi9saWIvTWFrZWZpbGUuc291cmNlcwpA QCAtNzUsNiArNzUsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKIAlpZ3RfZHJhdy5oCQlcCiAJ aWd0X3BtLmMJCVwKIAlpZ3RfcG0uaAkJXAorCWlndF9kdW1teWxvYWQuYwkJXAorCWlndF9kdW1t eWxvYWQuaAkJXAogCXV3aWxkbWF0L3V3aWxkbWF0LmgJXAogCXV3aWxkbWF0L3V3aWxkbWF0LmMJ XAogCSQoTlVMTCkKZGlmZiAtLWdpdCBhL2xpYi9pZ3QuaCBiL2xpYi9pZ3QuaAppbmRleCBkNzUx ZjI0Li5hMDAyOGQ1IDEwMDY0NAotLS0gYS9saWIvaWd0LmgKKysrIGIvbGliL2lndC5oCkBAIC0z Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiaWd0X2NvcmUuaCIKICNpbmNsdWRlICJpZ3RfZGVidWdm cy5oIgogI2luY2x1ZGUgImlndF9kcmF3LmgiCisjaW5jbHVkZSAiaWd0X2R1bW15bG9hZC5oIgog I2luY2x1ZGUgImlndF9mYi5oIgogI2luY2x1ZGUgImlndF9ndC5oIgogI2luY2x1ZGUgImlndF9r bXMuaCIKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZHVtbXlsb2FkLmMgYi9saWIvaWd0X2R1bW15bG9h ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjhiY2IKLS0tIC9kZXYv bnVsbAorKysgYi9saWIvaWd0X2R1bW15bG9hZC5jCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICog Q29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNp bmNsdWRlICJpZ3RfZHVtbXlsb2FkLmgiCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHNp Z25hbC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisKKy8qKgorICogU0VDVElPTjppZ3Rf ZHVtbXlsb2FkCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IExpYnJhcnkgZm9yIHN1Ym1pdHRpbmcg R1BVIHdvcmtsb2FkcworICogQHRpdGxlOiBEdW1teWxvYWQKKyAqIEBpbmNsdWRlOiBpZ3QuaAor ICoKKyAqIEEgbG90IG9mIGlndCB0ZXN0Y2FzZXMgbmVlZCBzb21lIEdQVSB3b3JrbG9hZCB0byBt YWtlIHN1cmUgYSByYWNlIHdpbmRvdyBpcworICogYmlnIGVub3VnaC4gVW5mb3J0dW5hdGVseSBo YXZpbmcgYSBmaXhlZCBhbW91bnQgb2Ygd29ya2xvYWQgbGVhZHMgdG8KKyAqIHNwdXJpb3VzIHRl c3QgZmFpbHVyZXMgb3Igb3Zlcmx5IGxvbmcgcnVudGltZXMgb24gc29tZSBmYXN0L3Nsb3cgcGxh dGZvcm1zLgorICogVGhpcyBsaWJyYXJ5IGNvbnRhaW5zIGZ1bmN0aW9uYWxpdHkgdG8gc3VibWl0 IEdQVSB3b3JrbG9hZHMgdGhhdCBzaG91bGQKKyAqIGNvbnN1bWUgZXhhY3RseSBhIHNwZWNpZmlj IGFtb3VudCBvZiB0aW1lLgorICovCisKKyNkZWZpbmUgTE9DQUxfSTkxNV9FWEVDX0JTRF9TSElG VCAgICAgICgxMykKKyNkZWZpbmUgTE9DQUxfSTkxNV9FWEVDX0JTRF9NQVNLICAgICAgICgzIDw8 IExPQ0FMX0k5MTVfRVhFQ19CU0RfU0hJRlQpCisKKyNkZWZpbmUgRU5HSU5FX01BU0sgIChJOTE1 X0VYRUNfUklOR19NQVNLIHwgTE9DQUxfSTkxNV9FWEVDX0JTRF9NQVNLKQorCitzdGF0aWMgY29u c3QgaW50IGJvX3NpemUgPSA0MDk2OworCitzdGF0aWMgdm9pZAorZmlsbF9vYmplY3Qoc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKm9iaiwgdWludDMyX3QgZ2VtX2hhbmRsZSwKKwkg ICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3MsIHVpbnQzMl90 IGNvdW50KQoreworCW1lbXNldChvYmosIDAsIHNpemVvZigqb2JqKSk7CisJb2JqLT5oYW5kbGUg PSBnZW1faGFuZGxlOworCW9iai0+cmVsb2NhdGlvbl9jb3VudCA9IGNvdW50OworCW9iai0+cmVs b2NzX3B0ciA9ICh1aW50cHRyX3QpcmVsb2NzOworfQorCitzdGF0aWMgdm9pZAorZmlsbF9yZWxv YyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAorCSAgIHVpbnQz Ml90IGdlbV9oYW5kbGUsIHVpbnQzMl90IG9mZnNldCwKKwkgICB1aW50MzJfdCByZWFkX2RvbWFp bnMsIHVpbnQzMl90IHdyaXRlX2RvbWFpbnMpCit7CisJcmVsb2MtPnRhcmdldF9oYW5kbGUgPSBn ZW1faGFuZGxlOworCXJlbG9jLT5kZWx0YSA9IDA7CisJcmVsb2MtPm9mZnNldCA9IG9mZnNldCAq IHNpemVvZih1aW50MzJfdCk7CisJcmVsb2MtPnByZXN1bWVkX29mZnNldCA9IDA7CisJcmVsb2Mt PnJlYWRfZG9tYWlucyA9IHJlYWRfZG9tYWluczsKKwlyZWxvYy0+d3JpdGVfZG9tYWluID0gd3Jp dGVfZG9tYWluczsKK30KKworLyoKKyAqIE5lZWRzIHRvIGJlIGdsb2JhbC4gU2lnbmFsIGhhbmRs ZXJzIGRvbid0IGFjY2VwdCBhcmd1bWVudHMKKyAqLworc3RhdGljIHVpbnQzMl90ICpiYXRjaDsK Kworc3RhdGljIHVpbnQzMl90IGVtaXRfcmVjdXJzaXZlX2JhdGNoKGludCBmZCwgaW50IGVuZ2lu ZSwgdW5zaWduZWQgZGVwX2hhbmRsZSkKK3sKKwljb25zdCBpbnQgZ2VuID0gaW50ZWxfZ2VuKGlu dGVsX2dldF9kcm1fZGV2aWQoZmQpKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0 MiBvYmpbMl07CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jc1sy XTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJdW5zaWduZWQg ZW5naW5lc1sxNl07CisJdW5zaWduZWQgbmVuZ2luZSwgaGFuZGxlOworCWludCBpID0gMCwgcmVs b2NfY291bnQgPSAwLCBidWZfY291bnQgPSAwOworCisJYnVmX2NvdW50ID0gMDsKKwluZW5naW5l ID0gMDsKKwlpZiAoZW5naW5lIDwgMCkgeworCQlmb3JfZWFjaF9lbmdpbmUoZmQsIGVuZ2luZSkK KwkJCWlmIChlbmdpbmUpCisJCQkJZW5naW5lc1tuZW5naW5lKytdID0gZW5naW5lOworCX0gZWxz ZSB7CisJCWdlbV9yZXF1aXJlX3JpbmcoZmQsIGVuZ2luZSk7CisJCWVuZ2luZXNbbmVuZ2luZSsr XSA9IGVuZ2luZTsKKwl9CisJaWd0X3JlcXVpcmUobmVuZ2luZSk7CisKKwltZW1zZXQoJmV4ZWNi dWYsIDAsIHNpemVvZihleGVjYnVmKSk7CisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOwor CW1lbXNldChyZWxvY3MsIDAsIHNpemVvZihyZWxvY3MpKTsKKworCWV4ZWNidWYuYnVmZmVyc19w dHIgPSAodWludHB0cl90KSBvYmo7CisJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgYm9fc2l6ZSk7 CisJYmF0Y2ggPSBnZW1fbW1hcF9fZ3R0KGZkLCBoYW5kbGUsIGJvX3NpemUsIFBST1RfV1JJVEUp OworCWlndF9hc3NlcnQoYmF0Y2gpOworCWdlbV9zZXRfZG9tYWluKGZkLCBoYW5kbGUsCisJCQlJ OTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKworCWlmIChkZXBfaGFu ZGxlID4gMCkgeworCQkvKiBkdW1teSB3cml0ZSB0byBkZXBlbmRlbmN5ICovCisJCWZpbGxfb2Jq ZWN0KCZvYmpbYnVmX2NvdW50XSwgZGVwX2hhbmRsZSwgTlVMTCwgMCk7CisJCWJ1Zl9jb3VudCsr OworCisJCWZpbGxfcmVsb2MoJnJlbG9jc1tyZWxvY19jb3VudF0sIGRlcF9oYW5kbGUsIDI1NiwK KwkJCSAgIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsCisJCQkgICBJOTE1X0dFTV9ET01BSU5fUkVO REVSKTsKKwkJcmVsb2NfY291bnQrKzsKKwl9CisKKwlpZiAoZ2VuID49IDgpIHsKKwkJYmF0Y2hb aSsrXSA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IDEgPDwgOCB8IDE7CisJCS8qIHJlY3Vyc2Ug Ki8KKwkJZmlsbF9yZWxvYygmcmVsb2NzW3JlbG9jX2NvdW50XSwgaGFuZGxlLCBpLAorCQkJICAg STkxNV9HRU1fRE9NQUlOX0NPTU1BTkQsIDApOworCQliYXRjaFtpKytdID0gMDsKKwkJYmF0Y2hb aSsrXSA9IDA7CisJfSBlbHNlIGlmIChnZW4gPj0gNikgeworCQliYXRjaFtpKytdID0gTUlfQkFU Q0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4OworCQkvKiByZWN1cnNlICovCisJCWZpbGxfcmVsb2Mo JnJlbG9jc1tyZWxvY19jb3VudF0sIGhhbmRsZSwgaSwKKwkJCSAgIEk5MTVfR0VNX0RPTUFJTl9D T01NQU5ELCAwKTsKKwkJYmF0Y2hbaSsrXSA9IDA7CisJfSBlbHNlIHsKKwkJYmF0Y2hbaSsrXSA9 IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IDIgPDwgNiB8CisJCQkoKGdlbiA8IDQpID8gMSA6IDAp OworCQkvKiByZWN1cnNlICovCisJCWZpbGxfcmVsb2MoJnJlbG9jc1tyZWxvY19jb3VudF0sIGhh bmRsZSwgaSwKKwkJCSAgIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5ELCAwKTsKKwkJYmF0Y2hbaSsr XSA9IDA7CisJCWlmIChnZW4gPCA0KQorCQkJcmVsb2NzW3JlbG9jX2NvdW50XS5kZWx0YSA9IDE7 CisJfQorCXJlbG9jX2NvdW50Kys7CisKKwlmaWxsX29iamVjdCgmb2JqW2J1Zl9jb3VudF0sIGhh bmRsZSwgcmVsb2NzLCByZWxvY19jb3VudCk7CisJYnVmX2NvdW50Kys7CisKKwlmb3IgKGkgPSAw OyBpIDwgbmVuZ2luZTsgaSsrKSB7CisJCWV4ZWNidWYuZmxhZ3MgPSBlbmdpbmVzW2ldOworCQll eGVjYnVmLmZsYWdzICY9IH5FTkdJTkVfTUFTSzsKKwkJZXhlY2J1Zi5idWZmZXJfY291bnQgPSBi dWZfY291bnQ7CisJCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7CisJfQorCisJcmV0dXJuIGhh bmRsZTsKK30KKworc3RhdGljIHZvaWQgZXhpdF9iYXRjaF9oYW5kbGVyKGludCBzaWcsIHNpZ2lu Zm9fdCAqaW5mbywgdm9pZCAqc3BpbikKK3sKKwkqYmF0Y2ggPSBNSV9CQVRDSF9CVUZGRVJfRU5E OworCV9fc3luY19zeW5jaHJvbml6ZSgpOworfQorCitzdGF0aWMgaW50IGF0X2V4aXRfZHJtX2Zk ID0gLTE7CisKK3N0YXRpYyB2b2lkIHF1aWVzY2VudF9ncHVfYXRfZXhpdChpbnQgc2lnKQorewor CWlmIChhdF9leGl0X2RybV9mZCA8IDApCisJCXJldHVybjsKKworCWdlbV9xdWllc2NlbnRfZ3B1 KGF0X2V4aXRfZHJtX2ZkKTsKKwlhdF9leGl0X2RybV9mZCA9IC0xOworfQorCisvKioKKyAqIGln dF9zcGluX2JhdGNoX25ldzoKKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IK KyAqIEBlbmdpbmU6IFJpbmcgdG8gZXhlY3V0ZSBiYXRjaCBPUidkIHdpdGggZXhlY2J1ZiBmbGFn cy4gSWYgdmFsdWUgaXMgbGVzcworICogICAgICAgICAgdGhhbiAwLCBleGVjdXRlIG9uIGFsbCBh dmFpbGFibGUgcmluZ3MuCisgKiBAZGVwX2hhbmRsZTogaGFuZGxlIHRvIGEgYnVmZmVyIG9iamVj dCBkZXBlbmRlbmN5LiBJZiBncmVhdGVyIHRoYW4gMCwgYWRkIGEKKyAqICAgICAgICAgICAgICBy ZWxvY2F0aW9uIGVudHJ5IHRvIHRoaXMgYnVmZmVyIHdpdGhpbiB0aGUgYmF0Y2guCisgKgorICog U3RhcnQgYSByZWN1cnNpdmUgYmF0Y2ggb24gYSByaW5nLiBJbW1lZGlhdGVseSByZXR1cm5zIGEg I2lndF9zcGluX3QgdGhhdAorICogY29udGFpbnMgdGhlIGJhdGNoJ3MgaGFuZGxlIHRoYXQgY2Fu IGJlIHdhaXRlZCB1cG9uLiBUaGUgcmV0dXJuZWQgc3RydWN0dXJlCisgKiBtdXN0IGJlIHBhc3Nl ZCB0byBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKCkgZm9yIHBvc3QtcHJvY2Vzc2luZy4KKyAqCisgKiBS ZXR1cm5zOgorICogU3RydWN0dXJlIHdpdGggaGVscGVyIGludGVybmFsIHN0YXRlIGZvciBpZ3Rf c3Bpbl9iYXRjaF9mcmVlKCkuCisgKi8KK2lndF9zcGluX3QgKgoraWd0X3NwaW5fYmF0Y2hfbmV3 KGludCBmZCwgaW50IGVuZ2luZSwgdW5zaWduZWQgZGVwX2hhbmRsZSkKK3sKKwlpZ3Rfc3Bpbl90 ICpzcGluID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgaWd0X3NwaW4pKTsKKwl1aW50MzJfdCBo YW5kbGUgPSBlbWl0X3JlY3Vyc2l2ZV9iYXRjaChmZCwgZW5naW5lLCBkZXBfaGFuZGxlKTsKKwlp Z3RfYXNzZXJ0KGdlbV9ib19idXN5KGZkLCBoYW5kbGUpKTsKKwlhdF9leGl0X2RybV9mZCA9IGZk OworCWlndF9pbnN0YWxsX2V4aXRfaGFuZGxlcihxdWllc2NlbnRfZ3B1X2F0X2V4aXQpOworCisJ c3Bpbi0+aGFuZGxlID0gaGFuZGxlOworCXNwaW4tPmJhdGNoID0gYmF0Y2g7CisJc3Bpbi0+dGlt ZXIgPSBOVUxMOworCisJcmV0dXJuIHNwaW47Cit9CisKKy8qKgorICogaWd0X3NwaW5fYmF0Y2hf c2V0X3RpbWVvdXQ6CisgKiBAc3Bpbjogc3BpbiBiYXRjaCBzdGF0ZSBmcm9tIGlndF9zcGluX2Jh dGNoX25ldygpCisgKiBAbnM6IGFtb3VudCBvZiB0aW1lIGluIG5hbm9zZWNvbmRzIHRoZSBiYXRj aCBjb250aW51ZXMgdG8gZXhlY3V0ZQorICogICAgICBiZWZvcmUgZmluaXNoaW5nLgorICoKKyAq IFNwZWNpZnkgYSB0aW1lb3V0LiBUaGlzIGVuZHMgdGhlIHJlY3Vyc2l2ZSBiYXRjaCBhc3NvY2lh dGVkIHdpdGggQHNwaW4gYWZ0ZXIKKyAqIHRoZSB0aW1lb3V0IGhhcyBlbGFwc2VkLgorICovCit2 b2lkIGlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KGlndF9zcGluX3QgKnNwaW4sIGludDY0X3Qg bnMpCit7CisJdGltZXJfdCB0aW1lcjsKKwlzdHJ1Y3Qgc2lnZXZlbnQgc2V2OworCXN0cnVjdCBz aWdhY3Rpb24gYWN0OworCXN0cnVjdCBpdGltZXJzcGVjIGl0czsKKworCWlndF9hc3NlcnQobnMg PiAwKTsKKwlpZiAoIXNwaW4pCisJCXJldHVybjsKKworCW1lbXNldCgmc2V2LCAwLCBzaXplb2Yo c2V2KSk7CisJc2V2LnNpZ2V2X25vdGlmeSA9IFNJR0VWX1NJR05BTCB8IFNJR0VWX1RIUkVBRF9J RDsKKwlzZXYuc2lnZXZfbm90aWZ5X3RocmVhZF9pZCA9IGdldHRpZCgpOworCXNldi5zaWdldl9z aWdubyA9IFNJR1JUTUlOICsgMTsKKwlpZ3RfYXNzZXJ0KHRpbWVyX2NyZWF0ZShDTE9DS19NT05P VE9OSUMsICZzZXYsICZ0aW1lcikgPT0gMCk7CisJaWd0X2Fzc2VydCh0aW1lciA+IDApOworCisJ bWVtc2V0KCZhY3QsIDAsIHNpemVvZihhY3QpKTsKKwlhY3Quc2Ffc2lnYWN0aW9uID0gZXhpdF9i YXRjaF9oYW5kbGVyOworCWFjdC5zYV9mbGFncyA9IFNBX1NJR0lORk87CisJaWd0X2Fzc2VydChz aWdhY3Rpb24oU0lHUlRNSU4gKyAxLCAmYWN0LCBOVUxMKSA9PSAwKTsKKworCW1lbXNldCgmaXRz LCAwLCBzaXplb2YoaXRzKSk7CisJaXRzLml0X3ZhbHVlLnR2X3NlYyA9IG5zIC8gTlNFQ19QRVJf U0VDOworCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gbnMgJSBOU0VDX1BFUl9TRUM7CisJaWd0X2Fz c2VydCh0aW1lcl9zZXR0aW1lKHRpbWVyLCAwLCAmaXRzLCBOVUxMKSA9PSAwKTsKKworCXNwaW4t PnRpbWVyID0gdGltZXI7Cit9CisKKy8qKgorICogaWd0X3NwaW5fYmF0Y2hfZW5kOgorICogQHNw aW46IHNwaW4gYmF0Y2ggc3RhdGUgZnJvbSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoKQorICoKKyAqIEVu ZCB0aGUgcmVjdXJzaXZlIGJhdGNoIGFzc29jaWF0ZWQgd2l0aCBAc3BpbiBtYW51YWxseS4KKyAq Lwordm9pZCBpZ3Rfc3Bpbl9iYXRjaF9lbmQoaWd0X3NwaW5fdCAqc3BpbikKK3sKKwlpZiAoIXNw aW4pCisJCXJldHVybjsKKworCWV4aXRfYmF0Y2hfaGFuZGxlcigwLCBOVUxMLCBOVUxMKTsKK30K KworLyoqCisgKiBpZ3Rfc3Bpbl9iYXRjaF9mcmVlOgorICogQGZkOiBvcGVuIGk5MTUgZHJtIGZp bGUgZGVzY3JpcHRvcgorICogQHNwaW46IHNwaW4gYmF0Y2ggc3RhdGUgZnJvbSBpZ3Rfc3Bpbl9i YXRjaF9uZXcoKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgbmVjZXNzYXJ5IHBvc3Qt cHJvY2Vzc2luZyBhZnRlciBzdGFydGluZyBhIHJlY3Vyc2l2ZQorICogYmF0Y2ggd2l0aCBpZ3Rf c3Bpbl9iYXRjaF9uZXcoKS4KKyAqLwordm9pZCBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGludCBmZCwg aWd0X3NwaW5fdCAqc3BpbikKK3sKKwlpZiAoIXNwaW4pCisJCXJldHVybjsKKworCWlmIChzcGlu LT50aW1lciA+IDApCisJCXRpbWVyX2RlbGV0ZShzcGluLT50aW1lcik7CisKKwlleGl0X2JhdGNo X2hhbmRsZXIoMCwgTlVMTCwgTlVMTCk7CisJbXVubWFwKHNwaW4tPmJhdGNoLCBib19zaXplKTsK KwlnZW1fY2xvc2UoZmQsIHNwaW4tPmhhbmRsZSk7CisJZnJlZShzcGluKTsKK30KZGlmZiAtLWdp dCBhL2xpYi9pZ3RfZHVtbXlsb2FkLmggYi9saWIvaWd0X2R1bW15bG9hZC5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZWJjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIv aWd0X2R1bW15bG9hZC5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAx NiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0lHVF9EVU1NWUxPQURfSF9fCisjZGVmaW5l IF9fSUdUX0RVTU1ZTE9BRF9IX18KKwordHlwZWRlZiBzdHJ1Y3QgaWd0X3NwaW4geworCXVuc2ln bmVkIGhhbmRsZTsKKwl1aW50MzJfdCAqYmF0Y2g7CisJdGltZXJfdCB0aW1lcjsKK30gaWd0X3Nw aW5fdDsKKworCitpZ3Rfc3Bpbl90ICoKK2lndF9zcGluX2JhdGNoX25ldyhpbnQgZmQsIGludCBl bmdpbmUsIHVuc2lnbmVkIGRlcF9oYW5kbGUpOworCit2b2lkIGlndF9zcGluX2JhdGNoX3NldF90 aW1lb3V0KGlndF9zcGluX3QgKnNwaW4sIGludDY0X3QgbnMpOworCit2b2lkIGlndF9zcGluX2Jh dGNoX2VuZChpZ3Rfc3Bpbl90ICpzcGluKTsKKwordm9pZCBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGlu dCBmZCwgaWd0X3NwaW5fdCAqc3Bpbik7CisKKyNlbmRpZiAvKiBfX0lHVF9EVU1NWUxPQURfSF9f ICovCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==