From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 666516E2E8 for ; Fri, 22 Nov 2019 13:03:16 +0000 (UTC) From: Lionel Landwerlin Date: Fri, 22 Nov 2019 15:02:58 +0200 Message-Id: <20191122130300.558951-9-lionel.g.landwerlin@intel.com> In-Reply-To: <20191122130300.558951-1-lionel.g.landwerlin@intel.com> References: <20191122130300.558951-1-lionel.g.landwerlin@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 08/10] tests/i915/exec_fence: add timeline fence tests 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: igt-dev@lists.freedesktop.org List-ID: V2UgY2FuIG5vdyBnaXZlIGEgdHVwbGUgKGhhbmRsZSwgcG9pbnRfdmFsdWUpIGZvciB0aW1lbGlu ZSBzZW1hcGhvcmVzLgoKdjI6IEZpeCB1cCBzeW5jb2JqLXRpbWVsaW5lLXJlcGVhdCB0ZXN0IChM aW9uZWwpCiAgICBVcGRhdGUgZm9sbG93aW5nIGtlcm5lbCByZW5hbWUKCnYzOiBBZGQgbW9yZSBv cmRlcmluZyB0ZXN0cyBmb3Igc3luY29iai9idWZmZXIgaGFuZGxlIHN0YXRlIChDaHJpcykKClNp Z25lZC1vZmYtYnk6IExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVs LmNvbT4KLS0tCiB0ZXN0cy9pOTE1L2dlbV9leGVjX2ZlbmNlLmMgfCA2NzggKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNjc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9leGVjX2ZlbmNlLmMgYi90ZXN0cy9pOTE1 L2dlbV9leGVjX2ZlbmNlLmMKaW5kZXggYTllMjk4ODkuLmIyNzMzN2ZmIDEwMDY0NAotLS0gYS90 ZXN0cy9pOTE1L2dlbV9leGVjX2ZlbmNlLmMKKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhlY19mZW5j ZS5jCkBAIC0xMzYyLDYgKzEzNjIsNjQwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3luY29ial9jaGFu bmVsKGludCBmZCkKIAkJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2JqW2ldKTsKIH0KIAorc3Rh dGljIGJvb2wgaGFzX3N5bmNvYmpfdGltZWxpbmUoaW50IGZkKQoreworCXN0cnVjdCBkcm1fZ2V0 X2NhcCBjYXAgPSB7IC5jYXBhYmlsaXR5ID0gRFJNX0NBUF9TWU5DT0JKX1RJTUVMSU5FIH07CisJ aW9jdGwoZmQsIERSTV9JT0NUTF9HRVRfQ0FQLCAmY2FwKTsKKwlyZXR1cm4gY2FwLnZhbHVlOwor fQorCitzdGF0aWMgYm9vbCBleGVjX2hhc190aW1lbGluZV9mZW5jZXMoaW50IGZkKQoreworCXN0 cnVjdCBkcm1faTkxNV9nZXRwYXJhbSBncDsKKwlpbnQgdmFsdWUgPSAwOworCisJbWVtc2V0KCZn cCwgMCwgc2l6ZW9mKGdwKSk7CisJZ3AucGFyYW0gPSBJOTE1X1BBUkFNX0hBU19FWEVDX1RJTUVM SU5FX0ZFTkNFUzsKKwlncC52YWx1ZSA9ICZ2YWx1ZTsKKworCWlvY3RsKGZkLCBEUk1fSU9DVExf STkxNV9HRVRQQVJBTSwgJmdwLCBzaXplb2YoZ3ApKTsKKwllcnJubyA9IDA7CisKKwlyZXR1cm4g dmFsdWU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X2ludmFsaWRfdGltZWxpbmVfZmVu Y2VfYXJyYXlfZGVzYyA9CisJIlZlcmlmaWVzIGludmFsaWQgZXhlY2J1ZiBwYXJhbWV0ZXJzIGlu IgorCSIgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXJfZXh0X3RpbWVsaW5lX2ZlbmNlcyBhcmUgcmVq ZWN0ZWQiOworc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX3RpbWVsaW5lX2ZlbmNlX2FycmF5KGlu dCBmZCkKK3sKKwljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiBvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyX2V4 dF90aW1lbGluZV9mZW5jZXMgdGltZWxpbmVfZmVuY2VzOworCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19mZW5jZSBmZW5jZTsKKwl1aW50NjRfdCB2YWx1ZTsKKwl2b2lkICpwdHI7CisKKwkvKiBj cmVhdGUgYW4gb3RoZXJ3aXNlIHZhbGlkIGV4ZWNidWYgKi8KKwltZW1zZXQoJm9iaiwgMCwgc2l6 ZW9mKG9iaikpOworCW9iai5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwlnZW1fd3Jp dGUoZmQsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKKwltZW1zZXQoJmV4ZWNi dWYsIDAsIHNpemVvZihleGVjYnVmKSk7CisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJf cG9pbnRlcigmb2JqKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDE7CisJZ2VtX2V4ZWNidWYo ZmQsICZleGVjYnVmKTsKKworCS8qIEludmFsaWQgbnVtX2NsaXByZWN0cyB2YWx1ZSAqLworCWV4 ZWNidWYuY2xpcHJlY3RzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmdGltZWxpbmVfZmVuY2VzKTsK KwlleGVjYnVmLm51bV9jbGlwcmVjdHMgPSAxOworCWV4ZWNidWYuZmxhZ3MgPSBJOTE1X0VYRUNf VVNFX0VYVEVOU0lPTlM7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1 ZiksIC1FSU5WQUwpOworCisJZmVuY2UuaGFuZGxlID0gc3luY29ial9jcmVhdGUoZmQsIDApOwor CWZlbmNlLmZsYWdzID0gSTkxNV9FWEVDX0ZFTkNFX1NJR05BTDsKKwl2YWx1ZSA9IDE7CisKKwlt ZW1zZXQoJnRpbWVsaW5lX2ZlbmNlcywgMCwgc2l6ZW9mKHRpbWVsaW5lX2ZlbmNlcykpOworCXRp bWVsaW5lX2ZlbmNlcy5iYXNlLm5hbWUgPSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUl9FWFRfVElN RUxJTkVfRkVOQ0VTOworCXRpbWVsaW5lX2ZlbmNlcy5mZW5jZV9jb3VudCA9IDE7CisJdGltZWxp bmVfZmVuY2VzLmhhbmRsZXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZmZW5jZSk7CisJdGltZWxp bmVfZmVuY2VzLnZhbHVlc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnZhbHVlKTsKKworCS8qIElu dmFsaWQgZmVuY2UgYXJyYXkgJiBpOTE1IGV4dCAqLworCWV4ZWNidWYuY2xpcHJlY3RzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcigmdGltZWxpbmVfZmVuY2VzKTsKKwlleGVjYnVmLm51bV9jbGlwcmVj dHMgPSAwOworCWV4ZWNidWYuZmxhZ3MgPSBJOTE1X0VYRUNfRkVOQ0VfQVJSQVkgfCBJOTE1X0VY RUNfVVNFX0VYVEVOU0lPTlM7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhl Y2J1ZiksIC1FSU5WQUwpOworCisJc3luY29ial9jcmVhdGUoZmQsIGZlbmNlLmhhbmRsZSk7CisK KwlleGVjYnVmLmZsYWdzID0gSTkxNV9FWEVDX1VTRV9FWFRFTlNJT05TOworCisJLyogSW52YWxp ZCBoYW5kbGVzX3B0ciAqLworCXZhbHVlID0gMTsKKwltZW1zZXQoJnRpbWVsaW5lX2ZlbmNlcywg MCwgc2l6ZW9mKHRpbWVsaW5lX2ZlbmNlcykpOworCXRpbWVsaW5lX2ZlbmNlcy5iYXNlLm5hbWUg PSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUl9FWFRfVElNRUxJTkVfRkVOQ0VTOworCXRpbWVsaW5l X2ZlbmNlcy5mZW5jZV9jb3VudCA9IDE7CisJdGltZWxpbmVfZmVuY2VzLmhhbmRsZXNfcHRyID0g LTE7CisJdGltZWxpbmVfZmVuY2VzLnZhbHVlc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnZhbHVl KTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgLUVGQVVMVCk7 CisKKwkvKiBJbnZhbGlkIHZhbHVlc19wdHIgKi8KKwl2YWx1ZSA9IDE7CisJbWVtc2V0KCZ0aW1l bGluZV9mZW5jZXMsIDAsIHNpemVvZih0aW1lbGluZV9mZW5jZXMpKTsKKwl0aW1lbGluZV9mZW5j ZXMuYmFzZS5uYW1lID0gRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVJfRVhUX1RJTUVMSU5FX0ZFTkNF UzsKKwl0aW1lbGluZV9mZW5jZXMuZmVuY2VfY291bnQgPSAxOworCXRpbWVsaW5lX2ZlbmNlcy5o YW5kbGVzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmZmVuY2UpOworCXRpbWVsaW5lX2ZlbmNlcy52 YWx1ZXNfcHRyID0gLTE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1 ZiksIC1FRkFVTFQpOworCisJLyogSW52YWxpZCBzeW5jb2JqIGhhbmRsZSAqLworCW1lbXNldCgm ZmVuY2UsIDAsIHNpemVvZihmZW5jZSkpOworCWZlbmNlLmhhbmRsZSA9IDA7CisJZmVuY2UuZmxh Z3MgPSBJOTE1X0VYRUNfRkVOQ0VfV0FJVDsKKwl2YWx1ZSA9IDE7CisJbWVtc2V0KCZ0aW1lbGlu ZV9mZW5jZXMsIDAsIHNpemVvZih0aW1lbGluZV9mZW5jZXMpKTsKKwl0aW1lbGluZV9mZW5jZXMu YmFzZS5uYW1lID0gRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVJfRVhUX1RJTUVMSU5FX0ZFTkNFUzsK Kwl0aW1lbGluZV9mZW5jZXMuZmVuY2VfY291bnQgPSAxOworCXRpbWVsaW5lX2ZlbmNlcy5oYW5k bGVzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmZmVuY2UpOworCXRpbWVsaW5lX2ZlbmNlcy52YWx1 ZXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZ2YWx1ZSk7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9l eGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1FTk9FTlQpOworCisJLyogSW52YWxpZCBzeW5jb2JqIHRp bWVsaW5lIHBvaW50ICovCisJbWVtc2V0KCZmZW5jZSwgMCwgc2l6ZW9mKGZlbmNlKSk7CisJZmVu Y2UuaGFuZGxlID0gc3luY29ial9jcmVhdGUoZmQsIDApOworCWZlbmNlLmZsYWdzID0gSTkxNV9F WEVDX0ZFTkNFX1dBSVQ7CisJdmFsdWUgPSAxOworCW1lbXNldCgmdGltZWxpbmVfZmVuY2VzLCAw LCBzaXplb2YodGltZWxpbmVfZmVuY2VzKSk7CisJdGltZWxpbmVfZmVuY2VzLmJhc2UubmFtZSA9 IERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSX0VYVF9USU1FTElORV9GRU5DRVM7CisJdGltZWxpbmVf ZmVuY2VzLmZlbmNlX2NvdW50ID0gMTsKKwl0aW1lbGluZV9mZW5jZXMuaGFuZGxlc19wdHIgPSB0 b191c2VyX3BvaW50ZXIoJmZlbmNlKTsKKwl0aW1lbGluZV9mZW5jZXMudmFsdWVzX3B0ciA9IHRv X3VzZXJfcG9pbnRlcigmdmFsdWUpOworCWlndF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwg JmV4ZWNidWYpLCAtRUlOVkFMKTsKKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIGZlbmNlLmhhbmRsZSk7 CisKKwkvKiBJbnZhbGlkIGhhbmRsZXNfcHRyICovCisJcHRyID0gbW1hcChOVUxMLCA0MDk2LCBQ Uk9UX1dSSVRFLCBNQVBfU0hBUkVEIHwgTUFQX0FOT04sIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KHB0 ciAhPSBNQVBfRkFJTEVEKTsKKwltZW1zZXQoJnRpbWVsaW5lX2ZlbmNlcywgMCwgc2l6ZW9mKHRp bWVsaW5lX2ZlbmNlcykpOworCXRpbWVsaW5lX2ZlbmNlcy5iYXNlLm5hbWUgPSBEUk1fSTkxNV9H RU1fRVhFQ0JVRkZFUl9FWFRfVElNRUxJTkVfRkVOQ0VTOworCXRpbWVsaW5lX2ZlbmNlcy5mZW5j ZV9jb3VudCA9IDE7CisJdGltZWxpbmVfZmVuY2VzLmhhbmRsZXNfcHRyID0gdG9fdXNlcl9wb2lu dGVyKHB0cik7CisJdGltZWxpbmVfZmVuY2VzLnZhbHVlc19wdHIgPSB0b191c2VyX3BvaW50ZXIo JnZhbHVlKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgLUVO T0VOVCk7CisKKwlkb19vcl9kaWUobXByb3RlY3QocHRyLCA0MDk2LCBQUk9UX1JFQUQpKTsKKwlp Z3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgLUVOT0VOVCk7CisKKwlk b19vcl9kaWUobXByb3RlY3QocHRyLCA0MDk2LCBQUk9UX05PTkUpKTsKKwlpZ3RfYXNzZXJ0X2Vx KF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgLUVGQVVMVCk7CisKKwltdW5tYXAocHRyLCA0 MDk2KTsKKworCS8qIEludmFsaWQgdmFsdWVzX3B0ciAqLworCXB0ciA9IG1tYXAoTlVMTCwgNDA5 NiwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCB8IE1BUF9BTk9OLCAtMSwgMCk7CisJaWd0X2Fzc2Vy dChwdHIgIT0gTUFQX0ZBSUxFRCk7CisJbWVtc2V0KCZ0aW1lbGluZV9mZW5jZXMsIDAsIHNpemVv Zih0aW1lbGluZV9mZW5jZXMpKTsKKwl0aW1lbGluZV9mZW5jZXMuYmFzZS5uYW1lID0gRFJNX0k5 MTVfR0VNX0VYRUNCVUZGRVJfRVhUX1RJTUVMSU5FX0ZFTkNFUzsKKwl0aW1lbGluZV9mZW5jZXMu ZmVuY2VfY291bnQgPSAxOworCXRpbWVsaW5lX2ZlbmNlcy5oYW5kbGVzX3B0ciA9IHRvX3VzZXJf cG9pbnRlcigmZmVuY2UpOworCXRpbWVsaW5lX2ZlbmNlcy52YWx1ZXNfcHRyID0gdG9fdXNlcl9w b2ludGVyKHB0cik7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1Ziks IC1FTk9FTlQpOworCisJZG9fb3JfZGllKG1wcm90ZWN0KHB0ciwgNDA5NiwgUFJPVF9SRUFEKSk7 CisJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1FTk9FTlQpOwor CisJZG9fb3JfZGllKG1wcm90ZWN0KHB0ciwgNDA5NiwgUFJPVF9OT05FKSk7CisJaWd0X2Fzc2Vy dF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1FRkFVTFQpOworCisJbXVubWFwKHB0 ciwgNDA5Nik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0X3N5bmNvYmpfdGltZWxpbmVf dW51c2VkX2ZlbmNlX2Rlc2MgPQorCSJWZXJpZmllcyB0aGF0IGEgdGltZWxpbmUgc3luY29iaiBw YXNzZWQgaW50byIKKwkiIGRybV9pOTE1X2dlbV9leGVjYnVmZmVyX2V4dF90aW1lbGluZV9mZW5j ZXMgYnV0IHdpdGggbm8gc2lnbmFsL3dhaXQiCisJIiBmbGFnIGlzIGxlZnQgdW50b3VjaGVkIjsK K3N0YXRpYyB2b2lkIHRlc3Rfc3luY29ial90aW1lbGluZV91bnVzZWRfZmVuY2UoaW50IGZkKQor eworCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1 ZmZlcjIgZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXJfZXh0X3RpbWVs aW5lX2ZlbmNlcyB0aW1lbGluZV9mZW5jZXM7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX2Zl bmNlIGZlbmNlID0geworCQkuaGFuZGxlID0gc3luY29ial9jcmVhdGUoZmQsIDApLAorCX07CisJ aWd0X3NwaW5fdCAqc3BpbiA9IGlndF9zcGluX25ldyhmZCk7CisJdWludDY0X3QgdmFsdWUgPSAx OworCisJLyogc2FuaXR5IGNoZWNrIG91ciBzeW5jb2JqX3RvX3N5bmNfZmlsZSBpbnRlcmZhY2Ug Ki8KKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90b19zeW5jX2ZpbGUoZmQsIDApLCAtRU5PRU5U KTsKKworCW1lbXNldCgmdGltZWxpbmVfZmVuY2VzLCAwLCBzaXplb2YodGltZWxpbmVfZmVuY2Vz KSk7CisJdGltZWxpbmVfZmVuY2VzLmJhc2UubmFtZSA9IERSTV9JOTE1X0dFTV9FWEVDQlVGRkVS X0VYVF9USU1FTElORV9GRU5DRVM7CisJdGltZWxpbmVfZmVuY2VzLmZlbmNlX2NvdW50ID0gMTsK Kwl0aW1lbGluZV9mZW5jZXMuaGFuZGxlc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJmZlbmNlKTsK Kwl0aW1lbGluZV9mZW5jZXMudmFsdWVzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmdmFsdWUpOwor CisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNidWYuYnVmZmVy c19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaik7CisJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAx OworCWV4ZWNidWYuZmxhZ3MgPSBJOTE1X0VYRUNfVVNFX0VYVEVOU0lPTlM7CisJZXhlY2J1Zi5j bGlwcmVjdHNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZ0aW1lbGluZV9mZW5jZXMpOworCWV4ZWNi dWYubnVtX2NsaXByZWN0cyA9IDA7CisKKwltZW1zZXQoJm9iaiwgMCwgc2l6ZW9mKG9iaikpOwor CW9iai5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwlnZW1fd3JpdGUoZmQsIG9iai5o YW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKKworCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1 Zik7CisKKwkvKiBubyBmbGFncywgdGhlIGZlbmNlIGlzbid0IGNyZWF0ZWQgKi8KKwlpZ3RfYXNz ZXJ0X2VxKF9fc3luY29ial90b19zeW5jX2ZpbGUoZmQsIGZlbmNlLmhhbmRsZSksIC1FSU5WQUwp OworCWlndF9hc3NlcnQoZ2VtX2JvX2J1c3koZmQsIG9iai5oYW5kbGUpKTsKKworCWdlbV9jbG9z ZShmZCwgb2JqLmhhbmRsZSk7CisJc3luY29ial9kZXN0cm95KGZkLCBmZW5jZS5oYW5kbGUpOwor CisJaWd0X3NwaW5fZnJlZShmZCwgc3Bpbik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXN0 X3N5bmNvYmpfdGltZWxpbmVfaW52YWxpZF93YWl0X2Rlc2MgPQorCSJWZXJpZmllcyB0aGF0IHN1 Ym1pdHRpbmcgYW4gZXhlY2J1ZiB3aXRoIGEgd2FpdCBvbiBhIHRpbWVsaW5lIHN5bmNvYmoiCisJ IiBwb2ludCB0aGF0IGRvZXMgbm90IGV4aXN0cyBpcyByZWplY3RlZCI7CitzdGF0aWMgdm9pZCB0 ZXN0X3N5bmNvYmpfdGltZWxpbmVfaW52YWxpZF93YWl0KGludCBmZCkKK3sKKwljb25zdCB1aW50 MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyIG9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7 CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyX2V4dF90aW1lbGluZV9mZW5jZXMgdGlt ZWxpbmVfZmVuY2VzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19mZW5jZSBmZW5jZSA9IHsK KwkJLmhhbmRsZSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKSwKKwl9OworCXVpbnQ2NF90IHZhbHVl ID0gMTsKKworCW1lbXNldCgmdGltZWxpbmVfZmVuY2VzLCAwLCBzaXplb2YodGltZWxpbmVfZmVu Y2VzKSk7CisJdGltZWxpbmVfZmVuY2VzLmJhc2UubmFtZSA9IERSTV9JOTE1X0dFTV9FWEVDQlVG RkVSX0VYVF9USU1FTElORV9GRU5DRVM7CisJdGltZWxpbmVfZmVuY2VzLmZlbmNlX2NvdW50ID0g MTsKKwl0aW1lbGluZV9mZW5jZXMuaGFuZGxlc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJmZlbmNl KTsKKwl0aW1lbGluZV9mZW5jZXMudmFsdWVzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmdmFsdWUp OworCisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNidWYuYnVm ZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaik7CisJZXhlY2J1Zi5idWZmZXJfY291bnQg PSAxOworCWV4ZWNidWYuZmxhZ3MgPSBJOTE1X0VYRUNfVVNFX0VYVEVOU0lPTlM7CisJZXhlY2J1 Zi5jbGlwcmVjdHNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZ0aW1lbGluZV9mZW5jZXMpOworCWV4 ZWNidWYubnVtX2NsaXByZWN0cyA9IDA7CisKKwltZW1zZXQoJm9iaiwgMCwgc2l6ZW9mKG9iaikp OworCW9iai5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwlnZW1fd3JpdGUoZmQsIG9i ai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKKworCS8qIHdhaXRpbmcgYmVmb3JlIHRo ZSBmZW5jZSBwb2ludCAxIGlzIHNldCBpcyBpbnZhbGlkICovCisJZmVuY2UuZmxhZ3MgPSBJOTE1 X0VYRUNfRkVOQ0VfV0FJVDsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVj YnVmKSwgLUVJTlZBTCk7CisKKwkvKiBOb3cgc2V0IHBvaW50IDEuICovCisJZmVuY2UuZmxhZ3Mg PSBJOTE1X0VYRUNfRkVOQ0VfU0lHTkFMOworCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7CisK KwkvKiB3YWl0aW5nIGJlZm9yZSB0aGUgZmVuY2UgcG9pbnQgMiBpcyBzZXQgaXMgaW52YWxpZCAq LworCXZhbHVlID0gMjsKKwlmZW5jZS5mbGFncyA9IEk5MTVfRVhFQ19GRU5DRV9XQUlUOworCWln dF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAtRUlOVkFMKTsKKworCWdl bV9jbG9zZShmZCwgb2JqLmhhbmRsZSk7CisJc3luY29ial9kZXN0cm95KGZkLCBmZW5jZS5oYW5k bGUpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdGVzdF9zeW5jb2JqX3RpbWVsaW5lX2ludmFs aWRfZmxhZ3NfZGVzYyA9CisJIlZlcmlmaWVzIHRoYXQgaW52YWxpZCBmZW5jZSBmbGFncyBpbiIK KwkiIGRybV9pOTE1X2dlbV9leGVjYnVmZmVyX2V4dF90aW1lbGluZV9mZW5jZXMgYXJlIHJlamVj dGVkIjsKK3N0YXRpYyB2b2lkIHRlc3Rfc3luY29ial90aW1lbGluZV9pbnZhbGlkX2ZsYWdzKGlu dCBmZCkKK3sKKwljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyX2V4 dF90aW1lbGluZV9mZW5jZXMgdGltZWxpbmVfZmVuY2VzOworCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19mZW5jZSBmZW5jZSA9IHsKKwkJLmhhbmRsZSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKSwK Kwl9OworCXVpbnQ2NF90IHZhbHVlID0gMTsKKworCW1lbXNldCgmdGltZWxpbmVfZmVuY2VzLCAw LCBzaXplb2YodGltZWxpbmVfZmVuY2VzKSk7CisJdGltZWxpbmVfZmVuY2VzLmJhc2UubmFtZSA9 IERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSX0VYVF9USU1FTElORV9GRU5DRVM7CisJdGltZWxpbmVf ZmVuY2VzLmZlbmNlX2NvdW50ID0gMTsKKwl0aW1lbGluZV9mZW5jZXMuaGFuZGxlc19wdHIgPSB0 b191c2VyX3BvaW50ZXIoJmZlbmNlKTsKKwl0aW1lbGluZV9mZW5jZXMudmFsdWVzX3B0ciA9IHRv X3VzZXJfcG9pbnRlcigmdmFsdWUpOworCisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhl Y2J1ZikpOworCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaik7CisJ ZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOworCWV4ZWNidWYuZmxhZ3MgPSBJOTE1X0VYRUNfVVNF X0VYVEVOU0lPTlM7CisJZXhlY2J1Zi5jbGlwcmVjdHNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZ0 aW1lbGluZV9mZW5jZXMpOworCWV4ZWNidWYubnVtX2NsaXByZWN0cyA9IDA7CisKKwltZW1zZXQo Jm9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9iai5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2 KTsKKwlnZW1fd3JpdGUoZmQsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKKwor CS8qIHNldCBhbGwgZmxhZ3MgdG8gaGl0IGFuIGludmFsaWQgb25lICovCisJZmVuY2UuZmxhZ3Mg PSB+MDsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgLUVJTlZB TCk7CisKKwlnZW1fY2xvc2UoZmQsIG9iai5oYW5kbGUpOworCXN5bmNvYmpfZGVzdHJveShmZCwg ZmVuY2UuaGFuZGxlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnRlc3Rfc3luY29ial90aW1l bGluZV9zaWduYWxfZGVzYyA9CisJIlZlcmlmaWVzIHByb3BlciBzaWduYWxpbmcgb2YgYSB0aW1l bGluZSBzeW5jb2JqIHRocm91Z2ggZXhlY2J1ZiI7CitzdGF0aWMgdm9pZCB0ZXN0X3N5bmNvYmpf dGltZWxpbmVfc2lnbmFsKGludCBmZCkKK3sKKwljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRD SF9CVUZGRVJfRU5EOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iajsKKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyX2V4dF90aW1lbGluZV9mZW5jZXMgdGltZWxpbmVfZmVuY2VzOworCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19mZW5jZSBmZW5jZSA9IHsKKwkJLmhhbmRsZSA9IHN5bmNv YmpfY3JlYXRlKGZkLCAwKSwKKwl9OworCXVpbnQ2NF90IHZhbHVlID0gNDIsIHF1ZXJ5X3ZhbHVl OworCWlndF9zcGluX3QgKnNwaW47CisKKwkvKiBDaGVjayB0aGF0IHRoZSBzeW5jb2JqIGlzIHNp Z25hbGVkIG9ubHkgd2hlbiBvdXIgcmVxdWVzdC9mZW5jZSBpcyAqLworCisJbWVtc2V0KCZ0aW1l bGluZV9mZW5jZXMsIDAsIHNpemVvZih0aW1lbGluZV9mZW5jZXMpKTsKKwl0aW1lbGluZV9mZW5j ZXMuYmFzZS5uYW1lID0gRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVJfRVhUX1RJTUVMSU5FX0ZFTkNF UzsKKwl0aW1lbGluZV9mZW5jZXMuZmVuY2VfY291bnQgPSAxOworCXRpbWVsaW5lX2ZlbmNlcy5o YW5kbGVzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmZmVuY2UpOworCXRpbWVsaW5lX2ZlbmNlcy52 YWx1ZXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZ2YWx1ZSk7CisKKwltZW1zZXQoJmV4ZWNidWYs IDAsIHNpemVvZihleGVjYnVmKSk7CisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcigmb2JqKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDE7CisJZXhlY2J1Zi5mbGFncyA9 IEk5MTVfRVhFQ19VU0VfRVhURU5TSU9OUzsKKwlleGVjYnVmLmNsaXByZWN0c19wdHIgPSB0b191 c2VyX3BvaW50ZXIoJnRpbWVsaW5lX2ZlbmNlcyk7CisJZXhlY2J1Zi5udW1fY2xpcHJlY3RzID0g MDsKKworCW1lbXNldCgmb2JqLCAwLCBzaXplb2Yob2JqKSk7CisJb2JqLmhhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIDQwOTYpOworCWdlbV93cml0ZShmZCwgb2JqLmhhbmRsZSwgMCwgJmJiZSwgc2l6 ZW9mKGJiZSkpOworCisJZmVuY2UuZmxhZ3MgPSBJOTE1X0VYRUNfRkVOQ0VfU0lHTkFMOworCisJ LyogQ2hlY2sgc3luY29iaiBhZnRlciB3YWl0aW5nIG9uIHRoZSBidWZmZXIgaGFuZGxlLiAqLwor CXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoZmQpOworCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7CisK KwlpZ3RfYXNzZXJ0KGdlbV9ib19idXN5KGZkLCBvYmouaGFuZGxlKSk7CisJaWd0X2Fzc2VydChz eW5jb2JqX2J1c3koZmQsIGZlbmNlLmhhbmRsZSkpOworCWlndF9hc3NlcnQoc3luY29ial90aW1l bGluZV93YWl0KGZkLCAmZmVuY2UuaGFuZGxlLCAmdmFsdWUsIDEsIDAsCisJCQkJCSBEUk1fU1lO Q09CSl9XQUlUX0ZMQUdTX1dBSVRfQVZBSUxBQkxFLCBOVUxMKSk7CisJaWd0X2Fzc2VydF9lcShz eW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmZmVuY2UuaGFuZGxlLCAmdmFsdWUsCisJCQkJ CQkxLCAwLCAwKSwgLUVUSU1FKTsKKworCWlndF9zcGluX2ZyZWUoZmQsIHNwaW4pOworCisJZ2Vt X3N5bmMoZmQsIG9iai5oYW5kbGUpOworCWlndF9hc3NlcnQoIXN5bmNvYmpfYnVzeShmZCwgZmVu Y2UuaGFuZGxlKSk7CisJaWd0X2Fzc2VydCghZ2VtX2JvX2J1c3koZmQsIG9iai5oYW5kbGUpKTsK KworCXN5bmNvYmpfdGltZWxpbmVfcXVlcnkoZmQsICZmZW5jZS5oYW5kbGUsICZxdWVyeV92YWx1 ZSwgMSk7CisJaWd0X2Fzc2VydF9lcShxdWVyeV92YWx1ZSwgdmFsdWUpOworCisJc3BpbiA9IGln dF9zcGluX25ldyhmZCk7CisKKwkvKgorCSAqIFdhaXQgb24gdGhlIHN5bmNvYmogYW5kIHZlcmlm eSB0aGUgc3RhdGUgb2YgdGhlIGJ1ZmZlcgorCSAqIGhhbmRsZS4KKwkgKi8KKwl2YWx1ZSA9IDg0 OworCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7CisKKwlpZ3RfYXNzZXJ0KGdlbV9ib19idXN5 KGZkLCBvYmouaGFuZGxlKSk7CisJaWd0X2Fzc2VydChnZW1fYm9fYnVzeShmZCwgb2JqLmhhbmRs ZSkpOworCWlndF9hc3NlcnQoc3luY29ial9idXN5KGZkLCBmZW5jZS5oYW5kbGUpKTsKKwlpZ3Rf YXNzZXJ0KHN5bmNvYmpfdGltZWxpbmVfd2FpdChmZCwgJmZlbmNlLmhhbmRsZSwgJnZhbHVlLCAx LCAwLAorCQkJCQkgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0FWQUlMQUJMRSwgTlVMTCkp OworCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJmZlbmNlLmhh bmRsZSwgJnZhbHVlLAorCQkJCQkJMSwgMCwgMCksIC1FVElNRSk7CisKKwlpZ3Rfc3Bpbl9mcmVl KGZkLCBzcGluKTsKKworCWlndF9hc3NlcnQoc3luY29ial90aW1lbGluZV93YWl0KGZkLCAmZmVu Y2UuaGFuZGxlLCAmdmFsdWUsIDEsIE5TRUNfUEVSX1NFQywKKwkJCQkJIERSTV9TWU5DT0JKX1dB SVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlULCBOVUxMKSk7CisKKwlpZ3RfYXNzZXJ0KCFnZW1fYm9f YnVzeShmZCwgb2JqLmhhbmRsZSkpOworCWlndF9hc3NlcnQoIXN5bmNvYmpfYnVzeShmZCwgZmVu Y2UuaGFuZGxlKSk7CisKKwlzeW5jb2JqX3RpbWVsaW5lX3F1ZXJ5KGZkLCAmZmVuY2UuaGFuZGxl LCAmcXVlcnlfdmFsdWUsIDEpOworCWlndF9hc3NlcnRfZXEocXVlcnlfdmFsdWUsIHZhbHVlKTsK KworCWdlbV9jbG9zZShmZCwgb2JqLmhhbmRsZSk7CisJc3luY29ial9kZXN0cm95KGZkLCBmZW5j ZS5oYW5kbGUpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdGVzdF9zeW5jb2JqX3RpbWVsaW5l X3dhaXRfZGVzYyA9CisJIlZlcmlmaWVzIHRoYXQgd2FpdGluZyBvbiBhIHRpbWVsaW5lIHN5bmNv YmogcG9pbnQgYmV0d2VlbiBlbmdpbmVzIgorCSIgd29ya3MiOworc3RhdGljIHZvaWQgdGVzdF9z eW5jb2JqX3RpbWVsaW5lX3dhaXQoaW50IGZkKQoreworCWNvbnN0IHVpbnQzMl90IGJiZVsyXSA9 IHsKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwkJTUlfTk9PUCwKKwl9OworCXVpbnQzMl90IGdl bV9jb250ZXh0ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNfb2JqZWN0MiBvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVj YnVmOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcl9leHRfdGltZWxpbmVfZmVuY2Vz IHRpbWVsaW5lX2ZlbmNlczsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfZmVuY2UgZmVuY2Ug PSB7CisJCS5oYW5kbGUgPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCksCisJfTsKKwl1aW50NjRfdCB2 YWx1ZSA9IDE7CisJaWd0X3NwaW5fdCAqc3BpbjsKKwl1bnNpZ25lZCBoYW5kbGVbMTZdOworCWlu dCBuOworCisJLyogQ2hlY2sgdGhhdCB3ZSBjYW4gdXNlIHRoZSBzeW5jb2JqIHRvIGFzeW5jaHJv bm91cyB3YWl0IHByaW9yIHRvCisJICogZXhlY3V0aW9uLgorCSAqLworCisJZ2VtX3F1aWVzY2Vu dF9ncHUoZmQpOworCisJc3BpbiA9IGlndF9zcGluX25ldyhmZCk7CisKKwlnZW1fY29udGV4dF9z ZXRfYWxsX2VuZ2luZXMoZmQsIGdlbV9jb250ZXh0KTsKKworCisJbWVtc2V0KCZ0aW1lbGluZV9m ZW5jZXMsIDAsIHNpemVvZih0aW1lbGluZV9mZW5jZXMpKTsKKwl0aW1lbGluZV9mZW5jZXMuYmFz ZS5uYW1lID0gRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVJfRVhUX1RJTUVMSU5FX0ZFTkNFUzsKKwl0 aW1lbGluZV9mZW5jZXMuZmVuY2VfY291bnQgPSAxOworCXRpbWVsaW5lX2ZlbmNlcy5oYW5kbGVz X3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmZmVuY2UpOworCXRpbWVsaW5lX2ZlbmNlcy52YWx1ZXNf cHRyID0gdG9fdXNlcl9wb2ludGVyKCZ2YWx1ZSk7CisKKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNp emVvZihleGVjYnVmKSk7CisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigm b2JqKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDE7CisJZXhlY2J1Zi5iYXRjaF9sZW4gPSBz aXplb2YoYmJlKTsKKwlleGVjYnVmLnJzdmQxID0gZ2VtX2NvbnRleHQ7CisKKwltZW1zZXQoJm9i aiwgMCwgc2l6ZW9mKG9iaikpOworCW9iai5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsK KwlnZW1fd3JpdGUoZmQsIG9iai5oYW5kbGUsIDAsIGJiZSwgc2l6ZW9mKGJiZSkpOworCisJLyog UXVldWUgYSBzaWduYWxlciBmcm9tIHRoZSBibG9ja2VkIGVuZ2luZSAqLworCWV4ZWNidWYuZmxh Z3MgPSBJOTE1X0VYRUNfVVNFX0VYVEVOU0lPTlM7CisJZXhlY2J1Zi5jbGlwcmVjdHNfcHRyID0g dG9fdXNlcl9wb2ludGVyKCZ0aW1lbGluZV9mZW5jZXMpOworCWV4ZWNidWYubnVtX2NsaXByZWN0 cyA9IDA7CisJZmVuY2UuZmxhZ3MgPSBJOTE1X0VYRUNfRkVOQ0VfU0lHTkFMOworCWdlbV9leGVj YnVmKGZkLCAmZXhlY2J1Zik7CisJaWd0X2Fzc2VydChnZW1fYm9fYnVzeShmZCwgc3Bpbi0+aGFu ZGxlKSk7CisKKwlnZW1fY2xvc2UoZmQsIG9iai5oYW5kbGUpOworCW9iai5oYW5kbGUgPSBnZW1f Y3JlYXRlKGZkLCA0MDk2KTsKKwlnZW1fd3JpdGUoZmQsIG9iai5oYW5kbGUsIDAsIGJiZSwgc2l6 ZW9mKGJiZSkpOworCisJbiA9IDA7CisJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZmQpIHsKKwkJ b2JqLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOworCQlnZW1fd3JpdGUoZmQsIG9iai5o YW5kbGUsIDAsIGJiZSwgc2l6ZW9mKGJiZSkpOworCisJCS8qIE5vIGludGVyLWVuZ2luZSBzeW5j aHJvbmlzYXRpb24sIHdpbGwgY29tcGxldGUgKi8KKwkJaWYgKGVuZ2luZS0+ZmxhZ3MgPT0gSTkx NV9FWEVDX0JMVCkgeworCQkJZXhlY2J1Zi5mbGFncyA9IGVuZ2luZS0+ZmxhZ3M7CisJCQlleGVj YnVmLmNsaXByZWN0c19wdHIgPSAwOworCQkJZXhlY2J1Zi5udW1fY2xpcHJlY3RzID0gMDsKKwkJ CWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7CisJCQlnZW1fc3luYyhmZCwgb2JqLmhhbmRsZSk7 CisJCQlpZ3RfYXNzZXJ0KGdlbV9ib19idXN5KGZkLCBzcGluLT5oYW5kbGUpKTsKKwkJfQorCQlp Z3RfYXNzZXJ0KGdlbV9ib19idXN5KGZkLCBzcGluLT5oYW5kbGUpKTsKKworCQkvKiBOb3cgd2Fp dCB1cG9uIHRoZSBibG9ja2VkIGVuZ2luZSAqLworCQlleGVjYnVmLmZsYWdzID0gSTkxNV9FWEVD X1VTRV9FWFRFTlNJT05TIHwgZW5naW5lLT5mbGFnczsKKwkJZXhlY2J1Zi5jbGlwcmVjdHNfcHRy ID0gdG9fdXNlcl9wb2ludGVyKCZ0aW1lbGluZV9mZW5jZXMpOworCQlleGVjYnVmLm51bV9jbGlw cmVjdHMgPSAwOworCQlmZW5jZS5mbGFncyA9IEk5MTVfRVhFQ19GRU5DRV9XQUlUOworCQlnZW1f ZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCisJCWlndF9hc3NlcnQoZ2VtX2JvX2J1c3koZmQsIG9i ai5oYW5kbGUpKTsKKwkJaGFuZGxlW24rK10gPSBvYmouaGFuZGxlOworCX0KKwlzeW5jb2JqX2Rl c3Ryb3koZmQsIGZlbmNlLmhhbmRsZSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykK KwkJaWd0X2Fzc2VydChnZW1fYm9fYnVzeShmZCwgaGFuZGxlW2ldKSk7CisKKwlpZ3Rfc3Bpbl9m cmVlKGZkLCBzcGluKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWdlbV9z eW5jKGZkLCBoYW5kbGVbaV0pOworCQlnZW1fY2xvc2UoZmQsIGhhbmRsZVtpXSk7CisJfQorCisJ Z2VtX2NvbnRleHRfZGVzdHJveShmZCwgZ2VtX2NvbnRleHQpOworfQorCitzdGF0aWMgY29uc3Qg Y2hhciAqdGVzdF9zeW5jb2JqX3RpbWVsaW5lX2V4cG9ydF9kZXNjID0KKwkiVmVyaWZ5IGV4cG9y dGluZyBvZiB0aW1lbGluZSBzeW5jb2JqIHNpZ25hbGVkIGJ5IGk5MTUiOworc3RhdGljIHZvaWQg dGVzdF9zeW5jb2JqX3RpbWVsaW5lX2V4cG9ydChpbnQgZmQpCit7CisJY29uc3QgdWludDMyX3Qg YmJlWzJdID0geworCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCQlNSV9OT09QLAorCX07CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXJfZXh0 X3RpbWVsaW5lX2ZlbmNlcyB0aW1lbGluZV9mZW5jZXM7CisJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjX2ZlbmNlIGZlbmNlID0geworCQkuaGFuZGxlID0gc3luY29ial9jcmVhdGUoZmQsIDApLAor CX07CisJdWludDY0X3QgdmFsdWUgPSAxOworCWludCBleHBvcnRbMl07CisJaWd0X3NwaW5fdCAq c3BpbiA9IGlndF9zcGluX25ldyhmZCk7CisKKwkvKiBDaGVjayB0aGF0IGlmIHdlIGV4cG9ydCB0 aGUgc3luY29iaiBwcmlvciB0byB1c2UgaXQgcGlja3MgdXAKKwkgKiB0aGUgbGF0ZXIgZmVuY2Uu IFRoaXMgYWxsb3dzIGEgc3luY29iaiB0byBlc3RhYmxpc2ggYSBjaGFubmVsCisJICogYmV0d2Vl biBjbGllbnRzIHRoYXQgbWF5IGJlIHVwZGF0ZWQgdG8gYSBsYXRlciBmZW5jZSBieSBlaXRoZXIK KwkgKiBlbmQuCisJICovCisJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpFKGV4cG9ydCk7 IG4rKykKKwkJZXhwb3J0W25dID0gc3luY29ial9leHBvcnQoZmQsIGZlbmNlLmhhbmRsZSk7CisK KwltZW1zZXQoJnRpbWVsaW5lX2ZlbmNlcywgMCwgc2l6ZW9mKHRpbWVsaW5lX2ZlbmNlcykpOwor CXRpbWVsaW5lX2ZlbmNlcy5iYXNlLm5hbWUgPSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUl9FWFRf VElNRUxJTkVfRkVOQ0VTOworCXRpbWVsaW5lX2ZlbmNlcy5mZW5jZV9jb3VudCA9IDE7CisJdGlt ZWxpbmVfZmVuY2VzLmhhbmRsZXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZmZW5jZSk7CisJdGlt ZWxpbmVfZmVuY2VzLnZhbHVlc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnZhbHVlKTsKKworCW1l bXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKKwlleGVjYnVmLmJ1ZmZlcnNfcHRy ID0gdG9fdXNlcl9wb2ludGVyKCZvYmopOworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMTsKKwll eGVjYnVmLmZsYWdzID0gSTkxNV9FWEVDX1VTRV9FWFRFTlNJT05TOworCWV4ZWNidWYuY2xpcHJl Y3RzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmdGltZWxpbmVfZmVuY2VzKTsKKwlleGVjYnVmLm51 bV9jbGlwcmVjdHMgPSAwOworCisJbWVtc2V0KCZvYmosIDAsIHNpemVvZihvYmopKTsKKwlvYmou aGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisJZ2VtX3dyaXRlKGZkLCBvYmouaGFuZGxl LCAwLCBiYmUsIHNpemVvZihiYmUpKTsKKworCWZlbmNlLmZsYWdzID0gSTkxNV9FWEVDX0ZFTkNF X1NJR05BTDsKKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCisJaWd0X2Fzc2VydChzeW5j b2JqX2J1c3koZmQsIGZlbmNlLmhhbmRsZSkpOworCWlndF9hc3NlcnQoZ2VtX2JvX2J1c3koZmQs IG9iai5oYW5kbGUpKTsKKworCWZvciAoaW50IG4gPSAwOyBuIDwgQVJSQVlfU0laRShleHBvcnQp OyBuKyspIHsKKwkJdWludDMyX3QgaW1wb3J0ID0gc3luY29ial9pbXBvcnQoZmQsIGV4cG9ydFtu XSk7CisJCWlndF9hc3NlcnQoc3luY29ial9idXN5KGZkLCBpbXBvcnQpKTsKKwkJc3luY29ial9k ZXN0cm95KGZkLCBpbXBvcnQpOworCX0KKworCWlndF9zcGluX2ZyZWUoZmQsIHNwaW4pOworCisJ Z2VtX3N5bmMoZmQsIG9iai5oYW5kbGUpOworCWlndF9hc3NlcnQoIWdlbV9ib19idXN5KGZkLCBv YmouaGFuZGxlKSk7CisJaWd0X2Fzc2VydCghc3luY29ial9idXN5KGZkLCBmZW5jZS5oYW5kbGUp KTsKKworCWdlbV9jbG9zZShmZCwgb2JqLmhhbmRsZSk7CisJc3luY29ial9kZXN0cm95KGZkLCBm ZW5jZS5oYW5kbGUpOworCisJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpFKGV4cG9ydCk7 IG4rKykgeworCQl1aW50MzJfdCBpbXBvcnQgPSBzeW5jb2JqX2ltcG9ydChmZCwgZXhwb3J0W25d KTsKKwkJaWd0X2Fzc2VydCghc3luY29ial9idXN5KGZkLCBpbXBvcnQpKTsKKwkJc3luY29ial9k ZXN0cm95KGZkLCBpbXBvcnQpOworCQljbG9zZShleHBvcnRbbl0pOworCX0KK30KKworc3RhdGlj IGNvbnN0IGNoYXIgKnRlc3Rfc3luY29ial90aW1lbGluZV9yZXBlYXRfZGVzYyA9CisJIlZlcmlm aWVzIHRoYXQgd2FpdGluZyAmIHNpZ25hbGluZyBhIHNhbWUgdGltZWxpbmUgc3luY29iaiBwb2lu dCB3aXRoaW4iCisJIiB0aGUgc2FtZSBleGVjYnVmIGZ3b3JrcyI7CitzdGF0aWMgdm9pZCB0ZXN0 X3N5bmNvYmpfdGltZWxpbmVfcmVwZWF0KGludCBmZCkKK3sKKwljb25zdCB1aW50MzJfdCBiYmVb Ml0gPSB7CisJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJCU1JX05PT1AsCisJfTsKKwljb25zdCB1 bnNpZ25lZCBuZmVuY2VzID0gNDA5NjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0 MiBvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOworCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcl9leHRfdGltZWxpbmVfZmVuY2VzIHRpbWVsaW5lX2Zl bmNlczsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfZmVuY2UgKmZlbmNlOworCXVpbnQ2NF90 ICp2YWx1ZXM7CisJaW50IGV4cG9ydDsKKwlpZ3Rfc3Bpbl90ICpzcGluID0gaWd0X3NwaW5fbmV3 KGZkKTsKKworCS8qIENoZWNrIHRoYXQgd2UgY2FuIHdhaXQgb24gdGhlIHNhbWUgZmVuY2UgbXVs dGlwbGUgdGltZXMgKi8KKwlmZW5jZSA9IGNhbGxvYyhuZmVuY2VzLCBzaXplb2YoKmZlbmNlKSk7 CisJdmFsdWVzID0gY2FsbG9jKG5mZW5jZXMsIHNpemVvZigqdmFsdWVzKSk7CisJZmVuY2UtPmhh bmRsZSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKKwl2YWx1ZXNbMF0gPSAxOworCWV4cG9ydCA9 IHN5bmNvYmpfZXhwb3J0KGZkLCBmZW5jZS0+aGFuZGxlKTsKKwlmb3IgKGludCBpID0gMTsgaSA8 IG5mZW5jZXM7IGkrKykgeworCQlmZW5jZVtpXS5oYW5kbGUgPSBzeW5jb2JqX2ltcG9ydChmZCwg ZXhwb3J0KTsKKwkJdmFsdWVzW2ldID0gaSArIDE7CisJfQorCWNsb3NlKGV4cG9ydCk7CisKKwlt ZW1zZXQoJnRpbWVsaW5lX2ZlbmNlcywgMCwgc2l6ZW9mKHRpbWVsaW5lX2ZlbmNlcykpOworCXRp bWVsaW5lX2ZlbmNlcy5iYXNlLm5hbWUgPSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUl9FWFRfVElN RUxJTkVfRkVOQ0VTOworCXRpbWVsaW5lX2ZlbmNlcy5mZW5jZV9jb3VudCA9IDE7CisJdGltZWxp bmVfZmVuY2VzLmhhbmRsZXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKGZlbmNlKTsKKwl0aW1lbGlu ZV9mZW5jZXMudmFsdWVzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcih2YWx1ZXMpOworCisJbWVtc2V0 KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0 b191c2VyX3BvaW50ZXIoJm9iaik7CisJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOworCWV4ZWNi dWYuZmxhZ3MgPSBJOTE1X0VYRUNfVVNFX0VYVEVOU0lPTlM7CisJZXhlY2J1Zi5jbGlwcmVjdHNf cHRyID0gdG9fdXNlcl9wb2ludGVyKCZ0aW1lbGluZV9mZW5jZXMpOworCWV4ZWNidWYubnVtX2Ns aXByZWN0cyA9IDA7CisKKwltZW1zZXQoJm9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9iai5oYW5k bGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwlnZW1fd3JpdGUoZmQsIG9iai5oYW5kbGUsIDAs IGJiZSwgc2l6ZW9mKGJiZSkpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBuZmVuY2VzOyBpKysp CisJCWZlbmNlW2ldLmZsYWdzID0gSTkxNV9FWEVDX0ZFTkNFX1NJR05BTDsKKworCWdlbV9leGVj YnVmKGZkLCAmZXhlY2J1Zik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5mZW5jZXM7IGkrKykg eworCQlpZ3RfYXNzZXJ0KHN5bmNvYmpfYnVzeShmZCwgZmVuY2VbaV0uaGFuZGxlKSk7CisJCS8q CisJCSAqIFRpbWVsaW5lIHN5bmNvYmogY2Fubm90IHJlc2lnbmFsIHRoZSBzYW1lIHBvaW50CisJ CSAqIGFnYWluLgorCQkgKi8KKwkJZmVuY2VbaV0uZmxhZ3MgfD0gSTkxNV9FWEVDX0ZFTkNFX1dB SVQ7CisJfQorCWlndF9hc3NlcnQoZ2VtX2JvX2J1c3koZmQsIG9iai5oYW5kbGUpKTsKKworCWln dF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAtRUlOVkFMKTsKKworCWZv ciAoaW50IGkgPSAwOyBpIDwgbmZlbmNlczsgaSsrKSB7CisJCWlndF9hc3NlcnQoc3luY29ial9i dXN5KGZkLCBmZW5jZVtpXS5oYW5kbGUpKTsKKwkJZmVuY2VbaV0uZmxhZ3MgPSBJOTE1X0VYRUNf RkVOQ0VfV0FJVDsKKwl9CisJaWd0X2Fzc2VydChnZW1fYm9fYnVzeShmZCwgb2JqLmhhbmRsZSkp OworCisJZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwg bmZlbmNlczsgaSsrKQorCQlpZ3RfYXNzZXJ0KHN5bmNvYmpfYnVzeShmZCwgZmVuY2VbaV0uaGFu ZGxlKSk7CisJaWd0X2Fzc2VydChnZW1fYm9fYnVzeShmZCwgb2JqLmhhbmRsZSkpOworCisJaWd0 X3NwaW5fZnJlZShmZCwgc3Bpbik7CisKKwlnZW1fc3luYyhmZCwgb2JqLmhhbmRsZSk7CisJZ2Vt X2Nsb3NlKGZkLCBvYmouaGFuZGxlKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbmZlbmNlczsg aSsrKSB7CisJCWlndF9hc3NlcnQoIXN5bmNvYmpfYnVzeShmZCwgZmVuY2VbaV0uaGFuZGxlKSk7 CisJCXN5bmNvYmpfZGVzdHJveShmZCwgZmVuY2VbaV0uaGFuZGxlKTsKKwl9CisJZnJlZShmZW5j ZSk7CisJZnJlZSh2YWx1ZXMpOworfQorCiBpZ3RfbWFpbgogewogCWNvbnN0IHN0cnVjdCBpbnRl bF9leGVjdXRpb25fZW5naW5lICplOwpAQCAtMTUzNiw2ICsyMTcwLDUwIEBAIGlndF9tYWluCiAJ CX0KIAl9CiAKKwlpZ3Rfc3VidGVzdF9ncm91cCB7IC8qIHN5bmNvYmogdGltZWxpbmUgKi8KKwkJ aWd0X2ZpeHR1cmUgeworCQkJaWd0X3JlcXVpcmUoZXhlY19oYXNfdGltZWxpbmVfZmVuY2VzKGk5 MTUpKTsKKwkJCWlndF9hc3NlcnQoaGFzX3N5bmNvYmpfdGltZWxpbmUoaTkxNSkpOworCQkJaWd0 X2ZvcmtfaGFuZ19kZXRlY3RvcihpOTE1KTsKKwkJfQorCisJCWlndF9kZXNjcmliZSh0ZXN0X2lu dmFsaWRfdGltZWxpbmVfZmVuY2VfYXJyYXlfZGVzYyk7CisJCWlndF9zdWJ0ZXN0KCJpbnZhbGlk LXRpbWVsaW5lLWZlbmNlLWFycmF5IikKKwkJCXRlc3RfaW52YWxpZF90aW1lbGluZV9mZW5jZV9h cnJheShpOTE1KTsKKworCQlpZ3RfZGVzY3JpYmUodGVzdF9zeW5jb2JqX3RpbWVsaW5lX3VudXNl ZF9mZW5jZV9kZXNjKTsKKwkJaWd0X3N1YnRlc3QoInN5bmNvYmotdGltZWxpbmUtdW51c2VkLWZl bmNlIikKKwkJCXRlc3Rfc3luY29ial90aW1lbGluZV91bnVzZWRfZmVuY2UoaTkxNSk7CisKKwkJ aWd0X2Rlc2NyaWJlKHRlc3Rfc3luY29ial90aW1lbGluZV9pbnZhbGlkX3dhaXRfZGVzYyk7CisJ CWlndF9zdWJ0ZXN0KCJzeW5jb2JqLXRpbWVsaW5lLWludmFsaWQtd2FpdCIpCisJCQl0ZXN0X3N5 bmNvYmpfdGltZWxpbmVfaW52YWxpZF93YWl0KGk5MTUpOworCisJCWlndF9kZXNjcmliZSh0ZXN0 X3N5bmNvYmpfdGltZWxpbmVfaW52YWxpZF9mbGFnc19kZXNjKTsKKwkJaWd0X3N1YnRlc3QoInN5 bmNvYmotdGltZWxpbmUtaW52YWxpZC1mbGFncyIpCisJCQl0ZXN0X3N5bmNvYmpfdGltZWxpbmVf aW52YWxpZF9mbGFncyhpOTE1KTsKKworCQlpZ3RfZGVzY3JpYmUodGVzdF9zeW5jb2JqX3RpbWVs aW5lX3NpZ25hbF9kZXNjKTsKKwkJaWd0X3N1YnRlc3QoInN5bmNvYmotdGltZWxpbmUtc2lnbmFs IikKKwkJCXRlc3Rfc3luY29ial90aW1lbGluZV9zaWduYWwoaTkxNSk7CisKKwkJaWd0X2Rlc2Ny aWJlKHRlc3Rfc3luY29ial90aW1lbGluZV93YWl0X2Rlc2MpOworCQlpZ3Rfc3VidGVzdCgic3lu Y29iai10aW1lbGluZS13YWl0IikKKwkJCXRlc3Rfc3luY29ial90aW1lbGluZV93YWl0KGk5MTUp OworCisJCWlndF9kZXNjcmliZSh0ZXN0X3N5bmNvYmpfdGltZWxpbmVfZXhwb3J0X2Rlc2MpOwor CQlpZ3Rfc3VidGVzdCgic3luY29iai10aW1lbGluZS1leHBvcnQiKQorCQkJdGVzdF9zeW5jb2Jq X3RpbWVsaW5lX2V4cG9ydChpOTE1KTsKKworCQlpZ3RfZGVzY3JpYmUodGVzdF9zeW5jb2JqX3Rp bWVsaW5lX3JlcGVhdF9kZXNjKTsKKwkJaWd0X3N1YnRlc3QoInN5bmNvYmotdGltZWxpbmUtcmVw ZWF0IikKKwkJCXRlc3Rfc3luY29ial90aW1lbGluZV9yZXBlYXQoaTkxNSk7CisKKwkJaWd0X2Zp eHR1cmUgeworCQkJaWd0X3N0b3BfaGFuZ19kZXRlY3RvcigpOworCQl9CisJfQorCiAJaWd0X2Zp eHR1cmUgewogCQljbG9zZShpOTE1KTsKIAl9Ci0tIAoyLjI0LjAKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1k ZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaWd0LWRldg==