From mboxrd@z Thu Jan 1 00:00:00 1970 From: robert.foss@collabora.com Subject: [PATCH v1 01/13] lib/sw_sync: Add helper functions for managing synchronization primitives Date: Tue, 23 Aug 2016 13:53:23 -0400 Message-ID: <1471974815-11122-2-git-send-email-robert.foss@collabora.com> References: <1471974815-11122-1-git-send-email-robert.foss@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2E2656E204 for ; Tue, 23 Aug 2016 17:53:42 +0000 (UTC) In-Reply-To: <1471974815-11122-1-git-send-email-robert.foss@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Gustavo Padovan , Daniel Stone , Daniel Vetter , Marius Vlad Cc: intel-gfx@lists.freedesktop.org, Gustavo Padovan List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUm9iZXJ0IEZvc3MgPHJvYmVydC5mb3NzQGNvbGxhYm9yYS5jb20+CgpCYXNlIGZ1bmN0 aW9ucyB0byBoZWxwIHRlc3RpbmcgdGhlIFN5bmMgRmlsZSBGcmFtZXdvcmsgKGV4cGxpY2l0IGZl bmNpbmcKbWVjaGFuaXNtIHBvcnRlZCBmcm9tIEFuZHJvaWQpLgpUaGVzZSBmdW5jdGlvbnMgYWxs b3cgeW91IHRvIGNyZWF0ZSwgdXNlIGFuZCBkZXN0cm95IHRpbWVsaW5lcyBhbmQgZmVuY2VzLgoK U2lnbmVkLW9mZi1ieTogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92YW5AY29sbGFib3Jh LmNvLnVrPgpTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgRm9zcyA8cm9iZXJ0LmZvc3NAY29sbGFib3Jh LmNvbT4KLS0tCiBsaWIvTWFrZWZpbGUuc291cmNlcyB8ICAgMiArCiBsaWIvc3dfc3luYy5jICAg ICAgICB8IDIzOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGxpYi9zd19zeW5jLmggICAgICAgIHwgIDQ5ICsrKysrKysrKysrCiAzIGZpbGVzIGNo YW5nZWQsIDI4OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3N3X3N5bmMu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9zd19zeW5jLmgKCmRpZmYgLS1naXQgYS9saWIvTWFr ZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGJhYzlhN2YuLjNkYzdj M2MgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2xpYi9NYWtlZmlsZS5z b3VyY2VzCkBAIC02MSw2ICs2MSw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAogCXJlbmRlcmNv cHlfZ2VuOC5jCVwKIAlyZW5kZXJjb3B5X2dlbjkuYwlcCiAJcmVuZGVyY29weS5oCQlcCisJc3df c3luYy5jCQlcCisJc3dfc3luYy5oCQlcCiAJaW50ZWxfcmVnX21hcC5jCQlcCiAJaW50ZWxfaW9z Zi5jCQlcCiAJaWd0X2ttcy5jCQlcCmRpZmYgLS1naXQgYS9saWIvc3dfc3luYy5jIGIvbGliL3N3 X3N5bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGU3ZDA3Ci0tLSAv ZGV2L251bGwKKysrIGIvbGliL3N3X3N5bmMuYwpAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqIENv cHlyaWdodCAyMDEyIEdvb2dsZSwgSW5jCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBDb2xsYWJvcmEs IEx0ZC4KKyAqCisgKiBCYXNlZCBvbiB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgQW5kcm9p ZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBSb2JlcnQgRm9zcyA8cm9iZXJ0LmZv c3NAY29sbGFib3JhLmNvbT4KKyAqLworCisjaWZuZGVmIEFORFJPSUQKKyNkZWZpbmUgX0dOVV9T T1VSQ0UKKyNlbHNlCisjaW5jbHVkZSA8bGliZ2VuLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250 bC5oPgorI2luY2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxs aW51eC9zeW5jX2ZpbGUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2luY2x1ZGUgInN3 X3N5bmMuaCIKKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMu aCIKKworI2lmbmRlZiBTV19TWU5DX0lPQ19JTkMKK3N0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5j ZV9kYXRhIHsKKwlfX3UzMgl2YWx1ZTsKKwljaGFyCW5hbWVbMzJdOworCV9fczMyCWZlbmNlOwor fTsKKworI2RlZmluZSBTV19TWU5DX0lPQ19NQUdJQwkJJ1cnCisjZGVmaW5lIFNXX1NZTkNfSU9D X0NSRUFURV9GRU5DRQlfSU9XUihTV19TWU5DX0lPQ19NQUdJQywgMCxcCisJCQkJCQlzdHJ1Y3Qg c3dfc3luY19jcmVhdGVfZmVuY2VfZGF0YSkKKyNkZWZpbmUgU1dfU1lOQ19JT0NfSU5DCQkJX0lP VyhTV19TWU5DX0lPQ19NQUdJQywgMSwgX191MzIpCisjZW5kaWYKKworaW50IHN3X3N5bmNfZmRf aXNfdmFsaWQoaW50IGZkKQoreworCWludCBzdGF0dXM7CisKKwlpZiAoZmQgPT0gLTEpCisJCXJl dHVybiAwOworCisJc3RhdHVzID0gZmNudGwoZmQsIEZfR0VURkQsIDApOworCXJldHVybiBzdGF0 dXMgPj0gMDsKK30KKworc3RhdGljCit2b2lkIHN3X3N5bmNfZmRfY2xvc2UoaW50IGZkKQorewor CWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuOworCisJaWYgKGZjbnRsKGZkLCBGX0dFVEZELCAwKSA8 IDApCisJCXJldHVybjsKKworCWNsb3NlKGZkKTsKK30KKworaW50IHN3X3N5bmNfdGltZWxpbmVf Y3JlYXRlKHZvaWQpCit7CisJaW50IGZkID0gb3BlbigiL2Rldi9zd19zeW5jIiwgT19SRFdSKTsK KworCWlmICghc3dfc3luY19mZF9pc192YWxpZChmZCkpCisJCWZkID0gb3BlbigiL3N5cy9rZXJu ZWwvZGVidWcvc3luYy9zd19zeW5jIiwgT19SRFdSKTsKKworCWlndF9hc3NlcnQoc3dfc3luY19m ZF9pc192YWxpZChmZCkpOworCisJcmV0dXJuIGZkOworfQorCit2b2lkIHN3X3N5bmNfdGltZWxp bmVfZGVzdHJveShpbnQgZmQpCit7CisJcmV0dXJuIHN3X3N5bmNfZmRfY2xvc2UoZmQpOworfQor Cit2b2lkIHN3X3N5bmNfZmVuY2VfZGVzdHJveShpbnQgZmQpCit7CisJcmV0dXJuIHN3X3N5bmNf ZmRfY2xvc2UoZmQpOworfQorCitpbnQgc3dfc3luY19mZW5jZV9jcmVhdGUoaW50IGZkLCBpbnQz Ml90IHNlcW5vKQoreworCXN0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhIGRhdGEgPSB7 fTsKKworCWRhdGEudmFsdWUgPSBzZXFubzsKKwlpZiAoZmQgPj0gMCkgeworCQlkb19pb2N0bChm ZCwgU1dfU1lOQ19JT0NfQ1JFQVRFX0ZFTkNFLCAmZGF0YSk7CisJCXJldHVybiBkYXRhLmZlbmNl OworCX0gZWxzZSB7CisJCWRvX2lvY3RsX2VycihmZCwgU1dfU1lOQ19JT0NfQ1JFQVRFX0ZFTkNF LCAmZGF0YSwgRUJBREYpOworCQlyZXR1cm4gLTE7CisJfQorfQorCit2b2lkIHN3X3N5bmNfdGlt ZWxpbmVfaW5jKGludCBmZCwgdWludDMyX3QgY291bnQpCit7CisJdWludDMyX3QgYXJnID0gY291 bnQ7CisKKwlpZiAoZmQgPT0gMCB8fCBmZCA9PSAtMSkKKwkJcmV0dXJuOworCisJZG9faW9jdGwo ZmQsIFNXX1NZTkNfSU9DX0lOQywgJmFyZyk7Cit9CisKK2ludCBzd19zeW5jX21lcmdlKGludCBm ZDEsIGludCBmZDIpCit7CisJc3RydWN0IHN5bmNfbWVyZ2VfZGF0YSBkYXRhID0ge307CisJaW50 IGVycjsKKworCWRhdGEuZmQyID0gZmQyOworCisJZXJyID0gaW9jdGwoZmQxLCBTWU5DX0lPQ19N RVJHRSwgJmRhdGEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc3dfc3luY19m ZF9pc192YWxpZChkYXRhLmZlbmNlKTsKKworCXJldHVybiBkYXRhLmZlbmNlOworfQorCitpbnQg c3dfc3luY193YWl0KGludCBmZW5jZSwgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IHBvbGxmZCBm ZHM7CisJaW50IHJldDsKKworCWZkcy5mZCA9IGZlbmNlOworCWZkcy5ldmVudHMgPSBQT0xMSU4g fCBQT0xMRVJSOworCisJcmV0ID0gcG9sbCgmZmRzLCAxLCB0aW1lb3V0KTsKKworCXN3X3N5bmNf ZmRfY2xvc2UoZmVuY2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzeW5j X2ZpbGVfaW5mbyAqc3luY19maWxlX2luZm8oaW50IGZkKQoreworCXN0cnVjdCBzeW5jX2ZpbGVf aW5mbyAqaW5mbzsKKwlzdHJ1Y3Qgc3luY19mZW5jZV9pbmZvICpmZW5jZV9pbmZvOworCWludCBl cnIsIG51bV9mZW5jZXM7CisKKwlpbmZvID0gbWFsbG9jKHNpemVvZigqaW5mbykpOworCWlmIChp bmZvID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KGluZm8sIDAsIHNpemVvZigq aW5mbykpOworCWVyciA9IGlvY3RsKGZkLCBTWU5DX0lPQ19GSUxFX0lORk8sIGluZm8pOworCWlm IChlcnIgPCAwKSB7CisJCWZyZWUoaW5mbyk7CisJCXJldHVybiBOVUxMOworCX0KKworCW51bV9m ZW5jZXMgPSBpbmZvLT5udW1fZmVuY2VzOworCisJaWYgKG51bV9mZW5jZXMpIHsKKwkJaW5mby0+ ZmxhZ3MgPSAwOworCQlpbmZvLT5udW1fZmVuY2VzID0gbnVtX2ZlbmNlczsKKworCQlmZW5jZV9p bmZvID0gY2FsbG9jKG51bV9mZW5jZXMsIHNpemVvZihzdHJ1Y3Qgc3luY19mZW5jZV9pbmZvKSk7 CisJCWlmICghZmVuY2VfaW5mbykKKwkJCWZyZWUoaW5mbyk7CisJCQlyZXR1cm4gTlVMTDsKKwor CQlpbmZvLT5zeW5jX2ZlbmNlX2luZm8gPSAodWludDY0X3QpKHVuc2lnbmVkIGxvbmcpIChmZW5j ZV9pbmZvKTsKKworCQllcnIgPSBpb2N0bChmZCwgU1lOQ19JT0NfRklMRV9JTkZPLCBpbmZvKTsK KwkJaWYgKGVyciA8IDApIHsKKwkJCWZyZWUoZmVuY2VfaW5mbyk7CisJCQlmcmVlKGluZm8pOwor CQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gaW5mbzsKK30KKworc3RhdGljIHZv aWQgc3luY19maWxlX2luZm9fZnJlZShzdHJ1Y3Qgc3luY19maWxlX2luZm8gKmluZm8pCit7CisJ ZnJlZSgodm9pZCAqKSh1aW50cHRyX3QpaW5mby0+c3luY19mZW5jZV9pbmZvKTsKKwlmcmVlKGlu Zm8pOworfQorCitpbnQgc3dfc3luY19mZW5jZV9zaXplKGludCBmZCkKK3sKKwlpbnQgY291bnQ7 CisJc3RydWN0IHN5bmNfZmlsZV9pbmZvICppbmZvID0gc3luY19maWxlX2luZm8oZmQpOworCisJ aWYgKCFpbmZvKQorCQlyZXR1cm4gMDsKKworCWNvdW50ID0gaW5mby0+bnVtX2ZlbmNlczsKKwor CXN5bmNfZmlsZV9pbmZvX2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK2ludCBz d19zeW5jX2ZlbmNlX2NvdW50X3dpdGhfc3RhdHVzKGludCBmZCwgaW50IHN0YXR1cykKK3sKKwlp bnQgaSwgY291bnQgPSAwOworCXN0cnVjdCBzeW5jX2ZlbmNlX2luZm8gKmZlbmNlSW5mbyA9IE5V TEw7CisJc3RydWN0IHN5bmNfZmlsZV9pbmZvICppbmZvID0gc3luY19maWxlX2luZm8oZmQpOwor CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLTE7CisKKwlmZW5jZUluZm8gPSAoc3RydWN0IHN5bmNf ZmVuY2VfaW5mbyAqKSh1aW50cHRyX3QpaW5mby0+c3luY19mZW5jZV9pbmZvOworCWZvciAoaSA9 IDAgOyBpIDwgaW5mby0+bnVtX2ZlbmNlcyA7IGkrKykgeworCQlpZiAoZmVuY2VJbmZvW2ldLnN0 YXR1cyA9PSBzdGF0dXMpCisJCQljb3VudCsrOworCX0KKworCXN5bmNfZmlsZV9pbmZvX2ZyZWUo aW5mbyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CmRpZmYgLS1naXQgYS9saWIvc3dfc3luYy5oIGIv bGliL3N3X3N5bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTc5YWRm Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3N3X3N5bmMuaApAQCAtMCwwICsxLDQ5IEBACisvKgor ICogQ29weXJpZ2h0IDIwMTIgR29vZ2xlLCBJbmMKKyAqIENvcHlyaWdodCDCqSAyMDE2IENvbGxh Ym9yYSwgTHRkLgorICoKKyAqIEJhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBB bmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQK KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJ TiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIFJvYmVydCBGb3NzIDxyb2Jl cnQuZm9zc0Bjb2xsYWJvcmEuY29tPgorICovCisKKyNpZm5kZWYgU1dfU1lOQ19ICisjZGVmaW5l IFNXX1NZTkNfSAorCisjZGVmaW5lIFNXX1NZTkNfRkVOQ0VfU1RBVFVTX0VSUk9SCQkoLTEpCisj ZGVmaW5lIFNXX1NZTkNfRkVOQ0VfU1RBVFVTX0FDVElWRQkJKDApCisjZGVmaW5lIFNXX1NZTkNf RkVOQ0VfU1RBVFVTX1NJR05BTEVECSgxKQorCitpbnQgc3dfc3luY19mZF9pc192YWxpZChpbnQg ZmQpOworaW50IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlKHZvaWQpOwordm9pZCBzd19zeW5jX3Rp bWVsaW5lX2Rlc3Ryb3koaW50IHRpbWVsaW5lKTsKK3ZvaWQgc3dfc3luY19mZW5jZV9kZXN0cm95 KGludCBmZW5jZSk7CitpbnQgc3dfc3luY19mZW5jZV9jcmVhdGUoaW50IGZkLCBpbnQzMl90IHNl cW5vKTsKK3ZvaWQgc3dfc3luY190aW1lbGluZV9pbmMoaW50IGZkLCB1aW50MzJfdCBjb3VudCk7 CitpbnQgc3dfc3luY19tZXJnZShpbnQgZmQxLCBpbnQgZmQyKTsKK2ludCBzd19zeW5jX3dhaXQo aW50IGZlbmNlLCBpbnQgdGltZW91dCk7CitpbnQgc3dfc3luY19mZW5jZV9zaXplKGludCBmZCk7 CitpbnQgc3dfc3luY19mZW5jZV9jb3VudF93aXRoX3N0YXR1cyhpbnQgZmQsIGludCBzdGF0dXMp OworCisjZW5kaWYKKwotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=