From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH i-g-t 6/6] tests/i915_query: Engine queues tests Date: Wed, 6 Jun 2018 13:49:07 +0100 Message-ID: <20180606124907.13139-7-tvrtko.ursulin@linux.intel.com> References: <20180606124907.13139-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id E0DAB6F006 for ; Wed, 6 Jun 2018 12:49:21 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id j15-v6so11844628wme.0 for ; Wed, 06 Jun 2018 05:49:21 -0700 (PDT) In-Reply-To: <20180606124907.13139-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: igt-dev@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkJhc2ljIHRl c3RzIHRvIGNvdmVyIGVuZ2luZSBxdWV1ZWQvcnVubmFibGUvcnVubmluZyBtZXRyaWMgYXMgcmVw b3J0ZWQKYnkgdGhlIERSTV9JOTE1X1FVRVJZX0VOR0lORV9RVUVVRVMgcXVlcnkuCgp2MjoKICog VXBkYXRlIEFCSSBmb3IgaTkxNSBjaGFuZ2VzLgogKiBVc2UgaWd0X3NwaW5fYnVzeXdhaXRfdW50 aWxfcnVubmluZy4KICogU3VwcG9ydCBubyBoYXJkd2FyZSBjb250ZXh0cy4KICogTW9yZSBjb21t ZW50cy4gKExpb25lbCBMYW5kd2VybGluKQogQ2hyaXMgV2lsc29uOgogKiBDaGVjayBmb3Igc3cg c3luYyBzdXBwb3J0LgogKiBNdWx0aXBsZSBjb250ZXh0cyBxdWV1ZWQgdGVzdC4KICogU2ltcGxp ZnkgY29udGV4dCBhbmQgYmIgYWxsb2NhdGlvbi4KICogRml4IGFzc2VydHMgaW4gdGhlIHJ1bm5p bmcgc3VidGVzdC4KCnYzOgogKiBVcGRhdGUgZm9yIHVBUEkgY2hhbmdlLgoKU2lnbmVkLW9mZi1i eTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiB0ZXN0cy9p OTE1X3F1ZXJ5LmMgfCA0NDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDQyIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS90 ZXN0cy9pOTE1X3F1ZXJ5LmMgYi90ZXN0cy9pOTE1X3F1ZXJ5LmMKaW5kZXggYzdkZThjYmQ4Mzcx Li41ODg0Mjg3NDljNTAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2k5MTVfcXVlcnkuYworKysgYi90ZXN0 cy9pOTE1X3F1ZXJ5LmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiaWd0Lmgi CisjaW5jbHVkZSAic3dfc3luYy5oIgogCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKQEAgLTQ3Nyw4 ICs0NzgsNDE0IEBAIHRlc3RfcXVlcnlfdG9wb2xvZ3lfa25vd25fcGNpX2lkcyhpbnQgZmQsIGlu dCBkZXZpZCkKIAlmcmVlKHRvcG9faW5mbyk7CiB9CiAKKyNkZWZpbmUgRFJNX0k5MTVfUVVFUllf RU5HSU5FX1FVRVVFUwkyCisKK3N0cnVjdCBkcm1faTkxNV9xdWVyeV9lbmdpbmVfcXVldWVzIHsK KwkvKiogRW5naW5lIGNsYXNzIGFzIGluIGVudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFzcy4g Ki8KKwlfX3UxNiBjbGFzczsKKworCS8qKiBFbmdpbmUgaW5zdGFuY2UgbnVtYmVyLiAqLworCV9f dTE2IGluc3RhbmNlOworCisJLyoqIE51bWJlciBvZiByZXF1ZXN0cyB3aXRoIHVucmVzb2x2ZWQg ZmVuY2VzIGFuZCBkZXBlbmRlbmNpZXMuICovCisJX191MzIgcXVldWVkOworCisJLyoqIE51bWJl ciBvZiByZWFkeSByZXF1ZXN0cyB3YWl0aW5nIG9uIGEgc2xvdCBvbiBHUFUuICovCisJX191MzIg cnVubmFibGU7CisKKwkvKiogTnVtYmVyIG9mIHJlcXVlc3RzIGV4ZWN1dGluZyBvbiB0aGUgR1BV LiAqLworCV9fdTMyIHJ1bm5pbmc7CisKKwlfX3UzMiByc3ZkWzZdOworfTsKKworc3RhdGljIGJv b2wgcXVlcnlfZW5naW5lX3F1ZXVlc19zdXBwb3J0ZWQoaW50IGZkKQoreworCXN0cnVjdCBkcm1f aTkxNV9xdWVyeV9pdGVtIGl0ZW0gPSB7CisJCS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX0VO R0lORV9RVUVVRVMsCisJfTsKKworCXJldHVybiBfX2k5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVt LCAxKSA9PSAwICYmIGl0ZW0ubGVuZ3RoID4gMDsKK30KKworc3RhdGljIHZvaWQgZW5naW5lX3F1 ZXVlc19pbnZhbGlkKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5naW5lX3F1 ZXVlcyBxdWV1ZXM7CisJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbTsKKwl1bnNpZ25l ZCBpbnQgbGVuOworCXVuc2lnbmVkIGludCBpOworCisJLyogRmxhZ3MgaXMgTUJaLiAqLworCW1l bXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKKwlpdGVtLnF1ZXJ5X2lkID0gRFJNX0k5MTVf UVVFUllfRU5HSU5FX1FVRVVFUzsKKwlpdGVtLmZsYWdzID0gMTsKKwlpOTE1X3F1ZXJ5X2l0ZW1z KGZkLCAmaXRlbSwgMSk7CisJaWd0X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwgLUVJTlZBTCk7CisK KwkvKiBMZW5ndGggbm90IHplcm8gYW5kIG5vdCBncmVhdGVyIG9yIGVxdWFsIHJlcXVpcmVkIHNp emUuICovCisJbWVtc2V0KCZpdGVtLCAwLCBzaXplb2YoaXRlbSkpOworCWl0ZW0ucXVlcnlfaWQg PSBEUk1fSTkxNV9RVUVSWV9FTkdJTkVfUVVFVUVTOworCWl0ZW0ubGVuZ3RoID0gMTsKKwlpOTE1 X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisJaWd0X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwg LUVJTlZBTCk7CisKKwkvKiBRdWVyeSBjb3JyZWN0IGxlbmd0aC4gKi8KKwltZW1zZXQoJml0ZW0s IDAsIHNpemVvZihpdGVtKSk7CisJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX0VOR0lO RV9RVUVVRVM7CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOworCWlndF9hc3NlcnQo aXRlbS5sZW5ndGggPj0gMCk7CisJbGVuID0gaXRlbS5sZW5ndGg7CisKKwkvKiBJdmFsaWQgcG9p bnRlci4gKi8KKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7CisJaXRlbS5xdWVyeV9p ZCA9IERSTV9JOTE1X1FVRVJZX0VOR0lORV9RVUVVRVM7CisJaXRlbS5sZW5ndGggPSBsZW47CisJ aTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOworCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5n dGgsIC1FRkFVTFQpOworCisJLyogUmVzZXJ2ZWQgZmllbGRzIGFyZSBNQlouICovCisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShxdWV1ZXMucnN2ZCk7IGkrKykgeworCQltZW1zZXQoJnF1 ZXVlcywgMCwgc2l6ZW9mKHF1ZXVlcykpOworCQlxdWV1ZXMucnN2ZFtpXSA9IDE7CisJCW1lbXNl dCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKKwkJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FV RVJZX0VOR0lORV9RVUVVRVM7CisJCWl0ZW0ubGVuZ3RoID0gbGVuOworCQlpdGVtLmRhdGFfcHRy ID0gdG9fdXNlcl9wb2ludGVyKCZxdWV1ZXMpOworCQlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRl bSwgMSk7CisJCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIC1FSU5WQUwpOworCX0KKworCW1l bXNldCgmcXVldWVzLCAwLCBzaXplb2YocXVldWVzKSk7CisJcXVldWVzLmNsYXNzID0gLTE7CisJ bWVtc2V0KCZpdGVtLCAwLCBzaXplb2YoaXRlbSkpOworCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkx NV9RVUVSWV9FTkdJTkVfUVVFVUVTOworCWl0ZW0ubGVuZ3RoID0gbGVuOworCWl0ZW0uZGF0YV9w dHIgPSB0b191c2VyX3BvaW50ZXIoJnF1ZXVlcyk7CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0 ZW0sIDEpOworCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIC1FTk9FTlQpOworCisJbWVtc2V0 KCZxdWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsKKwlxdWV1ZXMuaW5zdGFuY2UgPSAtMTsKKwlt ZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7CisJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1 X1FVRVJZX0VOR0lORV9RVUVVRVM7CisJaXRlbS5sZW5ndGggPSBsZW47CisJCWl0ZW0uZGF0YV9w dHIgPSB0b191c2VyX3BvaW50ZXIoJnF1ZXVlcyk7CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0 ZW0sIDEpOworCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIC1FTk9FTlQpOworfQorCitzdGF0 aWMgdm9pZCBlbmdpbmVfcXVldWVzKGludCBmZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplKQoreworCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9lbmdpbmVfcXVldWVzIHF1 ZXVlczsKKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSBpdGVtOworCXVuc2lnbmVkIGludCBs ZW47CisKKwkvKiBRdWVyeSByZXF1aXJlZCBidWZmZXIgbGVuZ3RoLiAqLworCW1lbXNldCgmcXVl dWVzLCAwLCBzaXplb2YocXVldWVzKSk7CisJbWVtc2V0KCZpdGVtLCAwLCBzaXplb2YoaXRlbSkp OworCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9FTkdJTkVfUVVFVUVTOworCWl0ZW0u ZGF0YV9wdHIgPSB0b191c2VyX3BvaW50ZXIoJnF1ZXVlcyk7CisJaTkxNV9xdWVyeV9pdGVtcyhm ZCwgJml0ZW0sIDEpOworCWlndF9hc3NlcnQoaXRlbS5sZW5ndGggPj0gMCk7CisJaWd0X2Fzc2Vy dChpdGVtLmxlbmd0aCA8PSBzaXplb2YocXVldWVzKSk7CisJbGVuID0gaXRlbS5sZW5ndGg7CisK KwkvKiBDaGVjayBsZW5ndGggbGFyZ2VyIHRoYW4gcmVxdWlyZWQgd29ya3MgYW5kIHJlcG9ydHMg c2FtZSBsZW5ndGguICovCisJbWVtc2V0KCZxdWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsKKwlt ZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7CisJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1 X1FVRVJZX0VOR0lORV9RVUVVRVM7CisJaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigm cXVldWVzKTsKKwlpdGVtLmxlbmd0aCA9IGxlbiArIDE7CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwg Jml0ZW0sIDEpOworCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIGxlbik7CisKKwkvKiBBY3R1 YWwgcXVlcnkuICovCisJbWVtc2V0KCZxdWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsKKwlxdWV1 ZXMuY2xhc3MgPSBlLT5jbGFzczsKKwlxdWV1ZXMuaW5zdGFuY2UgPSBlLT5pbnN0YW5jZTsKKwlt ZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7CisJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1 X1FVRVJZX0VOR0lORV9RVUVVRVM7CisJaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigm cXVldWVzKTsKKwlpdGVtLmxlbmd0aCA9IGxlbjsKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRl bSwgMSk7CisJaWd0X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwgbGVuKTsKK30KKworc3RhdGljIHVu c2lnbmVkIGludCBlMnJpbmcoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplKQoreworCXJldHVybiBnZW1fY2xhc3NfaW5zdGFuY2VfdG9fZWJfZmxhZ3Mo Z2VtX2ZkLCBlLT5jbGFzcywgZS0+aW5zdGFuY2UpOworfQorCitzdGF0aWMgdm9pZAorX19xdWVy eV9xdWV1ZXMoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUs CisJICAgICAgIHN0cnVjdCBkcm1faTkxNV9xdWVyeV9lbmdpbmVfcXVldWVzICpxdWV1ZXMpCit7 CisJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbTsKKworCW1lbXNldChxdWV1ZXMsIDAs IHNpemVvZigqcXVldWVzKSk7CisJcXVldWVzLT5jbGFzcyA9IGUtPmNsYXNzOworCXF1ZXVlcy0+ aW5zdGFuY2UgPSBlLT5pbnN0YW5jZTsKKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7 CisJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX0VOR0lORV9RVUVVRVM7CisJaXRlbS5k YXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihxdWV1ZXMpOworCWl0ZW0ubGVuZ3RoID0gc2l6ZW9m KCpxdWV1ZXMpOworCWk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKKwlpZ3RfYXNzZXJ0 X2VxKGl0ZW0ubGVuZ3RoLCBzaXplb2YoKnF1ZXVlcykpOworfQorCisjZGVmaW5lIFRFU1RfQ09O VEVYVFMgKDEgPDwgMCkKKworLyoKKyAqIFRlc3QgdGhhdCB0aGUgcmVwb3J0ZWQgbnVtYmVyIG9m IHF1ZXVlZCAobm90IHJlYWR5IGZvciBleGVjdXRpb24gZHVlIGZlbmNlcworICogb3IgZGVwZW5k ZW5jaWVzKSByZXF1ZXN0cyBvbiBhbiBlbmdpbmUgaXMgY29ycmVjdC4KKyAqLworc3RhdGljIHZv aWQKK2VuZ2luZV9xdWV1ZWQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplLAorCSAgICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwljb25zdCB1bnNp Z25lZCBsb25nIGVuZ2luZSA9IGUycmluZyhnZW1fZmQsIGUpOworCXN0cnVjdCBkcm1faTkxNV9x dWVyeV9lbmdpbmVfcXVldWVzIHF1ZXVlczsKKwljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRD SF9CVUZGRVJfRU5EOworCWNvbnN0IHVuc2lnbmVkIGludCBtYXhfcnEgPSAxMDsKKwl1aW50MzJf dCBxdWV1ZWRbbWF4X3JxICsgMV07CisJdW5zaWduZWQgaW50IG4sIGk7CisJdWludDMyX3QgYm87 CisKKwlpZ3RfcmVxdWlyZV9zd19zeW5jKCk7CisJaWYgKGZsYWdzICYgVEVTVF9DT05URVhUUykK KwkJZ2VtX3JlcXVpcmVfY29udGV4dHMoZ2VtX2ZkKTsKKworCW1lbXNldChxdWV1ZWQsIDAsIHNp emVvZihxdWV1ZWQpKTsKKworCWJvID0gZ2VtX2NyZWF0ZShnZW1fZmQsIDQwOTYpOworCWdlbV93 cml0ZShnZW1fZmQsIGJvLCA0MDkyLCAmYmJlLCBzaXplb2YoYmJlKSk7CisKKwkgLyogQ3JlYXRl IGEgc3BlY2lmaWMgcXVldWUgZGVwdGggb2YgdW5yZWFkeSByZXF1ZXN0cy4gKi8KKwlmb3IgKG4g PSAwOyBuIDw9IG1heF9ycTsgbisrKSB7CisJCWludCBmZW5jZSA9IC0xOworCQlJR1RfQ09SS19G RU5DRShjb3JrKTsKKworCQlnZW1fcXVpZXNjZW50X2dwdShnZW1fZmQpOworCisJCS8qIENyZWF0 ZSBhIGNvcmsgc28gd2UgY2FuIGNyZWF0ZSBhIGRlcGVuZGVuY3kgY2hhaW4uICovCisJCWlmIChu KQorCQkJZmVuY2UgPSBpZ3RfY29ya19wbHVnKCZjb3JrLCAtMSk7CisKKwkJLyogU3VibWl0IG4g dW5yZWFkeSByZXF1ZXN0cyBkZXBlbmRpbmcgb24gdGhlIGNvcmsuICovCisJCWZvciAoaSA9IDA7 IGkgPCBuOyBpKyspIHsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9 IHsgfTsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZWIgPSB7IH07CisKKwkJ CW9iai5oYW5kbGUgPSBibzsKKworCQkJZWIuYnVmZmVyX2NvdW50ID0gMTsKKwkJCWViLmJ1ZmZl cnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopOworCisJCQllYi5mbGFncyA9IGVuZ2luZSB8 IEk5MTVfRVhFQ19GRU5DRV9JTjsKKworCQkJLyoKKwkJCSAqIEluIGNvbnRleHQgbW9kZSBlYWNo IHN1Ym1pc3Npb24gaXMgb24gYSBzZXBhcmF0ZQorCQkJICogY29udGV4dC4KKwkJCSAqLworCQkJ aWYgKGZsYWdzICYgVEVTVF9DT05URVhUUykKKwkJCQllYi5yc3ZkMSA9IGdlbV9jb250ZXh0X2Ny ZWF0ZShnZW1fZmQpOworCisJCQllYi5yc3ZkMiA9IGZlbmNlOworCisJCQlnZW1fZXhlY2J1Zihn ZW1fZmQsICZlYik7CisKKwkJCWlmIChmbGFncyAmIFRFU1RfQ09OVEVYVFMpCisJCQkJZ2VtX2Nv bnRleHRfZGVzdHJveShnZW1fZmQsIGViLnJzdmQxKTsKKwkJfQorCisJCS8qIFN0b3JlIHJlcG9y dGVkIHF1ZXVlIGRlcHRoIHRvIGFzc2VydCBhZ2FpbnN0IGxhdGVyLiAqLworCQlfX3F1ZXJ5X3F1 ZXVlcyhnZW1fZmQsIGUsICZxdWV1ZXMpOworCQlxdWV1ZWRbbl0gPSBxdWV1ZXMucXVldWVkOwor CQlpZ3RfaW5mbygibj0ldSBxdWV1ZWQ9JXVcbiIsIG4sIHF1ZXVlZFtuXSk7CisKKwkJLyogVW5w bHVnIHRoZSBxdWV1ZSBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBxdWV1ZSBkZXB0aC4gKi8KKwkJ aWYgKGZlbmNlID49IDApCisJCQlpZ3RfY29ya191bnBsdWcoJmNvcmspOworCisJCWdlbV9zeW5j KGdlbV9mZCwgYm8pOworCX0KKworCWdlbV9jbG9zZShnZW1fZmQsIGJvKTsKKworCWZvciAoaSA9 IDA7IGkgPD0gbWF4X3JxOyBpKyspCisJCWlndF9hc3NlcnRfZXEocXVldWVkW2ldLCBpKTsKK30K Kworc3RhdGljIGlndF9zcGluX3QgKiBfX3NwaW5fcG9sbChpbnQgZmQsIHVpbnQzMl90IGN0eCwg dW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlpZiAoZ2VtX2Nhbl9zdG9yZV9kd29yZChmZCwgZmxh Z3MpKQorCQlyZXR1cm4gX19pZ3Rfc3Bpbl9iYXRjaF9uZXdfcG9sbChmZCwgY3R4LCBmbGFncyk7 CisJZWxzZQorCQlyZXR1cm4gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZmxhZ3MsIDAp OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3NwaW5fd2FpdChpZ3Rfc3Bpbl90ICpzcGlu LCB1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7IH07CisJdW5zaWdu ZWQgbG9uZyB0OworCisJaWd0X25zZWNfZWxhcHNlZCgmdHMpOworCisJaWYgKHNwaW4tPnJ1bm5p bmcpIHsKKwkJaWd0X3NwaW5fYnVzeXdhaXRfdW50aWxfcnVubmluZyhzcGluKTsKKwl9IGVsc2Ug eworCQlpZ3RfZGVidWcoIl9fc3Bpbl93YWl0IC0gdXNsZWVwIG1vZGVcbiIpOworCQl1c2xlZXAo NTAwZTMpOyAvKiBCZXR0ZXIgdGhhbiBub3RoaW5nISAqLworCX0KKworCXQgPSBpZ3RfbnNlY19l bGFwc2VkKCZ0cyk7CisKKwlyZXR1cm4gc3Bpbi0+cnVubmluZyA/IHQgOiA1MDBlNiAvIG47Cit9 CisKKy8qCisgKiBUZXN0IHRoYXQgdGhlIG51bWJlciBvZiByZXF1ZXN0cyByZWFkeSBmb3IgZXhl Y3V0aW9uIGJ1dCB3YWl0aW5nIG9uIHNwYWNlIG9uCisgKiBHUFUgaXMgY29ycmVjdGx5IHJlcG9y dGVkLgorICovCitzdGF0aWMgdm9pZAorZW5naW5lX3J1bm5hYmxlKGludCBnZW1fZmQsIGNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKK3sKKwljb25zdCB1bnNpZ25lZCBs b25nIGVuZ2luZSA9IGUycmluZyhnZW1fZmQsIGUpOworCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9l bmdpbmVfcXVldWVzIHF1ZXVlczsKKwlib29sIGNvbnRleHRzID0gZ2VtX2hhc19jb250ZXh0cyhn ZW1fZmQpOworCWNvbnN0IHVuc2lnbmVkIGludCBtYXhfcnEgPSAxMDsKKwlpZ3Rfc3Bpbl90ICpz cGluW21heF9ycSArIDFdOworCXVpbnQzMl90IHJ1bm5hYmxlW21heF9ycSArIDFdOworCXVpbnQz Ml90IGN0eFttYXhfcnFdOworCXVuc2lnbmVkIGludCBuLCBpOworCisJbWVtc2V0KHJ1bm5hYmxl LCAwLCBzaXplb2YocnVubmFibGUpKTsKKworCWlmIChjb250ZXh0cykgeworCQlmb3IgKGkgPSAw OyBpIDwgbWF4X3JxOyBpKyspCisJCQljdHhbaV0gPSBnZW1fY29udGV4dF9jcmVhdGUoZ2VtX2Zk KTsKKwl9CisKKwkvKgorCSAqIFN1Ym1pdCBkaWZmZXJlbnQgbnVtYmVyIG9mIHJlcXVlc3RzLCBw b3RlbnRpYWxseSBhZ2FpbnN0IGRpZmZlcmVudAorCSAqIGNvbnRleHRzLCBpbiBvcmRlciB0byBw cm92b2tlIGVuZ2luZSBydW5uYWJsZSBtZXRyaWMgcmV0dXJuaW5nCisJICogZGlmZmVyZW50IG51 bWJlcnMuCisJICovCisJZm9yIChuID0gMDsgbiA8PSBtYXhfcnE7IG4rKykgeworCQlnZW1fcXVp ZXNjZW50X2dwdShnZW1fZmQpOworCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXVp bnQzMl90IGN0eF8gPSBjb250ZXh0cyA/IGN0eFtpXSA6IDA7CisKKwkJCWlmIChpID09IDApCisJ CQkJc3BpbltpXSA9IF9fc3Bpbl9wb2xsKGdlbV9mZCwgY3R4XywgZW5naW5lKTsKKwkJCWVsc2UK KwkJCQlzcGluW2ldID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCBjdHhfLAorCQkJCQkJ CSAgICAgICBlbmdpbmUsIDApOworCQl9CisKKwkJaWYgKG4pCisJCQl1c2xlZXAoX19zcGluX3dh aXQoc3BpblswXSwgbikgKiBuKTsKKworCQkvKiBRdWVyeSBhbmQgc3RvcmUgZm9yIGxhdGVyIGNo ZWNraW5nLiAqLworCQlfX3F1ZXJ5X3F1ZXVlcyhnZW1fZmQsIGUsICZxdWV1ZXMpOworCQlydW5u YWJsZVtuXSA9IHF1ZXVlcy5ydW5uYWJsZTsKKwkJaWd0X2luZm8oIm49JXUgcnVubmFibGU9JXVc biIsIG4sIHJ1bm5hYmxlW25dKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlp Z3Rfc3Bpbl9iYXRjaF9lbmQoc3BpbltpXSk7CisJCQlnZW1fc3luYyhnZW1fZmQsIHNwaW5baV0t PmhhbmRsZSk7CisJCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdlbV9mZCwgc3BpbltpXSk7CisJCX0K Kwl9CisKKwlpZiAoY29udGV4dHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1heF9ycTsgaSsrKQor CQkJZ2VtX2NvbnRleHRfZGVzdHJveShnZW1fZmQsIGN0eFtpXSk7CisJfQorCisJLyoKKwkgKiBD aGVjayB0aGF0IHRoZSBydW5uYWJsZSBtZXRyaWMgaXMgemVybyB3aGVuIG5vdGhpbmcgaXMgc3Vi bWl0dGVkLAorCSAqIGFuZCB0aGF0IGl0IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIG9uIHRoZSBtYXhp bXVtIHF1ZXVlIGRlcHRoLgorCSAqCisJICogV2UgY2Fubm90IGFzc2VydCB0aGUgZXhhY3QgdmFs dWUgc2luY2Ugd2UgZG8gbm90IGtub3cgaG93IG1hbnkKKwkgKiByZXF1ZXN0cyBjYW4gdGhlIHN1 Ym1pc3Npb24gYmFja2VuZCBjb25zdW1lLgorCSAqLworCWlndF9hc3NlcnRfZXEocnVubmFibGVb MF0sIDApOworCWlndF9hc3NlcnQocnVubmFibGVbbWF4X3JxXSA+IDApOworCisJLyoKKwkgKiBX ZSBjYW4gb25seSB0ZXN0IHRoYXQgdGhlIHJ1bm5hYmxlIG1ldHJpYyBpcyBncm93aW5nIGJ5IG9u ZSBpZiB3ZQorCSAqIGhhdmUgY29udGV4dCBzdXBwb3J0LgorCSAqLworCWlmIChjb250ZXh0cykK KwkJaWd0X2Fzc2VydF9lcShydW5uYWJsZVttYXhfcnFdIC0gcnVubmFibGVbbWF4X3JxIC0gMV0s IDEpOworfQorCisvKgorICogVGVzdCB0aGF0IHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgY3VycmVu dGx5IGV4ZWN1dGluZyBvbiB0aGUgR1BVIGlzIGNvcnJlY3RseQorICogcmVwb3J0ZWQuCisgKi8K K3N0YXRpYyB2b2lkCitlbmdpbmVfcnVubmluZyhpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyBlbmdpbmUg PSBlMnJpbmcoZ2VtX2ZkLCBlKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5naW5lX3F1ZXVl cyBxdWV1ZXM7CisJY29uc3QgdW5zaWduZWQgaW50IG1heF9ycSA9IDEwOworCWlndF9zcGluX3Qg KnNwaW5bbWF4X3JxICsgMV07CisJdWludDMyX3QgcnVubmluZ1ttYXhfcnEgKyAxXTsKKwl1bnNp Z25lZCBpbnQgbiwgaTsKKworCW1lbXNldChydW5uaW5nLCAwLCBzaXplb2YocnVubmluZykpOwor CW1lbXNldChzcGluLCAwLCBzaXplb2Yoc3BpbikpOworCisJLyoKKwkgKiBDcmVhdGUgdmFyaW91 cyBxdWV1ZSBkZXB0aHMgb2YgcmVxdWVzdHMgYWdhaW5zdCB0aGUgc2FtZSBjb250ZXh0IHRvCisJ ICogdHJ5IGFuZCBnZXQgc3VibWlzc2lvbiBiYWNrZWQgZXhlY3V0ZSBvbmUgb3IgbW9yZSBvbiB0 aGUgR1BVLgorCSAqLworCWZvciAobiA9IDA7IG4gPD0gbWF4X3JxOyBuKyspIHsKKwkJZ2VtX3F1 aWVzY2VudF9ncHUoZ2VtX2ZkKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlp ZiAoaSA9PSAwKQorCQkJCXNwaW5baV0gPSBfX3NwaW5fcG9sbChnZW1fZmQsIDAsIGVuZ2luZSk7 CisJCQllbHNlCisJCQkJc3BpbltpXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwK KwkJCQkJCQkgICAgICAgZW5naW5lLCAwKTsKKwkJfQorCisJCWlmIChuKQorCQkJdXNsZWVwKF9f c3Bpbl93YWl0KHNwaW5bMF0sIG4pICogbik7CisKKwkJLyogUXVlcnkgYW5kIHN0b3JlIGZvciBs YXRlciBjaGVja2luZy4gKi8KKwkJX19xdWVyeV9xdWV1ZXMoZ2VtX2ZkLCBlLCAmcXVldWVzKTsK KwkJcnVubmluZ1tuXSA9IHF1ZXVlcy5ydW5uaW5nOworCQlpZ3RfaW5mbygibj0ldSBydW5uaW5n PSV1XG4iLCBuLCBydW5uaW5nW25dKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJ CQlpZ3Rfc3Bpbl9iYXRjaF9lbmQoc3BpbltpXSk7CisJCQlnZW1fc3luYyhnZW1fZmQsIHNwaW5b aV0tPmhhbmRsZSk7CisJCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdlbV9mZCwgc3BpbltpXSk7CisJ CX0KKwl9CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIHJ1bm5pbmcgbWV0cmljIGlzIHplcm8g d2hlbiBub3RoaW5nIGlzIHN1Ym1pdHRlZCwKKwkgKiBvbmUgd2hlbiBvbmUgcmVxdWVzdCBpcyBz dWJtaXR0ZWQsIGFuZCBhdCBsZWFzdCBvbmUgZm9yIGFueSBncmVhdGVyCisJICogcXVldWUgZGVw dGguCisJICoKKwkgKiBXZSBjYW5ub3QgYXNzZXJ0IHRoZSBleGFjdCB2YWx1ZSBzaW5jZSB3ZSBk byBub3Qga25vdyBob3cgbWFueQorCSAqIHJlcXVlc3RzIGNhbiB0aGUgc3VibWlzc2lvbiBiYWNr ZW5kIGNvbnN1bWUuCisJICovCisJaWd0X2Fzc2VydF9lcShydW5uaW5nWzBdLCAwKTsKKwlmb3Ig KGkgPSAxOyBpIDw9IG1heF9ycTsgaSsrKQorCQlpZ3RfYXNzZXJ0KHJ1bm5pbmdbaV0gPiAwKTsK K30KKwogaWd0X21haW4KIHsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIg KmU7CiAJaW50IGZkID0gLTE7CiAJaW50IGRldmlkOwogCkBAIC01MjQsNiArOTMxLDQxIEBAIGln dF9tYWluCiAJCXRlc3RfcXVlcnlfdG9wb2xvZ3lfa25vd25fcGNpX2lkcyhmZCwgZGV2aWQpOwog CX0KIAorCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0X2ZpeHR1cmUgeworCQkJaWd0X3JlcXVp cmUocXVlcnlfZW5naW5lX3F1ZXVlc19zdXBwb3J0ZWQoZmQpKTsKKwkJfQorCisJCWlndF9zdWJ0 ZXN0KCJlbmdpbmUtcXVldWVzLWludmFsaWQiKQorCQkJZW5naW5lX3F1ZXVlc19pbnZhbGlkKGZk KTsKKworCQlfX2Zvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShmZCwgZSkgeworCQkJaWd0 X3N1YnRlc3RfZ3JvdXAgeworCQkJCWlndF9maXh0dXJlIHsKKwkJCQkJZ2VtX3JlcXVpcmVfZW5n aW5lKGZkLAorCQkJCQkJCSAgIGUtPmNsYXNzLAorCQkJCQkJCSAgIGUtPmluc3RhbmNlKTsKKwkJ CQl9CisKKwkJCQlpZ3Rfc3VidGVzdF9mKCJlbmdpbmUtcXVldWVzLSVzIiwgZS0+bmFtZSkKKwkJ CQkJZW5naW5lX3F1ZXVlcyhmZCwgZSk7CisKKwkJCQlpZ3Rfc3VidGVzdF9mKCJlbmdpbmUtcXVl dWVkLSVzIiwgZS0+bmFtZSkKKwkJCQkJZW5naW5lX3F1ZXVlZChmZCwgZSwgMCk7CisKKwkJCQlp Z3Rfc3VidGVzdF9mKCJlbmdpbmUtcXVldWVkLWNvbnRleHRzLSVzIiwKKwkJCQkJICAgICAgZS0+ bmFtZSkKKwkJCQkJZW5naW5lX3F1ZXVlZChmZCwgZSwgVEVTVF9DT05URVhUUyk7CisKKwkJCQlp Z3Rfc3VidGVzdF9mKCJlbmdpbmUtcnVubmFibGUtJXMiLCBlLT5uYW1lKQorCQkJCQllbmdpbmVf cnVubmFibGUoZmQsIGUpOworCisJCQkJaWd0X3N1YnRlc3RfZigiZW5naW5lLXJ1bm5pbmctJXMi LCBlLT5uYW1lKQorCQkJCQllbmdpbmVfcnVubmluZyhmZCwgZSk7CisJCQl9CisJCX0KKwl9CisK IAlpZ3RfZml4dHVyZSB7CiAJCWNsb3NlKGZkKTsKIAl9Ci0tIAoyLjE3LjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=