From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Chris Wilson Date: Thu, 10 Oct 2019 08:32:58 +0100 Message-Id: <20191010073258.24519-2-chris@chris-wilson.co.uk> In-Reply-To: <20191010073258.24519-1-chris@chris-wilson.co.uk> References: <20191010073258.24519-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 2/2] Add i915/gem_ctx_persistence List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: intel-gfx@lists.freedesktop.org Cc: Tvrtko Ursulin , igt-dev@lists.freedesktop.org, Jon Bloomfield List-ID: U2FuaXR5IHRlc3QgZXhpc3RpbmcgcGVyc2lzdGVuY2UgYW5kIG5ldyBleGNpdGluZyBub24tcGVy c2lzdGVudCBjb250ZXh0CmJlaGF2aW91ci4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFo dGluZW5AbGludXguaW50ZWwuY29tPgpDYzogTWljaGHFgiBXaW5pYXJza2kgPG1pY2hhbC53aW5p YXJza2lAaW50ZWwuY29tPgpDYzogSm9uIEJsb29tZmllbGQgPGpvbi5ibG9vbWZpZWxkQGludGVs LmNvbT4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBB bmRpIFNoeXRpIDxhbmRpLnNoeXRpQGludGVsLmNvbT4KLS0tCiBsaWIvaTkxNS9nZW1fY29udGV4 dC5jICAgICAgICAgICB8ICAzNyArKysKIGxpYi9pOTE1L2dlbV9jb250ZXh0LmggICAgICAgICAg IHwgICA4ICsKIGxpYi9pZ3RfZHVtbXlsb2FkLmMgICAgICAgICAgICAgIHwgICAzICstCiBsaWIv aW9jdGxfd3JhcHBlcnMuYyAgICAgICAgICAgICB8ICAgMSArCiB0ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzICAgICAgICAgICB8ICAgMyArCiB0ZXN0cy9pOTE1L2dlbV9jdHhfcGVyc2lzdGVuY2UuYyB8 IDQwNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAg ICAgICAgICAgICAgICB8ICAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDQ1OSBpbnNlcnRpb25zKCsp LCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvaTkxNS9nZW1fY3R4X3Bl cnNpc3RlbmNlLmMKCmRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fY29udGV4dC5jIGIvbGliL2k5 MTUvZ2VtX2NvbnRleHQuYwppbmRleCA4M2M1ZGY5NjEuLjFmYWU1MTkxZiAxMDA2NDQKLS0tIGEv bGliL2k5MTUvZ2VtX2NvbnRleHQuYworKysgYi9saWIvaTkxNS9nZW1fY29udGV4dC5jCkBAIC0y NzIsNiArMjcyLDQzIEBAIHZvaWQgZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGludCBmZCwgdWlu dDMyX3QgY3R4X2lkLCBpbnQgcHJpbykKIAlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0 X3ByaW9yaXR5KGZkLCBjdHhfaWQsIHByaW8pLCAwKTsKIH0KIAorLyoqCisgKiBfX2dlbV9jb250 ZXh0X3NldF9wZXJzaXN0ZW5jZToKKyAqIEBpOTE1OiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3Jp cHRvcgorICogQGN0eDogaTkxNSBjb250ZXh0IGlkCisgKiBAc3RhdGU6IGRlc2lyZWQgcGVyc2lz dGVuY2UKKyAqCisgKiBEZWNsYXJlIHdoZXRoZXIgdGhpcyBjb250ZXh0IGlzIGFsbG93ZWQgdG8g cGVyc2lzdCBhZnRlciBjbG9zaW5nIHVudGlsCisgKiBpdHMgcmVxdWVzdHMgYXJlIGNvbXBsZXRl IChwZXJzaXN0ZW50PXRydWUpIG9yIGlmIGl0IHNob3VsZCBiZQorICogaW1tZWRpYXRlbHkgcmVh cGVkIG9uIGNsb3NpbmcgYW5kIGl0cyByZXF1ZXN0cyBjYW5jZWxsZWQKKyAqIChwZXJzaXN0ZW50 PWZhbHNlKS4KKyAqCisgKiBSZXR1cm5zOiBBbiBpbnRlZ2VyIGVxdWFsIHRvIHplcm8gZm9yIHN1 Y2Nlc3MgYW5kIG5lZ2F0aXZlIGZvciBmYWlsdXJlCisgKi8KK2ludCBfX2dlbV9jb250ZXh0X3Nl dF9wZXJzaXN0ZW5jZShpbnQgaTkxNSwgdWludDMyX3QgY3R4LCBib29sIHN0YXRlKQoreworCXN0 cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBwID0geworCQkuY3R4X2lkID0gY3R4LAor CQkucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fUEVSU0lTVEVOQ0UsCisJCS52YWx1ZSA9IHN0 YXRlLAorCX07CisKKwlyZXR1cm4gX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwor fQorCisvKioKKyAqIF9fZ2VtX2NvbnRleHRfc2V0X3BlcnNpc3RlbmNlOgorICogQGk5MTU6IG9w ZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiBAY3R4OiBpOTE1IGNvbnRleHQgaWQKKyAq IEBzdGF0ZTogZGVzaXJlZCBwZXJzaXN0ZW5jZQorICoKKyAqIExpa2UgX19nZW1fY29udGV4dF9z ZXRfcGVyc2lzdGVuY2UoKSwgZXhjZXB0IHdlIGFzc2VydCBvbiBmYWlsdXJlLgorICovCit2b2lk IGdlbV9jb250ZXh0X3NldF9wZXJzaXN0ZW5jZShpbnQgaTkxNSwgdWludDMyX3QgY3R4LCBib29s IHN0YXRlKQoreworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGVyc2lzdGVuY2Uo aTkxNSwgY3R4LCBzdGF0ZSksIDApOworfQorCiBpbnQKIF9fZ2VtX2NvbnRleHRfY2xvbmUoaW50 IGk5MTUsCiAJCSAgICB1aW50MzJfdCBzcmMsIHVuc2lnbmVkIGludCBzaGFyZSwKZGlmZiAtLWdp dCBhL2xpYi9pOTE1L2dlbV9jb250ZXh0LmggYi9saWIvaTkxNS9nZW1fY29udGV4dC5oCmluZGV4 IDgwNDNjMzQwMS4uYzBkNGM5NjE1IDEwMDY0NAotLS0gYS9saWIvaTkxNS9nZW1fY29udGV4dC5o CisrKyBiL2xpYi9pOTE1L2dlbV9jb250ZXh0LmgKQEAgLTI0LDYgKzI0LDExIEBACiAjaWZuZGVm IEdFTV9DT05URVhUX0gKICNkZWZpbmUgR0VNX0NPTlRFWFRfSAogCisjaW5jbHVkZSA8c3RkYm9v bC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRf cGFyYW07CisKIHVpbnQzMl90IGdlbV9jb250ZXh0X2NyZWF0ZShpbnQgZmQpOwogaW50IF9fZ2Vt X2NvbnRleHRfY3JlYXRlKGludCBmZCwgdWludDMyX3QgKmN0eF9pZCk7CiB2b2lkIGdlbV9jb250 ZXh0X2Rlc3Ryb3koaW50IGZkLCB1aW50MzJfdCBjdHhfaWQpOwpAQCAtNTgsNiArNjMsOSBAQCBp bnQgX19nZW1fY29udGV4dF9nZXRfcGFyYW0oaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2Nv bnRleHRfcGFyYW0gKnApOwogaW50IF9fZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGludCBmZCwg dWludDMyX3QgY3R4LCBpbnQgcHJpbyk7CiB2b2lkIGdlbV9jb250ZXh0X3NldF9wcmlvcml0eShp bnQgZmQsIHVpbnQzMl90IGN0eCwgaW50IHByaW8pOwogCitpbnQgX19nZW1fY29udGV4dF9zZXRf cGVyc2lzdGVuY2UoaW50IGk5MTUsIHVpbnQzMl90IGN0eCwgYm9vbCBzdGF0ZSk7Cit2b2lkIGdl bV9jb250ZXh0X3NldF9wZXJzaXN0ZW5jZShpbnQgaTkxNSwgdWludDMyX3QgY3R4LCBib29sIHN0 YXRlKTsKKwogYm9vbCBnZW1fY29udGV4dF9oYXNfZW5naW5lKGludCBmZCwgdWludDMyX3QgY3R4 LCB1aW50NjRfdCBlbmdpbmUpOwogCiAjZW5kaWYgLyogR0VNX0NPTlRFWFRfSCAqLwpkaWZmIC0t Z2l0IGEvbGliL2lndF9kdW1teWxvYWQuYyBiL2xpYi9pZ3RfZHVtbXlsb2FkLmMKaW5kZXggNjVi NWNjOTI3Li42MDYwODc4ZGQgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfZHVtbXlsb2FkLmMKKysrIGIv bGliL2lndF9kdW1teWxvYWQuYwpAQCAtNDUwLDcgKzQ1MCw4IEBAIHZvaWQgaWd0X3NwaW5fZnJl ZShpbnQgZmQsIGlndF9zcGluX3QgKnNwaW4pCiAJCWdlbV9jbG9zZShmZCwgc3Bpbi0+cG9sbF9o YW5kbGUpOwogCX0KIAotCWdlbV9jbG9zZShmZCwgc3Bpbi0+aGFuZGxlKTsKKwlpZiAoc3Bpbi0+ aGFuZGxlKQorCQlnZW1fY2xvc2UoZmQsIHNwaW4tPmhhbmRsZSk7CiAKIAlpZiAoc3Bpbi0+b3V0 X2ZlbmNlID49IDApCiAJCWNsb3NlKHNwaW4tPm91dF9mZW5jZSk7CmRpZmYgLS1naXQgYS9saWIv aW9jdGxfd3JhcHBlcnMuYyBiL2xpYi9pb2N0bF93cmFwcGVycy5jCmluZGV4IDI4MGZkZDYyNC4u NjI4ZjhiODMwIDEwMDY0NAotLS0gYS9saWIvaW9jdGxfd3JhcHBlcnMuYworKysgYi9saWIvaW9j dGxfd3JhcHBlcnMuYwpAQCAtNDQ1LDYgKzQ0NSw3IEBAIGludCBnZW1fd2FpdChpbnQgZmQsIHVp bnQzMl90IGhhbmRsZSwgaW50NjRfdCAqdGltZW91dF9ucykKIAlyZXQgPSAwOwogCWlmIChpZ3Rf aW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9XQUlULCAmd2FpdCkpCiAJCXJldCA9IC1lcnJu bzsKKwllcnJubyA9IDA7CiAKIAlpZiAodGltZW91dF9ucykKIAkJKnRpbWVvdXRfbnMgPSB3YWl0 LnRpbWVvdXRfbnM7CmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMv TWFrZWZpbGUuc291cmNlcwppbmRleCAzNDNiZTA1MDAuLjA5M2ViNTdmMyAxMDA2NDQKLS0tIGEv dGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0x NTQsNiArMTU0LDkgQEAgZ2VtX2N0eF9pc29sYXRpb25fU09VUkNFUyA9IGk5MTUvZ2VtX2N0eF9p c29sYXRpb24uYwogVEVTVFNfcHJvZ3MgKz0gZ2VtX2N0eF9wYXJhbQogZ2VtX2N0eF9wYXJhbV9T T1VSQ0VTID0gaTkxNS9nZW1fY3R4X3BhcmFtLmMKIAorVEVTVFNfcHJvZ3MgKz0gZ2VtX2N0eF9w ZXJzaXN0ZW5jZQorZ2VtX2N0eF9wZXJzaXN0ZW5jZV9TT1VSQ0VTID0gaTkxNS9nZW1fY3R4X3Bl cnNpc3RlbmNlLmMKKwogVEVTVFNfcHJvZ3MgKz0gZ2VtX2N0eF9zaGFyZWQKIGdlbV9jdHhfc2hh cmVkX1NPVVJDRVMgPSBpOTE1L2dlbV9jdHhfc2hhcmVkLmMKIApkaWZmIC0tZ2l0IGEvdGVzdHMv aTkxNS9nZW1fY3R4X3BlcnNpc3RlbmNlLmMgYi90ZXN0cy9pOTE1L2dlbV9jdHhfcGVyc2lzdGVu Y2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjg1NGMxNDZlYwotLS0g L2Rldi9udWxsCisrKyBiL3Rlc3RzL2k5MTUvZ2VtX2N0eF9wZXJzaXN0ZW5jZS5jCkBAIC0wLDAg KzEsNDA3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1 ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiZHJtdGVzdC5oIiAvKiBnZW1f cXVpZXNjZW50X2dwdSgpISAqLworI2luY2x1ZGUgImk5MTUvZ2VtX2NvbnRleHQuaCIKKyNpbmNs dWRlICJpOTE1L2dlbV9zdWJtaXNzaW9uLmgiCisjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKKyNp bmNsdWRlICJpZ3RfZHVtbXlsb2FkLmgiCisjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCisjaW5jbHVk ZSAiaW9jdGxfd3JhcHBlcnMuaCIgLyogZ2VtX3dhaXQoKSEgKi8KKyNpbmNsdWRlICJzd19zeW5j LmgiCisKK3N0YXRpYyBib29sIGhhc19wZXJzaXN0ZW5jZShpbnQgaTkxNSkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gcCA9IHsKKwkJLnBhcmFtID0gSTkxNV9DT05URVhU X1BBUkFNX1BFUlNJU1RFTkNFLAorCX07CisJdWludDY0X3Qgc2F2ZWQ7CisKKwlpZiAoX19nZW1f Y29udGV4dF9nZXRfcGFyYW0oaTkxNSwgJnApKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzYXZlZCA9 IHAudmFsdWU7CisJcC52YWx1ZSA9IDA7CisJaWYgKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5 MTUsICZwKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcC52YWx1ZSA9IHNhdmVkOworCXJldHVybiBf X2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCkgPT0gMDsKK30KKworc3RhdGljIGJvb2wg ZW5hYmxlX2hhbmdjaGVjayhpbnQgaTkxNSkKK3sKKwlpbnQgZW5hYmxlZCA9IC0xOworCWludCBk aXI7CisKKwlkaXIgPSBpZ3Rfc3lzZnNfb3Blbl9wYXJhbWV0ZXJzKGk5MTUpOworCWlmIChkaXIg PCAwKSAvKiBubyBwYXJhbWV0ZXJzLCBtdXN0IGJlIGRlZmF1bHQhICovCisJCXJldHVybiBlbmFi bGVkOworCisJLyogSWYgaTkxNS5oYW5nY2hlY2sgaXMgcmVtb3ZlZCwgYXNzdW1lIHRoZSBkZWZh dWx0IGlzIGdvb2QgKi8KKwlpZ3Rfc3lzZnNfc2V0KGRpciwgImVuYWJsZV9oYW5nY2hlY2siLCAi MSIpOworCWlndF9zeXNmc19zY2FuZihkaXIsICJlbmFibGVfaGFuZ2NoZWNrIiwgIiVkIiwgJmVu YWJsZWQpOworCisJY2xvc2UoZGlyKTsKKworCXJldHVybiBlbmFibGVkOworfQorCitzdGF0aWMg dm9pZCB0ZXN0X2lkZW1wb3RlbnQoaW50IGk5MTUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9j b250ZXh0X3BhcmFtIHAgPSB7CisJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9QRVJTSVNU RU5DRSwKKwl9OworCWludCBleHBlY3RlZDsKKworCS8qCisJICogU2ltcGxlIHRlc3QgdG8gdmVy aWZ5IHRoYXQgd2UgYXJlIGFibGUgdG8gcmVhZCBiYWNrIHRoZSBzYW1lIGJvb2xlYW4KKwkgKiB2 YWx1ZSBhcyB3ZSBzZXQuCisJICoKKwkgKiBFYWNoIHRpbWUgd2UgaW52ZXJ0IHRoZSBjdXJyZW50 IHZhbHVlIHNvIHRoYXQgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCwKKwkgKiBpZiBzdWNjZXNzZnVs LCB3ZSBsZWF2ZSB0aGUgY29udGV4dCBpbiB0aGUgb3JpZ2luYWwgc3RhdGUuCisJICovCisKKwln ZW1fY29udGV4dF9nZXRfcGFyYW0oaTkxNSwgJnApOworCWV4cGVjdGVkID0gISFwLnZhbHVlOwor CisJZXhwZWN0ZWQgPSAhZXhwZWN0ZWQ7CisJcC52YWx1ZSA9IGV4cGVjdGVkOworCWdlbV9jb250 ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7CisJZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGk5MTUsICZw KTsKKwlpZ3RfYXNzZXJ0X2VxKHAudmFsdWUsIGV4cGVjdGVkKTsKKworCWV4cGVjdGVkID0gIWV4 cGVjdGVkOyAvKiBhbmQgcmVzdG9yZXMgKi8KKwlwLnZhbHVlID0gZXhwZWN0ZWQ7CisJZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oaTkxNSwg JnApOworCWlndF9hc3NlcnRfZXEocC52YWx1ZSwgZXhwZWN0ZWQpOworfQorCitzdGF0aWMgdm9p ZCB0ZXN0X3BlcnNpc3RlbmNlKGludCBpOTE1KQoreworCWlndF9zcGluX3QgKnNwaW47CisJaW50 NjRfdCB0aW1lb3V0OworCXVpbnQzMl90IGN0eDsKKworCS8qCisJICogRGVmYXVsdCBiZWhhdmlv dXIgYXJlIGNvbnRleHRzIHJlbWFpbiBhbGl2ZSB1bnRpbCB0aGVpciBsYXN0IGFjdGl2ZQorCSAq IHJlcXVlc3QgaXMgcmV0aXJlZCAtLSBubyBlYXJseSB0ZXJtaW5hdGlvbi4KKwkgKi8KKworCWN0 eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKKwlnZW1fY29udGV4dF9zZXRfcGVyc2lzdGVu Y2UoaTkxNSwgY3R4LCB0cnVlKTsKKworCXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAu ZmxhZ3MgPSBJR1RfU1BJTl9GRU5DRV9PVVQpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwg Y3R4KTsKKworCXRpbWVvdXQgPSBOU0VDX1BFUl9TRUMgLyA1OworCWlndF9hc3NlcnRfZXEoZ2Vt X3dhaXQoaTkxNSwgc3Bpbi0+aGFuZGxlLCAmdGltZW91dCksIC1FVElNRSk7CisKKwlpZ3Rfc3Bp bl9lbmQoc3Bpbik7CisKKwl0aW1lb3V0ID0gTlNFQ19QRVJfU0VDIC8gNTsKKwlpZ3RfYXNzZXJ0 X2VxKGdlbV93YWl0KGk5MTUsIHNwaW4tPmhhbmRsZSwgJnRpbWVvdXQpLCAwKTsKKwlpZ3RfYXNz ZXJ0X2VxKHN5bmNfZmVuY2Vfc3RhdHVzKHNwaW4tPm91dF9mZW5jZSksIDEpOworCisJaWd0X3Nw aW5fZnJlZShpOTE1LCBzcGluKTsKKwlnZW1fcXVpZXNjZW50X2dwdShpOTE1KTsKK30KKworc3Rh dGljIHZvaWQgdGVzdF9ub25wZXJzaXN0ZW50X2NsZWFudXAoaW50IGk5MTUpCit7CisJaW50NjRf dCB0aW1lb3V0ID0gTlNFQ19QRVJfU0VDIC8gNTsKKwlpZ3Rfc3Bpbl90ICpzcGluOworCXVpbnQz Ml90IGN0eDsKKworCS8qCisJICogQSBub25wZXJzaXN0ZW50IGNvbnRleHQgaXMgdGVybWluYXRl ZCBpbW1lZGlhdGVseSB1cG9uIGNsb3N1cmUsCisJICogYW55IGluZmxpZ2h0IHJlcXVlc3QgaXMg Y2FuY2VsbGVkLgorCSAqLworCisJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOworCWdl bV9jb250ZXh0X3NldF9wZXJzaXN0ZW5jZShpOTE1LCBjdHgsIGZhbHNlKTsKKworCXNwaW4gPSBp Z3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1RfU1BJTl9GRU5DRV9PVVQpOworCWdl bV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKKworCWlndF9hc3NlcnRfZXEoZ2VtX3dhaXQo aTkxNSwgc3Bpbi0+aGFuZGxlLCAmdGltZW91dCksIDApOworCWlndF9hc3NlcnRfZXEoc3luY19m ZW5jZV9zdGF0dXMoc3Bpbi0+b3V0X2ZlbmNlKSwgLUVJTyk7CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5 MTUsIHNwaW4pOworCWdlbV9xdWllc2NlbnRfZ3B1KGk5MTUpOworfQorCitzdGF0aWMgdm9pZCB0 ZXN0X25vbnBlcnNpc3RlbnRfbWl4ZWQoaW50IGk5MTUpCit7CisJaW50IGZlbmNlWzNdOworCisJ LyoKKwkgKiBPbmx5IGEgbm9ucGVyc2lzdGVudCBjb250ZXh0IGlzIHRlcm1pbmF0ZWQgaW1tZWRp YXRlbHkgdXBvbgorCSAqIGNsb3N1cmUsIGFueSBpbmZsaWdodCByZXF1ZXN0IGlzIGNhbmNlbGxl ZC4gSWYgdGhlcmUgaXMgYWxzbworCSAqIGFuIGFjdGl2ZSBwZXJzaXN0ZW50IGNvbnRleHQgY2xv c2VkLCBpdCBzaG91bGQgYmUgdW5hZmZmZWN0ZWQuCisJICovCisKKwlmb3IgKGludCBpID0gMDsg aSA8IEFSUkFZX1NJWkUoZmVuY2UpOyBpKyspIHsKKwkJaWd0X3NwaW5fdCAqc3BpbjsKKwkJdWlu dDMyX3QgY3R4OworCisJCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKKwkJZ2VtX2Nv bnRleHRfc2V0X3BlcnNpc3RlbmNlKGk5MTUsIGN0eCwgaSAmIDEpOworCisJCXNwaW4gPSBpZ3Rf c3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1RfU1BJTl9GRU5DRV9PVVQpOworCQlnZW1f Y29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisKKwkJZmVuY2VbaV0gPSBzcGluLT5vdXRfZmVu Y2U7CisJfQorCisJLyogT3V0ZXIgcGFpciBvZiBjb250ZXh0cyB3ZXJlIG5vbi1wZXJzaXN0ZW50 IGFuZCBraWxsZWQgKi8KKwlpZ3RfYXNzZXJ0X2VxKHN5bmNfZmVuY2Vfd2FpdChmZW5jZVswXSwg TVNFQ19QRVJfU0VDIC8gNSksIDApOworCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV9zdGF0dXMo ZmVuY2VbMF0pLCAtRUlPKTsKKworCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV93YWl0KGZlbmNl WzJdLCBNU0VDX1BFUl9TRUMgLyA1KSwgMCk7CisJaWd0X2Fzc2VydF9lcShzeW5jX2ZlbmNlX3N0 YXR1cyhmZW5jZVsyXSksIC1FSU8pOworCisJLyogQnV0IHRoZSBtaWRkbGUgY29udGV4dCBpcyBz dGlsbCBydW5uaW5nICovCisJaWd0X2Fzc2VydF9lcShzeW5jX2ZlbmNlX3dhaXQoZmVuY2VbMV0s IDApLCAtRVRJTUUpOworCisJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7Cit9CisKK3N0YXRpYyB2 b2lkIHRlc3Rfbm9ucGVyc2lzdGVudF9ob3N0aWxlKGludCBpOTE1KQoreworCWludDY0X3QgdGlt ZW91dCA9IE5TRUNfUEVSX1NFQyAvIDI7CisJaWd0X3NwaW5fdCAqc3BpbjsKKwl1aW50MzJfdCBj dHg7CisKKwkvKgorCSAqIElmIHdlIGNhbm5vdCBjbGVhbmx5IGNhbmNlbCB0aGUgcGVyc2lzdGVu dCBjb250ZXh0IG9uIGNsb3N1cmUsCisJICogZS5nLiBwcmVlbXB0aW9uIGZhaWxzLCB3ZSBhcmUg Zm9yY2VkIHRvIHJlc2V0IHRoZSBHUFUgdG8gdGVybWluYXRlCisJICogdGhlIHJlcXVlc3RzIGFu ZCBjbGVhbnVwIHRoZSBjb250ZXh0LgorCSAqLworCisJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRl KGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9wZXJzaXN0ZW5jZShpOTE1LCBjdHgsIGZhbHNlKTsK KworCXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1RfU1BJTl9OT19Q UkVFTVBUSU9OKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisKKwlpZ3RfYXNz ZXJ0X2VxKGdlbV93YWl0KGk5MTUsIHNwaW4tPmhhbmRsZSwgJnRpbWVvdXQpLCAwKTsKKworCWln dF9zcGluX2ZyZWUoaTkxNSwgc3Bpbik7CisJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7Cit9CisK K3N0YXRpYyB2b2lkIHRlc3Rfbm9oYW5nY2hlY2tfaG9zdGlsZShpbnQgaTkxNSkKK3sKKwlpbnQ2 NF90IHRpbWVvdXQgPSBOU0VDX1BFUl9TRUMgLyAyOworCWlndF9zcGluX3QgKnNwaW47CisJdWlu dDMyX3QgY3R4OworCWludCBkaXI7CisKKwkvKgorCSAqIEV2ZW4gaWYgdGhlIHVzZXIgZGlzYWJs ZXMgaGFuZ2NoZWNrIGR1cmluZyB0aGVpciBjb250ZXh0LAorCSAqIHdlIGZvcmNpYmx5IHRlcm1p bmF0ZSB0aGF0IGNvbnRleHQuCisJICovCisKKwlkaXIgPSBpZ3Rfc3lzZnNfb3Blbl9wYXJhbWV0 ZXJzKGk5MTUpOworCWlndF9yZXF1aXJlKGRpciAhPSAtMSk7CisKKwljdHggPSBnZW1fY29udGV4 dF9jcmVhdGUoaTkxNSk7CisKKwlpZ3RfcmVxdWlyZShpZ3Rfc3lzZnNfc2V0KGRpciwgImVuYWJs ZV9oYW5nY2hlY2siLCAiMCIpKTsKKworCXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAu ZmxhZ3MgPSBJR1RfU1BJTl9OT19QUkVFTVBUSU9OKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5 MTUsIGN0eCk7CisKKwlpZ3RfYXNzZXJ0X2VxKGdlbV93YWl0KGk5MTUsIHNwaW4tPmhhbmRsZSwg JnRpbWVvdXQpLCAwKTsKKworCWlndF9hc3NlcnQoaWd0X3N5c2ZzX3NldChkaXIsICJlbmFibGVf aGFuZ2NoZWNrIiwgIjEiKSk7CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW4pOworCWdlbV9x dWllc2NlbnRfZ3B1KGk5MTUpOworCWNsb3NlKGRpcik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf bm9ucGVyc2lzdGVudF9maWxlKGludCBpOTE1KQoreworCWlndF9zcGluX3QgKnNwaW47CisJdWlu dDMyX3QgY3R4OworCisJLyoKKwkgKiBBIGNvbnRleHQgbWF5IGxpdmUgYmV5b25kIGl0cyBpbml0 aWFsIHN0cnVjdCBmaWxlLCBleGNlcHQgaWYgaXQKKwkgKiBoYXMgYmVlbiBtYWRlIG5vbnBlcnNp c3RlbnQsIGluIHdoaWNoIGNhc2UgaXQgbXVzdCBiZSB0ZXJtaW5hdGVkLgorCSAqLworCisJaTkx NSA9IGdlbV9yZW9wZW5fZHJpdmVyKGk5MTUpOworCisJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRl KGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9wZXJzaXN0ZW5jZShpOTE1LCBjdHgsIGZhbHNlKTsK KworCXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1RfU1BJTl9GRU5D RV9PVVQpOworCWNsb3NlKGk5MTUpOworCisJaWd0X2Fzc2VydF9lcShzeW5jX2ZlbmNlX3dhaXQo c3Bpbi0+b3V0X2ZlbmNlLCBNU0VDX1BFUl9TRUMgLyA1KSwgMCk7CisJaWd0X2Fzc2VydF9lcShz eW5jX2ZlbmNlX3N0YXR1cyhzcGluLT5vdXRfZmVuY2UpLCAtRUlPKTsKKworCXNwaW4tPmhhbmRs ZSA9IDA7CisJaWd0X3NwaW5fZnJlZSgtMSwgc3Bpbik7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRm ZChpbnQgc29ja2V0LCBpbnQgZmQpCit7CisJY2hhciBidWZbQ01TR19TUEFDRShzaXplb2YoZmQp KV07CisJc3RydWN0IGlvdmVjIGlvID0geyAuaW92X2Jhc2UgPSAoY2hhciAqKSJBQkMiLCAuaW92 X2xlbiA9IDMgfTsKKwlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKKwkJLm1zZ19pb3YgPSAmaW8sCisJ CS5tc2dfaW92bGVuID0gMSwKKwkJLm1zZ19jb250cm9sID0gYnVmLAorCQkubXNnX2NvbnRyb2xs ZW4gPSBDTVNHX0xFTihzaXplb2YoZmQpKSwKKwl9OworCXN0cnVjdCBjbXNnaGRyICpjbXNnID0g Q01TR19GSVJTVEhEUigmbXNnKTsKKworCWNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUOwor CWNtc2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7CisJY21zZy0+Y21zZ19sZW4gPSBtc2cubXNn X2NvbnRyb2xsZW47CisJKihpbnQgKilDTVNHX0RBVEEoY21zZykgPSBmZDsKKworCWlndF9hc3Nl cnQoc2VuZG1zZyhzb2NrZXQsICZtc2csIDApICE9IC0xKTsKK30KKworc3RhdGljIGludCByZWN2 ZmQoaW50IHNvY2tldCkKK3sKKwljaGFyIG1fYnVmZmVyWzI1Nl0sIGNfYnVmZmVyWzI1Nl07CisJ c3RydWN0IGlvdmVjIGlvID0geworCQkuaW92X2Jhc2UgPSBtX2J1ZmZlciwKKwkJLmlvdl9sZW4g PSBzaXplb2YobV9idWZmZXIpLAorCX07CisJc3RydWN0IG1zZ2hkciBtc2cgPSB7CisJCS5tc2df aW92ID0gJmlvLAorCQkubXNnX2lvdmxlbiA9IDEsCisJCS5tc2dfY29udHJvbCA9IGNfYnVmZmVy LAorCQkubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY19idWZmZXIpLAorCX07CisKKwlpZ3RfYXNz ZXJ0KHJlY3Ztc2coc29ja2V0LCAmbXNnLCAwKSAhPSAtMSk7CisJcmV0dXJuICooaW50ICopQ01T R19EQVRBKENNU0dfRklSU1RIRFIoJm1zZykpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X25vbnBl cnNpc3RlbnRfcHJvY2VzcyhpbnQgaTkxNSkKK3sKKwlpbnQgZmVuY2VbMl0sIHN2WzJdOworCisJ LyoKKwkgKiBJZiBhIHByb2Nlc3MgZGllcyBlYXJseSwgYW55IG5vbnBlcnNpc3RlbnQgY29udGV4 dHMgaXQgaGFkCisJICogb3BlbiBtdXN0IGJlIHRlcm1pbmF0ZWQgdG9vLiBCdXQgYW55IHBlcnNp c3RlbnQgY29udGV4dHMsCisJICogc2hvdWxkIHN1cnZpdmUgdW50aWwgdGhlaXIgcmVxdWVzdHMg YXJlIGNvbXBsZXRlLgorCSAqLworCisJaWd0X3JlcXVpcmUoc29ja2V0cGFpcihBRl9VTklYLCBT T0NLX0RHUkFNLCAwLCBzdikgPT0gMCk7CisKKwlpZ3RfZm9yayhjaGlsZCwgMSkgeworCQlpOTE1 ID0gZ2VtX3Jlb3Blbl9kcml2ZXIoaTkxNSk7CisKKwkJZm9yIChpbnQgcGVyc2lzdHMgPSAwOyBw ZXJzaXN0cyA8PSAxOyBwZXJzaXN0cysrKSB7CisJCQlpZ3Rfc3Bpbl90ICpzcGluOworCQkJdWlu dDMyX3QgY3R4OworCisJCQljdHggPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSk7CisJCQlnZW1f Y29udGV4dF9zZXRfcGVyc2lzdGVuY2UoaTkxNSwgY3R4LCBwZXJzaXN0cyk7CisKKwkJCXNwaW4g PSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LAorCQkJCQkgICAgLmZsYWdzID0gSUdUX1NQSU5fRkVO Q0VfT1VUKTsKKworCQkJc2VuZGZkKHN2WzBdLCBzcGluLT5vdXRfZmVuY2UpOworCisJCQlpZ3Rf bGlzdF9kZWwoJnNwaW4tPmxpbmspOyAvKiBwcmV2ZW50IGF1dG9jbGVhbnVwICovCisJCX0KKwl9 CisJY2xvc2Uoc3ZbMF0pOworCWlndF93YWl0Y2hpbGRyZW4oKTsKKworCWZlbmNlWzBdID0gcmVj dmZkKHN2WzFdKTsKKwlmZW5jZVsxXSA9IHJlY3ZmZChzdlsxXSk7CisJY2xvc2Uoc3ZbMV0pOwor CisJLyogRmlyc3QgZmVuY2UgaXMgbm9uLXBlcnNpc3RlbnQsIHNvIHNob3VsZCBiZSByZXNldCAq LworCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV93YWl0KGZlbmNlWzBdLCBNU0VDX1BFUl9TRUMg LyA1KSwgMCk7CisJaWd0X2Fzc2VydF9lcShzeW5jX2ZlbmNlX3N0YXR1cyhmZW5jZVswXSksIC1F SU8pOworCWNsb3NlKGZlbmNlWzBdKTsKKworCS8qIFNlY29uZCBmZW5jZSBpcyBwZXJzaXN0ZW50 LCBzbyBzaG91bGQgYmUgc3RpbGwgc3Bpbm5pbmcgKi8KKwlpZ3RfYXNzZXJ0X2VxKHN5bmNfZmVu Y2Vfd2FpdChmZW5jZVsxXSwgMCksIC1FVElNRSk7CisJY2xvc2UoZmVuY2VbMV0pOworCisJLyog V2UgaGF2ZSB0byBtYW51YWxseSBjbGVhbiB1cCB0aGUgb3JwaGFuZWQgc3Bpbm5lciAqLworCWln dF9kcm9wX2NhY2hlc19zZXQoaTkxNSwgRFJPUF9SRVNFVF9BQ1RJVkUpOworCisJZ2VtX3F1aWVz Y2VudF9ncHUoaTkxNSk7Cit9CisKK2lndF9tYWluCit7CisJaW50IGk5MTU7CisKKwlpZ3RfZml4 dHVyZSB7CisJCWk5MTUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKwkJaWd0X3Jl cXVpcmVfZ2VtKGk5MTUpOworCisJCWlndF9yZXF1aXJlKGhhc19wZXJzaXN0ZW5jZShpOTE1KSk7 CisJCWlndF9yZXF1aXJlKGVuYWJsZV9oYW5nY2hlY2soaTkxNSkpOworCX0KKworCWlndF9zdWJ0 ZXN0X2dyb3VwIHsKKwkJaWd0X3N1YnRlc3QoImlkZW1wb3RlbnQiKQorCQkJdGVzdF9pZGVtcG90 ZW50KGk5MTUpOworCisJCWlndF9zdWJ0ZXN0KCJwZXJzaXN0ZW5jZSIpCisJCQl0ZXN0X3BlcnNp c3RlbmNlKGk5MTUpOworCisJCWlndF9zdWJ0ZXN0KCJjbGVhbnVwIikKKwkJCXRlc3Rfbm9ucGVy c2lzdGVudF9jbGVhbnVwKGk5MTUpOworCisJCWlndF9zdWJ0ZXN0KCJtaXhlZCIpCisJCQl0ZXN0 X25vbnBlcnNpc3RlbnRfbWl4ZWQoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoImhvc3RpbGUiKQor CQkJdGVzdF9ub25wZXJzaXN0ZW50X2hvc3RpbGUoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoImhh bmdjaGVjayIpCisJCQl0ZXN0X25vaGFuZ2NoZWNrX2hvc3RpbGUoaTkxNSk7CisKKwkJaWd0X3N1 YnRlc3QoImZpbGUiKQorCQkJdGVzdF9ub25wZXJzaXN0ZW50X2ZpbGUoaTkxNSk7CisKKwkJaWd0 X3N1YnRlc3QoInByb2Nlc3MiKQorCQkJdGVzdF9ub25wZXJzaXN0ZW50X3Byb2Nlc3MoaTkxNSk7 CisJfQorCisJaWd0X2ZpeHR1cmUgeworCQljbG9zZShpOTE1KTsKKwl9Cit9CmRpZmYgLS1naXQg YS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IDdlM2Y5ZTBhNC4u M2YzZWVlMjc3IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNv bi5idWlsZApAQCAtMTIxLDYgKzEyMSw3IEBAIGk5MTVfcHJvZ3MgPSBbCiAJJ2dlbV9jdHhfZXhl YycsCiAJJ2dlbV9jdHhfaXNvbGF0aW9uJywKIAknZ2VtX2N0eF9wYXJhbScsCisJJ2dlbV9jdHhf cGVyc2lzdGVuY2UnLAogCSdnZW1fY3R4X3NoYXJlZCcsCiAJJ2dlbV9jdHhfc3dpdGNoJywKIAkn Z2VtX2N0eF90aHJhc2gnLAotLSAKMi4yMy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2lndC1kZXY=