From mboxrd@z Thu Jan 1 00:00:00 1970 From: robert.foss@collabora.com Subject: [PATCH i-g-t v2 01/13] lib/sw_sync: Add helper functions for managing synchronization primitives Date: Mon, 12 Sep 2016 18:08:30 -0400 Message-ID: <20160912220842.18752-2-robert.foss@collabora.com> References: <20160912220842.18752-1-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 [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by gabe.freedesktop.org (Postfix) with ESMTPS id EF9296E5B2 for ; Mon, 12 Sep 2016 22:08:50 +0000 (UTC) In-Reply-To: <20160912220842.18752-1-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: intel-gfx@lists.freedesktop.org, Gustavo Padovan , Daniel Stone , Daniel Vetter , Marius Vlad , Eric Engestrom , Chris Wilson Cc: Gustavo Padovan List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUm9iZXJ0IEZvc3MgPHJvYmVydC5mb3NzQGNvbGxhYm9yYS5jb20+CgpCYXNlIGZ1bmN0 aW9ucyB0byBoZWxwIHRlc3RpbmcgdGhlIFN5bmMgRmlsZSBGcmFtZXdvcmsgKGV4cGxpY2l0IGZl bmNpbmcKbWVjaGFuaXNtIHBvcnRlZCBmcm9tIEFuZHJvaWQpLgpUaGVzZSBmdW5jdGlvbnMgYWxs b3cgeW91IHRvIGNyZWF0ZSwgdXNlIGFuZCBkZXN0cm95IHRpbWVsaW5lcyBhbmQgZmVuY2VzLgoK U2lnbmVkLW9mZi1ieTogUm9iZXJ0IEZvc3MgPHJvYmVydC5mb3NzQGNvbGxhYm9yYS5jb20+ClNp Z25lZC1vZmYtYnk6IEd1c3Rhdm8gUGFkb3ZhbiA8Z3VzdGF2by5wYWRvdmFuQGNvbGxhYm9yYS5j by51az4KUmV2aWV3ZWQtYnk6IEVyaWMgRW5nZXN0cm9tIDxlcmljQGVuZ2VzdHJvbS5jaD4KLS0t CiBsaWIvTWFrZWZpbGUuc291cmNlcyB8ICAgMiArCiBsaWIvc3dfc3luYy5jICAgICAgICB8IDIz NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxp Yi9zd19zeW5jLmggICAgICAgIHwgIDQ5ICsrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI4 OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3N3X3N5bmMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYi9zd19zeW5jLmgKCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291 cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGJhYzlhN2YuLjNkYzdjM2MgMTAwNjQ0 Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBA IC02MSw2ICs2MSw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAogCXJlbmRlcmNvcHlfZ2VuOC5j CVwKIAlyZW5kZXJjb3B5X2dlbjkuYwlcCiAJcmVuZGVyY29weS5oCQlcCisJc3dfc3luYy5jCQlc CisJc3dfc3luYy5oCQlcCiAJaW50ZWxfcmVnX21hcC5jCQlcCiAJaW50ZWxfaW9zZi5jCQlcCiAJ aWd0X2ttcy5jCQlcCmRpZmYgLS1naXQgYS9saWIvc3dfc3luYy5jIGIvbGliL3N3X3N5bmMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzlhNDczCi0tLSAvZGV2L251bGwK KysrIGIvbGliL3N3X3N5bmMuYwpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAy MDEyIEdvb2dsZSwgSW5jCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBDb2xsYWJvcmEsIEx0ZC4KKyAq CisgKiBCYXNlZCBvbiB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgQW5kcm9pZCBPcGVuIFNv dXJjZSBQcm9qZWN0CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBSb2JlcnQgRm9zcyA8cm9iZXJ0LmZvc3NAY29sbGFi b3JhLmNvbT4KKyAqLworCisjaWZuZGVmIEFORFJPSUQKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNl bHNlCisjaW5jbHVkZSA8bGliZ2VuLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2lu Y2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeW5j X2ZpbGUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2luY2x1ZGUgInN3X3N5bmMuaCIK KyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKKworI2lm bmRlZiBTV19TWU5DX0lPQ19JTkMKK3N0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhIHsK KwlfX3UzMgl2YWx1ZTsKKwljaGFyCW5hbWVbMzJdOworCV9fczMyCWZlbmNlOworfTsKKworI2Rl ZmluZSBTV19TWU5DX0lPQ19NQUdJQwkJJ1cnCisjZGVmaW5lIFNXX1NZTkNfSU9DX0NSRUFURV9G RU5DRQlfSU9XUihTV19TWU5DX0lPQ19NQUdJQywgMCxcCisJCQkJCQlzdHJ1Y3Qgc3dfc3luY19j cmVhdGVfZmVuY2VfZGF0YSkKKyNkZWZpbmUgU1dfU1lOQ19JT0NfSU5DCQkJX0lPVyhTV19TWU5D X0lPQ19NQUdJQywgMSwgX191MzIpCisjZW5kaWYKKworI2RlZmluZSBERVZGU19TV19TWU5DICAg Ii9kZXYvc3dfc3luYyIKKyNkZWZpbmUgREVCVUdGU19TV19TWU5DICIvc3lzL2tlcm5lbC9kZWJ1 Zy9zeW5jL3N3X3N5bmMiCisKKworaW50IHN3X3N5bmNfZmRfaXNfdmFsaWQoaW50IGZkKQorewor CWludCBzdGF0dXM7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IGZj bnRsKGZkLCBGX0dFVEZELCAwKTsKKwlyZXR1cm4gc3RhdHVzID49IDA7Cit9CisKK3N0YXRpYwor dm9pZCBzd19zeW5jX2ZkX2Nsb3NlKGludCBmZCkKK3sKKwlpZiAoIXN3X3N5bmNfZmRfaXNfdmFs aWQoZmQpKQorCQlyZXR1cm47CisKKwljbG9zZShmZCk7Cit9CisKK2ludCBzd19zeW5jX3RpbWVs aW5lX2NyZWF0ZSh2b2lkKQoreworCWludCBmZCA9IG9wZW4oREVWRlNfU1dfU1lOQywgT19SRFdS KTsKKworCWlmICghc3dfc3luY19mZF9pc192YWxpZChmZCkpCisJCWZkID0gb3BlbihERUJVR0ZT X1NXX1NZTkMsIE9fUkRXUik7CisKKwlpZ3RfYXNzZXJ0KHN3X3N5bmNfZmRfaXNfdmFsaWQoZmQp KTsKKworCXJldHVybiBmZDsKK30KKwordm9pZCBzd19zeW5jX3RpbWVsaW5lX2Rlc3Ryb3koaW50 IGZkKQoreworCXJldHVybiBzd19zeW5jX2ZkX2Nsb3NlKGZkKTsKK30KKwordm9pZCBzd19zeW5j X2ZlbmNlX2Rlc3Ryb3koaW50IGZkKQoreworCXJldHVybiBzd19zeW5jX2ZkX2Nsb3NlKGZkKTsK K30KKworaW50IHN3X3N5bmNfZmVuY2VfY3JlYXRlKGludCBmZCwgaW50MzJfdCBzZXFubykKK3sK KwlzdHJ1Y3Qgc3dfc3luY19jcmVhdGVfZmVuY2VfZGF0YSBkYXRhID0ge307CisJZGF0YS52YWx1 ZSA9IHNlcW5vOworCisJaWYgKGZkID49IDApIHsKKwkJZG9faW9jdGwoZmQsIFNXX1NZTkNfSU9D X0NSRUFURV9GRU5DRSwgJmRhdGEpOworCQlyZXR1cm4gZGF0YS5mZW5jZTsKKwl9IGVsc2Ugewor CQlkb19pb2N0bF9lcnIoZmQsIFNXX1NZTkNfSU9DX0NSRUFURV9GRU5DRSwgJmRhdGEsIEVCQURG KTsKKwkJcmV0dXJuIC0xOworCX0KK30KKwordm9pZCBzd19zeW5jX3RpbWVsaW5lX2luYyhpbnQg ZmQsIHVpbnQzMl90IGNvdW50KQoreworCXVpbnQzMl90IGFyZyA9IGNvdW50OworCisJaWYgKGZk ID09IDAgfHwgZmQgPT0gLTEpCisJCXJldHVybjsKKworCWRvX2lvY3RsKGZkLCBTV19TWU5DX0lP Q19JTkMsICZhcmcpOworfQorCitpbnQgc3dfc3luY19tZXJnZShpbnQgZmQxLCBpbnQgZmQyKQor eworCXN0cnVjdCBzeW5jX21lcmdlX2RhdGEgZGF0YSA9IHt9OworCWludCBlcnI7CisKKwlkYXRh LmZkMiA9IGZkMjsKKworCWVyciA9IGlvY3RsKGZkMSwgU1lOQ19JT0NfTUVSR0UsICZkYXRhKTsK KwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXN3X3N5bmNfZmRfaXNfdmFsaWQoZGF0 YS5mZW5jZSk7CisKKwlyZXR1cm4gZGF0YS5mZW5jZTsKK30KKworaW50IHN3X3N5bmNfd2FpdChp bnQgZmVuY2UsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBwb2xsZmQgZmRzOworCWludCByZXQ7 CisKKwlmZHMuZmQgPSBmZW5jZTsKKwlmZHMuZXZlbnRzID0gUE9MTElOIHwgUE9MTEVSUjsKKwor CXJldCA9IHBvbGwoJmZkcywgMSwgdGltZW91dCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgc3RydWN0IHN5bmNfZmlsZV9pbmZvICpzeW5jX2ZpbGVfaW5mbyhpbnQgZmQpCit7CisJc3Ry dWN0IHN5bmNfZmlsZV9pbmZvICppbmZvOworCXN0cnVjdCBzeW5jX2ZlbmNlX2luZm8gKmZlbmNl X2luZm87CisJaW50IGVyciwgbnVtX2ZlbmNlczsKKworCWluZm8gPSBjYWxsb2MoMSwgc2l6ZW9m KCppbmZvKSk7CisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwllcnIgPSBp b2N0bChmZCwgU1lOQ19JT0NfRklMRV9JTkZPLCBpbmZvKTsKKwlpZiAoZXJyIDwgMCkgeworCQlm cmVlKGluZm8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwludW1fZmVuY2VzID0gaW5mby0+bnVt X2ZlbmNlczsKKworCWlmIChudW1fZmVuY2VzKSB7CisJCWluZm8tPmZsYWdzID0gMDsKKwkJaW5m by0+bnVtX2ZlbmNlcyA9IG51bV9mZW5jZXM7CisKKwkJZmVuY2VfaW5mbyA9IGNhbGxvYyhudW1f ZmVuY2VzLCBzaXplb2YoKmZlbmNlX2luZm8pKTsKKwkJaWYgKCFmZW5jZV9pbmZvKSB7CisJCQlm cmVlKGluZm8pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpbmZvLT5zeW5jX2ZlbmNlX2lu Zm8gPSAodWludDY0X3QpKHVuc2lnbmVkIGxvbmcpIChmZW5jZV9pbmZvKTsKKworCQllcnIgPSBp b2N0bChmZCwgU1lOQ19JT0NfRklMRV9JTkZPLCBpbmZvKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJ CWZyZWUoZmVuY2VfaW5mbyk7CisJCQlmcmVlKGluZm8pOworCQkJcmV0dXJuIE5VTEw7CisJCX0K Kwl9CisKKwlyZXR1cm4gaW5mbzsKK30KKworc3RhdGljIHZvaWQgc3luY19maWxlX2luZm9fZnJl ZShzdHJ1Y3Qgc3luY19maWxlX2luZm8gKmluZm8pCit7CisJZnJlZSgodm9pZCAqKSh1aW50cHRy X3QpaW5mby0+c3luY19mZW5jZV9pbmZvKTsKKwlmcmVlKGluZm8pOworfQorCitpbnQgc3dfc3lu Y19mZW5jZV9zaXplKGludCBmZCkKK3sKKwlpbnQgY291bnQ7CisJc3RydWN0IHN5bmNfZmlsZV9p bmZvICppbmZvID0gc3luY19maWxlX2luZm8oZmQpOworCisJaWYgKCFpbmZvKQorCQlyZXR1cm4g MDsKKworCWNvdW50ID0gaW5mby0+bnVtX2ZlbmNlczsKKworCXN5bmNfZmlsZV9pbmZvX2ZyZWUo aW5mbyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK2ludCBzd19zeW5jX2ZlbmNlX2NvdW50X3N0 YXR1cyhpbnQgZmQsIGludCBzdGF0dXMpCit7CisJaW50IGksIGNvdW50ID0gMDsKKwlzdHJ1Y3Qg c3luY19mZW5jZV9pbmZvICpmZW5jZV9pbmZvID0gTlVMTDsKKwlzdHJ1Y3Qgc3luY19maWxlX2lu Zm8gKmluZm8gPSBzeW5jX2ZpbGVfaW5mbyhmZCk7CisKKwlpZiAoIWluZm8pCisJCXJldHVybiAt MTsKKworCWZlbmNlX2luZm8gPSAoc3RydWN0IHN5bmNfZmVuY2VfaW5mbyAqKSh1aW50cHRyX3Qp aW5mby0+c3luY19mZW5jZV9pbmZvOworCWZvciAoaSA9IDAgOyBpIDwgaW5mby0+bnVtX2ZlbmNl cyA7IGkrKykgeworCQlpZiAoZmVuY2VfaW5mb1tpXS5zdGF0dXMgPT0gc3RhdHVzKQorCQkJY291 bnQrKzsKKwl9CisKKwlzeW5jX2ZpbGVfaW5mb19mcmVlKGluZm8pOworCisJcmV0dXJuIGNvdW50 OworfQpkaWZmIC0tZ2l0IGEvbGliL3N3X3N5bmMuaCBiL2xpYi9zd19zeW5jLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5MjYwOAotLS0gL2Rldi9udWxsCisrKyBiL2xp Yi9zd19zeW5jLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIEdvb2ds ZSwgSW5jCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBDb2xsYWJvcmEsIEx0ZC4KKyAqCisgKiBCYXNl ZCBvbiB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9q ZWN0CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJl IGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisg KiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ U0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAq IEF1dGhvcnM6CisgKiAgICBSb2JlcnQgRm9zcyA8cm9iZXJ0LmZvc3NAY29sbGFib3JhLmNvbT4K KyAqLworCisjaWZuZGVmIFNXX1NZTkNfSAorI2RlZmluZSBTV19TWU5DX0gKKworI2RlZmluZSBT V19TWU5DX0ZFTkNFX1NUQVRVU19FUlJPUgkJKC0xKQorI2RlZmluZSBTV19TWU5DX0ZFTkNFX1NU QVRVU19BQ1RJVkUJCSgwKQorI2RlZmluZSBTV19TWU5DX0ZFTkNFX1NUQVRVU19TSUdOQUxFRAko MSkKKworaW50IHN3X3N5bmNfZmRfaXNfdmFsaWQoaW50IGZkKTsKK2ludCBzd19zeW5jX3RpbWVs aW5lX2NyZWF0ZSh2b2lkKTsKK3ZvaWQgc3dfc3luY190aW1lbGluZV9kZXN0cm95KGludCB0aW1l bGluZSk7Cit2b2lkIHN3X3N5bmNfZmVuY2VfZGVzdHJveShpbnQgZmVuY2UpOworaW50IHN3X3N5 bmNfZmVuY2VfY3JlYXRlKGludCBmZCwgaW50MzJfdCBzZXFubyk7Cit2b2lkIHN3X3N5bmNfdGlt ZWxpbmVfaW5jKGludCBmZCwgdWludDMyX3QgY291bnQpOworaW50IHN3X3N5bmNfbWVyZ2UoaW50 IGZkMSwgaW50IGZkMik7CitpbnQgc3dfc3luY193YWl0KGludCBmZW5jZSwgaW50IHRpbWVvdXQp OworaW50IHN3X3N5bmNfZmVuY2Vfc2l6ZShpbnQgZmQpOworaW50IHN3X3N5bmNfZmVuY2VfY291 bnRfc3RhdHVzKGludCBmZCwgaW50IHN0YXR1cyk7CisKKyNlbmRpZgorCi0tIAoyLjkuMwoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==