From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH i-g-t 8/9] i915: Exercise timeslice sysfs property Date: Thu, 24 Oct 2019 11:54:48 +0100 Message-ID: <20191024105449.31948-8-chris@chris-wilson.co.uk> References: <20191024105449.31948-1-chris@chris-wilson.co.uk> 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 742B96E266 for ; Thu, 24 Oct 2019 10:55:00 +0000 (UTC) In-Reply-To: <20191024105449.31948-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org V2UgW3dpbGxdIGV4cG9zZSB2YXJpb3VzIHBlci1lbmdpbmUgc2NoZWR1bGluZyBjb250cm9scy4g T25lIG9mIHdoaWNoLAondGltZXNsaWNlX2R1cmF0aW9uX21zJywgZGVmaW5lcyB0aGUgc2NoZWR1 bGluZyBxdWFudHVtLiBJZiBhIGNvbnRleHQKZXhoYXVzdHMgaXRzIHRpbWVzbGljZSwgaXQgd2ls bCBiZSBwcmVlbXB0ZWQgaW4gZmF2b3VyIG9mIHJ1bm5pbmcgb25lIG9mCml0cyBjb21wYXRyaW90 cy4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr PgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAgfCAgIDEgKwogdGVz dHMvaTkxNS9zeXNmc190aW1lc2xpY2VfZHVyYXRpb24uYyB8IDUxNyArKysrKysrKysrKysrKysr KysrKysrKysrKwogdGVzdHMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICB8ICAgMSAr CiAzIGZpbGVzIGNoYW5nZWQsIDUxOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg dGVzdHMvaTkxNS9zeXNmc190aW1lc2xpY2VfZHVyYXRpb24uYwoKZGlmZiAtLWdpdCBhL3Rlc3Rz L01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDc0ZmQ4YmU1 Yi4uYjIyZDYzMjY1IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rl c3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTEwMCw2ICsxMDAsNyBAQCBURVNUU19wcm9ncyA9IFwK IAl2Z2VtX3Nsb3cgXAogCWk5MTUvc3lzZnNfaGVhcnRiZWF0X2ludGVydmFsIFwKIAlpOTE1L3N5 c2ZzX3ByZWVtcHRfdGltZW91dCBcCisJaTkxNS9zeXNmc190aW1lc2xpY2VfZHVyYXRpb24gXAog CSQoTlVMTCkKIAogVEVTVFNfcHJvZ3MgKz0gZ2VtX2JhZF9yZWxvYwpkaWZmIC0tZ2l0IGEvdGVz dHMvaTkxNS9zeXNmc190aW1lc2xpY2VfZHVyYXRpb24uYyBiL3Rlc3RzL2k5MTUvc3lzZnNfdGlt ZXNsaWNlX2R1cmF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5m MTBiM2E4MzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pOTE1L3N5c2ZzX3RpbWVzbGljZV9k dXJhdGlvbi5jCkBAIC0wLDAgKzEsNTE3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50 ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdB UkUuCisgKi8KKworI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j bHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNs dWRlICJkcm10ZXN0LmgiIC8qIGdlbV9xdWllc2NlbnRfZ3B1KCkhICovCisjaW5jbHVkZSAiaTkx NS9nZW1fZW5naW5lX3RvcG9sb2d5LmgiCisjaW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgorI2lu Y2x1ZGUgImlndF9kdW1teWxvYWQuaCIKKyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKKyNpbmNsdWRl ICJpb2N0bF93cmFwcGVycy5oIiAvKiBpZ3RfcmVxdWlyZV9nZW0oKSEgKi8KKyNpbmNsdWRlICJp bnRlbF9jaGlwc2V0LmgiCisjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCisjaW5jbHVkZSAic3dfc3lu Yy5oIgorCisjZGVmaW5lIE1JX1NFTUFQSE9SRV9XQUlUCQkoMHgxYyA8PCAyMykKKyNkZWZpbmUg ICBNSV9TRU1BUEhPUkVfUE9MTCAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgICBNSV9T RU1BUEhPUkVfU0FEX0dUX1NERCAgICAgICAoMCA8PCAxMikKKyNkZWZpbmUgICBNSV9TRU1BUEhP UkVfU0FEX0dURV9TREQgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FE X0xUX1NERCAgICAgICAoMiA8PCAxMikKKyNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FEX0xURV9T REQgICAgICAoMyA8PCAxMikKKyNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FEX0VRX1NERCAgICAg ICAoNCA8PCAxMikKKyNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FEX05FUV9TREQgICAgICAoNSA8 PCAxMikKKworc3RhdGljIGJvb2wgX19lbmFibGVfaGFuZ2NoZWNrKGludCBkaXIsIGJvb2wgc3Rh dGUpCit7CisJcmV0dXJuIGlndF9zeXNmc19zZXQoZGlyLCAiZW5hYmxlX2hhbmdjaGVjayIsIHN0 YXRlID8gIjEiIDogIjAiKTsKK30KKworc3RhdGljIGJvb2wgZW5hYmxlX2hhbmdjaGVjayhpbnQg aTkxNSwgYm9vbCBzdGF0ZSkKK3sKKwlib29sIHN1Y2Nlc3M7CisJaW50IGRpcjsKKworCWRpciA9 IGlndF9zeXNmc19vcGVuX3BhcmFtZXRlcnMoaTkxNSk7CisJaWYgKGRpciA8IDApIC8qIG5vIHBh cmFtZXRlcnMsIG11c3QgYmUgZGVmYXVsdCEgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJc3VjY2Vz cyA9IF9fZW5hYmxlX2hhbmdjaGVjayhkaXIsIHN0YXRlKTsKKwljbG9zZShkaXIpOworCisJcmV0 dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90aW1lc2xpY2UoaW50IGVuZ2luZSwg dW5zaWduZWQgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGludCBkZWxheTsKKworCWlndF9zeXNm c19wcmludGYoZW5naW5lLCAidGltZXNsaWNlX2R1cmF0aW9uX21zIiwgIiV1IiwgdmFsdWUpOwor CWlndF9zeXNmc19zY2FuZihlbmdpbmUsICJ0aW1lc2xpY2VfZHVyYXRpb25fbXMiLCAiJXUiLCAm ZGVsYXkpOworCWlndF9hc3NlcnRfZXEoZGVsYXksIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQg dGVzdF9pZGVtcG90ZW50KGludCBpOTE1LCBpbnQgZW5naW5lKQoreworCWNvbnN0IHVuc2lnbmVk IGludCBkZWxheXNbXSA9IHsgMCwgMSwgMTIzNCwgNjU0MzIxIH07CisJdW5zaWduZWQgaW50IHNh dmVkOworCisJLyogUXVpY2sgdGVzdCB0byB2ZXJpZnkgdGhlIGtlcm5lbCByZXBvcnRzIHRoZSBz YW1lIHZhbHVlcyBhcyB3ZSB3cml0ZSAqLworCisJaWd0X2Fzc2VydChpZ3Rfc3lzZnNfc2NhbmYo ZW5naW5lLCAidGltZXNsaWNlX2R1cmF0aW9uX21zIiwgIiV1IiwgJnNhdmVkKSA9PSAxKTsKKwlp Z3RfZGVidWcoIkluaXRpYWwgdGltZXNsaWNlX2R1cmF0aW9uX21zOiV1XG4iLCBzYXZlZCk7CisK Kwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGVsYXlzKTsgaSsrKQorCQlzZXRfdGlt ZXNsaWNlKGVuZ2luZSwgZGVsYXlzW2ldKTsKKworCXNldF90aW1lc2xpY2UoZW5naW5lLCBzYXZl ZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZChpbnQgaTkxNSwgaW50IGVuZ2luZSkK K3sKKwl1bnNpZ25lZCBpbnQgc2F2ZWQsIGRlbGF5OworCisJLyogUXVpY2sgdGVzdCB0aGF0IG5v bi1yZXByZXNlbnRhYmxlIGRlbGF5cyBhcmUgcmVqZWN0ZWQgKi8KKworCWlndF9hc3NlcnQoaWd0 X3N5c2ZzX3NjYW5mKGVuZ2luZSwgInRpbWVzbGljZV9kdXJhdGlvbl9tcyIsICIldSIsICZzYXZl ZCkgPT0gMSk7CisJaWd0X2RlYnVnKCJJbml0aWFsIHRpbWVzbGljZV9kdXJhdGlvbl9tczoldVxu Iiwgc2F2ZWQpOworCisJaWd0X3N5c2ZzX3ByaW50ZihlbmdpbmUsICJ0aW1lc2xpY2VfZHVyYXRp b25fbXMiLCBQUkl1NjQsIC0xKTsKKwlpZ3Rfc3lzZnNfc2NhbmYoZW5naW5lLCAidGltZXNsaWNl X2R1cmF0aW9uX21zIiwgIiV1IiwgJmRlbGF5KTsKKwlpZ3RfYXNzZXJ0X2VxKGRlbGF5LCBzYXZl ZCk7CisKKwlpZ3Rfc3lzZnNfcHJpbnRmKGVuZ2luZSwgInRpbWVzbGljZV9kdXJhdGlvbl9tcyIs ICIlZCIsIC0xKTsKKwlpZ3Rfc3lzZnNfc2NhbmYoZW5naW5lLCAidGltZXNsaWNlX2R1cmF0aW9u X21zIiwgIiV1IiwgJmRlbGF5KTsKKwlpZ3RfYXNzZXJ0X2VxKGRlbGF5LCBzYXZlZCk7CisKKwlp Z3Rfc3lzZnNfcHJpbnRmKGVuZ2luZSwgInRpbWVzbGljZV9kdXJhdGlvbl9tcyIsIFBSSXU2NCwg MTIzdWxsIDw8IDMyKTsKKwlpZ3Rfc3lzZnNfc2NhbmYoZW5naW5lLCAidGltZXNsaWNlX2R1cmF0 aW9uX21zIiwgIiV1IiwgJmRlbGF5KTsKKwlpZ3RfYXNzZXJ0X2VxKGRlbGF5LCBzYXZlZCk7Cit9 CisKK3N0YXRpYyB2b2lkIHNldF91bmJhbm5hYmxlKGludCBpOTE1LCB1aW50MzJfdCBjdHgpCit7 CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHAgPSB7CisJCS5jdHhfaWQgPSBj dHgsCisJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9CQU5OQUJMRSwKKwl9OworCisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCksIDApOworfQorCitz dGF0aWMgdWludDMyX3QgY3JlYXRlX2NvbnRleHQoaW50IGk5MTUsIHVuc2lnbmVkIGludCBjbGFz cywgdW5zaWduZWQgaW50IGluc3QsIGludCBwcmlvKQoreworCXVpbnQzMl90IGN0eDsKKworCWN0 eCA9IGdlbV9jb250ZXh0X2NyZWF0ZV9mb3JfZW5naW5lKGk5MTUsIGNsYXNzLCBpbnN0KTsKKwlz ZXRfdW5iYW5uYWJsZShpOTE1LCBjdHgpOworCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1 LCBjdHgsIHByaW8pOworCisJcmV0dXJuIGN0eDsKK30KKworc3RhdGljIGludCBjbXBfdTMyKGNv bnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCB1aW50MzJfdCAqYSA9IF9h LCAqYiA9IF9iOworCisJcmV0dXJuICphIC0gKmI7Cit9CisKK3N0YXRpYyBkb3VibGUgY2xvY2ty YXRlKGludCBpOTE1KQoreworCWludCBmcmVxOworCWRybV9pOTE1X2dldHBhcmFtX3QgZ3AgPSB7 CisJCS52YWx1ZSA9ICZmcmVxLAorCQkucGFyYW0gPSBJOTE1X1BBUkFNX0NTX1RJTUVTVEFNUF9G UkVRVUVOQ1ksCisJfTsKKworCWlndF9yZXF1aXJlKGlndF9pb2N0bChpOTE1LCBEUk1fSU9DVExf STkxNV9HRVRQQVJBTSwgJmdwKSA9PSAwKTsKKwlyZXR1cm4gMWU5IC8gZnJlcTsKK30KKworc3Rh dGljIHVpbnQ2NF90IF9fdGVzdF9kdXJhdGlvbihpbnQgaTkxNSwgaW50IGVuZ2luZSwgdW5zaWdu ZWQgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2Jq WzNdID0geworCQl7CisJCQkuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwkJCS5v ZmZzZXQgPSAwLAorCQkJLmZsYWdzID0gRVhFQ19PQkpFQ1RfUElOTkVELAorCQl9LAorCQl7CisJ CQkuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwkJCS5vZmZzZXQgPSA0MDk2LAor CQkJLmZsYWdzID0gRVhFQ19PQkpFQ1RfUElOTkVELAorCQl9LAorCQl7IGdlbV9jcmVhdGUoaTkx NSwgNDA5NikgfQorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsK KwkJLmJ1ZmZlcl9jb3VudCA9IEFSUkFZX1NJWkUob2JqKSwKKwkJLmJ1ZmZlcnNfcHRyID0gdG9f dXNlcl9wb2ludGVyKG9iaiksCisJfTsKKwljb25zdCBpbnQgZ2VuID0gaW50ZWxfZ2VuKGludGVs X2dldF9kcm1fZGV2aWQoaTkxNSkpOworCWRvdWJsZSBkdXJhdGlvbiA9IGNsb2NrcmF0ZShpOTE1 KTsKKwl1bnNpZ25lZCBpbnQgY2xhc3MsIGluc3QsIG1taW87CisJdWludDMyX3QgKmNzLCAqbWFw OworCXVpbnQzMl90IGN0eFsyXTsKKwlpbnQgc3RhcnQ7CisJaW50IGk7CisKKwlpZ3RfcmVxdWly ZShnZW1fc2NoZWR1bGVyX2hhc19wcmVlbXB0aW9uKGk5MTUpKTsKKwlpZ3RfcmVxdWlyZShnZW4g Pj0gOCk7IC8qIE1JX1NFTUFQSE9SRV9XQUlUICovCisKKwlpZ3RfYXNzZXJ0KGlndF9zeXNmc19z Y2FuZihlbmdpbmUsICJjbGFzcyIsICIldSIsICZjbGFzcykgPT0gMSk7CisJaWd0X2Fzc2VydChp Z3Rfc3lzZnNfc2NhbmYoZW5naW5lLCAiaW5zdGFuY2UiLCAiJXUiLCAmaW5zdCkgPT0gMSk7CisJ aWd0X3JlcXVpcmUoaWd0X3N5c2ZzX3NjYW5mKGVuZ2luZSwgIm1taW9fYmFzZSIsICIleCIsICZt bWlvKSA9PSAxKTsKKworCXNldF90aW1lc2xpY2UoZW5naW5lLCB0aW1lb3V0KTsKKworCWN0eFsw XSA9IGNyZWF0ZV9jb250ZXh0KGk5MTUsIGNsYXNzLCBpbnN0LCAwKTsKKwljdHhbMV0gPSBjcmVh dGVfY29udGV4dChpOTE1LCBjbGFzcywgaW5zdCwgMCk7CisKKwltYXAgPSBnZW1fbW1hcF9fY3B1 KGk5MTUsIG9ialsyXS5oYW5kbGUsIDAsIDQwOTYsIFBST1RfV1JJVEUpOworCisJY3MgPSBtYXA7 CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJKmNzKysgPSBNSV9TRU1BUEhPUkVfV0FJ VCB8CisJCQlNSV9TRU1BUEhPUkVfUE9MTCB8CisJCQlNSV9TRU1BUEhPUkVfU0FEX05FUV9TREQg fAorCQkJKDQgLSAyICsgKGdlbiA+PSAxMikpOworCQkqY3MrKyA9IDA7CisJCSpjcysrID0gb2Jq WzBdLm9mZnNldCArIHNpemVvZih1aW50MzJfdCkgKiBpOworCQkqY3MrKyA9IDA7CisJCWlmIChn ZW4gPj0gMTIpCisJCQkqY3MrKyA9IDA7CisKKwkJKmNzKysgPSAweDI0IDw8IDIzIHwgMjsgLyog U1JNICovCisJCSpjcysrID0gbW1pbyArIDB4MzU4OworCQkqY3MrKyA9IG9ialsxXS5vZmZzZXQg KyBzaXplb2YodWludDMyX3QpICogaTsKKwkJKmNzKysgPSAwOworCisJCSpjcysrID0gTUlfU1RP UkVfRFdPUkRfSU1NOworCQkqY3MrKyA9IG9ialswXS5vZmZzZXQgKworCQkJNDA5NiAtIHNpemVv Zih1aW50MzJfdCkgKiBpIC0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJKmNzKysgPSAwOworCQkqY3Mr KyA9IDE7CisJfQorCSpjcysrID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKworCWNzICs9IDE2IC0g KChjcyAtIG1hcCkgJiAxNSk7CisJc3RhcnQgPSAoY3MgLSBtYXApICogc2l6ZW9mKCpjcyk7CisJ Zm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTU07 CisJCSpjcysrID0gb2JqWzBdLm9mZnNldCArIHNpemVvZih1aW50MzJfdCkgKiBpOworCQkqY3Mr KyA9IDA7CisJCSpjcysrID0gMTsKKworCQkqY3MrKyA9IE1JX1NFTUFQSE9SRV9XQUlUIHwKKwkJ CU1JX1NFTUFQSE9SRV9QT0xMIHwKKwkJCU1JX1NFTUFQSE9SRV9TQURfTkVRX1NERCB8CisJCQko NCAtIDIgKyAoZ2VuID49IDEyKSk7CisJCSpjcysrID0gMDsKKwkJKmNzKysgPSBvYmpbMF0ub2Zm c2V0ICsKKwkJCTQwOTYgLSBzaXplb2YodWludDMyX3QpICogaSAtIHNpemVvZih1aW50MzJfdCk7 CisJCSpjcysrID0gMDsKKwkJaWYgKGdlbiA+PSAxMikKKwkJCSpjcysrID0gMDsKKwl9CisJKmNz KysgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCWlndF9hc3NlcnQoY3MgLSBtYXAgPCA0MDk2IC8g c2l6ZW9mKCpjcykpOworCW11bm1hcChtYXAsIDQwOTYpOworCisJZWIucnN2ZDEgPSBjdHhbMF07 CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKKworCWViLnJzdmQxID0gY3R4WzFdOworCWViLmJh dGNoX3N0YXJ0X29mZnNldCA9IHN0YXJ0OworCWdlbV9leGVjYnVmKGk5MTUsICZlYik7CisKKwln ZW1fc3luYyhpOTE1LCBvYmpbMl0uaGFuZGxlKTsKKworCWdlbV9zZXRfZG9tYWluKGk5MTUsIG9i alsxXS5oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01B SU5fQ1BVKTsKKwltYXAgPSBnZW1fbW1hcF9fY3B1KGk5MTUsIG9ialsxXS5oYW5kbGUsIDAsIDQw OTYsIFBST1RfV1JJVEUpOworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCW1hcFtpXSA9IG1h cFtpICsgMV0gLSBtYXBbaV07CisJcXNvcnQobWFwLCA5LCBzaXplb2YoKm1hcCksIGNtcF91MzIp OworCWR1cmF0aW9uICo9IG1hcFs0XSAvIDI7IC8qIDIgc2VtYS13YWl0cyBiZXR3ZWVuIHRpbWVz dGFtcCB1cGRhdGVzICovCisJbXVubWFwKG1hcCwgNDA5Nik7CisKKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShjdHgpOyBpKyspCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4W2ld KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9iaik7IGkrKykKKwkJZ2VtX2Nsb3Nl KGk5MTUsIG9ialtpXS5oYW5kbGUpOworCisJcmV0dXJuIGR1cmF0aW9uOworfQorCitzdGF0aWMg dm9pZCB0ZXN0X2R1cmF0aW9uKGludCBpOTE1LCBpbnQgZW5naW5lKQoreworCWludCBkZWxheXNb XSA9IHsgMSwgNTAsIDEwMCwgNTAwIH07CisJdW5zaWduZWQgaW50IHNhdmVkOworCisJLyoKKwkg KiBUaW1lc2xpY2luZyBhdCBpdHMgdmVyeSBiYXNpYyBsZXZlbCBpcyBzaGFyaW5nIHRoZSBHUFUg YnkKKwkgKiBydW5uaW5nIG9uZSBjb250ZXh0IGZvciBpbnRlcnZhbCBiZWZvcmUgcnVubmluZyBh bm90aGVyLiBBZnRlcgorCSAqIGVhY2ggaW50ZXJ2YWwgdGhlIHJ1bm5pbmcgY29udGV4dCBpcyBz d2FwcGVkIGZvciBhbm90aGVyIHJ1bm5hYmxlCisJICogY29udGV4dC4KKwkgKgorCSAqIFdlIGNh biBtZWFzdXJlIHRoaXMgZGlyZWN0bHkgYnkgd2F0Y2hpbmcgdGhlIHhDU19USU1FU1RBTVAgYW5k CisJICogcmVjb3JkaW5nIGl0cyB2YWx1ZSBldmVyeSB0aW1lIHdlIHN3aXRjaCBpbnRvIHRoZSBj b250ZXh0LCB1c2luZworCSAqIGEgY291cGxlIG9mIHNlbWFwaG9yZXMgdG8gYnVzeXNwaW4gZm9y IHRoZSB0aW1lc2xpY2UuCisJICovCisKKwlpZ3RfYXNzZXJ0KGlndF9zeXNmc19zY2FuZihlbmdp bmUsICJ0aW1lc2xpY2VfZHVyYXRpb25fbXMiLCAiJXUiLCAmc2F2ZWQpID09IDEpOworCWlndF9k ZWJ1ZygiSW5pdGlhbCB0aW1lc2xpY2VfZHVyYXRpb25fbXM6JXVcbiIsIHNhdmVkKTsKKworCWdl bV9xdWllc2NlbnRfZ3B1KGk5MTUpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGRlbGF5cyk7IGkrKykgeworCQl1aW50NjRfdCBlbGFwc2VkOworCisJCWVsYXBzZWQgPSBfX3Rl c3RfZHVyYXRpb24oaTkxNSwgZW5naW5lLCBkZWxheXNbaV0pOworCQlpZ3RfaW5mbygidGltZXNs aWNlX2R1cmF0aW9uX21zOiVkLCBlbGFwc2VkPSUuM2Ztc1xuIiwKKwkJCSBkZWxheXNbaV0sIGVs YXBzZWQgKiAxZS02KTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGdpdmUgYSBjb3VwbGUgb2Yg amlmZmllcyBzbGFjayBmb3IgdGhlIHNjaGVkdWxlciB0aW1lb3V0cworCQkgKiBhbmQgdGhlbiBh IGxpdHRsZSBtb3JlIHNsYWNrIGZyIHRoZSBvdmVyaGVhZCBpbiBzdWJtaXR0aW5nIGFuZAorCQkg KiBtZWFzdXJpbmcuIDUwbXMgc2hvdWxkIGNvdmVyIGFsbCBvZiBvdXIgc2lucyBhbmQgYmUgdXNl ZnVsCisJCSAqIHRvbGVyYW5jZS4KKwkJICovCisJCWlndF9hc3NlcnRfZihlbGFwc2VkIC8gMTAw MCAvIDEwMDAgPCBkZWxheXNbaV0gKyA1MCwKKwkJCSAgICAgIlRpbWVzbGljZSBleGNlZWRlZCBy ZXF1ZXN0IVxuIik7CisJfQorCisJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7CisJc2V0X3RpbWVz bGljZShlbmdpbmUsIHNhdmVkKTsKK30KKworc3RhdGljIHVpbnQ2NF90IF9fdGVzdF90aW1lb3V0 KGludCBpOTE1LCBpbnQgZW5naW5lLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKK3sKKwl1bnNpZ25l ZCBpbnQgY2xhc3MsIGluc3Q7CisJc3RydWN0IHRpbWVzcGVjIHRzID0ge307CisJaWd0X3NwaW5f dCAqc3BpblsyXTsKKwl1aW50NjRfdCBlbGFwc2VkOworCXVpbnQzMl90IGN0eFsyXTsKKworCWln dF9hc3NlcnQoaWd0X3N5c2ZzX3NjYW5mKGVuZ2luZSwgImNsYXNzIiwgIiV1IiwgJmNsYXNzKSA9 PSAxKTsKKwlpZ3RfYXNzZXJ0KGlndF9zeXNmc19zY2FuZihlbmdpbmUsICJpbnN0YW5jZSIsICIl dSIsICZpbnN0KSA9PSAxKTsKKworCXNldF90aW1lc2xpY2UoZW5naW5lLCB0aW1lb3V0KTsKKwor CWN0eFswXSA9IGNyZWF0ZV9jb250ZXh0KGk5MTUsIGNsYXNzLCBpbnN0LCAwKTsKKwlzcGluWzBd ID0gaWd0X3NwaW5fbmV3KGk5MTUsIGN0eFswXSwKKwkJCSAgICAgICAuZmxhZ3MgPSAoSUdUX1NQ SU5fTk9fUFJFRU1QVElPTiB8CisJCQkJCSBJR1RfU1BJTl9QT0xMX1JVTiB8CisJCQkJCSBJR1Rf U1BJTl9GRU5DRV9PVVQpKTsKKwlpZ3Rfc3Bpbl9idXN5d2FpdF91bnRpbF9zdGFydGVkKHNwaW5b MF0pOworCisJY3R4WzFdID0gY3JlYXRlX2NvbnRleHQoaTkxNSwgY2xhc3MsIGluc3QsIDApOwor CWlndF9uc2VjX2VsYXBzZWQoJnRzKTsKKwlzcGluWzFdID0gaWd0X3NwaW5fbmV3KGk5MTUsIGN0 eFsxXSwgLmZsYWdzID0gSUdUX1NQSU5fUE9MTF9SVU4pOworCWlndF9zcGluX2J1c3l3YWl0X3Vu dGlsX3N0YXJ0ZWQoc3BpblsxXSk7CisJZWxhcHNlZCA9IGlndF9uc2VjX2VsYXBzZWQoJnRzKTsK KworCWlndF9zcGluX2ZyZWUoaTkxNSwgc3BpblsxXSk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNf ZmVuY2Vfd2FpdChzcGluWzBdLT5vdXRfZmVuY2UsIDEpLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5 bmNfZmVuY2Vfc3RhdHVzKHNwaW5bMF0tPm91dF9mZW5jZSksIC1FSU8pOworCisJaWd0X3NwaW5f ZnJlZShpOTE1LCBzcGluWzBdKTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4WzFd KTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFswXSk7CisJZ2VtX3F1aWVzY2VudF9n cHUoaTkxNSk7CisKKwlyZXR1cm4gZWxhcHNlZDsKK30KKworc3RhdGljIHZvaWQgdGVzdF90aW1l b3V0KGludCBpOTE1LCBpbnQgZW5naW5lKQoreworCWludCBkZWxheXNbXSA9IHsgMSwgNTAsIDEw MCwgNTAwIH07CisJdW5zaWduZWQgaW50IHNhdmVkOworCisJLyoKKwkgKiBUaW1lc2xpY2luZyBy ZXF1aXJlcyB1cyB0byBwcmVlbXB0IHRoZSBydW5uaW5nIGNvbnRleHQgaW4gb3JkZXIgdG8KKwkg KiBzd2l0Y2ggaW50byBpdHMgY29udGVtcG9yYXJ5LiBJZiB3ZSBjb3VwbGUgYSB1bnByZWVtcHRh YmxlIGhvZworCSAqIHdpdGggYSBmYXN0IGZvcmNlZCByZXNldCwgd2UgY2FuIG1lYXN1cmUgdGhl IHRpbWVzbGljZSBieSBob3cgbG9uZworCSAqIGl0IHRha2VzIGZvciB0aGUgaG9nIHRvIGJlIHJl c2V0IGFuZCB0aGUgaGlnaCBwcmlvcml0eSBjb250ZXh0CisJICogdG8gY29tcGxldGUuCisJICov CisKKwlpZ3RfcmVxdWlyZShpZ3Rfc3lzZnNfcHJpbnRmKGVuZ2luZSwgInByZWVtcHRfdGltZW91 dF9tcyIsICIldSIsIDEpID09IDEpOworCWlndF9hc3NlcnQoaWd0X3N5c2ZzX3NjYW5mKGVuZ2lu ZSwgInRpbWVzbGljZV9kdXJhdGlvbl9tcyIsICIldSIsICZzYXZlZCkgPT0gMSk7CisJaWd0X2Rl YnVnKCJJbml0aWFsIHRpbWVzbGljZV9kdXJhdGlvbl9tczoldVxuIiwgc2F2ZWQpOworCisJZ2Vt X3F1aWVzY2VudF9ncHUoaTkxNSk7CisJaWd0X3JlcXVpcmUoZW5hYmxlX2hhbmdjaGVjayhpOTE1 LCBmYWxzZSkpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRlbGF5cyk7IGkr KykgeworCQl1aW50NjRfdCBlbGFwc2VkOworCisJCWVsYXBzZWQgPSBfX3Rlc3RfdGltZW91dChp OTE1LCBlbmdpbmUsIGRlbGF5c1tpXSk7CisJCWlndF9pbmZvKCJ0aW1lc2xpY2VfZHVyYXRpb25f bXM6JWQsIGVsYXBzZWQ9JS4zZm1zXG4iLAorCQkJIGRlbGF5c1tpXSwgZWxhcHNlZCAqIDFlLTYp OworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gZ2l2ZSBhIGNvdXBsZSBvZiBqaWZmaWVzIHNsYWNr IGZvciB0aGUgc2NoZWR1bGVyIHRpbWVvdXRzCisJCSAqIGFuZCB0aGVuIGEgbGl0dGxlIG1vcmUg c2xhY2sgZnIgdGhlIG92ZXJoZWFkIGluIHN1Ym1pdHRpbmcgYW5kCisJCSAqIG1lYXN1cmluZy4g NTBtcyBzaG91bGQgY292ZXIgYWxsIG9mIG91ciBzaW5zIGFuZCBiZSB1c2VmdWwKKwkJICogdG9s ZXJhbmNlLgorCQkgKi8KKwkJaWd0X2Fzc2VydF9mKGVsYXBzZWQgLyAxMDAwIC8gMTAwMCA8IGRl bGF5c1tpXSArIDUwLAorCQkJICAgICAiVGltZXNsaWNlIGV4Y2VlZGVkIHJlcXVlc3QhXG4iKTsK Kwl9CisKKwlpZ3RfYXNzZXJ0KGVuYWJsZV9oYW5nY2hlY2soaTkxNSwgdHJ1ZSkpOworCWdlbV9x dWllc2NlbnRfZ3B1KGk5MTUpOworCXNldF90aW1lc2xpY2UoZW5naW5lLCBzYXZlZCk7Cit9CisK K3N0YXRpYyB2b2lkIHRlc3Rfb2ZmKGludCBpOTE1LCBpbnQgZW5naW5lKQoreworCXVuc2lnbmVk IGludCBjbGFzcywgaW5zdDsKKwl1bnNpZ25lZCBpbnQgc2F2ZWQ7CisJaWd0X3NwaW5fdCAqc3Bp blsyXTsKKwl1aW50MzJfdCBjdHhbMl07CisKKwkvKgorCSAqIEFzIGFsd2F5cywgdGhlcmUgYXJl IHNvbWUgd2hvIG11c3QgcnVuIHVuaW50ZXJydXB0ZWQgYW5kIHNpbXBseSBkbworCSAqIG5vdCB3 YW50IHRvIHNoYXJlIHRoZSBHUFUgZXZlbiBmb3IgYSBtaWNyb3NlY29uZC4gVGhvc2UgZ3JlZWR5 CisJICogY2xpZW50cyBjYW4gZGlzYWJsZSB0aW1lc2xpY2luZyBlbnRpcmVseSwgYW5kIHNvIHNl dCB0aGUgdGltZXNsaWNlCisJICogdG8gMC4gV2UgdGVzdCB0aGF0IGEgaG9nIGlzIG5vdCBwcmVl bXB0ZWQgd2l0aGluIHRoZSAxNTBzIG9mCisJICogb3VyIGJvcmVkb20gdGhyZXNob2xkLgorCSAq LworCisJaWd0X3JlcXVpcmUoaWd0X3N5c2ZzX3ByaW50ZihlbmdpbmUsICJwcmVlbXB0X3RpbWVv dXRfbXMiLCAiJXUiLCAxKSA9PSAxKTsKKwlpZ3RfYXNzZXJ0KGlndF9zeXNmc19zY2FuZihlbmdp bmUsICJ0aW1lc2xpY2VfZHVyYXRpb25fbXMiLCAiJXUiLCAmc2F2ZWQpID09IDEpOworCWlndF9k ZWJ1ZygiSW5pdGlhbCB0aW1lc2xpY2VfZHVyYXRpb25fbXM6JXVcbiIsIHNhdmVkKTsKKworCWdl bV9xdWllc2NlbnRfZ3B1KGk5MTUpOworCWlndF9yZXF1aXJlKGVuYWJsZV9oYW5nY2hlY2soaTkx NSwgZmFsc2UpKTsKKworCWlndF9hc3NlcnQoaWd0X3N5c2ZzX3NjYW5mKGVuZ2luZSwgImNsYXNz IiwgIiV1IiwgJmNsYXNzKSA9PSAxKTsKKwlpZ3RfYXNzZXJ0KGlndF9zeXNmc19zY2FuZihlbmdp bmUsICJpbnN0YW5jZSIsICIldSIsICZpbnN0KSA9PSAxKTsKKworCXNldF90aW1lc2xpY2UoZW5n aW5lLCAwKTsKKworCWN0eFswXSA9IGNyZWF0ZV9jb250ZXh0KGk5MTUsIGNsYXNzLCBpbnN0LCAw KTsKKwlzcGluWzBdID0gaWd0X3NwaW5fbmV3KGk5MTUsIGN0eFswXSwKKwkJCSAgICAgICAuZmxh Z3MgPSAoSUdUX1NQSU5fTk9fUFJFRU1QVElPTiB8CisJCQkJCSBJR1RfU1BJTl9QT0xMX1JVTiB8 CisJCQkJCSBJR1RfU1BJTl9GRU5DRV9PVVQpKTsKKwlpZ3Rfc3Bpbl9idXN5d2FpdF91bnRpbF9z dGFydGVkKHNwaW5bMF0pOworCisJY3R4WzFdID0gY3JlYXRlX2NvbnRleHQoaTkxNSwgY2xhc3Ms IGluc3QsIDApOworCXNwaW5bMV0gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4WzFdLCAuZmxhZ3Mg PSBJR1RfU1BJTl9QT0xMX1JVTik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IDE1MDsgaSsrKSB7 CisJCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV9zdGF0dXMoc3BpblswXS0+b3V0X2ZlbmNlKSwg MCk7CisJCXNsZWVwKDEpOworCX0KKworCXNldF90aW1lc2xpY2UoZW5naW5lLCAxKTsKKworCWln dF9zcGluX2J1c3l3YWl0X3VudGlsX3N0YXJ0ZWQoc3BpblsxXSk7CisJaWd0X3NwaW5fZnJlZShp OTE1LCBzcGluWzFdKTsKKworCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV93YWl0KHNwaW5bMF0t Pm91dF9mZW5jZSwgMSksIDApOworCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV9zdGF0dXMoc3Bp blswXS0+b3V0X2ZlbmNlKSwgLUVJTyk7CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW5bMF0p OworCisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHhbMV0pOworCWdlbV9jb250ZXh0X2Rl c3Ryb3koaTkxNSwgY3R4WzBdKTsKKworCWlndF9hc3NlcnQoZW5hYmxlX2hhbmdjaGVjayhpOTE1 LCB0cnVlKSk7CisJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7CisKKwlzZXRfdGltZXNsaWNlKGVu Z2luZSwgc2F2ZWQpOworfQorCitpZ3RfbWFpbgoreworCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqaXQ7CisJaW50IGk5MTUgPSAtMSwgZW5naW5lcyA9IC0xOworCisJaWd0 X2ZpeHR1cmUgeworCQlpbnQgc3lzOworCisJCWk5MTUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVS X0lOVEVMKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGk5MTUpOworCisJCXN5cyA9IGlndF9zeXNmc19v cGVuKGk5MTUpOworCQlpZ3RfcmVxdWlyZShzeXMgIT0gLTEpOworCisJCWVuZ2luZXMgPSBvcGVu YXQoc3lzLCAiZW5naW5lIiwgT19SRE9OTFkpOworCQlpZ3RfcmVxdWlyZShlbmdpbmVzICE9IC0x KTsKKworCQljbG9zZShzeXMpOworCX0KKworCV9fZm9yX2VhY2hfc3RhdGljX2VuZ2luZShpdCkg eworCQlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCQlpbnQgZW5naW5lID0gLTE7CisJCQljaGFyICpu YW1lID0gTlVMTDsKKworCQkJaWd0X2ZpeHR1cmUgeworCQkJCXN0cnVjdCBzdGF0IHN0OworCisJ CQkJZW5naW5lID0gb3BlbmF0KGVuZ2luZXMsIGl0LT5uYW1lLCBPX1JET05MWSk7CisJCQkJaWd0 X3JlcXVpcmUoZnN0YXRhdChlbmdpbmUsCisJCQkJCQkJInRpbWVzbGljZV9kdXJhdGlvbl9tcyIs CisJCQkJCQkJJnN0LCAwKSA9PSAwKTsKKworCQkJCW5hbWUgPSBpZ3Rfc3lzZnNfZ2V0KGVuZ2lu ZSwgIm5hbWUiKTsKKwkJCX0KKwkJCWlmICghbmFtZSkKKwkJCQljb250aW51ZTsKKworCQkJaWd0 X3N1YnRlc3RfZigiJXMtaWRlbXBvdGVudCIsIG5hbWUpCisJCQkJdGVzdF9pZGVtcG90ZW50KGk5 MTUsIGVuZ2luZSk7CisJCQlpZ3Rfc3VidGVzdF9mKCIlcy1pbnZhbGlkIiwgbmFtZSkKKwkJCQl0 ZXN0X2ludmFsaWQoaTkxNSwgZW5naW5lKTsKKwkJCWlndF9zdWJ0ZXN0X2YoIiVzLWR1cmF0aW9u IiwgbmFtZSkKKwkJCQl0ZXN0X2R1cmF0aW9uKGk5MTUsIGVuZ2luZSk7CisJCQlpZ3Rfc3VidGVz dF9mKCIlcy10aW1lb3V0IiwgbmFtZSkKKwkJCQl0ZXN0X3RpbWVvdXQoaTkxNSwgZW5naW5lKTsK KwkJCWlndF9zdWJ0ZXN0X2YoIiVzLW9mZiIsIG5hbWUpCisJCQkJdGVzdF9vZmYoaTkxNSwgZW5n aW5lKTsKKworCQkJZnJlZShuYW1lKTsKKwkJCWNsb3NlKGVuZ2luZSk7CisJCX0KKwl9CisKKwlp Z3RfZml4dHVyZSB7CisJCWNsb3NlKGVuZ2luZXMpOworCQljbG9zZShpOTE1KTsKKwl9Cit9CmRp ZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IDll ZWFiNTMwZC4uZjE1MWMwYTVlIDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90 ZXN0cy9tZXNvbi5idWlsZApAQCAtMjQwLDYgKzI0MCw3IEBAIGk5MTVfcHJvZ3MgPSBbCiAJJ2k5 MTVfc3VzcGVuZCcsCiAJJ3N5c2ZzX2hlYXJ0YmVhdF9pbnRlcnZhbCcsCiAJJ3N5c2ZzX3ByZWVt cHRfdGltZW91dCcsCisJJ3N5c2ZzX3RpbWVzbGljZV9kdXJhdGlvbicsCiBdCiAKIHRlc3RfZGVw cyA9IFsgaWd0X2RlcHMgXQotLSAKMi4yNC4wLnJjMAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 948EBCA9EAF for ; Thu, 24 Oct 2019 10:55:09 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6FC9420679 for ; Thu, 24 Oct 2019 10:55:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6FC9420679 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6011F6E267; Thu, 24 Oct 2019 10:55:05 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 742B96E266 for ; Thu, 24 Oct 2019 10:55:00 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 18947988-1500050 for multiple; Thu, 24 Oct 2019 11:54:51 +0100 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Thu, 24 Oct 2019 11:54:48 +0100 Message-Id: <20191024105449.31948-8-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.24.0.rc0 In-Reply-To: <20191024105449.31948-1-chris@chris-wilson.co.uk> References: <20191024105449.31948-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t 8/9] i915: Exercise timeslice sysfs property X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191024105448.vgcRWmWoyLg6XUYxHzx5hEJOuGPwtEFIJJ9DSib2WXs@z> V2UgW3dpbGxdIGV4cG9zZSB2YXJpb3VzIHBlci1lbmdpbmUgc2NoZWR1bGluZyBjb250cm9scy4g T25lIG9mIHdoaWNoLAondGltZXNsaWNlX2R1cmF0aW9uX21zJywgZGVmaW5lcyB0aGUgc2NoZWR1 bGluZyBxdWFudHVtLiBJZiBhIGNvbnRleHQKZXhoYXVzdHMgaXRzIHRpbWVzbGljZSwgaXQgd2ls bCBiZSBwcmVlbXB0ZWQgaW4gZmF2b3VyIG9mIHJ1bm5pbmcgb25lIG9mCml0cyBjb21wYXRyaW90 cy4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr PgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAgfCAgIDEgKwogdGVz dHMvaTkxNS9zeXNmc190aW1lc2xpY2VfZHVyYXRpb24uYyB8IDUxNyArKysrKysrKysrKysrKysr KysrKysrKysrKwogdGVzdHMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICB8ICAgMSAr CiAzIGZpbGVzIGNoYW5nZWQsIDUxOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg dGVzdHMvaTkxNS9zeXNmc190aW1lc2xpY2VfZHVyYXRpb24uYwoKZGlmZiAtLWdpdCBhL3Rlc3Rz L01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDc0ZmQ4YmU1 Yi4uYjIyZDYzMjY1IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rl c3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTEwMCw2ICsxMDAsNyBAQCBURVNUU19wcm9ncyA9IFwK IAl2Z2VtX3Nsb3cgXAogCWk5MTUvc3lzZnNfaGVhcnRiZWF0X2ludGVydmFsIFwKIAlpOTE1L3N5 c2ZzX3ByZWVtcHRfdGltZW91dCBcCisJaTkxNS9zeXNmc190aW1lc2xpY2VfZHVyYXRpb24gXAog CSQoTlVMTCkKIAogVEVTVFNfcHJvZ3MgKz0gZ2VtX2JhZF9yZWxvYwpkaWZmIC0tZ2l0IGEvdGVz dHMvaTkxNS9zeXNmc190aW1lc2xpY2VfZHVyYXRpb24uYyBiL3Rlc3RzL2k5MTUvc3lzZnNfdGlt ZXNsaWNlX2R1cmF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5m MTBiM2E4MzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pOTE1L3N5c2ZzX3RpbWVzbGljZV9k dXJhdGlvbi5jCkBAIC0wLDAgKzEsNTE3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50 ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdB UkUuCisgKi8KKworI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j bHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNs dWRlICJkcm10ZXN0LmgiIC8qIGdlbV9xdWllc2NlbnRfZ3B1KCkhICovCisjaW5jbHVkZSAiaTkx NS9nZW1fZW5naW5lX3RvcG9sb2d5LmgiCisjaW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgorI2lu Y2x1ZGUgImlndF9kdW1teWxvYWQuaCIKKyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKKyNpbmNsdWRl ICJpb2N0bF93cmFwcGVycy5oIiAvKiBpZ3RfcmVxdWlyZV9nZW0oKSEgKi8KKyNpbmNsdWRlICJp bnRlbF9jaGlwc2V0LmgiCisjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCisjaW5jbHVkZSAic3dfc3lu Yy5oIgorCisjZGVmaW5lIE1JX1NFTUFQSE9SRV9XQUlUCQkoMHgxYyA8PCAyMykKKyNkZWZpbmUg ICBNSV9TRU1BUEhPUkVfUE9MTCAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgICBNSV9T RU1BUEhPUkVfU0FEX0dUX1NERCAgICAgICAoMCA8PCAxMikKKyNkZWZpbmUgICBNSV9TRU1BUEhP UkVfU0FEX0dURV9TREQgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FE X0xUX1NERCAgICAgICAoMiA8PCAxMikKKyNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FEX0xURV9T REQgICAgICAoMyA8PCAxMikKKyNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FEX0VRX1NERCAgICAg ICAoNCA8PCAxMikKKyNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FEX05FUV9TREQgICAgICAoNSA8 PCAxMikKKworc3RhdGljIGJvb2wgX19lbmFibGVfaGFuZ2NoZWNrKGludCBkaXIsIGJvb2wgc3Rh dGUpCit7CisJcmV0dXJuIGlndF9zeXNmc19zZXQoZGlyLCAiZW5hYmxlX2hhbmdjaGVjayIsIHN0 YXRlID8gIjEiIDogIjAiKTsKK30KKworc3RhdGljIGJvb2wgZW5hYmxlX2hhbmdjaGVjayhpbnQg aTkxNSwgYm9vbCBzdGF0ZSkKK3sKKwlib29sIHN1Y2Nlc3M7CisJaW50IGRpcjsKKworCWRpciA9 IGlndF9zeXNmc19vcGVuX3BhcmFtZXRlcnMoaTkxNSk7CisJaWYgKGRpciA8IDApIC8qIG5vIHBh cmFtZXRlcnMsIG11c3QgYmUgZGVmYXVsdCEgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJc3VjY2Vz cyA9IF9fZW5hYmxlX2hhbmdjaGVjayhkaXIsIHN0YXRlKTsKKwljbG9zZShkaXIpOworCisJcmV0 dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90aW1lc2xpY2UoaW50IGVuZ2luZSwg dW5zaWduZWQgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGludCBkZWxheTsKKworCWlndF9zeXNm c19wcmludGYoZW5naW5lLCAidGltZXNsaWNlX2R1cmF0aW9uX21zIiwgIiV1IiwgdmFsdWUpOwor CWlndF9zeXNmc19zY2FuZihlbmdpbmUsICJ0aW1lc2xpY2VfZHVyYXRpb25fbXMiLCAiJXUiLCAm ZGVsYXkpOworCWlndF9hc3NlcnRfZXEoZGVsYXksIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQg dGVzdF9pZGVtcG90ZW50KGludCBpOTE1LCBpbnQgZW5naW5lKQoreworCWNvbnN0IHVuc2lnbmVk IGludCBkZWxheXNbXSA9IHsgMCwgMSwgMTIzNCwgNjU0MzIxIH07CisJdW5zaWduZWQgaW50IHNh dmVkOworCisJLyogUXVpY2sgdGVzdCB0byB2ZXJpZnkgdGhlIGtlcm5lbCByZXBvcnRzIHRoZSBz YW1lIHZhbHVlcyBhcyB3ZSB3cml0ZSAqLworCisJaWd0X2Fzc2VydChpZ3Rfc3lzZnNfc2NhbmYo ZW5naW5lLCAidGltZXNsaWNlX2R1cmF0aW9uX21zIiwgIiV1IiwgJnNhdmVkKSA9PSAxKTsKKwlp Z3RfZGVidWcoIkluaXRpYWwgdGltZXNsaWNlX2R1cmF0aW9uX21zOiV1XG4iLCBzYXZlZCk7CisK Kwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGVsYXlzKTsgaSsrKQorCQlzZXRfdGlt ZXNsaWNlKGVuZ2luZSwgZGVsYXlzW2ldKTsKKworCXNldF90aW1lc2xpY2UoZW5naW5lLCBzYXZl ZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZChpbnQgaTkxNSwgaW50IGVuZ2luZSkK K3sKKwl1bnNpZ25lZCBpbnQgc2F2ZWQsIGRlbGF5OworCisJLyogUXVpY2sgdGVzdCB0aGF0IG5v bi1yZXByZXNlbnRhYmxlIGRlbGF5cyBhcmUgcmVqZWN0ZWQgKi8KKworCWlndF9hc3NlcnQoaWd0 X3N5c2ZzX3NjYW5mKGVuZ2luZSwgInRpbWVzbGljZV9kdXJhdGlvbl9tcyIsICIldSIsICZzYXZl ZCkgPT0gMSk7CisJaWd0X2RlYnVnKCJJbml0aWFsIHRpbWVzbGljZV9kdXJhdGlvbl9tczoldVxu Iiwgc2F2ZWQpOworCisJaWd0X3N5c2ZzX3ByaW50ZihlbmdpbmUsICJ0aW1lc2xpY2VfZHVyYXRp b25fbXMiLCBQUkl1NjQsIC0xKTsKKwlpZ3Rfc3lzZnNfc2NhbmYoZW5naW5lLCAidGltZXNsaWNl X2R1cmF0aW9uX21zIiwgIiV1IiwgJmRlbGF5KTsKKwlpZ3RfYXNzZXJ0X2VxKGRlbGF5LCBzYXZl ZCk7CisKKwlpZ3Rfc3lzZnNfcHJpbnRmKGVuZ2luZSwgInRpbWVzbGljZV9kdXJhdGlvbl9tcyIs ICIlZCIsIC0xKTsKKwlpZ3Rfc3lzZnNfc2NhbmYoZW5naW5lLCAidGltZXNsaWNlX2R1cmF0aW9u X21zIiwgIiV1IiwgJmRlbGF5KTsKKwlpZ3RfYXNzZXJ0X2VxKGRlbGF5LCBzYXZlZCk7CisKKwlp Z3Rfc3lzZnNfcHJpbnRmKGVuZ2luZSwgInRpbWVzbGljZV9kdXJhdGlvbl9tcyIsIFBSSXU2NCwg MTIzdWxsIDw8IDMyKTsKKwlpZ3Rfc3lzZnNfc2NhbmYoZW5naW5lLCAidGltZXNsaWNlX2R1cmF0 aW9uX21zIiwgIiV1IiwgJmRlbGF5KTsKKwlpZ3RfYXNzZXJ0X2VxKGRlbGF5LCBzYXZlZCk7Cit9 CisKK3N0YXRpYyB2b2lkIHNldF91bmJhbm5hYmxlKGludCBpOTE1LCB1aW50MzJfdCBjdHgpCit7 CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHAgPSB7CisJCS5jdHhfaWQgPSBj dHgsCisJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9CQU5OQUJMRSwKKwl9OworCisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCksIDApOworfQorCitz dGF0aWMgdWludDMyX3QgY3JlYXRlX2NvbnRleHQoaW50IGk5MTUsIHVuc2lnbmVkIGludCBjbGFz cywgdW5zaWduZWQgaW50IGluc3QsIGludCBwcmlvKQoreworCXVpbnQzMl90IGN0eDsKKworCWN0 eCA9IGdlbV9jb250ZXh0X2NyZWF0ZV9mb3JfZW5naW5lKGk5MTUsIGNsYXNzLCBpbnN0KTsKKwlz ZXRfdW5iYW5uYWJsZShpOTE1LCBjdHgpOworCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1 LCBjdHgsIHByaW8pOworCisJcmV0dXJuIGN0eDsKK30KKworc3RhdGljIGludCBjbXBfdTMyKGNv bnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCB1aW50MzJfdCAqYSA9IF9h LCAqYiA9IF9iOworCisJcmV0dXJuICphIC0gKmI7Cit9CisKK3N0YXRpYyBkb3VibGUgY2xvY2ty YXRlKGludCBpOTE1KQoreworCWludCBmcmVxOworCWRybV9pOTE1X2dldHBhcmFtX3QgZ3AgPSB7 CisJCS52YWx1ZSA9ICZmcmVxLAorCQkucGFyYW0gPSBJOTE1X1BBUkFNX0NTX1RJTUVTVEFNUF9G UkVRVUVOQ1ksCisJfTsKKworCWlndF9yZXF1aXJlKGlndF9pb2N0bChpOTE1LCBEUk1fSU9DVExf STkxNV9HRVRQQVJBTSwgJmdwKSA9PSAwKTsKKwlyZXR1cm4gMWU5IC8gZnJlcTsKK30KKworc3Rh dGljIHVpbnQ2NF90IF9fdGVzdF9kdXJhdGlvbihpbnQgaTkxNSwgaW50IGVuZ2luZSwgdW5zaWdu ZWQgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2Jq WzNdID0geworCQl7CisJCQkuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwkJCS5v ZmZzZXQgPSAwLAorCQkJLmZsYWdzID0gRVhFQ19PQkpFQ1RfUElOTkVELAorCQl9LAorCQl7CisJ CQkuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwkJCS5vZmZzZXQgPSA0MDk2LAor CQkJLmZsYWdzID0gRVhFQ19PQkpFQ1RfUElOTkVELAorCQl9LAorCQl7IGdlbV9jcmVhdGUoaTkx NSwgNDA5NikgfQorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsK KwkJLmJ1ZmZlcl9jb3VudCA9IEFSUkFZX1NJWkUob2JqKSwKKwkJLmJ1ZmZlcnNfcHRyID0gdG9f dXNlcl9wb2ludGVyKG9iaiksCisJfTsKKwljb25zdCBpbnQgZ2VuID0gaW50ZWxfZ2VuKGludGVs X2dldF9kcm1fZGV2aWQoaTkxNSkpOworCWRvdWJsZSBkdXJhdGlvbiA9IGNsb2NrcmF0ZShpOTE1 KTsKKwl1bnNpZ25lZCBpbnQgY2xhc3MsIGluc3QsIG1taW87CisJdWludDMyX3QgKmNzLCAqbWFw OworCXVpbnQzMl90IGN0eFsyXTsKKwlpbnQgc3RhcnQ7CisJaW50IGk7CisKKwlpZ3RfcmVxdWly ZShnZW1fc2NoZWR1bGVyX2hhc19wcmVlbXB0aW9uKGk5MTUpKTsKKwlpZ3RfcmVxdWlyZShnZW4g Pj0gOCk7IC8qIE1JX1NFTUFQSE9SRV9XQUlUICovCisKKwlpZ3RfYXNzZXJ0KGlndF9zeXNmc19z Y2FuZihlbmdpbmUsICJjbGFzcyIsICIldSIsICZjbGFzcykgPT0gMSk7CisJaWd0X2Fzc2VydChp Z3Rfc3lzZnNfc2NhbmYoZW5naW5lLCAiaW5zdGFuY2UiLCAiJXUiLCAmaW5zdCkgPT0gMSk7CisJ aWd0X3JlcXVpcmUoaWd0X3N5c2ZzX3NjYW5mKGVuZ2luZSwgIm1taW9fYmFzZSIsICIleCIsICZt bWlvKSA9PSAxKTsKKworCXNldF90aW1lc2xpY2UoZW5naW5lLCB0aW1lb3V0KTsKKworCWN0eFsw XSA9IGNyZWF0ZV9jb250ZXh0KGk5MTUsIGNsYXNzLCBpbnN0LCAwKTsKKwljdHhbMV0gPSBjcmVh dGVfY29udGV4dChpOTE1LCBjbGFzcywgaW5zdCwgMCk7CisKKwltYXAgPSBnZW1fbW1hcF9fY3B1 KGk5MTUsIG9ialsyXS5oYW5kbGUsIDAsIDQwOTYsIFBST1RfV1JJVEUpOworCisJY3MgPSBtYXA7 CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJKmNzKysgPSBNSV9TRU1BUEhPUkVfV0FJ VCB8CisJCQlNSV9TRU1BUEhPUkVfUE9MTCB8CisJCQlNSV9TRU1BUEhPUkVfU0FEX05FUV9TREQg fAorCQkJKDQgLSAyICsgKGdlbiA+PSAxMikpOworCQkqY3MrKyA9IDA7CisJCSpjcysrID0gb2Jq WzBdLm9mZnNldCArIHNpemVvZih1aW50MzJfdCkgKiBpOworCQkqY3MrKyA9IDA7CisJCWlmIChn ZW4gPj0gMTIpCisJCQkqY3MrKyA9IDA7CisKKwkJKmNzKysgPSAweDI0IDw8IDIzIHwgMjsgLyog U1JNICovCisJCSpjcysrID0gbW1pbyArIDB4MzU4OworCQkqY3MrKyA9IG9ialsxXS5vZmZzZXQg KyBzaXplb2YodWludDMyX3QpICogaTsKKwkJKmNzKysgPSAwOworCisJCSpjcysrID0gTUlfU1RP UkVfRFdPUkRfSU1NOworCQkqY3MrKyA9IG9ialswXS5vZmZzZXQgKworCQkJNDA5NiAtIHNpemVv Zih1aW50MzJfdCkgKiBpIC0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJKmNzKysgPSAwOworCQkqY3Mr KyA9IDE7CisJfQorCSpjcysrID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKworCWNzICs9IDE2IC0g KChjcyAtIG1hcCkgJiAxNSk7CisJc3RhcnQgPSAoY3MgLSBtYXApICogc2l6ZW9mKCpjcyk7CisJ Zm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTU07 CisJCSpjcysrID0gb2JqWzBdLm9mZnNldCArIHNpemVvZih1aW50MzJfdCkgKiBpOworCQkqY3Mr KyA9IDA7CisJCSpjcysrID0gMTsKKworCQkqY3MrKyA9IE1JX1NFTUFQSE9SRV9XQUlUIHwKKwkJ CU1JX1NFTUFQSE9SRV9QT0xMIHwKKwkJCU1JX1NFTUFQSE9SRV9TQURfTkVRX1NERCB8CisJCQko NCAtIDIgKyAoZ2VuID49IDEyKSk7CisJCSpjcysrID0gMDsKKwkJKmNzKysgPSBvYmpbMF0ub2Zm c2V0ICsKKwkJCTQwOTYgLSBzaXplb2YodWludDMyX3QpICogaSAtIHNpemVvZih1aW50MzJfdCk7 CisJCSpjcysrID0gMDsKKwkJaWYgKGdlbiA+PSAxMikKKwkJCSpjcysrID0gMDsKKwl9CisJKmNz KysgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCWlndF9hc3NlcnQoY3MgLSBtYXAgPCA0MDk2IC8g c2l6ZW9mKCpjcykpOworCW11bm1hcChtYXAsIDQwOTYpOworCisJZWIucnN2ZDEgPSBjdHhbMF07 CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKKworCWViLnJzdmQxID0gY3R4WzFdOworCWViLmJh dGNoX3N0YXJ0X29mZnNldCA9IHN0YXJ0OworCWdlbV9leGVjYnVmKGk5MTUsICZlYik7CisKKwln ZW1fc3luYyhpOTE1LCBvYmpbMl0uaGFuZGxlKTsKKworCWdlbV9zZXRfZG9tYWluKGk5MTUsIG9i alsxXS5oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01B SU5fQ1BVKTsKKwltYXAgPSBnZW1fbW1hcF9fY3B1KGk5MTUsIG9ialsxXS5oYW5kbGUsIDAsIDQw OTYsIFBST1RfV1JJVEUpOworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCW1hcFtpXSA9IG1h cFtpICsgMV0gLSBtYXBbaV07CisJcXNvcnQobWFwLCA5LCBzaXplb2YoKm1hcCksIGNtcF91MzIp OworCWR1cmF0aW9uICo9IG1hcFs0XSAvIDI7IC8qIDIgc2VtYS13YWl0cyBiZXR3ZWVuIHRpbWVz dGFtcCB1cGRhdGVzICovCisJbXVubWFwKG1hcCwgNDA5Nik7CisKKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShjdHgpOyBpKyspCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4W2ld KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9iaik7IGkrKykKKwkJZ2VtX2Nsb3Nl KGk5MTUsIG9ialtpXS5oYW5kbGUpOworCisJcmV0dXJuIGR1cmF0aW9uOworfQorCitzdGF0aWMg dm9pZCB0ZXN0X2R1cmF0aW9uKGludCBpOTE1LCBpbnQgZW5naW5lKQoreworCWludCBkZWxheXNb XSA9IHsgMSwgNTAsIDEwMCwgNTAwIH07CisJdW5zaWduZWQgaW50IHNhdmVkOworCisJLyoKKwkg KiBUaW1lc2xpY2luZyBhdCBpdHMgdmVyeSBiYXNpYyBsZXZlbCBpcyBzaGFyaW5nIHRoZSBHUFUg YnkKKwkgKiBydW5uaW5nIG9uZSBjb250ZXh0IGZvciBpbnRlcnZhbCBiZWZvcmUgcnVubmluZyBh bm90aGVyLiBBZnRlcgorCSAqIGVhY2ggaW50ZXJ2YWwgdGhlIHJ1bm5pbmcgY29udGV4dCBpcyBz d2FwcGVkIGZvciBhbm90aGVyIHJ1bm5hYmxlCisJICogY29udGV4dC4KKwkgKgorCSAqIFdlIGNh biBtZWFzdXJlIHRoaXMgZGlyZWN0bHkgYnkgd2F0Y2hpbmcgdGhlIHhDU19USU1FU1RBTVAgYW5k CisJICogcmVjb3JkaW5nIGl0cyB2YWx1ZSBldmVyeSB0aW1lIHdlIHN3aXRjaCBpbnRvIHRoZSBj b250ZXh0LCB1c2luZworCSAqIGEgY291cGxlIG9mIHNlbWFwaG9yZXMgdG8gYnVzeXNwaW4gZm9y IHRoZSB0aW1lc2xpY2UuCisJICovCisKKwlpZ3RfYXNzZXJ0KGlndF9zeXNmc19zY2FuZihlbmdp bmUsICJ0aW1lc2xpY2VfZHVyYXRpb25fbXMiLCAiJXUiLCAmc2F2ZWQpID09IDEpOworCWlndF9k ZWJ1ZygiSW5pdGlhbCB0aW1lc2xpY2VfZHVyYXRpb25fbXM6JXVcbiIsIHNhdmVkKTsKKworCWdl bV9xdWllc2NlbnRfZ3B1KGk5MTUpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGRlbGF5cyk7IGkrKykgeworCQl1aW50NjRfdCBlbGFwc2VkOworCisJCWVsYXBzZWQgPSBfX3Rl c3RfZHVyYXRpb24oaTkxNSwgZW5naW5lLCBkZWxheXNbaV0pOworCQlpZ3RfaW5mbygidGltZXNs aWNlX2R1cmF0aW9uX21zOiVkLCBlbGFwc2VkPSUuM2Ztc1xuIiwKKwkJCSBkZWxheXNbaV0sIGVs YXBzZWQgKiAxZS02KTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGdpdmUgYSBjb3VwbGUgb2Yg amlmZmllcyBzbGFjayBmb3IgdGhlIHNjaGVkdWxlciB0aW1lb3V0cworCQkgKiBhbmQgdGhlbiBh IGxpdHRsZSBtb3JlIHNsYWNrIGZyIHRoZSBvdmVyaGVhZCBpbiBzdWJtaXR0aW5nIGFuZAorCQkg KiBtZWFzdXJpbmcuIDUwbXMgc2hvdWxkIGNvdmVyIGFsbCBvZiBvdXIgc2lucyBhbmQgYmUgdXNl ZnVsCisJCSAqIHRvbGVyYW5jZS4KKwkJICovCisJCWlndF9hc3NlcnRfZihlbGFwc2VkIC8gMTAw MCAvIDEwMDAgPCBkZWxheXNbaV0gKyA1MCwKKwkJCSAgICAgIlRpbWVzbGljZSBleGNlZWRlZCBy ZXF1ZXN0IVxuIik7CisJfQorCisJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7CisJc2V0X3RpbWVz bGljZShlbmdpbmUsIHNhdmVkKTsKK30KKworc3RhdGljIHVpbnQ2NF90IF9fdGVzdF90aW1lb3V0 KGludCBpOTE1LCBpbnQgZW5naW5lLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKK3sKKwl1bnNpZ25l ZCBpbnQgY2xhc3MsIGluc3Q7CisJc3RydWN0IHRpbWVzcGVjIHRzID0ge307CisJaWd0X3NwaW5f dCAqc3BpblsyXTsKKwl1aW50NjRfdCBlbGFwc2VkOworCXVpbnQzMl90IGN0eFsyXTsKKworCWln dF9hc3NlcnQoaWd0X3N5c2ZzX3NjYW5mKGVuZ2luZSwgImNsYXNzIiwgIiV1IiwgJmNsYXNzKSA9 PSAxKTsKKwlpZ3RfYXNzZXJ0KGlndF9zeXNmc19zY2FuZihlbmdpbmUsICJpbnN0YW5jZSIsICIl dSIsICZpbnN0KSA9PSAxKTsKKworCXNldF90aW1lc2xpY2UoZW5naW5lLCB0aW1lb3V0KTsKKwor CWN0eFswXSA9IGNyZWF0ZV9jb250ZXh0KGk5MTUsIGNsYXNzLCBpbnN0LCAwKTsKKwlzcGluWzBd ID0gaWd0X3NwaW5fbmV3KGk5MTUsIGN0eFswXSwKKwkJCSAgICAgICAuZmxhZ3MgPSAoSUdUX1NQ SU5fTk9fUFJFRU1QVElPTiB8CisJCQkJCSBJR1RfU1BJTl9QT0xMX1JVTiB8CisJCQkJCSBJR1Rf U1BJTl9GRU5DRV9PVVQpKTsKKwlpZ3Rfc3Bpbl9idXN5d2FpdF91bnRpbF9zdGFydGVkKHNwaW5b MF0pOworCisJY3R4WzFdID0gY3JlYXRlX2NvbnRleHQoaTkxNSwgY2xhc3MsIGluc3QsIDApOwor CWlndF9uc2VjX2VsYXBzZWQoJnRzKTsKKwlzcGluWzFdID0gaWd0X3NwaW5fbmV3KGk5MTUsIGN0 eFsxXSwgLmZsYWdzID0gSUdUX1NQSU5fUE9MTF9SVU4pOworCWlndF9zcGluX2J1c3l3YWl0X3Vu dGlsX3N0YXJ0ZWQoc3BpblsxXSk7CisJZWxhcHNlZCA9IGlndF9uc2VjX2VsYXBzZWQoJnRzKTsK KworCWlndF9zcGluX2ZyZWUoaTkxNSwgc3BpblsxXSk7CisKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNf ZmVuY2Vfd2FpdChzcGluWzBdLT5vdXRfZmVuY2UsIDEpLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5 bmNfZmVuY2Vfc3RhdHVzKHNwaW5bMF0tPm91dF9mZW5jZSksIC1FSU8pOworCisJaWd0X3NwaW5f ZnJlZShpOTE1LCBzcGluWzBdKTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4WzFd KTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFswXSk7CisJZ2VtX3F1aWVzY2VudF9n cHUoaTkxNSk7CisKKwlyZXR1cm4gZWxhcHNlZDsKK30KKworc3RhdGljIHZvaWQgdGVzdF90aW1l b3V0KGludCBpOTE1LCBpbnQgZW5naW5lKQoreworCWludCBkZWxheXNbXSA9IHsgMSwgNTAsIDEw MCwgNTAwIH07CisJdW5zaWduZWQgaW50IHNhdmVkOworCisJLyoKKwkgKiBUaW1lc2xpY2luZyBy ZXF1aXJlcyB1cyB0byBwcmVlbXB0IHRoZSBydW5uaW5nIGNvbnRleHQgaW4gb3JkZXIgdG8KKwkg KiBzd2l0Y2ggaW50byBpdHMgY29udGVtcG9yYXJ5LiBJZiB3ZSBjb3VwbGUgYSB1bnByZWVtcHRh YmxlIGhvZworCSAqIHdpdGggYSBmYXN0IGZvcmNlZCByZXNldCwgd2UgY2FuIG1lYXN1cmUgdGhl IHRpbWVzbGljZSBieSBob3cgbG9uZworCSAqIGl0IHRha2VzIGZvciB0aGUgaG9nIHRvIGJlIHJl c2V0IGFuZCB0aGUgaGlnaCBwcmlvcml0eSBjb250ZXh0CisJICogdG8gY29tcGxldGUuCisJICov CisKKwlpZ3RfcmVxdWlyZShpZ3Rfc3lzZnNfcHJpbnRmKGVuZ2luZSwgInByZWVtcHRfdGltZW91 dF9tcyIsICIldSIsIDEpID09IDEpOworCWlndF9hc3NlcnQoaWd0X3N5c2ZzX3NjYW5mKGVuZ2lu ZSwgInRpbWVzbGljZV9kdXJhdGlvbl9tcyIsICIldSIsICZzYXZlZCkgPT0gMSk7CisJaWd0X2Rl YnVnKCJJbml0aWFsIHRpbWVzbGljZV9kdXJhdGlvbl9tczoldVxuIiwgc2F2ZWQpOworCisJZ2Vt X3F1aWVzY2VudF9ncHUoaTkxNSk7CisJaWd0X3JlcXVpcmUoZW5hYmxlX2hhbmdjaGVjayhpOTE1 LCBmYWxzZSkpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRlbGF5cyk7IGkr KykgeworCQl1aW50NjRfdCBlbGFwc2VkOworCisJCWVsYXBzZWQgPSBfX3Rlc3RfdGltZW91dChp OTE1LCBlbmdpbmUsIGRlbGF5c1tpXSk7CisJCWlndF9pbmZvKCJ0aW1lc2xpY2VfZHVyYXRpb25f bXM6JWQsIGVsYXBzZWQ9JS4zZm1zXG4iLAorCQkJIGRlbGF5c1tpXSwgZWxhcHNlZCAqIDFlLTYp OworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gZ2l2ZSBhIGNvdXBsZSBvZiBqaWZmaWVzIHNsYWNr IGZvciB0aGUgc2NoZWR1bGVyIHRpbWVvdXRzCisJCSAqIGFuZCB0aGVuIGEgbGl0dGxlIG1vcmUg c2xhY2sgZnIgdGhlIG92ZXJoZWFkIGluIHN1Ym1pdHRpbmcgYW5kCisJCSAqIG1lYXN1cmluZy4g NTBtcyBzaG91bGQgY292ZXIgYWxsIG9mIG91ciBzaW5zIGFuZCBiZSB1c2VmdWwKKwkJICogdG9s ZXJhbmNlLgorCQkgKi8KKwkJaWd0X2Fzc2VydF9mKGVsYXBzZWQgLyAxMDAwIC8gMTAwMCA8IGRl bGF5c1tpXSArIDUwLAorCQkJICAgICAiVGltZXNsaWNlIGV4Y2VlZGVkIHJlcXVlc3QhXG4iKTsK Kwl9CisKKwlpZ3RfYXNzZXJ0KGVuYWJsZV9oYW5nY2hlY2soaTkxNSwgdHJ1ZSkpOworCWdlbV9x dWllc2NlbnRfZ3B1KGk5MTUpOworCXNldF90aW1lc2xpY2UoZW5naW5lLCBzYXZlZCk7Cit9CisK K3N0YXRpYyB2b2lkIHRlc3Rfb2ZmKGludCBpOTE1LCBpbnQgZW5naW5lKQoreworCXVuc2lnbmVk IGludCBjbGFzcywgaW5zdDsKKwl1bnNpZ25lZCBpbnQgc2F2ZWQ7CisJaWd0X3NwaW5fdCAqc3Bp blsyXTsKKwl1aW50MzJfdCBjdHhbMl07CisKKwkvKgorCSAqIEFzIGFsd2F5cywgdGhlcmUgYXJl IHNvbWUgd2hvIG11c3QgcnVuIHVuaW50ZXJydXB0ZWQgYW5kIHNpbXBseSBkbworCSAqIG5vdCB3 YW50IHRvIHNoYXJlIHRoZSBHUFUgZXZlbiBmb3IgYSBtaWNyb3NlY29uZC4gVGhvc2UgZ3JlZWR5 CisJICogY2xpZW50cyBjYW4gZGlzYWJsZSB0aW1lc2xpY2luZyBlbnRpcmVseSwgYW5kIHNvIHNl dCB0aGUgdGltZXNsaWNlCisJICogdG8gMC4gV2UgdGVzdCB0aGF0IGEgaG9nIGlzIG5vdCBwcmVl bXB0ZWQgd2l0aGluIHRoZSAxNTBzIG9mCisJICogb3VyIGJvcmVkb20gdGhyZXNob2xkLgorCSAq LworCisJaWd0X3JlcXVpcmUoaWd0X3N5c2ZzX3ByaW50ZihlbmdpbmUsICJwcmVlbXB0X3RpbWVv dXRfbXMiLCAiJXUiLCAxKSA9PSAxKTsKKwlpZ3RfYXNzZXJ0KGlndF9zeXNmc19zY2FuZihlbmdp bmUsICJ0aW1lc2xpY2VfZHVyYXRpb25fbXMiLCAiJXUiLCAmc2F2ZWQpID09IDEpOworCWlndF9k ZWJ1ZygiSW5pdGlhbCB0aW1lc2xpY2VfZHVyYXRpb25fbXM6JXVcbiIsIHNhdmVkKTsKKworCWdl bV9xdWllc2NlbnRfZ3B1KGk5MTUpOworCWlndF9yZXF1aXJlKGVuYWJsZV9oYW5nY2hlY2soaTkx NSwgZmFsc2UpKTsKKworCWlndF9hc3NlcnQoaWd0X3N5c2ZzX3NjYW5mKGVuZ2luZSwgImNsYXNz IiwgIiV1IiwgJmNsYXNzKSA9PSAxKTsKKwlpZ3RfYXNzZXJ0KGlndF9zeXNmc19zY2FuZihlbmdp bmUsICJpbnN0YW5jZSIsICIldSIsICZpbnN0KSA9PSAxKTsKKworCXNldF90aW1lc2xpY2UoZW5n aW5lLCAwKTsKKworCWN0eFswXSA9IGNyZWF0ZV9jb250ZXh0KGk5MTUsIGNsYXNzLCBpbnN0LCAw KTsKKwlzcGluWzBdID0gaWd0X3NwaW5fbmV3KGk5MTUsIGN0eFswXSwKKwkJCSAgICAgICAuZmxh Z3MgPSAoSUdUX1NQSU5fTk9fUFJFRU1QVElPTiB8CisJCQkJCSBJR1RfU1BJTl9QT0xMX1JVTiB8 CisJCQkJCSBJR1RfU1BJTl9GRU5DRV9PVVQpKTsKKwlpZ3Rfc3Bpbl9idXN5d2FpdF91bnRpbF9z dGFydGVkKHNwaW5bMF0pOworCisJY3R4WzFdID0gY3JlYXRlX2NvbnRleHQoaTkxNSwgY2xhc3Ms IGluc3QsIDApOworCXNwaW5bMV0gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4WzFdLCAuZmxhZ3Mg PSBJR1RfU1BJTl9QT0xMX1JVTik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IDE1MDsgaSsrKSB7 CisJCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV9zdGF0dXMoc3BpblswXS0+b3V0X2ZlbmNlKSwg MCk7CisJCXNsZWVwKDEpOworCX0KKworCXNldF90aW1lc2xpY2UoZW5naW5lLCAxKTsKKworCWln dF9zcGluX2J1c3l3YWl0X3VudGlsX3N0YXJ0ZWQoc3BpblsxXSk7CisJaWd0X3NwaW5fZnJlZShp OTE1LCBzcGluWzFdKTsKKworCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV93YWl0KHNwaW5bMF0t Pm91dF9mZW5jZSwgMSksIDApOworCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV9zdGF0dXMoc3Bp blswXS0+b3V0X2ZlbmNlKSwgLUVJTyk7CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW5bMF0p OworCisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHhbMV0pOworCWdlbV9jb250ZXh0X2Rl c3Ryb3koaTkxNSwgY3R4WzBdKTsKKworCWlndF9hc3NlcnQoZW5hYmxlX2hhbmdjaGVjayhpOTE1 LCB0cnVlKSk7CisJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7CisKKwlzZXRfdGltZXNsaWNlKGVu Z2luZSwgc2F2ZWQpOworfQorCitpZ3RfbWFpbgoreworCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqaXQ7CisJaW50IGk5MTUgPSAtMSwgZW5naW5lcyA9IC0xOworCisJaWd0 X2ZpeHR1cmUgeworCQlpbnQgc3lzOworCisJCWk5MTUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVS X0lOVEVMKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGk5MTUpOworCisJCXN5cyA9IGlndF9zeXNmc19v cGVuKGk5MTUpOworCQlpZ3RfcmVxdWlyZShzeXMgIT0gLTEpOworCisJCWVuZ2luZXMgPSBvcGVu YXQoc3lzLCAiZW5naW5lIiwgT19SRE9OTFkpOworCQlpZ3RfcmVxdWlyZShlbmdpbmVzICE9IC0x KTsKKworCQljbG9zZShzeXMpOworCX0KKworCV9fZm9yX2VhY2hfc3RhdGljX2VuZ2luZShpdCkg eworCQlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCQlpbnQgZW5naW5lID0gLTE7CisJCQljaGFyICpu YW1lID0gTlVMTDsKKworCQkJaWd0X2ZpeHR1cmUgeworCQkJCXN0cnVjdCBzdGF0IHN0OworCisJ CQkJZW5naW5lID0gb3BlbmF0KGVuZ2luZXMsIGl0LT5uYW1lLCBPX1JET05MWSk7CisJCQkJaWd0 X3JlcXVpcmUoZnN0YXRhdChlbmdpbmUsCisJCQkJCQkJInRpbWVzbGljZV9kdXJhdGlvbl9tcyIs CisJCQkJCQkJJnN0LCAwKSA9PSAwKTsKKworCQkJCW5hbWUgPSBpZ3Rfc3lzZnNfZ2V0KGVuZ2lu ZSwgIm5hbWUiKTsKKwkJCX0KKwkJCWlmICghbmFtZSkKKwkJCQljb250aW51ZTsKKworCQkJaWd0 X3N1YnRlc3RfZigiJXMtaWRlbXBvdGVudCIsIG5hbWUpCisJCQkJdGVzdF9pZGVtcG90ZW50KGk5 MTUsIGVuZ2luZSk7CisJCQlpZ3Rfc3VidGVzdF9mKCIlcy1pbnZhbGlkIiwgbmFtZSkKKwkJCQl0 ZXN0X2ludmFsaWQoaTkxNSwgZW5naW5lKTsKKwkJCWlndF9zdWJ0ZXN0X2YoIiVzLWR1cmF0aW9u IiwgbmFtZSkKKwkJCQl0ZXN0X2R1cmF0aW9uKGk5MTUsIGVuZ2luZSk7CisJCQlpZ3Rfc3VidGVz dF9mKCIlcy10aW1lb3V0IiwgbmFtZSkKKwkJCQl0ZXN0X3RpbWVvdXQoaTkxNSwgZW5naW5lKTsK KwkJCWlndF9zdWJ0ZXN0X2YoIiVzLW9mZiIsIG5hbWUpCisJCQkJdGVzdF9vZmYoaTkxNSwgZW5n aW5lKTsKKworCQkJZnJlZShuYW1lKTsKKwkJCWNsb3NlKGVuZ2luZSk7CisJCX0KKwl9CisKKwlp Z3RfZml4dHVyZSB7CisJCWNsb3NlKGVuZ2luZXMpOworCQljbG9zZShpOTE1KTsKKwl9Cit9CmRp ZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IDll ZWFiNTMwZC4uZjE1MWMwYTVlIDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90 ZXN0cy9tZXNvbi5idWlsZApAQCAtMjQwLDYgKzI0MCw3IEBAIGk5MTVfcHJvZ3MgPSBbCiAJJ2k5 MTVfc3VzcGVuZCcsCiAJJ3N5c2ZzX2hlYXJ0YmVhdF9pbnRlcnZhbCcsCiAJJ3N5c2ZzX3ByZWVt cHRfdGltZW91dCcsCisJJ3N5c2ZzX3RpbWVzbGljZV9kdXJhdGlvbicsCiBdCiAKIHRlc3RfZGVw cyA9IFsgaWd0X2RlcHMgXQotLSAKMi4yNC4wLnJjMAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4