From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 29/39] drm/i915: Move GEM object waiting to its own file Date: Wed, 13 Mar 2019 14:43:51 +0000 Message-ID: <20190313144401.17735-29-chris@chris-wilson.co.uk> References: <20190313144401.17735-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 85C746E08F for ; Wed, 13 Mar 2019 14:45:05 +0000 (UTC) In-Reply-To: <20190313144401.17735-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 Q29udGludWluZyB0aGUgZGVjbHV0dGVyaW5nIG9mIGk5MTVfZ2VtLmMgYnkgbW92aW5nIHRoZSBv YmplY3Qgd2FpdApkZWNvbXBvc2l0aW9uIGludG8gaXRzIG93biBmaWxlLgoKU2lnbmVkLW9mZi1i eTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaCB8ICAgOCArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fd2FpdC5jICAgfCAyNzYgKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgfCAgMTcgLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICAgICB8IDI1NCAtLS0tLS0tLS0tLS0tLS0t LS0tCiA1IGZpbGVzIGNoYW5nZWQsIDI4NSBpbnNlcnRpb25zKCspLCAyNzEgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3dh aXQuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggODlmYjRlYWNhNGZiLi4yZTc4ZmJlNzkyODAg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC05MSw2ICs5MSw3IEBAIGk5MTUteSArPSBcCiAJICBn ZW0vaTkxNV9nZW1fc3RvbGVuLm8gXAogCSAgZ2VtL2k5MTVfZ2VtX3RpbGluZy5vIFwKIAkgIGdl bS9pOTE1X2dlbV91c2VycHRyLm8gXAorCSAgZ2VtL2k5MTVfZ2VtX3dhaXQubyBcCiAJICBnZW0v aTkxNV9nZW1mcy5vIFwKIAkgIGk5MTVfYWN0aXZlLm8gXAogCSAgaTkxNV9jbWRfcGFyc2VyLm8g XApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCmluZGV4IDA4MDE2 ZjFjOTUwNS4uZDIyOWE4ZDY3NWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fb2JqZWN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX29iamVjdC5oCkBAIC00MjcsNCArNDI3LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N0 YXJ0X2NwdV93cml0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCQlvYmotPmNh Y2hlX2RpcnR5ID0gdHJ1ZTsKIH0KIAoraW50IGk5MTVfZ2VtX29iamVjdF93YWl0KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJIGxv bmcgdGltZW91dCk7CitpbnQgaTkxNV9nZW1fb2JqZWN0X3dhaXRfcHJpb3JpdHkoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgIHVuc2lnbmVkIGludCBmbGFncywKKwkJCQkg IGNvbnN0IHN0cnVjdCBpOTE1X3NjaGVkX2F0dHIgKmF0dHIpOworI2RlZmluZSBJOTE1X1BSSU9S SVRZX0RJU1BMQVkgSTkxNV9VU0VSX1BSSU9SSVRZKEk5MTVfUFJJT1JJVFlfTUFYKQorCiAjZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV93YWl0LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fd2FpdC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTMwYTI0N2QyMWYyCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3dhaXQuYwpAQCAtMCwwICsxLDI3 NiBAQAorLyoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKyAqCisgKiBDb3B5cmln aHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWEt ZmVuY2UtYXJyYXkuaD4KKworI2luY2x1ZGUgImk5MTVfZ2VtX2lvY3Rscy5oIgorI2luY2x1ZGUg Imk5MTVfZ2VtX29iamVjdC5oIgorCisjaW5jbHVkZSAiLi4vaW50ZWxfcmluZ2J1ZmZlci5oIgor CitzdGF0aWMgbG9uZworaTkxNV9nZW1fb2JqZWN0X3dhaXRfZmVuY2Uoc3RydWN0IGRtYV9mZW5j ZSAqZmVuY2UsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgICBsb25nIHRpbWVvdXQp Cit7CisJQlVJTERfQlVHX09OKEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFICE9IDB4MSk7CisKKwlp ZiAodGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklULCAmZmVuY2UtPmZsYWdzKSkK KwkJcmV0dXJuIHRpbWVvdXQ7CisKKwlpZiAoZG1hX2ZlbmNlX2lzX2k5MTUoZmVuY2UpKQorCQly ZXR1cm4gaTkxNV9yZXF1ZXN0X3dhaXQodG9fcmVxdWVzdChmZW5jZSksIGZsYWdzLCB0aW1lb3V0 KTsKKworCXJldHVybiBkbWFfZmVuY2Vfd2FpdF90aW1lb3V0KGZlbmNlLAorCQkJCSAgICAgIGZs YWdzICYgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUsCisJCQkJICAgICAgdGltZW91dCk7Cit9CisK K3N0YXRpYyBsb25nCitpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZXNlcnZhdGlvbihzdHJ1Y3QgcmVz ZXJ2YXRpb25fb2JqZWN0ICpyZXN2LAorCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkJIGxv bmcgdGltZW91dCkKK3sKKwl1bnNpZ25lZCBpbnQgc2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2lu KCZyZXN2LT5zZXEpOworCXN0cnVjdCBkbWFfZmVuY2UgKmV4Y2w7CisJYm9vbCBwcnVuZV9mZW5j ZXMgPSBmYWxzZTsKKworCWlmIChmbGFncyAmIEk5MTVfV0FJVF9BTEwpIHsKKwkJc3RydWN0IGRt YV9mZW5jZSAqKnNoYXJlZDsKKwkJdW5zaWduZWQgaW50IGNvdW50LCBpOworCQlpbnQgcmV0Owor CisJCXJldCA9IHJlc2VydmF0aW9uX29iamVjdF9nZXRfZmVuY2VzX3JjdShyZXN2LAorCQkJCQkJ CSZleGNsLCAmY291bnQsICZzaGFyZWQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwor CQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJdGltZW91dCA9IGk5MTVfZ2VtX29i amVjdF93YWl0X2ZlbmNlKHNoYXJlZFtpXSwKKwkJCQkJCQkgICAgIGZsYWdzLCB0aW1lb3V0KTsK KwkJCWlmICh0aW1lb3V0IDwgMCkKKwkJCQlicmVhazsKKworCQkJZG1hX2ZlbmNlX3B1dChzaGFy ZWRbaV0pOworCQl9CisKKwkJZm9yICg7IGkgPCBjb3VudDsgaSsrKQorCQkJZG1hX2ZlbmNlX3B1 dChzaGFyZWRbaV0pOworCQlrZnJlZShzaGFyZWQpOworCisJCS8qCisJCSAqIElmIGJvdGggc2hh cmVkIGZlbmNlcyBhbmQgYW4gZXhjbHVzaXZlIGZlbmNlIGV4aXN0LAorCQkgKiB0aGVuIGJ5IGNv bnN0cnVjdGlvbiB0aGUgc2hhcmVkIGZlbmNlcyBtdXN0IGJlIGxhdGVyCisJCSAqIHRoYW4gdGhl IGV4Y2x1c2l2ZSBmZW5jZS4gSWYgd2Ugc3VjY2Vzc2Z1bGx5IHdhaXQgZm9yCisJCSAqIGFsbCB0 aGUgc2hhcmVkIGZlbmNlcywgd2Uga25vdyB0aGF0IHRoZSBleGNsdXNpdmUgZmVuY2UKKwkJICog bXVzdCBhbGwgYmUgc2lnbmFsZWQuIElmIGFsbCB0aGUgc2hhcmVkIGZlbmNlcyBhcmUKKwkJICog c2lnbmFsZWQsIHdlIGNhbiBwcnVuZSB0aGUgYXJyYXkgYW5kIHJlY292ZXIgdGhlCisJCSAqIGZs b2F0aW5nIHJlZmVyZW5jZXMgb24gdGhlIGZlbmNlcy9yZXF1ZXN0cy4KKwkJICovCisJCXBydW5l X2ZlbmNlcyA9IGNvdW50ICYmIHRpbWVvdXQgPj0gMDsKKwl9IGVsc2UgeworCQlleGNsID0gcmVz ZXJ2YXRpb25fb2JqZWN0X2dldF9leGNsX3JjdShyZXN2KTsKKwl9CisKKwlpZiAoZXhjbCAmJiB0 aW1lb3V0ID49IDApCisJCXRpbWVvdXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9mZW5jZShleGNs LCBmbGFncywgdGltZW91dCk7CisKKwlkbWFfZmVuY2VfcHV0KGV4Y2wpOworCisJLyoKKwkgKiBP cHBvcnR1bmlzdGljYWxseSBwcnVuZSB0aGUgZmVuY2VzIGlmZiB3ZSBrbm93IHRoZXkgaGF2ZSAq YWxsKiBiZWVuCisJICogc2lnbmFsZWQgYW5kIHRoYXQgdGhlIHJlc2VydmF0aW9uIG9iamVjdCBo YXMgbm90IGJlZW4gY2hhbmdlZCAoaS5lLgorCSAqIG5vIG5ldyBmZW5jZXMgaGF2ZSBiZWVuIGFk ZGVkKS4KKwkgKi8KKwlpZiAocHJ1bmVfZmVuY2VzICYmICFfX3JlYWRfc2VxY291bnRfcmV0cnko JnJlc3YtPnNlcSwgc2VxKSkgeworCQlpZiAocmVzZXJ2YXRpb25fb2JqZWN0X3RyeWxvY2socmVz dikpIHsKKwkJCWlmICghX19yZWFkX3NlcWNvdW50X3JldHJ5KCZyZXN2LT5zZXEsIHNlcSkpCisJ CQkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9leGNsX2ZlbmNlKHJlc3YsIE5VTEwpOworCQkJcmVz ZXJ2YXRpb25fb2JqZWN0X3VubG9jayhyZXN2KTsKKwkJfQorCX0KKworCXJldHVybiB0aW1lb3V0 OworfQorCitzdGF0aWMgdm9pZCBfX2ZlbmNlX3NldF9wcmlvcml0eShzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZSwKKwkJCQkgY29uc3Qgc3RydWN0IGk5MTVfc2NoZWRfYXR0ciAqYXR0cikKK3sKKwlz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7 CisKKwlpZiAoZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGZlbmNlKSB8fCAhZG1hX2ZlbmNlX2lzX2k5 MTUoZmVuY2UpKQorCQlyZXR1cm47CisKKwlycSA9IHRvX3JlcXVlc3QoZmVuY2UpOworCWVuZ2lu ZSA9IHJxLT5lbmdpbmU7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJcmN1X3JlYWRfbG9jaygp OyAvKiBSQ1Ugc2VyaWFsaXNhdGlvbiBmb3Igc2V0LXdlZGdlZCBwcm90ZWN0aW9uICovCisJaWYg KGVuZ2luZS0+c2NoZWR1bGUpCisJCWVuZ2luZS0+c2NoZWR1bGUocnEsIGF0dHIpOworCXJjdV9y ZWFkX3VubG9jaygpOworCWxvY2FsX2JoX2VuYWJsZSgpOyAvKiBraWNrIHRoZSB0YXNrbGV0cyBp ZiBxdWV1ZXMgd2VyZSByZXByaW9yaXRpc2VkICovCit9CisKK3N0YXRpYyB2b2lkIGZlbmNlX3Nl dF9wcmlvcml0eShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgaTkxNV9zY2hlZF9hdHRyICphdHRyKQoreworCS8qIFJlY3Vyc2Ugb25jZSBpbnRvIGEgZmVu Y2UtYXJyYXkgKi8KKwlpZiAoZG1hX2ZlbmNlX2lzX2FycmF5KGZlbmNlKSkgeworCQlzdHJ1Y3Qg ZG1hX2ZlbmNlX2FycmF5ICphcnJheSA9IHRvX2RtYV9mZW5jZV9hcnJheShmZW5jZSk7CisJCWlu dCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnVtX2ZlbmNlczsgaSsrKQorCQkJX19m ZW5jZV9zZXRfcHJpb3JpdHkoYXJyYXktPmZlbmNlc1tpXSwgYXR0cik7CisJfSBlbHNlIHsKKwkJ X19mZW5jZV9zZXRfcHJpb3JpdHkoZmVuY2UsIGF0dHIpOworCX0KK30KKworaW50CitpOTE1X2dl bV9vYmplY3Rfd2FpdF9wcmlvcml0eShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAor CQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGk5MTVf c2NoZWRfYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpleGNsOworCisJaWYgKGZs YWdzICYgSTkxNV9XQUlUX0FMTCkgeworCQlzdHJ1Y3QgZG1hX2ZlbmNlICoqc2hhcmVkOworCQl1 bnNpZ25lZCBpbnQgY291bnQsIGk7CisJCWludCByZXQ7CisKKwkJcmV0ID0gcmVzZXJ2YXRpb25f b2JqZWN0X2dldF9mZW5jZXNfcmN1KG9iai0+cmVzdiwKKwkJCQkJCQkmZXhjbCwgJmNvdW50LCAm c2hhcmVkKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJZm9yIChpID0gMDsgaSA8 IGNvdW50OyBpKyspIHsKKwkJCWZlbmNlX3NldF9wcmlvcml0eShzaGFyZWRbaV0sIGF0dHIpOwor CQkJZG1hX2ZlbmNlX3B1dChzaGFyZWRbaV0pOworCQl9CisKKwkJa2ZyZWUoc2hhcmVkKTsKKwl9 IGVsc2UgeworCQlleGNsID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9leGNsX3JjdShvYmotPnJl c3YpOworCX0KKworCWlmIChleGNsKSB7CisJCWZlbmNlX3NldF9wcmlvcml0eShleGNsLCBhdHRy KTsKKwkJZG1hX2ZlbmNlX3B1dChleGNsKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICog V2FpdHMgZm9yIHJlbmRlcmluZyB0byB0aGUgb2JqZWN0IHRvIGJlIGNvbXBsZXRlZAorICogQG9i ajogaTkxNSBnZW0gb2JqZWN0CisgKiBAZmxhZ3M6IGhvdyB0byB3YWl0ICh1bmRlciBhIGxvY2ss IGZvciBhbGwgcmVuZGVyaW5nIG9yIGp1c3QgZm9yIHdyaXRlcyBldGMpCisgKiBAdGltZW91dDog aG93IGxvbmcgdG8gd2FpdAorICovCitpbnQKK2k5MTVfZ2VtX29iamVjdF93YWl0KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkg ICAgIGxvbmcgdGltZW91dCkKK3sKKwltaWdodF9zbGVlcCgpOworCUdFTV9CVUdfT04odGltZW91 dCA8IDApOworCisJdGltZW91dCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3Jlc2VydmF0aW9uKG9i ai0+cmVzdiwgZmxhZ3MsIHRpbWVvdXQpOworCXJldHVybiB0aW1lb3V0IDwgMCA/IHRpbWVvdXQg OiAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbnNlY3NfdG9famlmZmllc190 aW1lb3V0KGNvbnN0IHU2NCBuKQoreworCS8qIG5zZWNzX3RvX2ppZmZpZXM2NCgpIGRvZXMgbm90 IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cgKi8KKwlpZiAoTlNFQ19QRVJfU0VDICUgSFogJiYKKwkg ICAgZGl2X3U2NChuLCBOU0VDX1BFUl9TRUMpID49IE1BWF9KSUZGWV9PRkZTRVQgLyBIWikKKwkJ cmV0dXJuIE1BWF9KSUZGWV9PRkZTRVQ7CisKKwlyZXR1cm4gbWluX3QodTY0LCBNQVhfSklGRllf T0ZGU0VULCBuc2Vjc190b19qaWZmaWVzNjQobikgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVk IGxvbmcgdG9fd2FpdF90aW1lb3V0KHM2NCB0aW1lb3V0X25zKQoreworCWlmICh0aW1lb3V0X25z IDwgMCkKKwkJcmV0dXJuIE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCisJaWYgKHRpbWVvdXRfbnMg PT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbnNlY3NfdG9famlmZmllc190aW1lb3V0KHRp bWVvdXRfbnMpOworfQorCisvKioKKyAqIGk5MTVfZ2VtX3dhaXRfaW9jdGwgLSBpbXBsZW1lbnRz IERSTV9JT0NUTF9JOTE1X0dFTV9XQUlUCisgKiBAZGV2OiBkcm0gZGV2aWNlIHBvaW50ZXIKKyAq IEBkYXRhOiBpb2N0bCBkYXRhIGJsb2IKKyAqIEBmaWxlOiBkcm0gZmlsZSBwb2ludGVyCisgKgor ICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIGVsc2UgYW4gZXJyb3IgaXMgcmV0dXJuZWQgd2l0 aCB0aGUgcmVtYWluaW5nIHRpbWUgaW4KKyAqIHRoZSB0aW1lb3V0IHBhcmFtZXRlci4KKyAqICAt RVRJTUU6IG9iamVjdCBpcyBzdGlsbCBidXN5IGFmdGVyIHRpbWVvdXQKKyAqICAtRVJFU1RBUlRT WVM6IHNpZ25hbCBpbnRlcnJ1cHRlZCB0aGUgd2FpdAorICogIC1FTk9ORU5UOiBvYmplY3QgZG9l c24ndCBleGlzdAorICogQWxzbyBwb3NzaWJsZSwgYnV0IHJhcmU6CisgKiAgLUVBR0FJTjogaW5j b21wbGV0ZSwgcmVzdGFydCBzeXNjYWxsCisgKiAgLUVOT01FTTogZGFtbgorICogIC1FTk9ERVY6 IEludGVybmFsIElSUSBmYWlsCisgKiAgLUU/OiBUaGUgYWRkIHJlcXVlc3QgZmFpbGVkCisgKgor ICogVGhlIHdhaXQgaW9jdGwgd2l0aCBhIHRpbWVvdXQgb2YgMCByZWltcGxlbWVudHMgdGhlIGJ1 c3kgaW9jdGwuIFdpdGggYW55CisgKiBub24temVybyB0aW1lb3V0IHBhcmFtZXRlciB0aGUgd2Fp dCBpb2N0bCB3aWxsIHdhaXQgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YKKyAqIG5hbm9zZWNvbmRz IG9uIGFuIG9iamVjdCBiZWNvbWluZyB1bmJ1c3kuIFNpbmNlIHRoZSB3YWl0IGl0c2VsZiBkb2Vz IHNvCisgKiB3aXRob3V0IGhvbGRpbmcgc3RydWN0X211dGV4IHRoZSBvYmplY3QgbWF5IGJlY29t ZSByZS1idXNpZWQgYmVmb3JlIHRoaXMKKyAqIGZ1bmN0aW9uIGNvbXBsZXRlcy4gQSBzaW1pbGFy IGJ1dCBzaG9ydGVyICogcmFjZSBjb25kaXRpb24gZXhpc3RzIGluIHRoZSBidXN5CisgKiBpb2N0 bAorICovCitpbnQKK2k5MTVfZ2VtX3dhaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1faTkxNV9n ZW1fd2FpdCAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsK KwlrdGltZV90IHN0YXJ0OworCWxvbmcgcmV0OworCisJaWYgKGFyZ3MtPmZsYWdzICE9IDApCisJ CXJldHVybiAtRUlOVkFMOworCisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlLCBh cmdzLT5ib19oYW5kbGUpOworCWlmICghb2JqKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXN0YXJ0 ID0ga3RpbWVfZ2V0KCk7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdChvYmosCisJCQkJ ICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUgfAorCQkJCSAgIEk5MTVfV0FJVF9QUklPUklUWSB8 CisJCQkJICAgSTkxNV9XQUlUX0FMTCwKKwkJCQkgICB0b193YWl0X3RpbWVvdXQoYXJncy0+dGlt ZW91dF9ucykpOworCisJaWYgKGFyZ3MtPnRpbWVvdXRfbnMgPiAwKSB7CisJCWFyZ3MtPnRpbWVv dXRfbnMgLT0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKGt0aW1lX2dldCgpLCBzdGFydCkpOworCQlp ZiAoYXJncy0+dGltZW91dF9ucyA8IDApCisJCQlhcmdzLT50aW1lb3V0X25zID0gMDsKKworCQkv KgorCQkgKiBBcHBhcmVudGx5IGt0aW1lIGlzbid0IGFjY3VyYXRlIGVub3VnaCBhbmQgb2NjYXNp b25hbGx5IGhhcyBhCisJCSAqIGJpdCBvZiBtaXNtYXRjaCBpbiB0aGUgamlmZmllczwtPm5zZWNz PC0+a3RpbWUgbG9vcC4gU28gcGF0Y2gKKwkJICogdGhpbmdzIHVwIHRvIG1ha2UgdGhlIHRlc3Qg aGFwcHkuIFdlIGFsbG93IHVwIHRvIDEgamlmZnkuCisJCSAqCisJCSAqIFRoaXMgaXMgYSByZWdy ZXNzaW9uIGZyb20gdGhlIHRpbWVzcGVjLT5rdGltZSBjb252ZXJzaW9uLgorCQkgKi8KKwkJaWYg KHJldCA9PSAtRVRJTUUgJiYgIW5zZWNzX3RvX2ppZmZpZXMoYXJncy0+dGltZW91dF9ucykpCisJ CQlhcmdzLT50aW1lb3V0X25zID0gMDsKKworCQkvKiBBc2tlZCB0byB3YWl0IGJleW9uZCB0aGUg amlmZmllL3NjaGVkdWxlciBwcmVjaXNpb24/ICovCisJCWlmIChyZXQgPT0gLUVUSU1FICYmIGFy Z3MtPnRpbWVvdXRfbnMpCisJCQlyZXQgPSAtRUFHQUlOOworCX0KKworCWk5MTVfZ2VtX29iamVj dF9wdXQob2JqKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXgg ZTgzNzI3ZDgyYjMxLi5lZmI5NmI0YTU1MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAt MjczNywxMyArMjczNyw2IEBAIHZvaWQgaTkxNV9nZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpOTE1X2dlbV9zdXNwZW5kX2xhdGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZW1fcmVzdW1lKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2bV9mYXVsdF90IGk5MTVfZ2VtX2ZhdWx0KHN0 cnVjdCB2bV9mYXVsdCAqdm1mKTsKLWludCBpOTE1X2dlbV9vYmplY3Rfd2FpdChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJIHVuc2lnbmVkIGludCBmbGFncywKLQkJCSBsb25n IHRpbWVvdXQpOwotaW50IGk5MTVfZ2VtX29iamVjdF93YWl0X3ByaW9yaXR5KHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCQkJICBj b25zdCBzdHJ1Y3QgaTkxNV9zY2hlZF9hdHRyICphdHRyKTsKLSNkZWZpbmUgSTkxNV9QUklPUklU WV9ESVNQTEFZIEk5MTVfVVNFUl9QUklPUklUWShJOTE1X1BSSU9SSVRZX01BWCkKIAogaW50IGk5 MTVfZ2VtX29wZW4oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSk7CiB2b2lkIGk5MTVfZ2VtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9maWxlICpmaWxlKTsKQEAgLTMyMzksMTYgKzMyMzIsNiBAQCBzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGxvbmcgbXNlY3NfdG9famlmZmllc190aW1lb3V0KGNvbnN0IHVuc2lnbmVk IGludCBtKQogCXJldHVybiBtaW5fdCh1bnNpZ25lZCBsb25nLCBNQVhfSklGRllfT0ZGU0VULCBq ICsgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuc2Vjc190b19qaWZmaWVz X3RpbWVvdXQoY29uc3QgdTY0IG4pCi17Ci0JLyogbnNlY3NfdG9famlmZmllczY0KCkgZG9lcyBu b3QgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdyAqLwotCWlmIChOU0VDX1BFUl9TRUMgJSBIWiAmJgot CSAgICBkaXZfdTY0KG4sIE5TRUNfUEVSX1NFQykgPj0gTUFYX0pJRkZZX09GRlNFVCAvIEhaKQot CQlyZXR1cm4gTUFYX0pJRkZZX09GRlNFVDsKLQotICAgICAgICByZXR1cm4gbWluX3QodTY0LCBN QVhfSklGRllfT0ZGU0VULCBuc2Vjc190b19qaWZmaWVzNjQobikgKyAxKTsKLX0KLQogLyoKICAq IElmIHlvdSBuZWVkIHRvIHdhaXQgWCBtaWxsaXNlY29uZHMgYmV0d2VlbiBldmVudHMgQSBhbmQg QiwgYnV0IGV2ZW50IEIKICAqIGRvZXNuJ3QgaGFwcGVuIGV4YWN0bHkgYWZ0ZXIgZXZlbnQgQSwg eW91IHJlY29yZCB0aGUgdGltZXN0YW1wIChqaWZmaWVzKSBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKaW5kZXggYTM2MTYyYmE2YTBlLi45YzRmMTc1N2ZjMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYwpAQCAtMjIwLDE3OCArMjIwLDYgQEAgaW50IGk5MTVfZ2VtX29iamVjdF91bmJpbmQoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMg bG9uZwotaTkxNV9nZW1fb2JqZWN0X3dhaXRfZmVuY2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2Us Ci0JCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCQkgICBsb25nIHRpbWVvdXQpCi17Ci0JQlVJ TERfQlVHX09OKEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFICE9IDB4MSk7Ci0KLQlpZiAodGVzdF9i aXQoRE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklULCAmZmVuY2UtPmZsYWdzKSkKLQkJcmV0dXJu IHRpbWVvdXQ7Ci0KLQlpZiAoZG1hX2ZlbmNlX2lzX2k5MTUoZmVuY2UpKQotCQlyZXR1cm4gaTkx NV9yZXF1ZXN0X3dhaXQodG9fcmVxdWVzdChmZW5jZSksIGZsYWdzLCB0aW1lb3V0KTsKLQotCXJl dHVybiBkbWFfZmVuY2Vfd2FpdF90aW1lb3V0KGZlbmNlLAotCQkJCSAgICAgIGZsYWdzICYgSTkx NV9XQUlUX0lOVEVSUlVQVElCTEUsCi0JCQkJICAgICAgdGltZW91dCk7Ci19Ci0KLXN0YXRpYyBs b25nCi1pOTE1X2dlbV9vYmplY3Rfd2FpdF9yZXNlcnZhdGlvbihzdHJ1Y3QgcmVzZXJ2YXRpb25f b2JqZWN0ICpyZXN2LAotCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCQkJIGxvbmcgdGltZW91 dCkKLXsKLQl1bnNpZ25lZCBpbnQgc2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKCZyZXN2LT5z ZXEpOwotCXN0cnVjdCBkbWFfZmVuY2UgKmV4Y2w7Ci0JYm9vbCBwcnVuZV9mZW5jZXMgPSBmYWxz ZTsKLQotCWlmIChmbGFncyAmIEk5MTVfV0FJVF9BTEwpIHsKLQkJc3RydWN0IGRtYV9mZW5jZSAq KnNoYXJlZDsKLQkJdW5zaWduZWQgaW50IGNvdW50LCBpOwotCQlpbnQgcmV0OwotCi0JCXJldCA9 IHJlc2VydmF0aW9uX29iamVjdF9nZXRfZmVuY2VzX3JjdShyZXN2LAotCQkJCQkJCSZleGNsLCAm Y291bnQsICZzaGFyZWQpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQlmb3IgKGkg PSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJdGltZW91dCA9IGk5MTVfZ2VtX29iamVjdF93YWl0 X2ZlbmNlKHNoYXJlZFtpXSwKLQkJCQkJCQkgICAgIGZsYWdzLCB0aW1lb3V0KTsKLQkJCWlmICh0 aW1lb3V0IDwgMCkKLQkJCQlicmVhazsKLQotCQkJZG1hX2ZlbmNlX3B1dChzaGFyZWRbaV0pOwot CQl9Ci0KLQkJZm9yICg7IGkgPCBjb3VudDsgaSsrKQotCQkJZG1hX2ZlbmNlX3B1dChzaGFyZWRb aV0pOwotCQlrZnJlZShzaGFyZWQpOwotCi0JCS8qCi0JCSAqIElmIGJvdGggc2hhcmVkIGZlbmNl cyBhbmQgYW4gZXhjbHVzaXZlIGZlbmNlIGV4aXN0LAotCQkgKiB0aGVuIGJ5IGNvbnN0cnVjdGlv biB0aGUgc2hhcmVkIGZlbmNlcyBtdXN0IGJlIGxhdGVyCi0JCSAqIHRoYW4gdGhlIGV4Y2x1c2l2 ZSBmZW5jZS4gSWYgd2Ugc3VjY2Vzc2Z1bGx5IHdhaXQgZm9yCi0JCSAqIGFsbCB0aGUgc2hhcmVk IGZlbmNlcywgd2Uga25vdyB0aGF0IHRoZSBleGNsdXNpdmUgZmVuY2UKLQkJICogbXVzdCBhbGwg YmUgc2lnbmFsZWQuIElmIGFsbCB0aGUgc2hhcmVkIGZlbmNlcyBhcmUKLQkJICogc2lnbmFsZWQs IHdlIGNhbiBwcnVuZSB0aGUgYXJyYXkgYW5kIHJlY292ZXIgdGhlCi0JCSAqIGZsb2F0aW5nIHJl ZmVyZW5jZXMgb24gdGhlIGZlbmNlcy9yZXF1ZXN0cy4KLQkJICovCi0JCXBydW5lX2ZlbmNlcyA9 IGNvdW50ICYmIHRpbWVvdXQgPj0gMDsKLQl9IGVsc2UgewotCQlleGNsID0gcmVzZXJ2YXRpb25f b2JqZWN0X2dldF9leGNsX3JjdShyZXN2KTsKLQl9Ci0KLQlpZiAoZXhjbCAmJiB0aW1lb3V0ID49 IDApCi0JCXRpbWVvdXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9mZW5jZShleGNsLCBmbGFncywg dGltZW91dCk7Ci0KLQlkbWFfZmVuY2VfcHV0KGV4Y2wpOwotCi0JLyoKLQkgKiBPcHBvcnR1bmlz dGljYWxseSBwcnVuZSB0aGUgZmVuY2VzIGlmZiB3ZSBrbm93IHRoZXkgaGF2ZSAqYWxsKiBiZWVu Ci0JICogc2lnbmFsZWQgYW5kIHRoYXQgdGhlIHJlc2VydmF0aW9uIG9iamVjdCBoYXMgbm90IGJl ZW4gY2hhbmdlZCAoaS5lLgotCSAqIG5vIG5ldyBmZW5jZXMgaGF2ZSBiZWVuIGFkZGVkKS4KLQkg Ki8KLQlpZiAocHJ1bmVfZmVuY2VzICYmICFfX3JlYWRfc2VxY291bnRfcmV0cnkoJnJlc3YtPnNl cSwgc2VxKSkgewotCQlpZiAocmVzZXJ2YXRpb25fb2JqZWN0X3RyeWxvY2socmVzdikpIHsKLQkJ CWlmICghX19yZWFkX3NlcWNvdW50X3JldHJ5KCZyZXN2LT5zZXEsIHNlcSkpCi0JCQkJcmVzZXJ2 YXRpb25fb2JqZWN0X2FkZF9leGNsX2ZlbmNlKHJlc3YsIE5VTEwpOwotCQkJcmVzZXJ2YXRpb25f b2JqZWN0X3VubG9jayhyZXN2KTsKLQkJfQotCX0KLQotCXJldHVybiB0aW1lb3V0OwotfQotCi1z dGF0aWMgdm9pZCBfX2ZlbmNlX3NldF9wcmlvcml0eShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwK LQkJCQkgY29uc3Qgc3RydWN0IGk5MTVfc2NoZWRfYXR0ciAqYXR0cikKLXsKLQlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycTsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Ci0KLQlpZiAo ZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGZlbmNlKSB8fCAhZG1hX2ZlbmNlX2lzX2k5MTUoZmVuY2Up KQotCQlyZXR1cm47Ci0KLQlycSA9IHRvX3JlcXVlc3QoZmVuY2UpOwotCWVuZ2luZSA9IHJxLT5l bmdpbmU7Ci0KLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JcmN1X3JlYWRfbG9jaygpOyAvKiBSQ1Ug c2VyaWFsaXNhdGlvbiBmb3Igc2V0LXdlZGdlZCBwcm90ZWN0aW9uICovCi0JaWYgKGVuZ2luZS0+ c2NoZWR1bGUpCi0JCWVuZ2luZS0+c2NoZWR1bGUocnEsIGF0dHIpOwotCXJjdV9yZWFkX3VubG9j aygpOwotCWxvY2FsX2JoX2VuYWJsZSgpOyAvKiBraWNrIHRoZSB0YXNrbGV0cyBpZiBxdWV1ZXMg d2VyZSByZXByaW9yaXRpc2VkICovCi19Ci0KLXN0YXRpYyB2b2lkIGZlbmNlX3NldF9wcmlvcml0 eShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9z Y2hlZF9hdHRyICphdHRyKQotewotCS8qIFJlY3Vyc2Ugb25jZSBpbnRvIGEgZmVuY2UtYXJyYXkg Ki8KLQlpZiAoZG1hX2ZlbmNlX2lzX2FycmF5KGZlbmNlKSkgewotCQlzdHJ1Y3QgZG1hX2ZlbmNl X2FycmF5ICphcnJheSA9IHRvX2RtYV9mZW5jZV9hcnJheShmZW5jZSk7Ci0JCWludCBpOwotCi0J CWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnVtX2ZlbmNlczsgaSsrKQotCQkJX19mZW5jZV9zZXRf cHJpb3JpdHkoYXJyYXktPmZlbmNlc1tpXSwgYXR0cik7Ci0JfSBlbHNlIHsKLQkJX19mZW5jZV9z ZXRfcHJpb3JpdHkoZmVuY2UsIGF0dHIpOwotCX0KLX0KLQotaW50Ci1pOTE1X2dlbV9vYmplY3Rf d2FpdF9wcmlvcml0eShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJICAgICAg dW5zaWduZWQgaW50IGZsYWdzLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGk5MTVfc2NoZWRfYXR0 ciAqYXR0cikKLXsKLQlzdHJ1Y3QgZG1hX2ZlbmNlICpleGNsOwotCi0JaWYgKGZsYWdzICYgSTkx NV9XQUlUX0FMTCkgewotCQlzdHJ1Y3QgZG1hX2ZlbmNlICoqc2hhcmVkOwotCQl1bnNpZ25lZCBp bnQgY291bnQsIGk7Ci0JCWludCByZXQ7Ci0KLQkJcmV0ID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dl dF9mZW5jZXNfcmN1KG9iai0+cmVzdiwKLQkJCQkJCQkmZXhjbCwgJmNvdW50LCAmc2hhcmVkKTsK LQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBp KyspIHsKLQkJCWZlbmNlX3NldF9wcmlvcml0eShzaGFyZWRbaV0sIGF0dHIpOwotCQkJZG1hX2Zl bmNlX3B1dChzaGFyZWRbaV0pOwotCQl9Ci0KLQkJa2ZyZWUoc2hhcmVkKTsKLQl9IGVsc2Ugewot CQlleGNsID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9leGNsX3JjdShvYmotPnJlc3YpOwotCX0K LQotCWlmIChleGNsKSB7Ci0JCWZlbmNlX3NldF9wcmlvcml0eShleGNsLCBhdHRyKTsKLQkJZG1h X2ZlbmNlX3B1dChleGNsKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogV2FpdHMgZm9y IHJlbmRlcmluZyB0byB0aGUgb2JqZWN0IHRvIGJlIGNvbXBsZXRlZAotICogQG9iajogaTkxNSBn ZW0gb2JqZWN0Ci0gKiBAZmxhZ3M6IGhvdyB0byB3YWl0ICh1bmRlciBhIGxvY2ssIGZvciBhbGwg cmVuZGVyaW5nIG9yIGp1c3QgZm9yIHdyaXRlcyBldGMpCi0gKiBAdGltZW91dDogaG93IGxvbmcg dG8gd2FpdAotICovCi1pbnQKLWk5MTVfZ2VtX29iamVjdF93YWl0KHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCi0JCSAgICAgdW5zaWduZWQgaW50IGZsYWdzLAotCQkgICAgIGxvbmcg dGltZW91dCkKLXsKLQltaWdodF9zbGVlcCgpOwotCUdFTV9CVUdfT04odGltZW91dCA8IDApOwot Ci0JdGltZW91dCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3Jlc2VydmF0aW9uKG9iai0+cmVzdiwg ZmxhZ3MsIHRpbWVvdXQpOwotCXJldHVybiB0aW1lb3V0IDwgMCA/IHRpbWVvdXQgOiAwOwotfQot CiBzdGF0aWMgaW50CiBpOTE1X2dlbV9waHlzX3B3cml0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAogCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLApAQCAt MTI5NCw4OCArMTEyMiw2IEBAIGk5MTVfZ2VtX2lkbGVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRvX3dhaXRfdGlt ZW91dChzNjQgdGltZW91dF9ucykKLXsKLQlpZiAodGltZW91dF9ucyA8IDApCi0JCXJldHVybiBN QVhfU0NIRURVTEVfVElNRU9VVDsKLQotCWlmICh0aW1lb3V0X25zID09IDApCi0JCXJldHVybiAw OwotCi0JcmV0dXJuIG5zZWNzX3RvX2ppZmZpZXNfdGltZW91dCh0aW1lb3V0X25zKTsKLX0KLQot LyoqCi0gKiBpOTE1X2dlbV93YWl0X2lvY3RsIC0gaW1wbGVtZW50cyBEUk1fSU9DVExfSTkxNV9H RU1fV0FJVAotICogQGRldjogZHJtIGRldmljZSBwb2ludGVyCi0gKiBAZGF0YTogaW9jdGwgZGF0 YSBibG9iCi0gKiBAZmlsZTogZHJtIGZpbGUgcG9pbnRlcgotICoKLSAqIFJldHVybnMgMCBpZiBz dWNjZXNzZnVsLCBlbHNlIGFuIGVycm9yIGlzIHJldHVybmVkIHdpdGggdGhlIHJlbWFpbmluZyB0 aW1lIGluCi0gKiB0aGUgdGltZW91dCBwYXJhbWV0ZXIuCi0gKiAgLUVUSU1FOiBvYmplY3QgaXMg c3RpbGwgYnVzeSBhZnRlciB0aW1lb3V0Ci0gKiAgLUVSRVNUQVJUU1lTOiBzaWduYWwgaW50ZXJy dXB0ZWQgdGhlIHdhaXQKLSAqICAtRU5PTkVOVDogb2JqZWN0IGRvZXNuJ3QgZXhpc3QKLSAqIEFs c28gcG9zc2libGUsIGJ1dCByYXJlOgotICogIC1FQUdBSU46IGluY29tcGxldGUsIHJlc3RhcnQg c3lzY2FsbAotICogIC1FTk9NRU06IGRhbW4KLSAqICAtRU5PREVWOiBJbnRlcm5hbCBJUlEgZmFp bAotICogIC1FPzogVGhlIGFkZCByZXF1ZXN0IGZhaWxlZAotICoKLSAqIFRoZSB3YWl0IGlvY3Rs IHdpdGggYSB0aW1lb3V0IG9mIDAgcmVpbXBsZW1lbnRzIHRoZSBidXN5IGlvY3RsLiBXaXRoIGFu eQotICogbm9uLXplcm8gdGltZW91dCBwYXJhbWV0ZXIgdGhlIHdhaXQgaW9jdGwgd2lsbCB3YWl0 IGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mCi0gKiBuYW5vc2Vjb25kcyBvbiBhbiBvYmplY3QgYmVj b21pbmcgdW5idXN5LiBTaW5jZSB0aGUgd2FpdCBpdHNlbGYgZG9lcyBzbwotICogd2l0aG91dCBo b2xkaW5nIHN0cnVjdF9tdXRleCB0aGUgb2JqZWN0IG1heSBiZWNvbWUgcmUtYnVzaWVkIGJlZm9y ZSB0aGlzCi0gKiBmdW5jdGlvbiBjb21wbGV0ZXMuIEEgc2ltaWxhciBidXQgc2hvcnRlciAqIHJh Y2UgY29uZGl0aW9uIGV4aXN0cyBpbiB0aGUgYnVzeQotICogaW9jdGwKLSAqLwotaW50Ci1pOTE1 X2dlbV93YWl0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3dhaXQgKmFyZ3MgPSBk YXRhOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0Ja3RpbWVfdCBzdGFydDsK LQlsb25nIHJldDsKLQotCWlmIChhcmdzLT5mbGFncyAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsK LQotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9sb29rdXAoZmlsZSwgYXJncy0+Ym9faGFuZGxlKTsK LQlpZiAoIW9iaikKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlzdGFydCA9IGt0aW1lX2dldCgpOwot Ci0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXQob2JqLAotCQkJCSAgIEk5MTVfV0FJVF9JTlRF UlJVUFRJQkxFIHwKLQkJCQkgICBJOTE1X1dBSVRfUFJJT1JJVFkgfAotCQkJCSAgIEk5MTVfV0FJ VF9BTEwsCi0JCQkJICAgdG9fd2FpdF90aW1lb3V0KGFyZ3MtPnRpbWVvdXRfbnMpKTsKLQotCWlm IChhcmdzLT50aW1lb3V0X25zID4gMCkgewotCQlhcmdzLT50aW1lb3V0X25zIC09IGt0aW1lX3Rv X25zKGt0aW1lX3N1YihrdGltZV9nZXQoKSwgc3RhcnQpKTsKLQkJaWYgKGFyZ3MtPnRpbWVvdXRf bnMgPCAwKQotCQkJYXJncy0+dGltZW91dF9ucyA9IDA7Ci0KLQkJLyoKLQkJICogQXBwYXJlbnRs eSBrdGltZSBpc24ndCBhY2N1cmF0ZSBlbm91Z2ggYW5kIG9jY2FzaW9uYWxseSBoYXMgYQotCQkg KiBiaXQgb2YgbWlzbWF0Y2ggaW4gdGhlIGppZmZpZXM8LT5uc2VjczwtPmt0aW1lIGxvb3AuIFNv IHBhdGNoCi0JCSAqIHRoaW5ncyB1cCB0byBtYWtlIHRoZSB0ZXN0IGhhcHB5LiBXZSBhbGxvdyB1 cCB0byAxIGppZmZ5LgotCQkgKgotCQkgKiBUaGlzIGlzIGEgcmVncmVzc2lvbiBmcm9tIHRoZSB0 aW1lc3BlYy0+a3RpbWUgY29udmVyc2lvbi4KLQkJICovCi0JCWlmIChyZXQgPT0gLUVUSU1FICYm ICFuc2Vjc190b19qaWZmaWVzKGFyZ3MtPnRpbWVvdXRfbnMpKQotCQkJYXJncy0+dGltZW91dF9u cyA9IDA7Ci0KLQkJLyogQXNrZWQgdG8gd2FpdCBiZXlvbmQgdGhlIGppZmZpZS9zY2hlZHVsZXIg cHJlY2lzaW9uPyAqLwotCQlpZiAocmV0ID09IC1FVElNRSAmJiBhcmdzLT50aW1lb3V0X25zKQot CQkJcmV0ID0gLUVBR0FJTjsKLQl9Ci0KLQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Ci0JcmV0 dXJuIHJldDsKLX0KLQogc3RhdGljIGludCB3YWl0X2Zvcl9lbmdpbmVzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KQogewogCWlmICh3YWl0X2ZvcihpbnRlbF9lbmdpbmVzX2FyZV9pZGxl KGk5MTUpLCBJOTE1X0lETEVfRU5HSU5FU19USU1FT1VUKSkgewotLSAKMi4yMC4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=