From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH i-g-t 6/6] tests/i915_query: Engine queues tests Date: Wed, 6 Jun 2018 15:33:30 +0100 Message-ID: References: <20180606124907.13139-1-tvrtko.ursulin@linux.intel.com> <20180606124907.13139-7-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180606124907.13139-7-tvrtko.ursulin@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , igt-dev@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SnVzdCBhIGZldyBzdWdnZXN0aW9ucyBiZWxvdy4gT3RoZXJ3aXNlIGxvb2tzIGdvb2QgdG8gbWUu CgpPbiAwNi8wNi8xOCAxMzo0OSwgVHZydGtvIFVyc3VsaW4gd3JvdGU6Cj4gRnJvbTogVHZydGtv IFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPgo+IEJhc2ljIHRlc3RzIHRvIGNv dmVyIGVuZ2luZSBxdWV1ZWQvcnVubmFibGUvcnVubmluZyBtZXRyaWMgYXMgcmVwb3J0ZWQKPiBi eSB0aGUgRFJNX0k5MTVfUVVFUllfRU5HSU5FX1FVRVVFUyBxdWVyeS4KPgo+IHYyOgo+ICAgKiBV cGRhdGUgQUJJIGZvciBpOTE1IGNoYW5nZXMuCj4gICAqIFVzZSBpZ3Rfc3Bpbl9idXN5d2FpdF91 bnRpbF9ydW5uaW5nLgo+ICAgKiBTdXBwb3J0IG5vIGhhcmR3YXJlIGNvbnRleHRzLgo+ICAgKiBN b3JlIGNvbW1lbnRzLiAoTGlvbmVsIExhbmR3ZXJsaW4pCj4gICBDaHJpcyBXaWxzb246Cj4gICAq IENoZWNrIGZvciBzdyBzeW5jIHN1cHBvcnQuCj4gICAqIE11bHRpcGxlIGNvbnRleHRzIHF1ZXVl ZCB0ZXN0Lgo+ICAgKiBTaW1wbGlmeSBjb250ZXh0IGFuZCBiYiBhbGxvY2F0aW9uLgo+ICAgKiBG aXggYXNzZXJ0cyBpbiB0aGUgcnVubmluZyBzdWJ0ZXN0Lgo+Cj4gdjM6Cj4gICAqIFVwZGF0ZSBm b3IgdUFQSSBjaGFuZ2UuCj4KPiBTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtv LnVyc3VsaW5AaW50ZWwuY29tPgo+IC0tLQo+ICAgdGVzdHMvaTkxNV9xdWVyeS5jIHwgNDQyICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgMSBmaWxlIGNo YW5nZWQsIDQ0MiBpbnNlcnRpb25zKCspCj4KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNV9xdWVy eS5jIGIvdGVzdHMvaTkxNV9xdWVyeS5jCj4gaW5kZXggYzdkZThjYmQ4MzcxLi41ODg0Mjg3NDlj NTAgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvaTkxNV9xdWVyeS5jCj4gKysrIGIvdGVzdHMvaTkxNV9x dWVyeS5jCj4gQEAgLTIyLDYgKzIyLDcgQEAKPiAgICAqLwo+ICAgCj4gICAjaW5jbHVkZSAiaWd0 LmgiCj4gKyNpbmNsdWRlICJzd19zeW5jLmgiCj4gICAKPiAgICNpbmNsdWRlIDxsaW1pdHMuaD4K PiAgIAo+IEBAIC00NzcsOCArNDc4LDQxNCBAQCB0ZXN0X3F1ZXJ5X3RvcG9sb2d5X2tub3duX3Bj aV9pZHMoaW50IGZkLCBpbnQgZGV2aWQpCj4gICAJZnJlZSh0b3BvX2luZm8pOwo+ICAgfQo+ICAg Cj4gKyNkZWZpbmUgRFJNX0k5MTVfUVVFUllfRU5HSU5FX1FVRVVFUwkyCj4gKwo+ICtzdHJ1Y3Qg ZHJtX2k5MTVfcXVlcnlfZW5naW5lX3F1ZXVlcyB7Cj4gKwkvKiogRW5naW5lIGNsYXNzIGFzIGlu IGVudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFzcy4gKi8KPiArCV9fdTE2IGNsYXNzOwo+ICsK PiArCS8qKiBFbmdpbmUgaW5zdGFuY2UgbnVtYmVyLiAqLwo+ICsJX191MTYgaW5zdGFuY2U7Cj4g Kwo+ICsJLyoqIE51bWJlciBvZiByZXF1ZXN0cyB3aXRoIHVucmVzb2x2ZWQgZmVuY2VzIGFuZCBk ZXBlbmRlbmNpZXMuICovCj4gKwlfX3UzMiBxdWV1ZWQ7Cj4gKwo+ICsJLyoqIE51bWJlciBvZiBy ZWFkeSByZXF1ZXN0cyB3YWl0aW5nIG9uIGEgc2xvdCBvbiBHUFUuICovCj4gKwlfX3UzMiBydW5u YWJsZTsKPiArCj4gKwkvKiogTnVtYmVyIG9mIHJlcXVlc3RzIGV4ZWN1dGluZyBvbiB0aGUgR1BV LiAqLwo+ICsJX191MzIgcnVubmluZzsKPiArCj4gKwlfX3UzMiByc3ZkWzZdOwo+ICt9OwoKSSBz dXBwb3NlIHRoaXMgYWJvdmUgd291bGQgYmUgaW4gdGhlIHVwZGF0ZWQgaTkxNV9kcm0uaC4KSSB0 aG91Z2h0IHlvdSB3b3VsZCBoYXZlIHB1dCBpdCB0aGVyZSBhcyBwYXJ0IG9mIHlvdXIgZmlyc3Qg Y29tbWl0LgoKPiArCj4gK3N0YXRpYyBib29sIHF1ZXJ5X2VuZ2luZV9xdWV1ZXNfc3VwcG9ydGVk KGludCBmZCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbSA9IHsKPiAr CQkucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9FTkdJTkVfUVVFVUVTLAo+ICsJfTsKPiArCj4g KwlyZXR1cm4gX19pOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSkgPT0gMCAmJiBpdGVtLmxl bmd0aCA+IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGVuZ2luZV9xdWV1ZXNfaW52YWxpZChp bnQgZmQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9lbmdpbmVfcXVldWVzIHF1ZXVl czsKPiArCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9pdGVtIGl0ZW07Cj4gKwl1bnNpZ25lZCBpbnQg bGVuOwo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJLyogRmxhZ3MgaXMgTUJaLiAqLwo+ICsJ bWVtc2V0KCZpdGVtLCAwLCBzaXplb2YoaXRlbSkpOwo+ICsJaXRlbS5xdWVyeV9pZCA9IERSTV9J OTE1X1FVRVJZX0VOR0lORV9RVUVVRVM7Cj4gKwlpdGVtLmZsYWdzID0gMTsKPiArCWk5MTVfcXVl cnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKPiArCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIC1F SU5WQUwpOwo+ICsKPiArCS8qIExlbmd0aCBub3QgemVybyBhbmQgbm90IGdyZWF0ZXIgb3IgZXF1 YWwgcmVxdWlyZWQgc2l6ZS4gKi8KPiArCW1lbXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsK PiArCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9FTkdJTkVfUVVFVUVTOwo+ICsJaXRl bS5sZW5ndGggPSAxOwo+ICsJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOwo+ICsJaWd0 X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwgLUVJTlZBTCk7Cj4gKwo+ICsJLyogUXVlcnkgY29ycmVj dCBsZW5ndGguICovCj4gKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7Cj4gKwlpdGVt LnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllfRU5HSU5FX1FVRVVFUzsKPiArCWk5MTVfcXVlcnlf aXRlbXMoZmQsICZpdGVtLCAxKTsKPiArCWlndF9hc3NlcnQoaXRlbS5sZW5ndGggPj0gMCk7CgpD b3VsZCBiZSBpdGVtLmxlbmd0aCA+IDA/Cgo+ICsJbGVuID0gaXRlbS5sZW5ndGg7Cj4gKwo+ICsJ LyogSXZhbGlkIHBvaW50ZXIuICovCj4gKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7 Cj4gKwlpdGVtLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllfRU5HSU5FX1FVRVVFUzsKPiArCWl0 ZW0ubGVuZ3RoID0gbGVuOwo+ICsJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOwo+ICsJ aWd0X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwgLUVGQVVMVCk7CgpNYXliZSB2ZXJpZnkgVUxPTkdf TUFYIHRvbz8KCj4gKwo+ICsJLyogUmVzZXJ2ZWQgZmllbGRzIGFyZSBNQlouICovCj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocXVldWVzLnJzdmQpOyBpKyspIHsKPiArCQltZW1z ZXQoJnF1ZXVlcywgMCwgc2l6ZW9mKHF1ZXVlcykpOwo+ICsJCXF1ZXVlcy5yc3ZkW2ldID0gMTsK PiArCQltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7Cj4gKwkJaXRlbS5xdWVyeV9pZCA9 IERSTV9JOTE1X1FVRVJZX0VOR0lORV9RVUVVRVM7Cj4gKwkJaXRlbS5sZW5ndGggPSBsZW47Cj4g KwkJaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcXVldWVzKTsKPiArCQlpOTE1X3F1 ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7Cj4gKwkJaWd0X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwg LUVJTlZBTCk7Cj4gKwl9Cj4gKwo+ICsJbWVtc2V0KCZxdWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMp KTsKPiArCXF1ZXVlcy5jbGFzcyA9IC0xOwoKY2xhc3MgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZB TElEID8KCj4gKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7Cj4gKwlpdGVtLnF1ZXJ5 X2lkID0gRFJNX0k5MTVfUVVFUllfRU5HSU5FX1FVRVVFUzsKPiArCWl0ZW0ubGVuZ3RoID0gbGVu Owo+ICsJaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcXVldWVzKTsKPiArCWk5MTVf cXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKPiArCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgs IC1FTk9FTlQpOwo+ICsKPiArCW1lbXNldCgmcXVldWVzLCAwLCBzaXplb2YocXVldWVzKSk7Cj4g KwlxdWV1ZXMuaW5zdGFuY2UgPSAtMTsKPiArCW1lbXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0p KTsKPiArCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9FTkdJTkVfUVVFVUVTOwo+ICsJ aXRlbS5sZW5ndGggPSBsZW47Cj4gKwkJaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigm cXVldWVzKTsKPiArCWk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKPiArCWlndF9hc3Nl cnRfZXEoaXRlbS5sZW5ndGgsIC1FTk9FTlQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBlbmdp bmVfcXVldWVzKGludCBmZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICpl KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5naW5lX3F1ZXVlcyBxdWV1ZXM7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSBpdGVtOwo+ICsJdW5zaWduZWQgaW50IGxlbjsK PiArCj4gKwkvKiBRdWVyeSByZXF1aXJlZCBidWZmZXIgbGVuZ3RoLiAqLwo+ICsJbWVtc2V0KCZx dWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsKPiArCW1lbXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0 ZW0pKTsKPiArCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9FTkdJTkVfUVVFVUVTOwo+ ICsJaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcXVldWVzKTsKPiArCWk5MTVfcXVl cnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKPiArCWlndF9hc3NlcnQoaXRlbS5sZW5ndGggPj0gMCk7 CgppdGVtLmxlbmd0aCA+IDA/Cgo+ICsJaWd0X2Fzc2VydChpdGVtLmxlbmd0aCA8PSBzaXplb2Yo cXVldWVzKSk7CgpJIGd1ZXNzIHdlIGNhbiBleHBlY3QgaXRlbS5sZW5ndGggPT0gc2l6ZW9mKHF1 ZXVlcykgaGVyZS4KCgo+ICsJbGVuID0gaXRlbS5sZW5ndGg7Cj4gKwo+ICsJLyogQ2hlY2sgbGVu Z3RoIGxhcmdlciB0aGFuIHJlcXVpcmVkIHdvcmtzIGFuZCByZXBvcnRzIHNhbWUgbGVuZ3RoLiAq Lwo+ICsJbWVtc2V0KCZxdWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsKPiArCW1lbXNldCgmaXRl bSwgMCwgc2l6ZW9mKGl0ZW0pKTsKPiArCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9F TkdJTkVfUVVFVUVTOwo+ICsJaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcXVldWVz KTsKPiArCWl0ZW0ubGVuZ3RoID0gbGVuICsgMTsKPiArCWk5MTVfcXVlcnlfaXRlbXMoZmQsICZp dGVtLCAxKTsKPiArCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIGxlbik7Cj4gKwo+ICsJLyog QWN0dWFsIHF1ZXJ5LiAqLwo+ICsJbWVtc2V0KCZxdWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsK PiArCXF1ZXVlcy5jbGFzcyA9IGUtPmNsYXNzOwo+ICsJcXVldWVzLmluc3RhbmNlID0gZS0+aW5z dGFuY2U7Cj4gKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7Cj4gKwlpdGVtLnF1ZXJ5 X2lkID0gRFJNX0k5MTVfUVVFUllfRU5HSU5FX1FVRVVFUzsKPiArCWl0ZW0uZGF0YV9wdHIgPSB0 b191c2VyX3BvaW50ZXIoJnF1ZXVlcyk7Cj4gKwlpdGVtLmxlbmd0aCA9IGxlbjsKPiArCWk5MTVf cXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKPiArCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgs IGxlbik7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZTJyaW5nKGludCBnZW1fZmQs IGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiArewo+ICsJcmV0dXJu IGdlbV9jbGFzc19pbnN0YW5jZV90b19lYl9mbGFncyhnZW1fZmQsIGUtPmNsYXNzLCBlLT5pbnN0 YW5jZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK19fcXVlcnlfcXVldWVzKGludCBmZCwg Y29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAo+ICsJICAgICAgIHN0cnVj dCBkcm1faTkxNV9xdWVyeV9lbmdpbmVfcXVldWVzICpxdWV1ZXMpCj4gK3sKPiArCXN0cnVjdCBk cm1faTkxNV9xdWVyeV9pdGVtIGl0ZW07Cj4gKwo+ICsJbWVtc2V0KHF1ZXVlcywgMCwgc2l6ZW9m KCpxdWV1ZXMpKTsKPiArCXF1ZXVlcy0+Y2xhc3MgPSBlLT5jbGFzczsKPiArCXF1ZXVlcy0+aW5z dGFuY2UgPSBlLT5pbnN0YW5jZTsKPiArCW1lbXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsK PiArCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9FTkdJTkVfUVVFVUVTOwo+ICsJaXRl bS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihxdWV1ZXMpOwo+ICsJaXRlbS5sZW5ndGggPSBz aXplb2YoKnF1ZXVlcyk7Cj4gKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7Cj4gKwlp Z3RfYXNzZXJ0X2VxKGl0ZW0ubGVuZ3RoLCBzaXplb2YoKnF1ZXVlcykpOwo+ICt9Cj4gKwo+ICsj ZGVmaW5lIFRFU1RfQ09OVEVYVFMgKDEgPDwgMCkKPiArCj4gKy8qCj4gKyAqIFRlc3QgdGhhdCB0 aGUgcmVwb3J0ZWQgbnVtYmVyIG9mIHF1ZXVlZCAobm90IHJlYWR5IGZvciBleGVjdXRpb24gZHVl IGZlbmNlcwo+ICsgKiBvciBkZXBlbmRlbmNpZXMpIHJlcXVlc3RzIG9uIGFuIGVuZ2luZSBpcyBj b3JyZWN0Lgo+ICsgKi8KPiArc3RhdGljIHZvaWQKPiArZW5naW5lX3F1ZXVlZChpbnQgZ2VtX2Zk LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCj4gKwkgICAgICB1bnNp Z25lZCBpbnQgZmxhZ3MpCj4gK3sKPiArCWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5naW5lID0gZTJy aW5nKGdlbV9mZCwgZSk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5naW5lX3F1ZXVlcyBx dWV1ZXM7Cj4gKwljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJ Y29uc3QgdW5zaWduZWQgaW50IG1heF9ycSA9IDEwOwo+ICsJdWludDMyX3QgcXVldWVkW21heF9y cSArIDFdOwo+ICsJdW5zaWduZWQgaW50IG4sIGk7Cj4gKwl1aW50MzJfdCBibzsKPiArCj4gKwlp Z3RfcmVxdWlyZV9zd19zeW5jKCk7Cj4gKwlpZiAoZmxhZ3MgJiBURVNUX0NPTlRFWFRTKQo+ICsJ CWdlbV9yZXF1aXJlX2NvbnRleHRzKGdlbV9mZCk7Cj4gKwo+ICsJbWVtc2V0KHF1ZXVlZCwgMCwg c2l6ZW9mKHF1ZXVlZCkpOwo+ICsKPiArCWJvID0gZ2VtX2NyZWF0ZShnZW1fZmQsIDQwOTYpOwo+ ICsJZ2VtX3dyaXRlKGdlbV9mZCwgYm8sIDQwOTIsICZiYmUsIHNpemVvZihiYmUpKTsKPiArCj4g KwkgLyogQ3JlYXRlIGEgc3BlY2lmaWMgcXVldWUgZGVwdGggb2YgdW5yZWFkeSByZXF1ZXN0cy4g Ki8KPiArCWZvciAobiA9IDA7IG4gPD0gbWF4X3JxOyBuKyspIHsKPiArCQlpbnQgZmVuY2UgPSAt MTsKPiArCQlJR1RfQ09SS19GRU5DRShjb3JrKTsKPiArCj4gKwkJZ2VtX3F1aWVzY2VudF9ncHUo Z2VtX2ZkKTsKPiArCj4gKwkJLyogQ3JlYXRlIGEgY29yayBzbyB3ZSBjYW4gY3JlYXRlIGEgZGVw ZW5kZW5jeSBjaGFpbi4gKi8KPiArCQlpZiAobikKPiArCQkJZmVuY2UgPSBpZ3RfY29ya19wbHVn KCZjb3JrLCAtMSk7Cj4gKwo+ICsJCS8qIFN1Ym1pdCBuIHVucmVhZHkgcmVxdWVzdHMgZGVwZW5k aW5nIG9uIHRoZSBjb3JrLiAqLwo+ICsJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKPiArCQkJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geyB9Owo+ICsJCQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViID0geyB9Owo+ICsKPiArCQkJb2JqLmhhbmRsZSA9 IGJvOwo+ICsKPiArCQkJZWIuYnVmZmVyX2NvdW50ID0gMTsKPiArCQkJZWIuYnVmZmVyc19wdHIg PSB0b191c2VyX3BvaW50ZXIoJm9iaik7Cj4gKwo+ICsJCQllYi5mbGFncyA9IGVuZ2luZSB8IEk5 MTVfRVhFQ19GRU5DRV9JTjsKPiArCj4gKwkJCS8qCj4gKwkJCSAqIEluIGNvbnRleHQgbW9kZSBl YWNoIHN1Ym1pc3Npb24gaXMgb24gYSBzZXBhcmF0ZQo+ICsJCQkgKiBjb250ZXh0Lgo+ICsJCQkg Ki8KPiArCQkJaWYgKGZsYWdzICYgVEVTVF9DT05URVhUUykKPiArCQkJCWViLnJzdmQxID0gZ2Vt X2NvbnRleHRfY3JlYXRlKGdlbV9mZCk7Cj4gKwo+ICsJCQllYi5yc3ZkMiA9IGZlbmNlOwo+ICsK PiArCQkJZ2VtX2V4ZWNidWYoZ2VtX2ZkLCAmZWIpOwo+ICsKPiArCQkJaWYgKGZsYWdzICYgVEVT VF9DT05URVhUUykKPiArCQkJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZ2VtX2ZkLCBlYi5yc3ZkMSk7 Cj4gKwkJfQo+ICsKPiArCQkvKiBTdG9yZSByZXBvcnRlZCBxdWV1ZSBkZXB0aCB0byBhc3NlcnQg YWdhaW5zdCBsYXRlci4gKi8KPiArCQlfX3F1ZXJ5X3F1ZXVlcyhnZW1fZmQsIGUsICZxdWV1ZXMp Owo+ICsJCXF1ZXVlZFtuXSA9IHF1ZXVlcy5xdWV1ZWQ7Cj4gKwkJaWd0X2luZm8oIm49JXUgcXVl dWVkPSV1XG4iLCBuLCBxdWV1ZWRbbl0pOwo+ICsKPiArCQkvKiBVbnBsdWcgdGhlIHF1ZXVlIGFu ZCBwcm9jZWVkIHRvIHRoZSBuZXh0IHF1ZXVlIGRlcHRoLiAqLwo+ICsJCWlmIChmZW5jZSA+PSAw KQo+ICsJCQlpZ3RfY29ya191bnBsdWcoJmNvcmspOwo+ICsKPiArCQlnZW1fc3luYyhnZW1fZmQs IGJvKTsKPiArCX0KPiArCj4gKwlnZW1fY2xvc2UoZ2VtX2ZkLCBibyk7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8PSBtYXhfcnE7IGkrKykKPiArCQlpZ3RfYXNzZXJ0X2VxKHF1ZXVlZFtpXSwgaSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpZ3Rfc3Bpbl90ICogX19zcGluX3BvbGwoaW50IGZkLCB1aW50 MzJfdCBjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4gK3sKPiArCWlmIChnZW1fY2FuX3N0b3Jl X2R3b3JkKGZkLCBmbGFncykpCj4gKwkJcmV0dXJuIF9faWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGwo ZmQsIGN0eCwgZmxhZ3MpOwo+ICsJZWxzZQo+ICsJCXJldHVybiBfX2lndF9zcGluX2JhdGNoX25l dyhmZCwgY3R4LCBmbGFncywgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9f c3Bpbl93YWl0KGlndF9zcGluX3QgKnNwaW4sIHVuc2lnbmVkIGludCBuKQo+ICt7Cj4gKwlzdHJ1 Y3QgdGltZXNwZWMgdHMgPSB7IH07Cj4gKwl1bnNpZ25lZCBsb25nIHQ7Cj4gKwo+ICsJaWd0X25z ZWNfZWxhcHNlZCgmdHMpOwo+ICsKPiArCWlmIChzcGluLT5ydW5uaW5nKSB7Cj4gKwkJaWd0X3Nw aW5fYnVzeXdhaXRfdW50aWxfcnVubmluZyhzcGluKTsKPiArCX0gZWxzZSB7Cj4gKwkJaWd0X2Rl YnVnKCJfX3NwaW5fd2FpdCAtIHVzbGVlcCBtb2RlXG4iKTsKPiArCQl1c2xlZXAoNTAwZTMpOyAv KiBCZXR0ZXIgdGhhbiBub3RoaW5nISAqLwo+ICsJfQo+ICsKPiArCXQgPSBpZ3RfbnNlY19lbGFw c2VkKCZ0cyk7Cj4gKwo+ICsJcmV0dXJuIHNwaW4tPnJ1bm5pbmcgPyB0IDogNTAwZTYgLyBuOwo+ ICt9Cj4gKwo+ICsvKgo+ICsgKiBUZXN0IHRoYXQgdGhlIG51bWJlciBvZiByZXF1ZXN0cyByZWFk eSBmb3IgZXhlY3V0aW9uIGJ1dCB3YWl0aW5nIG9uIHNwYWNlIG9uCj4gKyAqIEdQVSBpcyBjb3Jy ZWN0bHkgcmVwb3J0ZWQuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZAo+ICtlbmdpbmVfcnVubmFibGUo aW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICt7 Cj4gKwljb25zdCB1bnNpZ25lZCBsb25nIGVuZ2luZSA9IGUycmluZyhnZW1fZmQsIGUpOwo+ICsJ c3RydWN0IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9xdWV1ZXMgcXVldWVzOwo+ICsJYm9vbCBjb250 ZXh0cyA9IGdlbV9oYXNfY29udGV4dHMoZ2VtX2ZkKTsKPiArCWNvbnN0IHVuc2lnbmVkIGludCBt YXhfcnEgPSAxMDsKPiArCWlndF9zcGluX3QgKnNwaW5bbWF4X3JxICsgMV07Cj4gKwl1aW50MzJf dCBydW5uYWJsZVttYXhfcnEgKyAxXTsKPiArCXVpbnQzMl90IGN0eFttYXhfcnFdOwo+ICsJdW5z aWduZWQgaW50IG4sIGk7Cj4gKwo+ICsJbWVtc2V0KHJ1bm5hYmxlLCAwLCBzaXplb2YocnVubmFi bGUpKTsKPiArCj4gKwlpZiAoY29udGV4dHMpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3Jx OyBpKyspCj4gKwkJCWN0eFtpXSA9IGdlbV9jb250ZXh0X2NyZWF0ZShnZW1fZmQpOwo+ICsJfQo+ ICsKPiArCS8qCj4gKwkgKiBTdWJtaXQgZGlmZmVyZW50IG51bWJlciBvZiByZXF1ZXN0cywgcG90 ZW50aWFsbHkgYWdhaW5zdCBkaWZmZXJlbnQKPiArCSAqIGNvbnRleHRzLCBpbiBvcmRlciB0byBw cm92b2tlIGVuZ2luZSBydW5uYWJsZSBtZXRyaWMgcmV0dXJuaW5nCj4gKwkgKiBkaWZmZXJlbnQg bnVtYmVycy4KPiArCSAqLwo+ICsJZm9yIChuID0gMDsgbiA8PSBtYXhfcnE7IG4rKykgewo+ICsJ CWdlbV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7Cj4gKwo+ICsJCWZvciAoaSA9IDA7IGkgPCBuOyBp KyspIHsKPiArCQkJdWludDMyX3QgY3R4XyA9IGNvbnRleHRzID8gY3R4W2ldIDogMDsKPiArCj4g KwkJCWlmIChpID09IDApCj4gKwkJCQlzcGluW2ldID0gX19zcGluX3BvbGwoZ2VtX2ZkLCBjdHhf LCBlbmdpbmUpOwo+ICsJCQllbHNlCj4gKwkJCQlzcGluW2ldID0gX19pZ3Rfc3Bpbl9iYXRjaF9u ZXcoZ2VtX2ZkLCBjdHhfLAo+ICsJCQkJCQkJICAgICAgIGVuZ2luZSwgMCk7Cj4gKwkJfQo+ICsK PiArCQlpZiAobikKPiArCQkJdXNsZWVwKF9fc3Bpbl93YWl0KHNwaW5bMF0sIG4pICogbik7Cj4g Kwo+ICsJCS8qIFF1ZXJ5IGFuZCBzdG9yZSBmb3IgbGF0ZXIgY2hlY2tpbmcuICovCj4gKwkJX19x dWVyeV9xdWV1ZXMoZ2VtX2ZkLCBlLCAmcXVldWVzKTsKPiArCQlydW5uYWJsZVtuXSA9IHF1ZXVl cy5ydW5uYWJsZTsKPiArCQlpZ3RfaW5mbygibj0ldSBydW5uYWJsZT0ldVxuIiwgbiwgcnVubmFi bGVbbl0pOwo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4gKwkJCWlndF9zcGlu X2JhdGNoX2VuZChzcGluW2ldKTsKPiArCQkJZ2VtX3N5bmMoZ2VtX2ZkLCBzcGluW2ldLT5oYW5k bGUpOwo+ICsJCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdlbV9mZCwgc3BpbltpXSk7Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCWlmIChjb250ZXh0cykgewo+ICsJCWZvciAoaSA9IDA7IGkgPCBtYXhfcnE7 IGkrKykKPiArCQkJZ2VtX2NvbnRleHRfZGVzdHJveShnZW1fZmQsIGN0eFtpXSk7Cj4gKwl9Cj4g Kwo+ICsJLyoKPiArCSAqIENoZWNrIHRoYXQgdGhlIHJ1bm5hYmxlIG1ldHJpYyBpcyB6ZXJvIHdo ZW4gbm90aGluZyBpcyBzdWJtaXR0ZWQsCj4gKwkgKiBhbmQgdGhhdCBpdCBpcyBncmVhdGVyIHRo YW4gemVybyBvbiB0aGUgbWF4aW11bSBxdWV1ZSBkZXB0aC4KPiArCSAqCj4gKwkgKiBXZSBjYW5u b3QgYXNzZXJ0IHRoZSBleGFjdCB2YWx1ZSBzaW5jZSB3ZSBkbyBub3Qga25vdyBob3cgbWFueQo+ ICsJICogcmVxdWVzdHMgY2FuIHRoZSBzdWJtaXNzaW9uIGJhY2tlbmQgY29uc3VtZS4KPiArCSAq Lwo+ICsJaWd0X2Fzc2VydF9lcShydW5uYWJsZVswXSwgMCk7Cj4gKwlpZ3RfYXNzZXJ0KHJ1bm5h YmxlW21heF9ycV0gPiAwKTsKPiArCj4gKwkvKgo+ICsJICogV2UgY2FuIG9ubHkgdGVzdCB0aGF0 IHRoZSBydW5uYWJsZSBtZXRyaWMgaXMgZ3Jvd2luZyBieSBvbmUgaWYgd2UKPiArCSAqIGhhdmUg Y29udGV4dCBzdXBwb3J0Lgo+ICsJICovCj4gKwlpZiAoY29udGV4dHMpCj4gKwkJaWd0X2Fzc2Vy dF9lcShydW5uYWJsZVttYXhfcnFdIC0gcnVubmFibGVbbWF4X3JxIC0gMV0sIDEpOwo+ICt9Cj4g Kwo+ICsvKgo+ICsgKiBUZXN0IHRoYXQgdGhlIG51bWJlciBvZiByZXF1ZXN0cyBjdXJyZW50bHkg ZXhlY3V0aW5nIG9uIHRoZSBHUFUgaXMgY29ycmVjdGx5Cj4gKyAqIHJlcG9ydGVkLgo+ICsgKi8K PiArc3RhdGljIHZvaWQKPiArZW5naW5lX3J1bm5pbmcoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0 IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQo+ICt7Cj4gKwljb25zdCB1bnNpZ25lZCBsb25n IGVuZ2luZSA9IGUycmluZyhnZW1fZmQsIGUpOwo+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2Vu Z2luZV9xdWV1ZXMgcXVldWVzOwo+ICsJY29uc3QgdW5zaWduZWQgaW50IG1heF9ycSA9IDEwOwo+ ICsJaWd0X3NwaW5fdCAqc3BpblttYXhfcnEgKyAxXTsKPiArCXVpbnQzMl90IHJ1bm5pbmdbbWF4 X3JxICsgMV07Cj4gKwl1bnNpZ25lZCBpbnQgbiwgaTsKPiArCj4gKwltZW1zZXQocnVubmluZywg MCwgc2l6ZW9mKHJ1bm5pbmcpKTsKPiArCW1lbXNldChzcGluLCAwLCBzaXplb2Yoc3BpbikpOwo+ ICsKPiArCS8qCj4gKwkgKiBDcmVhdGUgdmFyaW91cyBxdWV1ZSBkZXB0aHMgb2YgcmVxdWVzdHMg YWdhaW5zdCB0aGUgc2FtZSBjb250ZXh0IHRvCj4gKwkgKiB0cnkgYW5kIGdldCBzdWJtaXNzaW9u IGJhY2tlZCBleGVjdXRlIG9uZSBvciBtb3JlIG9uIHRoZSBHUFUuCj4gKwkgKi8KPiArCWZvciAo biA9IDA7IG4gPD0gbWF4X3JxOyBuKyspIHsKPiArCQlnZW1fcXVpZXNjZW50X2dwdShnZW1fZmQp Owo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4gKwkJCWlmIChpID09IDApCj4g KwkJCQlzcGluW2ldID0gX19zcGluX3BvbGwoZ2VtX2ZkLCAwLCBlbmdpbmUpOwo+ICsJCQllbHNl Cj4gKwkJCQlzcGluW2ldID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLAo+ICsJCQkJ CQkJICAgICAgIGVuZ2luZSwgMCk7Cj4gKwkJfQo+ICsKPiArCQlpZiAobikKPiArCQkJdXNsZWVw KF9fc3Bpbl93YWl0KHNwaW5bMF0sIG4pICogbik7Cj4gKwo+ICsJCS8qIFF1ZXJ5IGFuZCBzdG9y ZSBmb3IgbGF0ZXIgY2hlY2tpbmcuICovCj4gKwkJX19xdWVyeV9xdWV1ZXMoZ2VtX2ZkLCBlLCAm cXVldWVzKTsKPiArCQlydW5uaW5nW25dID0gcXVldWVzLnJ1bm5pbmc7Cj4gKwkJaWd0X2luZm8o Im49JXUgcnVubmluZz0ldVxuIiwgbiwgcnVubmluZ1tuXSk7Cj4gKwo+ICsJCWZvciAoaSA9IDA7 IGkgPCBuOyBpKyspIHsKPiArCQkJaWd0X3NwaW5fYmF0Y2hfZW5kKHNwaW5baV0pOwo+ICsJCQln ZW1fc3luYyhnZW1fZmQsIHNwaW5baV0tPmhhbmRsZSk7Cj4gKwkJCWlndF9zcGluX2JhdGNoX2Zy ZWUoZ2VtX2ZkLCBzcGluW2ldKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIENoZWNr IHRoYXQgdGhlIHJ1bm5pbmcgbWV0cmljIGlzIHplcm8gd2hlbiBub3RoaW5nIGlzIHN1Ym1pdHRl ZCwKPiArCSAqIG9uZSB3aGVuIG9uZSByZXF1ZXN0IGlzIHN1Ym1pdHRlZCwgYW5kIGF0IGxlYXN0 IG9uZSBmb3IgYW55IGdyZWF0ZXIKPiArCSAqIHF1ZXVlIGRlcHRoLgo+ICsJICoKPiArCSAqIFdl IGNhbm5vdCBhc3NlcnQgdGhlIGV4YWN0IHZhbHVlIHNpbmNlIHdlIGRvIG5vdCBrbm93IGhvdyBt YW55Cj4gKwkgKiByZXF1ZXN0cyBjYW4gdGhlIHN1Ym1pc3Npb24gYmFja2VuZCBjb25zdW1lLgo+ ICsJICovCj4gKwlpZ3RfYXNzZXJ0X2VxKHJ1bm5pbmdbMF0sIDApOwo+ICsJZm9yIChpID0gMTsg aSA8PSBtYXhfcnE7IGkrKykKPiArCQlpZ3RfYXNzZXJ0KHJ1bm5pbmdbaV0gPiAwKTsKPiArfQo+ ICsKPiAgIGlndF9tYWluCj4gICB7Cj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZTIgKmU7Cj4gICAJaW50IGZkID0gLTE7Cj4gICAJaW50IGRldmlkOwo+ICAgCj4gQEAgLTUy NCw2ICs5MzEsNDEgQEAgaWd0X21haW4KPiAgIAkJdGVzdF9xdWVyeV90b3BvbG9neV9rbm93bl9w Y2lfaWRzKGZkLCBkZXZpZCk7Cj4gICAJfQo+ICAgCj4gKwlpZ3Rfc3VidGVzdF9ncm91cCB7Cj4g KwkJaWd0X2ZpeHR1cmUgewo+ICsJCQlpZ3RfcmVxdWlyZShxdWVyeV9lbmdpbmVfcXVldWVzX3N1 cHBvcnRlZChmZCkpOwo+ICsJCX0KPiArCj4gKwkJaWd0X3N1YnRlc3QoImVuZ2luZS1xdWV1ZXMt aW52YWxpZCIpCj4gKwkJCWVuZ2luZV9xdWV1ZXNfaW52YWxpZChmZCk7Cj4gKwo+ICsJCV9fZm9y X2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGZkLCBlKSB7Cj4gKwkJCWlndF9zdWJ0ZXN0X2dy b3VwIHsKPiArCQkJCWlndF9maXh0dXJlIHsKPiArCQkJCQlnZW1fcmVxdWlyZV9lbmdpbmUoZmQs Cj4gKwkJCQkJCQkgICBlLT5jbGFzcywKPiArCQkJCQkJCSAgIGUtPmluc3RhbmNlKTsKPiArCQkJ CX0KPiArCj4gKwkJCQlpZ3Rfc3VidGVzdF9mKCJlbmdpbmUtcXVldWVzLSVzIiwgZS0+bmFtZSkK PiArCQkJCQllbmdpbmVfcXVldWVzKGZkLCBlKTsKPiArCj4gKwkJCQlpZ3Rfc3VidGVzdF9mKCJl bmdpbmUtcXVldWVkLSVzIiwgZS0+bmFtZSkKPiArCQkJCQllbmdpbmVfcXVldWVkKGZkLCBlLCAw KTsKPiArCj4gKwkJCQlpZ3Rfc3VidGVzdF9mKCJlbmdpbmUtcXVldWVkLWNvbnRleHRzLSVzIiwK PiArCQkJCQkgICAgICBlLT5uYW1lKQo+ICsJCQkJCWVuZ2luZV9xdWV1ZWQoZmQsIGUsIFRFU1Rf Q09OVEVYVFMpOwo+ICsKPiArCQkJCWlndF9zdWJ0ZXN0X2YoImVuZ2luZS1ydW5uYWJsZS0lcyIs IGUtPm5hbWUpCj4gKwkJCQkJZW5naW5lX3J1bm5hYmxlKGZkLCBlKTsKPiArCj4gKwkJCQlpZ3Rf c3VidGVzdF9mKCJlbmdpbmUtcnVubmluZy0lcyIsIGUtPm5hbWUpCj4gKwkJCQkJZW5naW5lX3J1 bm5pbmcoZmQsIGUpOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiAgIAlpZ3RfZml4dHVyZSB7 Cj4gICAJCWNsb3NlKGZkKTsKPiAgIAl9CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==