From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH v8 13/13] drm/i915: add support for perf configuration queries Date: Wed, 10 Jul 2019 12:04:38 +0100 Message-ID: <156275667869.11940.15142161844031661063@skylake-alporthouse-com> References: <20190709123351.5645-1-lionel.g.landwerlin@intel.com> <20190709123351.5645-14-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id C6CC289E57 for ; Wed, 10 Jul 2019 11:04:50 +0000 (UTC) In-Reply-To: <20190709123351.5645-14-lionel.g.landwerlin@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lionel Landwerlin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org UXVvdGluZyBMaW9uZWwgTGFuZHdlcmxpbiAoMjAxOS0wNy0wOSAxMzozMzo1MSkKPiBMaXN0aW5n IGNvbmZpZ3VyYXRpb25zIGF0IHRoZSBtb21lbnQgaXMgc3VwcG9ydGVkIG9ubHkgdGhyb3VnaCBz eXNmcy4KPiBUaGlzIG1pZ2h0IGNhdXNlIGlzc3VlcyBmb3IgYXBwbGljYXRpb25zIHdhbnRpbmcg dG8gbGlzdAo+IGNvbmZpZ3VyYXRpb25zIGZyb20gYSBjb250YWluZXIgd2hlcmUgc3lzZnMgaXNu J3QgYXZhaWxhYmxlLgo+IAo+IFRoaXMgY2hhbmdlIGFkZHMgYSB3YXkgdG8gcXVlcnkgdGhlIG51 bWJlciBvZiBjb25maWd1cmF0aW9ucyBhbmQgdGhlaXIKPiBjb250ZW50IHRocm91Z2ggdGhlIGk5 MTUgcXVlcnkgdUFQSS4KPiAKPiB2MjogRml4IHNwYXJzZSB3YXJuaW5ncyAoTGlvbmVsKQo+ICAg ICBBZGQgc3VwcG9ydCB0byBxdWVyeSBjb25maWd1cmF0aW9uIHVzaW5nIHV1aWQgKExpb25lbCkK PiAKPiB2MzogRml4IHNvbWUgaW5jb25zaXN0ZW5jeSBpbiB1YXBpIGhlYWRlciAoTGlvbmVsKQo+ ICAgICBGaXggdW5sb2NraW5nIHdoZW4gbm90IGxvY2tlZCBpc3N1ZSAoTGlvbmVsKQo+ICAgICBB ZGQgZGVidWcgbWVzc2FnZXMgKExpb25lbCkKPiAKPiB2NDogRml4IG1pc3NpbmcgdW5sb2NrIChE YW4pCj4gCj4gU2lnbmVkLW9mZi1ieTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3 ZXJsaW5AaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o ICAgfCAgIDYgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYyAgfCAgIDMgKwo+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3F1ZXJ5LmMgfCAyNzcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICB8ICA2 NSArKysrKystCj4gIDQgZmlsZXMgY2hhbmdlZCwgMzQ4IGluc2VydGlvbnMoKyksIDMgZGVsZXRp b25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggYzcyZTdjNzQ2YjU3Li4y OGYwZjQ5MGI3YjEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMTcyOSw2ICsx NzI5LDEyIEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPiAgICAgICAgICAgICAgICAgICov Cj4gICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbWV0cmljc19idWZmZXJzOwo+ICAK PiArICAgICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICAgICogTnVtYmVyIG9mIGR5bmFt aWMgY29uZmlndXJhdGlvbnMsIHlvdSBuZWVkIHRvIGhvbGQKPiArICAgICAgICAgICAgICAgICog ZGV2X3ByaXYtPnBlcmYubWV0cmljc19sb2NrIHRvIGFjY2VzcyBpdC4KPiArICAgICAgICAgICAg ICAgICovCj4gKyAgICAgICAgICAgICAgIHUzMiBuX21ldHJpY3M7Cj4gKwo+ICAgICAgICAgICAg ICAgICAvKgo+ICAgICAgICAgICAgICAgICAgKiBMb2NrIGFzc29jaWF0ZWQgd2l0aCBhbnl0aGlu ZyBiZWxvdyB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUKPiAgICAgICAgICAgICAgICAgICogZXhjZXB0 IGV4Y2x1c2l2ZV9zdHJlYW0uCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKPiBpbmRleCBkZmQ5 ZWQ0ZjMyMWUuLjljZDEzNjJkNjkyMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3BlcmYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4g QEAgLTM3MjIsNiArMzcyMiw4IEBAIGludCBpOTE1X3BlcmZfYWRkX2NvbmZpZ19pb2N0bChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgICAgICAgICAgICAgICBnb3RvIHN5 c2ZzX2VycjsKPiAgICAgICAgIH0KPiAgCj4gKyAgICAgICBkZXZfcHJpdi0+cGVyZi5uX21ldHJp Y3MrKzsKPiArCj4gICAgICAgICBtdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLm1ldHJpY3Nf bG9jayk7Cj4gIAo+ICAgICAgICAgRFJNX0RFQlVHKCJBZGRlZCBjb25maWcgJXMgaWQ9JWlcbiIs IG9hX2NvbmZpZy0+dXVpZCwgb2FfY29uZmlnLT5pZCk7Cj4gQEAgLTM3ODIsNiArMzc4NCw3IEBA IGludCBpOTE1X3BlcmZfcmVtb3ZlX2NvbmZpZ19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvYV9jb25maWctPnN5 c2ZzX21ldHJpYyk7Cj4gIAo+ICAgICAgICAgaWRyX3JlbW92ZSgmZGV2X3ByaXYtPnBlcmYubWV0 cmljc19pZHIsICphcmcpOwo+ICsgICAgICAgZGV2X3ByaXYtPnBlcmYubl9tZXRyaWNzLS07Cj4g IAo+ICAgICAgICAgbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2xvY2spOwo+ ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9xdWVyeS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9xdWVyeS5jCj4gaW5kZXggN2I3MDE2MTcxMDU3Li43NGI2 MzI5OThkMGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9xdWVyeS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9xdWVyeS5jCj4gQEAgLTE0MywxMCAr MTQzLDI4NyBAQCBxdWVyeV9lbmdpbmVfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKPiAgICAgICAgIHJldHVybiBsZW47Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbnQgY2FuX2NvcHlf cGVyZl9jb25maWdfcmVnaXN0ZXJzX29yX251bWJlcih1MzIgdXNlcl9uX3JlZ3MsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCB1c2VyX3Jl Z3NfcHRyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1MzIga2VybmVsX25fcmVncykKPiArewo+ICsgICAgICAgLyoKPiArICAgICAgICAqIFdl J2xsIGp1c3QgcHV0IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzLCBhbmQgd29uJ3QgY29weSB0aGUK PiArICAgICAgICAqIHJlZ2lzdGVyLgo+ICsgICAgICAgICovCj4gKyAgICAgICBpZiAodXNlcl9u X3JlZ3MgPT0gMCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgICAgaWYg KHVzZXJfbl9yZWdzIDwga2VybmVsX25fcmVncykKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7Cj4gKwo+ICsgICAgICAgaWYgKCFhY2Nlc3Nfb2sodTY0X3RvX3VzZXJfcHRyKHVzZXJf cmVnc19wdHIpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgMiAqIHNpemVvZih1MzIpICoga2Vy bmVsX25fcmVncykpCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwo+ICsKPiArICAg ICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNvcHlfcGVyZl9jb25maWdfcmVn aXN0ZXJzX29yX251bWJlcihjb25zdCBzdHJ1Y3QgaTkxNV9vYV9yZWcgKmtlcm5lbF9yZWdzLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBrZXJu ZWxfbl9yZWdzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHU2NCB1c2VyX3JlZ3NfcHRyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHUzMiAqdXNlcl9uX3JlZ3MpCj4gK3sKPiArICAgICAgIHUzMiByOwo+ ICsKPiArICAgICAgIGlmICgqdXNlcl9uX3JlZ3MgPT0gMCkgewo+ICsgICAgICAgICAgICAgICAq dXNlcl9uX3JlZ3MgPSBrZXJuZWxfbl9yZWdzOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsK PiArICAgICAgIH0KPiArCj4gKyAgICAgICAqdXNlcl9uX3JlZ3MgPSBrZXJuZWxfbl9yZWdzOwo+ ICsKPiArICAgICAgIGZvciAociA9IDA7IHIgPCBrZXJuZWxfbl9yZWdzOyByKyspIHsKPiArICAg ICAgICAgICAgICAgdTMyIF9fdXNlciAqdXNlcl9yZWdfcHRyID0KPiArICAgICAgICAgICAgICAg ICAgICAgICB1NjRfdG9fdXNlcl9wdHIodXNlcl9yZWdzX3B0ciArIHNpemVvZih1MzIpICogciAq IDIpOwo+ICsgICAgICAgICAgICAgICB1MzIgX191c2VyICp1c2VyX3ZhbF9wdHIgPQo+ICsgICAg ICAgICAgICAgICAgICAgICAgIHU2NF90b191c2VyX3B0cih1c2VyX3JlZ3NfcHRyICsgc2l6ZW9m KHUzMikgKiByICogMiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZih1MzIpKTsKPiArICAgICAgICAgICAgICAgaW50IHJldDsKPiArCj4gKyAgICAgICAg ICAgICAgIHJldCA9IF9fcHV0X3VzZXIoaTkxNV9tbWlvX3JlZ19vZmZzZXQoa2VybmVsX3JlZ3Nb cl0uYWRkciksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9yZWdfcHRy KTsKPiArICAgICAgICAgICAgICAgaWYgKHJldCkKPiArICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gLUVGQVVMVDsKPiArCj4gKyAgICAgICAgICAgICAgIHJldCA9IF9fcHV0X3VzZXIoa2Vy bmVsX3JlZ3Nbcl0udmFsdWUsIHVzZXJfdmFsX3B0cik7Cj4gKyAgICAgICAgICAgICAgIGlmIChy ZXQpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4gKyAgICAgICB9 Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcXVlcnlfcGVy Zl9jb25maWdfZGF0YShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gKnF1ZXJ5 X2l0ZW0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX3V1aWQp Cj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9xdWVyeV9wZXJmX2NvbmZpZyBfX3VzZXIg KnVzZXJfcXVlcnlfY29uZmlnX3B0ciA9Cj4gKyAgICAgICAgICAgICAgIHU2NF90b191c2VyX3B0 cihxdWVyeV9pdGVtLT5kYXRhX3B0cik7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9v YV9jb25maWcgX191c2VyICp1c2VyX2NvbmZpZ19wdHIgPQo+ICsgICAgICAgICAgICAgICB1NjRf dG9fdXNlcl9wdHIocXVlcnlfaXRlbS0+ZGF0YV9wdHIgKwo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9xdWVyeV9wZXJmX2NvbmZpZykpOwo+ ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb2FfY29uZmlnIHVzZXJfY29uZmlnOwo+ICsg ICAgICAgc3RydWN0IGk5MTVfb2FfY29uZmlnICpvYV9jb25maWcgPSBOVUxMOwo+ICsgICAgICAg Y2hhciB1dWlkW1VVSURfU1RSSU5HX0xFTiArIDFdOwo+ICsgICAgICAgdTY0IGNvbmZpZ19pZDsK PiArICAgICAgIHUzMiBmbGFncywgdG90YWxfc2l6ZTsKPiArICAgICAgIGludCByZXQ7Cj4gKwo+ ICsgICAgICAgaWYgKCFpOTE1LT5wZXJmLmluaXRpYWxpemVkKQo+ICsgICAgICAgICAgICAgICBy ZXR1cm4gLUVOT0RFVjsKPiArCj4gKyAgICAgICB0b3RhbF9zaXplID0gc2l6ZW9mKHN0cnVjdCBk cm1faTkxNV9xdWVyeV9wZXJmX2NvbmZpZykgKwo+ICsgICAgICAgICAgICAgICBzaXplb2Yoc3Ry dWN0IGRybV9pOTE1X3BlcmZfb2FfY29uZmlnKTsKPiArCj4gKyAgICAgICBpZiAocXVlcnlfaXRl bS0+bGVuZ3RoID09IDApCj4gKyAgICAgICAgICAgICAgIHJldHVybiB0b3RhbF9zaXplOwo+ICsK PiArICAgICAgIGlmIChxdWVyeV9pdGVtLT5sZW5ndGggPCB0b3RhbF9zaXplKSB7Cj4gKyAgICAg ICAgICAgICAgIERSTV9ERUJVRygiSW52YWxpZCBxdWVyeSBjb25maWcgZGF0YSBpdGVtIHNpemU9 JXUgZXhwZWN0ZWQ9JXVcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9pdGVt LT5sZW5ndGgsIHRvdGFsX3NpemUpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsK PiArICAgICAgIH0KPiArCj4gKyAgICAgICBpZiAoIWFjY2Vzc19vayh1c2VyX3F1ZXJ5X2NvbmZp Z19wdHIsIHRvdGFsX3NpemUpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiAr Cj4gKyAgICAgICBpZiAoX19nZXRfdXNlcihmbGFncywgJnVzZXJfcXVlcnlfY29uZmlnX3B0ci0+ ZmxhZ3MpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArCj4gKyAgICAgICBp ZiAoZmxhZ3MgIT0gMCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsg ICAgICAgaWYgKHVzZV91dWlkKSB7Cj4gKyAgICAgICAgICAgICAgIEJVSUxEX0JVR19PTihzaXpl b2YodXNlcl9xdWVyeV9jb25maWdfcHRyLT51dWlkKSA+PSBzaXplb2YodXVpZCkpOwo+ICsKPiAr ICAgICAgICAgICAgICAgbWVtc2V0KCZ1dWlkLCAwLCBzaXplb2YodXVpZCkpOwo+ICsgICAgICAg ICAgICAgICBpZiAoX19jb3B5X2Zyb21fdXNlcih1dWlkLCB1c2VyX3F1ZXJ5X2NvbmZpZ19wdHIt PnV1aWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1c2Vy X3F1ZXJ5X2NvbmZpZ19wdHItPnV1aWQpKSkKPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLUVGQVVMVDsKPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIGlmIChfX2dl dF91c2VyKGNvbmZpZ19pZCwgJnVzZXJfcXVlcnlfY29uZmlnX3B0ci0+Y29uZmlnKSkgewo+ICsg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwo+ICsgICAgICAgICAgICAgICB9 Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxl KCZpOTE1LT5wZXJmLm1ldHJpY3NfbG9jayk7Cj4gKyAgICAgICBpZiAocmV0KQo+ICsgICAgICAg ICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgICAgIGlmICh1c2VfdXVpZCkgewo+ICsgICAg ICAgICAgICAgICBzdHJ1Y3QgaTkxNV9vYV9jb25maWcgKnRtcDsKPiArICAgICAgICAgICAgICAg aW50IGlkOwo+ICsKPiArICAgICAgICAgICAgICAgaWRyX2Zvcl9lYWNoX2VudHJ5KCZpOTE1LT5w ZXJmLm1ldHJpY3NfaWRyLCB0bXAsIGlkKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYg KCFzdHJjbXAodG1wLT51dWlkLCB1dWlkKSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga3JlZl9nZXQoJnRtcC0+cmVmKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9hX2NvbmZpZyA9IHRtcDsKCkJhaCwgd2FzIGV4cGVjdGluZyBvYV9jb25maWcgPSBvYV9j b25maWdfZ2V0KHRtcCk7Cgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQoKUHJheSBiZSBzbWFsbC4gQSBzZWNvbmRhcnkg aGFzaHRhYmxlIHdvdWxkIGJlIHRyaXZpYWwgdG8gYWRkIGlmCnJlcXVpcmVkLgoKPiArICAgICAg ICAgICAgICAgfQo+ICsgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgcmV0ID0gaTkx NV9wZXJmX2dldF9vYV9jb25maWcoaTkxNSwgY29uZmlnX2lkLCAmb2FfY29uZmlnLCBOVUxMKTsK PiArICAgICAgIH0KPiArCj4gKyAgICAgICBtdXRleF91bmxvY2soJmk5MTUtPnBlcmYubWV0cmlj c19sb2NrKTsKPiArCj4gKyAgICAgICBpZiAocmV0IHx8ICFvYV9jb25maWcpCj4gKyAgICAgICAg ICAgICAgIHJldHVybiAtRU5PRU5UOwo+ICsKPiArICAgICAgIGlmIChfX2NvcHlfZnJvbV91c2Vy KCZ1c2VyX2NvbmZpZywgdXNlcl9jb25maWdfcHRyLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKHVzZXJfY29uZmlnKSkpIHsKPiArICAgICAgICAgICAgICAgcmV0ID0gLUVG QVVMVDsKPiArICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAg ICAgcmV0ID0gY2FuX2NvcHlfcGVyZl9jb25maWdfcmVnaXN0ZXJzX29yX251bWJlcih1c2VyX2Nv bmZpZy5uX2Jvb2xlYW5fcmVncywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdXNlcl9jb25maWcuYm9vbGVhbl9yZWdzX3B0ciwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2FfY29u ZmlnLT5iX2NvdW50ZXJfcmVnc19sZW4pOwo+ICsgICAgICAgaWYgKHJldCkKPiArICAgICAgICAg ICAgICAgZ290byBvdXQ7Cj4gKwo+ICsgICAgICAgcmV0ID0gY2FuX2NvcHlfcGVyZl9jb25maWdf cmVnaXN0ZXJzX29yX251bWJlcih1c2VyX2NvbmZpZy5uX2ZsZXhfcmVncywKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jb25maWcu ZmxleF9yZWdzX3B0ciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb2FfY29uZmlnLT5mbGV4X3JlZ3NfbGVuKTsKPiArICAgICAgIGlmIChy ZXQpCj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsKPiArICAgICAgIHJldCA9IGNhbl9j b3B5X3BlcmZfY29uZmlnX3JlZ2lzdGVyc19vcl9udW1iZXIodXNlcl9jb25maWcubl9tdXhfcmVn cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdXNlcl9jb25maWcubXV4X3JlZ3NfcHRyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYV9jb25maWctPm11eF9yZWdzX2xlbik7Cj4g KyAgICAgICBpZiAocmV0KQo+ICsgICAgICAgICAgICAgICBnb3RvIG91dDsKPiArCj4gKyAgICAg ICByZXQgPSBjb3B5X3BlcmZfY29uZmlnX3JlZ2lzdGVyc19vcl9udW1iZXIob2FfY29uZmlnLT5i X2NvdW50ZXJfcmVncywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvYV9jb25maWctPmJfY291bnRlcl9yZWdzX2xlbiwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2NvbmZpZy5ib29sZWFu X3JlZ3NfcHRyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZ1c2VyX2NvbmZpZy5uX2Jvb2xlYW5fcmVncyk7Cj4gKyAgICAgICBpZiAocmV0KQo+ ICsgICAgICAgICAgICAgICBnb3RvIG91dDsKPiArCj4gKyAgICAgICByZXQgPSBjb3B5X3BlcmZf Y29uZmlnX3JlZ2lzdGVyc19vcl9udW1iZXIob2FfY29uZmlnLT5mbGV4X3JlZ3MsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2FfY29uZmlnLT5m bGV4X3JlZ3NfbGVuLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVzZXJfY29uZmlnLmZsZXhfcmVnc19wdHIsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXJfY29uZmlnLm5fZmxleF9yZWdz KTsKPiArICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsKPiAr ICAgICAgIHJldCA9IGNvcHlfcGVyZl9jb25maWdfcmVnaXN0ZXJzX29yX251bWJlcihvYV9jb25m aWctPm11eF9yZWdzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9hX2NvbmZpZy0+bXV4X3JlZ3NfbGVuLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29uZmlnLm11eF9yZWdzX3B0ciwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNl cl9jb25maWcubl9tdXhfcmVncyk7Cj4gKyAgICAgICBpZiAocmV0KQo+ICsgICAgICAgICAgICAg ICBnb3RvIG91dDsKPiArCj4gKyAgICAgICBtZW1jcHkodXNlcl9jb25maWcudXVpZCwgb2FfY29u ZmlnLT51dWlkLCBzaXplb2YodXNlcl9jb25maWcudXVpZCkpOwo+ICsKPiArICAgICAgIGlmIChf X2NvcHlfdG9fdXNlcih1c2VyX2NvbmZpZ19wdHIsICZ1c2VyX2NvbmZpZywKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YodXNlcl9jb25maWcpKSkgewo+ICsgICAgICAgICAgICAg ICByZXQgPSAtRUZBVUxUOwo+ICsgICAgICAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgIH0K PiArCj4gKyAgICAgICByZXQgPSB0b3RhbF9zaXplOwo+ICsKPiArb3V0Ogo+ICsgICAgICAgaTkx NV9vYV9jb25maWdfcHV0KG9hX2NvbmZpZyk7CgpNdWNoIG1vcmUgY29tZm9ydGFibGUgd2l0aCBh bGwgdGhlIHVzZXIgYWNjZXNzIG91dCBmcm9tIHVuZGVyIHRoZSBsb2Nrcy4KCj4gKwo+ICsgICAg ICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBxdWVyeV9wZXJmX2NvbmZpZ19s aXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSAqcXVlcnlfaXRlbSkKPiAr ewo+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X3BlcmZfY29uZmlnIF9fdXNlciAqdXNl cl9xdWVyeV9jb25maWdfcHRyID0KPiArICAgICAgICAgICAgICAgdTY0X3RvX3VzZXJfcHRyKHF1 ZXJ5X2l0ZW0tPmRhdGFfcHRyKTsKPiArICAgICAgIHN0cnVjdCBpOTE1X29hX2NvbmZpZyAqb2Ff Y29uZmlnOwo+ICsgICAgICAgdTMyIGZsYWdzLCB0b3RhbF9zaXplOwo+ICsgICAgICAgdTY0IG5f Y29uZmlnczsKPiArICAgICAgIGludCByZXQsIGlkOwo+ICsKPiArICAgICAgIGlmICghaTkxNS0+ cGVyZi5pbml0aWFsaXplZCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ ICsgICAgICAgLyogQ291bnQgdGhlIGRlZmF1bHQgdGVzdCBjb25maWd1cmF0aW9uICovCj4gKyAg ICAgICBuX2NvbmZpZ3MgPSBpOTE1LT5wZXJmLm5fbWV0cmljcyArIDE7Cj4gKyAgICAgICB0b3Rh bF9zaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9xdWVyeV9wZXJmX2NvbmZpZykgKwo+ICsg ICAgICAgICAgICAgICBzaXplb2YodTY0KSAqIG5fY29uZmlnczsKPiArCj4gKyAgICAgICBpZiAo cXVlcnlfaXRlbS0+bGVuZ3RoID09IDApCj4gKyAgICAgICAgICAgICAgIHJldHVybiB0b3RhbF9z aXplOwo+ICsKPiArICAgICAgIGlmIChxdWVyeV9pdGVtLT5sZW5ndGggPCB0b3RhbF9zaXplKSB7 Cj4gKyAgICAgICAgICAgICAgIERSTV9ERUJVRygiSW52YWxpZCBxdWVyeSBjb25maWcgbGlzdCBp dGVtIHNpemU9JXUgZXhwZWN0ZWQ9JXVcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBx dWVyeV9pdGVtLT5sZW5ndGgsIHRvdGFsX3NpemUpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBpZiAoIWFjY2Vzc19vayh1c2VyX3F1 ZXJ5X2NvbmZpZ19wdHIsIHRvdGFsX3NpemUpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVG QVVMVDsKPiArCj4gKyAgICAgICBpZiAoX19nZXRfdXNlcihmbGFncywgJnVzZXJfcXVlcnlfY29u ZmlnX3B0ci0+ZmxhZ3MpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArCj4g KyAgICAgICBpZiAoZmxhZ3MgIT0gMCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 Cj4gKwo+ICsgICAgICAgaWYgKF9fcHV0X3VzZXIobl9jb25maWdzLCAmdXNlcl9xdWVyeV9jb25m aWdfcHRyLT5jb25maWcpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArCj4g KyAgICAgICBpZiAoX19wdXRfdXNlcigodTY0KTFVTEwsICZ1c2VyX3F1ZXJ5X2NvbmZpZ19wdHIt PmRhdGFbMF0pKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArCj4gKyAgICAg ICByZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmk5MTUtPnBlcmYubWV0cmljc19sb2Nr KTsKPiArICAgICAgIGlmIChyZXQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ ICsgICAgICAgbl9jb25maWdzID0gMTsKPiArICAgICAgIGlkcl9mb3JfZWFjaF9lbnRyeSgmaTkx NS0+cGVyZi5tZXRyaWNzX2lkciwgb2FfY29uZmlnLCBpZCkgewo+ICsgICAgICAgICAgICAgICB1 NjQgX191c2VyICppdGVtID0KPiArICAgICAgICAgICAgICAgICAgICAgICB1NjRfdG9fdXNlcl9w dHIocXVlcnlfaXRlbS0+ZGF0YV9wdHIgKwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2Yoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X3BlcmZfY29uZmlnKSArCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY29uZmlncyAqIHNpemVv Zih1NjQpKTsKPiArCj4gKyAgICAgICAgICAgICAgIGlmIChfX3B1dF91c2VyKCh1NjQpaWQsIGl0 ZW0pKSB7CgpPaCwgdGhhdCBpcyBhIG51aXNhbmNlLgoKSXQgd291bGQgYmUgZWFzeSB0byBhdm9p ZCB0aGUgbG9jayBoZXJlIGJ5IHVzaW5nIGEgdGVtcG9yYXJ5IGttYWxsb2MsCmFuZCB0aGlzIHNo b3VsZCBub3QgYmUgYSBob3QgcGF0aC4uLgooQSBzdGl0Y2ggaW4gdGltZSBpcyB3b3J0aCBuaW5l IDopCgpXaXRoIGEgdGVtcG9yYXJ5IGNvcHksClJldmlld2VkLWJ5OiBDaHJpcyBXaWxzb24gPGNo cmlzQGNocmlzLXdpbHNvbi5jby51az4KClByb2JhYmx5IGJlc3QgdG8gZ3JhYiBUdnJ0a28gdG8g c2VlIGlmIGhlIGNhbiBzcG90IHBvdGVudGlhbCBpc3N1ZXMgd2l0aAppOTE1X3F1ZXJ5IHVzYWdl LgotQ2hyaXMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4