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.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, 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 352D0C433E2 for ; Sun, 7 Jun 2020 22:21:36 +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 132DF206D5 for ; Sun, 7 Jun 2020 22:21:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 132DF206D5 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 67DBF6E213; Sun, 7 Jun 2020 22:21:28 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 744DA6E42F for ; Sun, 7 Jun 2020 22:21:24 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from build.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 21425602-1500050 for multiple; Sun, 07 Jun 2020 23:21:12 +0100 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Sun, 7 Jun 2020 23:20:54 +0100 Message-Id: <20200607222108.14401-14-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200607222108.14401-1-chris@chris-wilson.co.uk> References: <20200607222108.14401-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 14/28] dma-buf: Proxy fence, an unsignaled fence placeholder X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chris Wilson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T2Z0ZW4gd2UgbmVlZCB0byBjcmVhdGUgYSBmZW5jZSBmb3IgYSBmdXR1cmUgZXZlbnQgdGhhdCBo YXMgbm90IHlldCBiZWVuCmFzc29jaWF0ZWQgd2l0aCBhIGZlbmNlLiBXZSBjYW4gc3RvcmUgYSBw cm94eSBmZW5jZSwgYSBwbGFjZWhvbGRlciwgaW4KdGhlIHRpbWVsaW5lIGFuZCByZXBsYWNlIGl0 IGxhdGVyIHdoZW4gdGhlIHJlYWwgZmVuY2UgaXMga25vd24uIEFueQpsaXN0ZW5lcnMgdGhhdCBh dHRhY2ggdG8gdGhlIHByb3h5IGZlbmNlIHdpbGwgYXV0b21hdGljYWxseSBiZSBzaWduYWxlZAp3 aGVuIHRoZSByZWFsIGZlbmNlIGNvbXBsZXRlcywgYW5kIGFueSBmdXR1cmUgbGlzdGVuZXJzIHdp bGwgaW5zdGVhZCBiZQphdHRhY2ggZGlyZWN0bHkgdG8gdGhlIHJlYWwgZmVuY2UgYXZvaWRpbmcg YW55IGluZGlyZWN0aW9uIG92ZXJoZWFkLgoKU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxj aHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcu bGFuZHdlcmxpbkBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlICAgICAg ICAgICAgIHwgIDEzICstCiBkcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLXByaXZhdGUuaCAgfCAg MjAgKwogZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS1wcm94eS5jICAgIHwgMzA2ICsrKysrKysr KysrCiBkcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLmMgICAgICAgICAgfCAgIDQgKy0KIGRyaXZl cnMvZG1hLWJ1Zi9zZWxmdGVzdHMuaCAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2RtYS1idWYv c3QtZG1hLWZlbmNlLXByb3h5LmMgfCA3NTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBp bmNsdWRlL2xpbnV4L2RtYS1mZW5jZS1wcm94eS5oICAgICAgfCAgMzggKysKIDcgZmlsZXMgY2hh bmdlZCwgMTEzMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UtcHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS1wcm94eS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9kbWEtYnVmL3N0LWRtYS1mZW5jZS1wcm94eS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg aW5jbHVkZS9saW51eC9kbWEtZmVuY2UtcHJveHkuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1h LWJ1Zi9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQppbmRleCA5OTVlMDVmNjA5 ZmYuLmFmYWY2ZGFkZDlhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlCisr KyBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQpAQCAtMSw2ICsxLDEyIEBACiAjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLW9iai15IDo9IGRtYS1idWYubyBkbWEtZmVu Y2UubyBkbWEtZmVuY2UtYXJyYXkubyBkbWEtZmVuY2UtY2hhaW4ubyBcCi0JIGRtYS1yZXN2Lm8g c2Vxbm8tZmVuY2Uubworb2JqLXkgOj0gXAorCWRtYS1idWYubyBcCisJZG1hLWZlbmNlLm8gXAor CWRtYS1mZW5jZS1hcnJheS5vIFwKKwlkbWEtZmVuY2UtY2hhaW4ubyBcCisJZG1hLWZlbmNlLXBy b3h5Lm8gXAorCWRtYS1yZXN2Lm8gXAorCXNlcW5vLWZlbmNlLm8KIG9iai0kKENPTkZJR19ETUFC VUZfSEVBUFMpCSs9IGRtYS1oZWFwLm8KIG9iai0kKENPTkZJR19ETUFCVUZfSEVBUFMpCSs9IGhl YXBzLwogb2JqLSQoQ09ORklHX1NZTkNfRklMRSkJCSs9IHN5bmNfZmlsZS5vCkBAIC0xMCw2ICsx Niw3IEBAIG9iai0kKENPTkZJR19VRE1BQlVGKQkJKz0gdWRtYWJ1Zi5vCiBkbWFidWZfc2VsZnRl c3RzLXkgOj0gXAogCXNlbGZ0ZXN0Lm8gXAogCXN0LWRtYS1mZW5jZS5vIFwKLQlzdC1kbWEtZmVu Y2UtY2hhaW4ubworCXN0LWRtYS1mZW5jZS1jaGFpbi5vIFwKKwlzdC1kbWEtZmVuY2UtcHJveHku bwogCiBvYmotJChDT05GSUdfRE1BQlVGX1NFTEZURVNUUykJKz0gZG1hYnVmX3NlbGZ0ZXN0cy5v CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLXByaXZhdGUuaCBiL2RyaXZl cnMvZG1hLWJ1Zi9kbWEtZmVuY2UtcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uNjkyNGQyOGFmMGZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9k bWEtYnVmL2RtYS1mZW5jZS1wcml2YXRlLmgKQEAgLTAsMCArMSwyMCBAQAorLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAqIEZlbmNlIG1lY2hhbmlzbSBm b3IgZG1hLWJ1ZiBhbmQgdG8gYWxsb3cgZm9yIGFzeW5jaHJvbm91cyBkbWEgYWNjZXNzCisgKgor ICogQ29weXJpZ2h0IChDKSAyMDEyIENhbm9uaWNhbCBMdGQKKyAqIENvcHlyaWdodCAoQykgMjAx MiBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIEF1dGhvcnM6CisgKiBSb2IgQ2xhcmsgPHJvYmRj bGFya0BnbWFpbC5jb20+CisgKiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RA Y2Fub25pY2FsLmNvbT4KKyAqLworCisjaWZuZGVmIERNQV9GRU5DRV9QUklWQVRFX0gKKyNkZWZp bmUgRE1BX0ZFTkNFX1BSSUFWVEVfSAorCitzdHJ1Y3QgZG1hX2ZlbmNlOworCitib29sIF9fZG1h X2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpOworCisjZW5k aWYgLyogRE1BX0ZFTkNFX1BSSUFWVEVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVm L2RtYS1mZW5jZS1wcm94eS5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS1wcm94eS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDI2NzRlOTJiMGY5Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS1wcm94eS5jCkBAIC0wLDAg KzEsMzA2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgor ICogZG1hLWZlbmNlLXByb3h5OiBwbGFjZWhvbGRlciB1bnNpZ25hbGVkIGZlbmNlCisgKgorICog Q29weXJpZ2h0IChDKSAyMDE3LTIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVk ZSA8bGludXgvZG1hLWZlbmNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWZlbmNlLXByb3h5Lmg+ CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxX3dvcmsuaD4K KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJkbWEtZmVuY2UtcHJpdmF0ZS5o IgorCitzdHJ1Y3QgZG1hX2ZlbmNlX3Byb3h5IHsKKwlzdHJ1Y3QgZG1hX2ZlbmNlIGJhc2U7CisK KwlzdHJ1Y3QgZG1hX2ZlbmNlICpyZWFsOworCXN0cnVjdCBkbWFfZmVuY2VfY2IgY2I7CisJc3Ry dWN0IGlycV93b3JrIHdvcms7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKK307CisKKyNpZmRl ZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworI2RlZmluZSBzYW1lX2xvY2tjbGFzcyhBLCBCKSAo QSktPmRlcF9tYXAua2V5ID09IChCKS0+ZGVwX21hcC5rZXkKKyNlbHNlCisjZGVmaW5lIHNhbWVf bG9ja2NsYXNzKEEsIEIpIDAKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqcHJveHlfZ2V0 X2RyaXZlcl9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBkbWFfZmVu Y2VfcHJveHkgKnAgPSBjb250YWluZXJfb2YoZmVuY2UsIHR5cGVvZigqcCksIGJhc2UpOworCXN0 cnVjdCBkbWFfZmVuY2UgKnJlYWwgPSBSRUFEX09OQ0UocC0+cmVhbCk7CisKKwlyZXR1cm4gcmVh bCA/IHJlYWwtPm9wcy0+Z2V0X2RyaXZlcl9uYW1lKHJlYWwpIDogInByb3h5IjsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKnByb3h5X2dldF90aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFfZmVuY2Ug KmZlbmNlKQoreworCXN0cnVjdCBkbWFfZmVuY2VfcHJveHkgKnAgPSBjb250YWluZXJfb2YoZmVu Y2UsIHR5cGVvZigqcCksIGJhc2UpOworCXN0cnVjdCBkbWFfZmVuY2UgKnJlYWwgPSBSRUFEX09O Q0UocC0+cmVhbCk7CisKKwlyZXR1cm4gcmVhbCA/IHJlYWwtPm9wcy0+Z2V0X3RpbWVsaW5lX25h bWUocmVhbCkgOiAidW5zZXQiOworfQorCitzdGF0aWMgdm9pZCBwcm94eV9pcnFfd29yayhzdHJ1 Y3QgaXJxX3dvcmsgKndvcmspCit7CisJc3RydWN0IGRtYV9mZW5jZV9wcm94eSAqcCA9IGNvbnRh aW5lcl9vZih3b3JrLCB0eXBlb2YoKnApLCB3b3JrKTsKKworCWRtYV9mZW5jZV9zaWduYWwoJnAt PmJhc2UpOworCWRtYV9mZW5jZV9wdXQoJnAtPmJhc2UpOworfQorCitzdGF0aWMgdm9pZCBwcm94 eV9jYWxsYmFjayhzdHJ1Y3QgZG1hX2ZlbmNlICpyZWFsLCBzdHJ1Y3QgZG1hX2ZlbmNlX2NiICpj YikKK3sKKwlzdHJ1Y3QgZG1hX2ZlbmNlX3Byb3h5ICpwID0gY29udGFpbmVyX29mKGNiLCB0eXBl b2YoKnApLCBjYik7CisKKwkvKiBTaWduYWxlZCBiZWZvcmUgZW5hYmxpbmcgc2lnbmFsbGluZyBj YWxsYmFja3M/ICovCisJaWYgKHRlc3RfYml0KERNQV9GRU5DRV9GTEFHX1NJR05BTEVEX0JJVCwg JnAtPmJhc2UuZmxhZ3MpKSB7CisJCWRtYV9mZW5jZV9wdXQoJnAtPmJhc2UpOworCQlyZXR1cm47 CisJfQorCisJaWYgKHJlYWwtPmVycm9yKQorCQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZwLT5iYXNl LCByZWFsLT5lcnJvcik7CisKKwkvKiBMb3dlciB0aGUgaGVpZ2h0IG9mIHRoZSBwcm94eSBjaGFp biAtPiBzaW5nbGUgc3RhY2sgZnJhbWUgKi8KKwlpcnFfd29ya19xdWV1ZSgmcC0+d29yayk7Cit9 CisKK3N0YXRpYyBib29sIHByb3h5X2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGRtYV9mZW5jZSAq ZmVuY2UpCit7CisJc3RydWN0IGRtYV9mZW5jZV9wcm94eSAqcCA9IGNvbnRhaW5lcl9vZihmZW5j ZSwgdHlwZW9mKCpwKSwgYmFzZSk7CisJc3RydWN0IGRtYV9mZW5jZSAqcmVhbCA9IFJFQURfT05D RShwLT5yZWFsKTsKKwlib29sIHJldCA9IHRydWU7CisKKwlpZiAocmVhbCkgeworCQlzcGluX2xv Y2tfbmVzdGVkKHJlYWwtPmxvY2ssCisJCQkJIHNhbWVfbG9ja2NsYXNzKCZwLT53cS5sb2NrLCBy ZWFsLT5sb2NrKSk7CisJCXJldCA9IF9fZG1hX2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcocmVhbCk7 CisJCWlmICghcmV0ICYmIHJlYWwtPmVycm9yKQorCQkJZG1hX2ZlbmNlX3NldF9lcnJvcigmcC0+ YmFzZSwgcmVhbC0+ZXJyb3IpOworCQlzcGluX3VubG9jayhyZWFsLT5sb2NrKTsKKwl9CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwcm94eV9yZWxlYXNlKHN0cnVjdCBkbWFfZmVu Y2UgKmZlbmNlKQoreworCXN0cnVjdCBkbWFfZmVuY2VfcHJveHkgKnAgPSBjb250YWluZXJfb2Yo ZmVuY2UsIHR5cGVvZigqcCksIGJhc2UpOworCisJZG1hX2ZlbmNlX3B1dChwLT5yZWFsKTsKKwlk bWFfZmVuY2VfZnJlZSgmcC0+YmFzZSk7Cit9CisKK2NvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3Bz IGRtYV9mZW5jZV9wcm94eV9vcHMgPSB7CisJLmdldF9kcml2ZXJfbmFtZSA9IHByb3h5X2dldF9k cml2ZXJfbmFtZSwKKwkuZ2V0X3RpbWVsaW5lX25hbWUgPSBwcm94eV9nZXRfdGltZWxpbmVfbmFt ZSwKKwkuZW5hYmxlX3NpZ25hbGluZyA9IHByb3h5X2VuYWJsZV9zaWduYWxpbmcsCisJLndhaXQg PSBkbWFfZmVuY2VfZGVmYXVsdF93YWl0LAorCS5yZWxlYXNlID0gcHJveHlfcmVsZWFzZSwKK307 CitFWFBPUlRfU1lNQk9MX0dQTChkbWFfZmVuY2VfcHJveHlfb3BzKTsKKworLyoqCisgKiBfX2Rt YV9mZW5jZV9jcmVhdGVfcHJveHkgLSBDcmVhdGUgYW4gdW5zZXQgZG1hLWZlbmNlCisgKiBAY29u dGV4dDogY29udGV4dCBudW1iZXIgdG8gdXNlIGZvciBwcm94eSBmZW5jZQorICogQHNlcW5vOiBz ZXF1ZW5jZSBudW1iZXIgdG8gdXNlIGZvciBwcm94eSBmZW5jZQorICoKKyAqIF9fZG1hX2ZlbmNl X2NyZWF0ZV9wcm94eSgpIGNyZWF0ZXMgYSBuZXcgZG1hX2ZlbmNlIHN0dWIgdGhhdCBpcyBpbml0 aWFsbHkKKyAqIHVuc2lnbmFsZWQgYW5kIG1heSBsYXRlciBiZSByZXBsYWNlZCB3aXRoIGEgcmVh bCBmZW5jZS4gQW55IGxpc3RlbmVycworICogdG8gdGhlIHByb3h5IGZlbmNlIHdpbGwgYmUgc2ln bmFsZWQgd2hlbiB0aGUgdGFyZ2V0IGZlbmNlIHNpZ25hbHMgaXRzCisgKiBjb21wbGV0aW9uLgor ICovCitzdHJ1Y3QgZG1hX2ZlbmNlICpfX2RtYV9mZW5jZV9jcmVhdGVfcHJveHkodTY0IGNvbnRl eHQsIHU2NCBzZXFubykKK3sKKwlzdHJ1Y3QgZG1hX2ZlbmNlX3Byb3h5ICpwOworCisJcCA9IGt6 YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKQorCQlyZXR1cm4gTlVMTDsK KworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnAtPndxKTsKKwlkbWFfZmVuY2VfaW5pdCgmcC0+YmFz ZSwgJmRtYV9mZW5jZV9wcm94eV9vcHMsICZwLT53cS5sb2NrLAorCQkgICAgICAgY29udGV4dCwg c2Vxbm8pOworCWluaXRfaXJxX3dvcmsoJnAtPndvcmssIHByb3h5X2lycV93b3JrKTsKKworCXJl dHVybiAmcC0+YmFzZTsKK30KK0VYUE9SVF9TWU1CT0woX19kbWFfZmVuY2VfY3JlYXRlX3Byb3h5 KTsKKworLyoqCisgKiBkbWFfZmVuY2VfY3JlYXRlX3Byb3h5IC0gQ3JlYXRlIGFuIHVuc2V0IGRt YS1mZW5jZQorICoKKyAqIFdyYXBzIF9fZG1hX2ZlbmNlX2NyZWF0ZV9wcm94eSgpIHRvIGNyZWF0 ZSBhIG5ldyBwcm94eSBmZW5jZSB3aXRoIHRoZQorICogbmV4dCBhdmFpbGFibGUgKHVuaXF1ZSkg Y29udGV4dCBpZC4KKyAqLworc3RydWN0IGRtYV9mZW5jZSAqZG1hX2ZlbmNlX2NyZWF0ZV9wcm94 eSh2b2lkKQoreworCXJldHVybiBfX2RtYV9mZW5jZV9jcmVhdGVfcHJveHkoZG1hX2ZlbmNlX2Nv bnRleHRfYWxsb2MoMSksIDApOworfQorRVhQT1JUX1NZTUJPTChkbWFfZmVuY2VfY3JlYXRlX3By b3h5KTsKKworc3RhdGljIHZvaWQgX193YWtlX3VwX2xpc3RlbmVycyhzdHJ1Y3QgZG1hX2ZlbmNl X3Byb3h5ICpwKQoreworCXN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCAqbmV4dDsKKwor CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3YWl0LCBuZXh0LCAmcC0+d3EuaGVhZCwgZW50cnkp IHsKKwkJSU5JVF9MSVNUX0hFQUQoJndhaXQtPmVudHJ5KTsKKwkJd2FpdC0+ZnVuYyh3YWl0LCBU QVNLX05PUk1BTCwgMCwgcC0+cmVhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfcHJveHlf Y2FsbGJhY2soc3RydWN0IGRtYV9mZW5jZSAqcmVhbCwgc3RydWN0IGRtYV9mZW5jZV9jYiAqY2Ip Cit7CisJY2ItPmZ1bmMgPSBwcm94eV9jYWxsYmFjazsKKwlsaXN0X2FkZF90YWlsKCZjYi0+bm9k ZSwgJnJlYWwtPmNiX2xpc3QpOworfQorCitzdGF0aWMgdm9pZCBwcm94eV9hc3NpZ24oc3RydWN0 IGRtYV9mZW5jZSAqZmVuY2UsIHN0cnVjdCBkbWFfZmVuY2UgKnJlYWwpCit7CisJc3RydWN0IGRt YV9mZW5jZV9wcm94eSAqcCA9IGNvbnRhaW5lcl9vZihmZW5jZSwgdHlwZW9mKCpwKSwgYmFzZSk7 CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChXQVJOX09OKGZlbmNlID09IHJlYWwpKQor CQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTih0ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19TSUdOQUxF RF9CSVQsICZmZW5jZS0+ZmxhZ3MpKSkKKwkJcmV0dXJuOworCisJaWYgKFdBUk5fT04ocC0+cmVh bCkpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT53cS5sb2NrLCBmbGFncyk7 CisKKwlpZiAodW5saWtlbHkoIXJlYWwpKSB7CisJCWRtYV9mZW5jZV9zaWduYWxfbG9ja2VkKCZw LT5iYXNlKTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJcC0+cmVhbCA9IGRtYV9mZW5jZV9nZXQo cmVhbCk7CisKKwlkbWFfZmVuY2VfZ2V0KCZwLT5iYXNlKTsKKwlzcGluX2xvY2tfbmVzdGVkKHJl YWwtPmxvY2ssIHNhbWVfbG9ja2NsYXNzKCZwLT53cS5sb2NrLCByZWFsLT5sb2NrKSk7CisJaWYg KGRtYV9mZW5jZV9pc19zaWduYWxlZF9sb2NrZWQocmVhbCkpCisJCXByb3h5X2NhbGxiYWNrKHJl YWwsICZwLT5jYik7CisJZWxzZSBpZiAodGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfRU5BQkxFX1NJ R05BTF9CSVQsICZwLT5iYXNlLmZsYWdzKSAmJgorCQkgIV9fZG1hX2ZlbmNlX2VuYWJsZV9zaWdu YWxpbmcocmVhbCkpCisJCXByb3h5X2NhbGxiYWNrKHJlYWwsICZwLT5jYik7CisJZWxzZQorCQlz ZXRfcHJveHlfY2FsbGJhY2socmVhbCwgJnAtPmNiKTsKKwlzcGluX3VubG9jayhyZWFsLT5sb2Nr KTsKKwordW5sb2NrOgorCV9fd2FrZV91cF9saXN0ZW5lcnMocCk7CisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmcC0+d3EubG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIGRtYV9mZW5jZV9yZXBs YWNlX3Byb3h5IC0gUmVwbGFjZSB0aGUgcHJveHkgZmVuY2Ugd2l0aCB0aGUgcmVhbCB0YXJnZXQK KyAqIEBzbG90OiBwb2ludGVyIHRvIGxvY2F0aW9uIG9mIGZlbmNlIHRvIHVwZGF0ZQorICogQGZl bmNlOiB0aGUgbmV3IGZlbmNlIHRvIHN0b3JlIGluIEBzbG90CisgKgorICogT25jZSB0aGUgcmVh bCBkbWFfZmVuY2UgaXMga25vd24sIHdlIGNhbiByZXBsYWNlIHRoZSBwcm94eSBmZW5jZSBob2xk ZXIKKyAqIHdpdGggYSBwb2ludGVyIHRvIHRoZSByZWFsIGRtYSBmZW5jZS4gRnV0dXJlIGxpc3Rl bmVycyB3aWxsIGF0dGFjaCB0bworICogdGhlIHJlYWwgZmVuY2UsIGF2b2lkaW5nIGFueSBpbmRp cmVjdGlvbiBvdmVyaGVhZC4gUHJldmlvdXMgbGlzdGVuZXJzCisgKiB3aWxsIHJlbWFpbiBhdHRh Y2hlZCB0byB0aGUgcHJveHkgZmVuY2UsIGFuZCBiZSBzaWduYWxlZCBpbiB0dXJuIHdoZW4KKyAq IHRoZSB0YXJnZXQgZmVuY2UgY29tcGxldGVzLgorICovCitzdHJ1Y3QgZG1hX2ZlbmNlICoKK2Rt YV9mZW5jZV9yZXBsYWNlX3Byb3h5KHN0cnVjdCBkbWFfZmVuY2UgX19yY3UgKipzbG90LCBzdHJ1 Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpvbGQ7CisKKwlpZiAo ZmVuY2UpCisJCWRtYV9mZW5jZV9nZXQoZmVuY2UpOworCisJb2xkID0gcmN1X3JlcGxhY2VfcG9p bnRlcigqc2xvdCwgZmVuY2UsIHRydWUpOworCWlmIChvbGQgJiYgZG1hX2ZlbmNlX2lzX3Byb3h5 KG9sZCkpCisJCXByb3h5X2Fzc2lnbihvbGQsIGZlbmNlKTsKKworCXJldHVybiBvbGQ7Cit9CitF WFBPUlRfU1lNQk9MKGRtYV9mZW5jZV9yZXBsYWNlX3Byb3h5KTsKKworLyoqCisgKiBkbWFfZmVu Y2VfcHJveHlfc2V0X3JlYWwgLSBTZXQgdGhlIHRhcmdldCBvZiBhIHByb3h5IGZlbmNlCisgKiBA ZmVuY2U6IHRoZSBwcm94eSBmZW5jZQorICogQHJlYWw6IHRoZSB0YXJnZXQgZmVuY2UuCisgKgor ICovCit2b2lkIGRtYV9mZW5jZV9wcm94eV9zZXRfcmVhbChzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5j ZSwgc3RydWN0IGRtYV9mZW5jZSAqcmVhbCkKK3sKKwlpZiAoZG1hX2ZlbmNlX2lzX3Byb3h5KGZl bmNlKSkKKwkJcHJveHlfYXNzaWduKGZlbmNlLCByZWFsKTsKK30KK0VYUE9SVF9TWU1CT0woZG1h X2ZlbmNlX3Byb3h5X3NldF9yZWFsKTsKKworLyoqCisgKiBkbWFfZmVuY2VfcHJveHlfZ2V0X3Jl YWwgLSBRdWVyeSB0aGUgdGFyZ2V0IG9mIGEgcHJveHkgZmVuY2UKKyAqIEBmZW5jZTogdGhlIHBy b3h5IGZlbmNlCisgKgorICogVW5wZWVsIHRoZSBwcm94eSBmZW5jZSB0byBzZWUgaWYgaXQgaGFz IGJlZW4gcmVwbGFjZWQgd2l0aCBhIHJlYWwgZmVuY2UuCisgKi8KK3N0cnVjdCBkbWFfZmVuY2Ug KmRtYV9mZW5jZV9wcm94eV9nZXRfcmVhbChzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlp ZiAoZG1hX2ZlbmNlX2lzX3Byb3h5KGZlbmNlKSkgeworCQlzdHJ1Y3QgZG1hX2ZlbmNlX3Byb3h5 ICpwID0KKwkJCWNvbnRhaW5lcl9vZihmZW5jZSwgdHlwZW9mKCpwKSwgYmFzZSk7CisKKwkJaWYg KHAtPnJlYWwpCisJCQlmZW5jZSA9IHAtPnJlYWw7CisJfQorCisJcmV0dXJuIGZlbmNlOworfQor RVhQT1JUX1NZTUJPTChkbWFfZmVuY2VfcHJveHlfZ2V0X3JlYWwpOworCit2b2lkIGRtYV9mZW5j ZV9hZGRfcHJveHlfbGlzdGVuZXIoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsCisJCQkJICBzdHJ1 Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCkKK3sKKwlpZiAoZG1hX2ZlbmNlX2lzX3Byb3h5KGZl bmNlKSkgeworCQlzdHJ1Y3QgZG1hX2ZlbmNlX3Byb3h5ICpwID0KKwkJCWNvbnRhaW5lcl9vZihm ZW5jZSwgdHlwZW9mKCpwKSwgYmFzZSk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bp bl9sb2NrX2lycXNhdmUoJnAtPndxLmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFwLT5yZWFsKSB7CisJ CQlsaXN0X2FkZF90YWlsKCZ3YWl0LT5lbnRyeSwgJnAtPndxLmhlYWQpOworCQkJd2FpdCA9IE5V TEw7CisJCX0KKwkJZmVuY2UgPSBwLT5yZWFsOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZw LT53cS5sb2NrLCBmbGFncyk7CisJfQorCisJaWYgKHdhaXQpIHsKKwkJSU5JVF9MSVNUX0hFQUQo JndhaXQtPmVudHJ5KTsKKwkJd2FpdC0+ZnVuYyh3YWl0LCBUQVNLX05PUk1BTCwgMCwgZmVuY2Up OworCX0KK30KK0VYUE9SVF9TWU1CT0woZG1hX2ZlbmNlX2FkZF9wcm94eV9saXN0ZW5lcik7CisK K2Jvb2wgZG1hX2ZlbmNlX3JlbW92ZV9wcm94eV9saXN0ZW5lcihzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZSwKKwkJCQkgICAgIHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0KQoreworCWJvb2wg cmV0ID0gZmFsc2U7CisKKwlpZiAoZG1hX2ZlbmNlX2lzX3Byb3h5KGZlbmNlKSkgeworCQlzdHJ1 Y3QgZG1hX2ZlbmNlX3Byb3h5ICpwID0KKwkJCWNvbnRhaW5lcl9vZihmZW5jZSwgdHlwZW9mKCpw KSwgYmFzZSk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUo JnAtPndxLmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZ3YWl0LT5lbnRyeSkpIHsK KwkJCWxpc3RfZGVsX2luaXQoJndhaXQtPmVudHJ5KTsKKwkJCXJldCA9IHRydWU7CisJCX0KKwkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+d3EubG9jaywgZmxhZ3MpOworCX0KKworCXJldHVy biByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9mZW5jZV9yZW1vdmVfcHJveHlfbGlzdGVuZXIp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5jIGIvZHJpdmVycy9kbWEt YnVmL2RtYS1mZW5jZS5jCmluZGV4IDY1NmU5YWMyZDAyOC4uMzI5YmQwMzMwNTlmIDEwMDY0NAot LS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLmMKKysrIGIvZHJpdmVycy9kbWEtYnVmL2Rt YS1mZW5jZS5jCkBAIC0xOSw2ICsxOSw4IEBACiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMK ICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvZG1hX2ZlbmNlLmg+CiAKKyNpbmNsdWRlICJkbWEtZmVu Y2UtcHJpdmF0ZS5oIgorCiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woZG1hX2ZlbmNlX2VtaXQp OwogRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGRtYV9mZW5jZV9lbmFibGVfc2lnbmFsKTsKIEVY UE9SVF9UUkFDRVBPSU5UX1NZTUJPTChkbWFfZmVuY2Vfc2lnbmFsZWQpOwpAQCAtMjc1LDcgKzI3 Nyw3IEBAIHZvaWQgZG1hX2ZlbmNlX2ZyZWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCiB9CiBF WFBPUlRfU1lNQk9MKGRtYV9mZW5jZV9mcmVlKTsKIAotc3RhdGljIGJvb2wgX19kbWFfZmVuY2Vf ZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK2Jvb2wgX19kbWFfZmVu Y2VfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKIHsKIAlib29sIHdh c19zZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9zZWxmdGVzdHMuaCBiL2RyaXZl cnMvZG1hLWJ1Zi9zZWxmdGVzdHMuaAppbmRleCBiYzhjZWE2N2JmMWUuLjkyZDE1YmY1MGY2NCAx MDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL3NlbGZ0ZXN0cy5oCisrKyBiL2RyaXZlcnMvZG1h LWJ1Zi9zZWxmdGVzdHMuaApAQCAtMTIsMyArMTIsNCBAQAogc2VsZnRlc3Qoc2FuaXR5Y2hlY2ss IF9fc2FuaXR5Y2hlY2tfXykgLyoga2VlcCBmaXJzdCAoaWd0IHNlbGZjaGVjaykgKi8KIHNlbGZ0 ZXN0KGRtYV9mZW5jZSwgZG1hX2ZlbmNlKQogc2VsZnRlc3QoZG1hX2ZlbmNlX2NoYWluLCBkbWFf ZmVuY2VfY2hhaW4pCitzZWxmdGVzdChkbWFfZmVuY2VfcHJveHksIGRtYV9mZW5jZV9wcm94eSkK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtcHJveHkuYyBiL2RyaXZl cnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtcHJveHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmMzZjIxMGJjNGU2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv ZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtcHJveHkuYwpAQCAtMCwwICsxLDc1MiBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENv cnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGlu dXgvZG1hLWZlbmNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWZlbmNlLXByb3h5Lmg+CisjaW5j bHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQvc2lnbmFsLmg+Cisj aW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNp bmNsdWRlICJzZWxmdGVzdC5oIgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnNsYWJfZmVu Y2VzOworCitzdGF0aWMgc3RydWN0IG1vY2tfZmVuY2UgeworCXN0cnVjdCBkbWFfZmVuY2UgYmFz ZTsKKwlzcGlubG9ja190IGxvY2s7Cit9ICp0b19tb2NrX2ZlbmNlKHN0cnVjdCBkbWFfZmVuY2Ug KmYpIHsKKwlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBtb2NrX2ZlbmNlLCBiYXNlKTsK K30KKworc3RhdGljIGNvbnN0IGNoYXIgKm1vY2tfbmFtZShzdHJ1Y3QgZG1hX2ZlbmNlICpmKQor eworCXJldHVybiAibW9jayI7Cit9CisKK3N0YXRpYyB2b2lkIG1vY2tfZmVuY2VfcmVsZWFzZShz dHJ1Y3QgZG1hX2ZlbmNlICpmKQoreworCWttZW1fY2FjaGVfZnJlZShzbGFiX2ZlbmNlcywgdG9f bW9ja19mZW5jZShmKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyBt b2NrX29wcyA9IHsKKwkuZ2V0X2RyaXZlcl9uYW1lID0gbW9ja19uYW1lLAorCS5nZXRfdGltZWxp bmVfbmFtZSA9IG1vY2tfbmFtZSwKKwkucmVsZWFzZSA9IG1vY2tfZmVuY2VfcmVsZWFzZSwKK307 CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICptb2NrX2ZlbmNlKHZvaWQpCit7CisJc3RydWN0 IG1vY2tfZmVuY2UgKmY7CisKKwlmID0ga21lbV9jYWNoZV9hbGxvYyhzbGFiX2ZlbmNlcywgR0ZQ X0tFUk5FTCk7CisJaWYgKCFmKQorCQlyZXR1cm4gTlVMTDsKKworCXNwaW5fbG9ja19pbml0KCZm LT5sb2NrKTsKKwlkbWFfZmVuY2VfaW5pdCgmZi0+YmFzZSwgJm1vY2tfb3BzLCAmZi0+bG9jaywg MCwgMCk7CisKKwlyZXR1cm4gJmYtPmJhc2U7Cit9CisKK3N0YXRpYyBpbnQgc2FuaXR5Y2hlY2so dm9pZCAqYXJnKQoreworCXN0cnVjdCBkbWFfZmVuY2UgKmY7CisKKwlmID0gZG1hX2ZlbmNlX2Ny ZWF0ZV9wcm94eSgpOworCWlmICghZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkbWFfZmVuY2Vf c2lnbmFsKGYpOworCWRtYV9mZW5jZV9wdXQoZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0 IGZlbmNlcyB7CisJc3RydWN0IGRtYV9mZW5jZSAqcmVhbDsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpw cm94eTsKKwlzdHJ1Y3QgZG1hX2ZlbmNlIF9fcmN1ICpzbG90OworfTsKKworc3RhdGljIGludCBj cmVhdGVfZmVuY2VzKHN0cnVjdCBmZW5jZXMgKmYsIGJvb2wgYXR0YWNoKQoreworCWYtPnByb3h5 ID0gZG1hX2ZlbmNlX2NyZWF0ZV9wcm94eSgpOworCWlmICghZi0+cHJveHkpCisJCXJldHVybiAt RU5PTUVNOworCisJUkNVX0lOSVRfUE9JTlRFUihmLT5zbG90LCBmLT5wcm94eSk7CisKKwlmLT5y ZWFsID0gbW9ja19mZW5jZSgpOworCWlmICghZi0+cmVhbCkgeworCQlkbWFfZmVuY2VfcHV0KGYt PnByb3h5KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGF0dGFjaCkKKwkJZG1hX2Zl bmNlX3JlcGxhY2VfcHJveHkoJmYtPnNsb3QsIGYtPnJlYWwpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIGZyZWVfZmVuY2VzKHN0cnVjdCBmZW5jZXMgKmYpCit7CisJZG1hX2ZlbmNl X3B1dChkbWFfZmVuY2VfcmVwbGFjZV9wcm94eSgmZi0+c2xvdCwgTlVMTCkpOworCisJZG1hX2Zl bmNlX3NpZ25hbChmLT5yZWFsKTsKKwlkbWFfZmVuY2VfcHV0KGYtPnJlYWwpOworCisJZG1hX2Zl bmNlX3NpZ25hbChmLT5wcm94eSk7CisJZG1hX2ZlbmNlX3B1dChmLT5wcm94eSk7Cit9CisKK3N0 YXRpYyBpbnQgd3JhcF90YXJnZXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBmZW5jZXMgZjsKKwlp bnQgZXJyID0gLUVJTlZBTDsKKworCWlmIChjcmVhdGVfZmVuY2VzKCZmLCBmYWxzZSkpCisJCXJl dHVybiAtRU5PTUVNOworCisJaWYgKGRtYV9mZW5jZV9wcm94eV9nZXRfcmVhbChmLnByb3h5KSAh PSBmLnByb3h5KSB7CisJCXByX2VycigiVW53cmFwcGVkIHByb3h5IGZlbmNlZCByZXBvcnRlZCBh IHRhcmdldCBmZW5jZSFcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWRtYV9mZW5jZV9w cm94eV9zZXRfcmVhbChmLnByb3h5LCBmLnJlYWwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihmLnNs b3QsIGRtYV9mZW5jZV9nZXQoZi5yZWFsKSk7IC8qIGZyZWVfZmVuY2VzKCkgKi8KKworCWlmIChk bWFfZmVuY2VfcHJveHlfZ2V0X3JlYWwoZi5wcm94eSkgIT0gZi5yZWFsKSB7CisJCXByX2Vycigi V3JhcHBlZCBwcm94eSBmZW5jZWQgZGlkIG5vdCByZXBvcnQgdGhlIHRhcmdldCBmZW5jZSFcbiIp OworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWVyciA9IDA7CitlcnJfZnJlZToKKwlmcmVlX2Zl bmNlcygmZik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB3cmFwX3Byb3h5KHZvaWQg KmFyZykKK3sKKwlzdHJ1Y3QgZmVuY2VzIGY7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAo Y3JlYXRlX2ZlbmNlcygmZiwgdHJ1ZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGRtYV9m ZW5jZV9wcm94eV9nZXRfcmVhbChmLnByb3h5KSAhPSBmLnJlYWwpIHsKKwkJcHJfZXJyKCJXcmFw cGVkIHByb3h5IGZlbmNlZCBkaWQgbm90IHJlcG9ydCB0aGUgdGFyZ2V0IGZlbmNlIVxuIik7CisJ CWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZXJyID0gMDsKK2Vycl9mcmVlOgorCWZyZWVfZmVuY2Vz KCZmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyYXBfc2lnbmFsaW5nKHZvaWQg KmFyZykKK3sKKwlzdHJ1Y3QgZmVuY2VzIGY7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAo Y3JlYXRlX2ZlbmNlcygmZiwgdHJ1ZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGRtYV9m ZW5jZV9pc19zaWduYWxlZChmLnByb3h5KSkgeworCQlwcl9lcnIoIkZlbmNlIHVuZXhwZWN0ZWRs eSBzaWduYWxlZCBvbiBjcmVhdGlvblxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJaWYg KGRtYV9mZW5jZV9zaWduYWwoZi5yZWFsKSkgeworCQlwcl9lcnIoIkZlbmNlIHJlcG9ydGVkIGJl aW5nIGFscmVhZHkgc2lnbmFsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWlmICgh ZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGYucHJveHkpKSB7CisJCXByX2VycigiRmVuY2Ugbm90IHJl cG9ydGluZyBzaWduYWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZXJyID0gMDsK K2Vycl9mcmVlOgorCWZyZWVfZmVuY2VzKCZmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMg aW50IHdyYXBfc2lnbmFsaW5nX3JlY3Vyc2Uodm9pZCAqYXJnKQoreworCXN0cnVjdCBmZW5jZXMg ZjsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpjaGFpbjsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWlm IChjcmVhdGVfZmVuY2VzKCZmLCBmYWxzZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJY2hhaW4g PSBkbWFfZmVuY2VfY3JlYXRlX3Byb3h5KCk7CisJaWYgKCFjaGFpbikgeworCQllcnIgPSAtRU5P TUVNOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWRtYV9mZW5jZV9yZXBsYWNlX3Byb3h5KCZm LnNsb3QsIGNoYWluKTsKKwlkbWFfZmVuY2VfcHV0KGRtYV9mZW5jZV9yZXBsYWNlX3Byb3h5KCZm LnNsb3QsIGYucmVhbCkpOworCWRtYV9mZW5jZV9wdXQoY2hhaW4pOworCisJLyogZi5yZWFsIDwt IGNoYWluIDwtIGYucHJveHkgKi8KKworCWlmIChkbWFfZmVuY2VfaXNfc2lnbmFsZWQoZi5wcm94 eSkpIHsKKwkJcHJfZXJyKCJGZW5jZSB1bmV4cGVjdGVkbHkgc2lnbmFsZWQgb24gY3JlYXRpb25c biIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWlmIChkbWFfZmVuY2Vfc2lnbmFsKGYucmVh bCkpIHsKKwkJcHJfZXJyKCJGZW5jZSByZXBvcnRlZCBiZWluZyBhbHJlYWR5IHNpZ25hbGVkXG4i KTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlpZiAoIWRtYV9mZW5jZV9pc19zaWduYWxlZChm LnByb3h5KSkgeworCQlwcl9lcnIoIkZlbmNlIG5vdCByZXBvcnRpbmcgc2lnbmFsZWRcbiIpOwor CQlnb3RvIGVycl9mcmVlOworCX0KKworCWVyciA9IDA7CitlcnJfZnJlZToKKwlmcmVlX2ZlbmNl cygmZik7CisJcmV0dXJuIGVycjsKK30KKworc3RydWN0IHNpbXBsZV9jYiB7CisJc3RydWN0IGRt YV9mZW5jZV9jYiBjYjsKKwlib29sIHNlZW47Cit9OworCitzdGF0aWMgdm9pZCBzaW1wbGVfY2Fs bGJhY2soc3RydWN0IGRtYV9mZW5jZSAqZiwgc3RydWN0IGRtYV9mZW5jZV9jYiAqY2IpCit7CisJ LyogRW5zdXJlIHRoZSBjYWxsYmFjayBtYXJrZXIgaXMgdmlzaWJsZSwgbm8gZXhjdXNlcyBmb3Ig bWlzc2luZyBpdCEgKi8KKwlzbXBfc3RvcmVfbWIoY29udGFpbmVyX29mKGNiLCBzdHJ1Y3Qgc2lt cGxlX2NiLCBjYiktPnNlZW4sIHRydWUpOworfQorCitzdGF0aWMgaW50IHdyYXBfYWRkX2NhbGxi YWNrKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2ltcGxlX2NiIGNiID0ge307CisJc3RydWN0IGZl bmNlcyBmOworCWludCBlcnIgPSAtRUlOVkFMOworCisJaWYgKGNyZWF0ZV9mZW5jZXMoJmYsIHRy dWUpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChkbWFfZmVuY2VfYWRkX2NhbGxiYWNrKGYu cHJveHksICZjYi5jYiwgc2ltcGxlX2NhbGxiYWNrKSkgeworCQlwcl9lcnIoIkZhaWxlZCB0byBh ZGQgY2FsbGJhY2ssIGZlbmNlIGFscmVhZHkgc2lnbmFsZWQhXG4iKTsKKwkJZ290byBlcnJfZnJl ZTsKKwl9CisKKwlkbWFfZmVuY2Vfc2lnbmFsKGYucmVhbCk7CisJaWYgKCFjYi5zZWVuKSB7CisJ CXByX2VycigiQ2FsbGJhY2sgZmFpbGVkIVxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJ ZXJyID0gMDsKK2Vycl9mcmVlOgorCWZyZWVfZmVuY2VzKCZmKTsKKwlyZXR1cm4gZXJyOworfQor CitzdGF0aWMgaW50IHdyYXBfYWRkX2NhbGxiYWNrX3JlY3Vyc2Uodm9pZCAqYXJnKQoreworCXN0 cnVjdCBzaW1wbGVfY2IgY2IgPSB7fTsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpjaGFpbjsKKwlzdHJ1 Y3QgZmVuY2VzIGY7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoY3JlYXRlX2ZlbmNlcygm ZiwgZmFsc2UpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNoYWluID0gZG1hX2ZlbmNlX2NyZWF0 ZV9wcm94eSgpOworCWlmICghY2hhaW4pIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJf ZnJlZTsKKwl9CisKKwlkbWFfZmVuY2VfcmVwbGFjZV9wcm94eSgmZi5zbG90LCBjaGFpbik7CisJ ZG1hX2ZlbmNlX3B1dChkbWFfZmVuY2VfcmVwbGFjZV9wcm94eSgmZi5zbG90LCBmLnJlYWwpKTsK KwlkbWFfZmVuY2VfcHV0KGNoYWluKTsKKworCS8qIGYucmVhbCA8LSBjaGFpbiA8LSBmLnByb3h5 ICovCisKKwlpZiAoZG1hX2ZlbmNlX2FkZF9jYWxsYmFjayhmLnByb3h5LCAmY2IuY2IsIHNpbXBs ZV9jYWxsYmFjaykpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWRkIGNhbGxiYWNrLCBmZW5jZSBh bHJlYWR5IHNpZ25hbGVkIVxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZG1hX2ZlbmNl X3NpZ25hbChmLnJlYWwpOworCWlmICghY2Iuc2VlbikgeworCQlwcl9lcnIoIkNhbGxiYWNrIGZh aWxlZCFcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWVyciA9IDA7CitlcnJfZnJlZToK KwlmcmVlX2ZlbmNlcygmZik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB3cmFwX2xh dGVfYWRkX2NhbGxiYWNrKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2ltcGxlX2NiIGNiID0ge307 CisJc3RydWN0IGZlbmNlcyBmOworCWludCBlcnIgPSAtRUlOVkFMOworCisJaWYgKGNyZWF0ZV9m ZW5jZXMoJmYsIHRydWUpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRtYV9mZW5jZV9zaWduYWwo Zi5yZWFsKTsKKworCWlmICghZG1hX2ZlbmNlX2FkZF9jYWxsYmFjayhmLnByb3h5LCAmY2IuY2Is IHNpbXBsZV9jYWxsYmFjaykpIHsKKwkJcHJfZXJyKCJBZGRlZCBjYWxsYmFjaywgYnV0IGZlbmNl IHdhcyBhbHJlYWR5IHNpZ25hbGVkIVxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZG1h X2ZlbmNlX3NpZ25hbChmLnJlYWwpOworCWlmIChjYi5zZWVuKSB7CisJCXByX2VycigiQ2FsbGJh Y2sgY2FsbGVkIGFmdGVyIGZhaWxlZCBhdHRhY2htZW50IVxuIik7CisJCWdvdG8gZXJyX2ZyZWU7 CisJfQorCisJZXJyID0gMDsKK2Vycl9mcmVlOgorCWZyZWVfZmVuY2VzKCZmKTsKKwlyZXR1cm4g ZXJyOworfQorCitzdGF0aWMgaW50IHdyYXBfZWFybHlfYWRkX2NhbGxiYWNrKHZvaWQgKmFyZykK K3sKKwlzdHJ1Y3Qgc2ltcGxlX2NiIGNiID0ge307CisJc3RydWN0IGZlbmNlcyBmOworCWludCBl cnIgPSAtRUlOVkFMOworCisJaWYgKGNyZWF0ZV9mZW5jZXMoJmYsIGZhbHNlKSkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlpZiAoZG1hX2ZlbmNlX2FkZF9jYWxsYmFjayhmLnByb3h5LCAmY2IuY2Is IHNpbXBsZV9jYWxsYmFjaykpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWRkIGNhbGxiYWNrLCBm ZW5jZSBhbHJlYWR5IHNpZ25hbGVkIVxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZG1h X2ZlbmNlX3JlcGxhY2VfcHJveHkoJmYuc2xvdCwgZi5yZWFsKTsKKwlkbWFfZmVuY2Vfc2lnbmFs KGYucmVhbCk7CisJaWYgKCFjYi5zZWVuKSB7CisJCXByX2VycigiQ2FsbGJhY2sgZmFpbGVkIVxu Iik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZXJyID0gMDsKK2Vycl9mcmVlOgorCWZyZWVf ZmVuY2VzKCZmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyYXBfZWFybHlfYWRk X2NhbGxiYWNrX2xhdGUodm9pZCAqYXJnKQoreworCXN0cnVjdCBzaW1wbGVfY2IgY2IgPSB7fTsK KwlzdHJ1Y3QgZmVuY2VzIGY7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoY3JlYXRlX2Zl bmNlcygmZiwgZmFsc2UpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRtYV9mZW5jZV9zaWduYWwo Zi5yZWFsKTsKKworCWlmIChkbWFfZmVuY2VfYWRkX2NhbGxiYWNrKGYucHJveHksICZjYi5jYiwg c2ltcGxlX2NhbGxiYWNrKSkgeworCQlwcl9lcnIoIkZhaWxlZCB0byBhZGQgY2FsbGJhY2ssIGZl bmNlIGFscmVhZHkgc2lnbmFsZWQhXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlkbWFf ZmVuY2VfcmVwbGFjZV9wcm94eSgmZi5zbG90LCBmLnJlYWwpOworCWRtYV9mZW5jZV9zaWduYWwo Zi5yZWFsKTsKKwlpZiAoIWNiLnNlZW4pIHsKKwkJcHJfZXJyKCJDYWxsYmFjayBmYWlsZWQhXG4i KTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwllcnIgPSAwOworZXJyX2ZyZWU6CisJZnJlZV9m ZW5jZXMoJmYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd3JhcF9lYXJseV9hZGRf Y2FsbGJhY2tfZWFybHkodm9pZCAqYXJnKQoreworCXN0cnVjdCBzaW1wbGVfY2IgY2IgPSB7fTsK KwlzdHJ1Y3QgZmVuY2VzIGY7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoY3JlYXRlX2Zl bmNlcygmZiwgZmFsc2UpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChkbWFfZmVuY2VfYWRk X2NhbGxiYWNrKGYucHJveHksICZjYi5jYiwgc2ltcGxlX2NhbGxiYWNrKSkgeworCQlwcl9lcnIo IkZhaWxlZCB0byBhZGQgY2FsbGJhY2ssIGZlbmNlIGFscmVhZHkgc2lnbmFsZWQhXG4iKTsKKwkJ Z290byBlcnJfZnJlZTsKKwl9CisKKwlkbWFfZmVuY2VfcmVwbGFjZV9wcm94eSgmZi5zbG90LCBm LnJlYWwpOworCWRtYV9mZW5jZV9zaWduYWwoZi5yZWFsKTsKKwlpZiAoIWNiLnNlZW4pIHsKKwkJ cHJfZXJyKCJDYWxsYmFjayBmYWlsZWQhXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwll cnIgPSAwOworZXJyX2ZyZWU6CisJZnJlZV9mZW5jZXMoJmYpOworCXJldHVybiBlcnI7Cit9CisK K3N0YXRpYyBpbnQgd3JhcF9ybV9jYWxsYmFjayh2b2lkICphcmcpCit7CisJc3RydWN0IHNpbXBs ZV9jYiBjYiA9IHt9OworCXN0cnVjdCBmZW5jZXMgZjsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKwor CWlmIChjcmVhdGVfZmVuY2VzKCZmLCB0cnVlKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAo ZG1hX2ZlbmNlX2FkZF9jYWxsYmFjayhmLnByb3h5LCAmY2IuY2IsIHNpbXBsZV9jYWxsYmFjaykp IHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWRkIGNhbGxiYWNrLCBmZW5jZSBhbHJlYWR5IHNpZ25h bGVkIVxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJaWYgKCFkbWFfZmVuY2VfcmVtb3Zl X2NhbGxiYWNrKGYucHJveHksICZjYi5jYikpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVtb3Zl IGNhbGxiYWNrIVxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZG1hX2ZlbmNlX3NpZ25h bChmLnJlYWwpOworCWlmIChjYi5zZWVuKSB7CisJCXByX2VycigiQ2FsbGJhY2sgc3RpbGwgc2ln bmFsZWQgYWZ0ZXIgcmVtb3ZhbCFcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWVyciA9 IDA7CitlcnJfZnJlZToKKwlmcmVlX2ZlbmNlcygmZik7CisJcmV0dXJuIGVycjsKK30KKworc3Rh dGljIGludCB3cmFwX2xhdGVfcm1fY2FsbGJhY2sodm9pZCAqYXJnKQoreworCXN0cnVjdCBzaW1w bGVfY2IgY2IgPSB7fTsKKwlzdHJ1Y3QgZmVuY2VzIGY7CisJaW50IGVyciA9IC1FSU5WQUw7CisK KwlpZiAoY3JlYXRlX2ZlbmNlcygmZiwgdHJ1ZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYg KGRtYV9mZW5jZV9hZGRfY2FsbGJhY2soZi5wcm94eSwgJmNiLmNiLCBzaW1wbGVfY2FsbGJhY2sp KSB7CisJCXByX2VycigiRmFpbGVkIHRvIGFkZCBjYWxsYmFjaywgZmVuY2UgYWxyZWFkeSBzaWdu YWxlZCFcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWRtYV9mZW5jZV9zaWduYWwoZi5y ZWFsKTsKKwlpZiAoIWNiLnNlZW4pIHsKKwkJcHJfZXJyKCJDYWxsYmFjayBmYWlsZWQhXG4iKTsK KwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlpZiAoZG1hX2ZlbmNlX3JlbW92ZV9jYWxsYmFjayhm LnByb3h5LCAmY2IuY2IpKSB7CisJCXByX2VycigiQ2FsbGJhY2sgcmVtb3ZhbCBzdWNjZWVkIGFm dGVyIGJlaW5nIGV4ZWN1dGVkIVxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZXJyID0g MDsKK2Vycl9mcmVlOgorCWZyZWVfZmVuY2VzKCZmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0 aWMgaW50IHdyYXBfc3RhdHVzKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZmVuY2VzIGY7CisJaW50 IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoY3JlYXRlX2ZlbmNlcygmZiwgdHJ1ZSkpCisJCXJldHVy biAtRU5PTUVNOworCisJaWYgKGRtYV9mZW5jZV9nZXRfc3RhdHVzKGYucHJveHkpKSB7CisJCXBy X2VycigiRmVuY2UgdW5leHBlY3RlZGx5IGhhcyBzaWduYWxlZCBzdGF0dXMgb24gY3JlYXRpb25c biIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWRtYV9mZW5jZV9zaWduYWwoZi5yZWFsKTsK KwlpZiAoIWRtYV9mZW5jZV9nZXRfc3RhdHVzKGYucHJveHkpKSB7CisJCXByX2VycigiRmVuY2Ug bm90IHJlcG9ydGluZyBzaWduYWxlZCBzdGF0dXNcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0K KworCWVyciA9IDA7CitlcnJfZnJlZToKKwlmcmVlX2ZlbmNlcygmZik7CisJcmV0dXJuIGVycjsK K30KKworc3RhdGljIGludCB3cmFwX2Vycm9yKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZmVuY2Vz IGY7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoY3JlYXRlX2ZlbmNlcygmZiwgdHJ1ZSkp CisJCXJldHVybiAtRU5PTUVNOworCisJZG1hX2ZlbmNlX3NldF9lcnJvcihmLnJlYWwsIC1FSU8p OworCisJaWYgKGRtYV9mZW5jZV9nZXRfc3RhdHVzKGYucHJveHkpKSB7CisJCXByX2VycigiRmVu Y2UgdW5leHBlY3RlZGx5IGhhcyBlcnJvciBzdGF0dXMgYmVmb3JlIHNpZ25hbFxuIik7CisJCWdv dG8gZXJyX2ZyZWU7CisJfQorCisJZG1hX2ZlbmNlX3NpZ25hbChmLnJlYWwpOworCWlmIChkbWFf ZmVuY2VfZ2V0X3N0YXR1cyhmLnByb3h5KSAhPSAtRUlPKSB7CisJCXByX2VycigiRmVuY2Ugbm90 IHJlcG9ydGluZyBlcnJvciBzdGF0dXMsIGdvdCAlZFxuIiwKKwkJICAgICAgIGRtYV9mZW5jZV9n ZXRfc3RhdHVzKGYucHJveHkpKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwllcnIgPSAwOwor ZXJyX2ZyZWU6CisJZnJlZV9mZW5jZXMoJmYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBp bnQgd3JhcF93YWl0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZmVuY2VzIGY7CisJaW50IGVyciA9 IC1FSU5WQUw7CisKKwlpZiAoY3JlYXRlX2ZlbmNlcygmZiwgdHJ1ZSkpCisJCXJldHVybiAtRU5P TUVNOworCisJaWYgKGRtYV9mZW5jZV93YWl0X3RpbWVvdXQoZi5wcm94eSwgZmFsc2UsIDApICE9 IDApIHsKKwkJcHJfZXJyKCJXYWl0IHJlcG9ydGVkIGNvbXBsZXRlIGJlZm9yZSBiZWluZyBzaWdu YWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZG1hX2ZlbmNlX3NpZ25hbChmLnJl YWwpOworCisJaWYgKGRtYV9mZW5jZV93YWl0X3RpbWVvdXQoZi5wcm94eSwgZmFsc2UsIDApID09 IDApIHsKKwkJcHJfZXJyKCJXYWl0IHJlcG9ydGVkIGluY29tcGxldGUgYWZ0ZXIgYmVpbmcgc2ln bmFsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWVyciA9IDA7CitlcnJfZnJlZToK KwlkbWFfZmVuY2Vfc2lnbmFsKGYucmVhbCk7CisJZnJlZV9mZW5jZXMoJmYpOworCXJldHVybiBl cnI7Cit9CisKK3N0cnVjdCB3YWl0X3RpbWVyIHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsK KwlzdHJ1Y3QgZmVuY2VzIGY7Cit9OworCitzdGF0aWMgdm9pZCB3YWl0X3RpbWVyKHN0cnVjdCB0 aW1lcl9saXN0ICp0aW1lcikKK3sKKwlzdHJ1Y3Qgd2FpdF90aW1lciAqd3QgPSBmcm9tX3RpbWVy KHd0LCB0aW1lciwgdGltZXIpOworCisJZG1hX2ZlbmNlX3NpZ25hbCh3dC0+Zi5yZWFsKTsKK30K Kworc3RhdGljIGludCB3cmFwX3dhaXRfdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IHdh aXRfdGltZXIgd3Q7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoY3JlYXRlX2ZlbmNlcygm d3QuZiwgdHJ1ZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJdGltZXJfc2V0dXBfb25fc3RhY2so Jnd0LnRpbWVyLCB3YWl0X3RpbWVyLCAwKTsKKworCWlmIChkbWFfZmVuY2Vfd2FpdF90aW1lb3V0 KHd0LmYucHJveHksIGZhbHNlLCAxKSAhPSAwKSB7CisJCXByX2VycigiV2FpdCByZXBvcnRlZCBj b21wbGV0ZSBiZWZvcmUgYmVpbmcgc2lnbmFsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0K KworCW1vZF90aW1lcigmd3QudGltZXIsIGppZmZpZXMgKyAxKTsKKworCWlmIChkbWFfZmVuY2Vf d2FpdF90aW1lb3V0KHd0LmYucHJveHksIGZhbHNlLCAyKSAhPSAwKSB7CisJCWlmICh0aW1lcl9w ZW5kaW5nKCZ3dC50aW1lcikpIHsKKwkJCXByX25vdGljZSgiVGltZXIgZGlkIG5vdCBmaXJlIHdp dGhpbiB0aGUgamlmZmllIVxuIik7CisJCQllcnIgPSAwOyAvKiBub3Qgb3VyIGZhdWx0ISAqLwor CQl9IGVsc2UgeworCQkJcHJfZXJyKCJXYWl0IHJlcG9ydGVkIGluY29tcGxldGUgYWZ0ZXIgdGlt ZW91dFxuIik7CisJCX0KKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwllcnIgPSAwOworZXJyX2Zy ZWU6CisJZGVsX3RpbWVyX3N5bmMoJnd0LnRpbWVyKTsKKwlkZXN0cm95X3RpbWVyX29uX3N0YWNr KCZ3dC50aW1lcik7CisJZG1hX2ZlbmNlX3NpZ25hbCh3dC5mLnJlYWwpOworCWZyZWVfZmVuY2Vz KCZ3dC5mKTsKKwlyZXR1cm4gZXJyOworfQorCitzdHJ1Y3QgcHJveHlfd2FpdCB7CisJc3RydWN0 IHdhaXRfcXVldWVfZW50cnkgYmFzZTsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKKwlib29s IHNlZW47Cit9OworCitzdGF0aWMgaW50IHByb3h5X3dhaXRfY2Ioc3RydWN0IHdhaXRfcXVldWVf ZW50cnkgKmVudHJ5LAorCQkJIHVuc2lnbmVkIGludCBtb2RlLCBpbnQgZmxhZ3MsIHZvaWQgKmtl eSkKK3sKKwlzdHJ1Y3QgcHJveHlfd2FpdCAqcCA9IGNvbnRhaW5lcl9vZihlbnRyeSwgdHlwZW9m KCpwKSwgYmFzZSk7CisKKwlwLT5mZW5jZSA9IGtleTsKKwlwLT5zZWVuID0gdHJ1ZTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHdyYXBfbGlzdGVuX2Vhcmx5KHZvaWQgKmFyZykKK3sK KwlzdHJ1Y3QgcHJveHlfd2FpdCB3YWl0ID0geyAuYmFzZS5mdW5jID0gcHJveHlfd2FpdF9jYiB9 OworCXN0cnVjdCBmZW5jZXMgZjsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWlmIChjcmVhdGVf ZmVuY2VzKCZmLCBmYWxzZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJZG1hX2ZlbmNlX3JlcGxh Y2VfcHJveHkoJmYuc2xvdCwgZi5yZWFsKTsKKwlkbWFfZmVuY2VfYWRkX3Byb3h5X2xpc3RlbmVy KGYucHJveHksICZ3YWl0LmJhc2UpOworCisJaWYgKCF3YWl0LnNlZW4pIHsKKwkJcHJfZXJyKCJQ cm94eSBsaXN0ZW5lciB3YXMgbm90IGNhbGxlZCBhZnRlciByZXBsYWNlIVxuIik7CisJCWVyciA9 IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJaWYgKHdhaXQuZmVuY2UgIT0gZi5y ZWFsKSB7CisJCXByX2VycigiUHJveHkgbGlzdGVuZXIgd2FzIG5vdCBwYXNzZWQgdGhlIHJlYWwg ZmVuY2UhXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwll cnIgPSAwOworZXJyX2ZyZWU6CisJZG1hX2ZlbmNlX3NpZ25hbChmLnJlYWwpOworCWZyZWVfZmVu Y2VzKCZmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyYXBfbGlzdGVuX2xhdGUo dm9pZCAqYXJnKQoreworCXN0cnVjdCBwcm94eV93YWl0IHdhaXQgPSB7IC5iYXNlLmZ1bmMgPSBw cm94eV93YWl0X2NiIH07CisJc3RydWN0IGZlbmNlcyBmOworCWludCBlcnIgPSAtRUlOVkFMOwor CisJaWYgKGNyZWF0ZV9mZW5jZXMoJmYsIGZhbHNlKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlk bWFfZmVuY2VfYWRkX3Byb3h5X2xpc3RlbmVyKGYucHJveHksICZ3YWl0LmJhc2UpOworCWRtYV9m ZW5jZV9yZXBsYWNlX3Byb3h5KCZmLnNsb3QsIGYucmVhbCk7CisKKwlpZiAoIXdhaXQuc2Vlbikg eworCQlwcl9lcnIoIlByb3h5IGxpc3RlbmVyIHdhcyBub3QgY2FsbGVkIG9uIHJlcGxhY2UhXG4i KTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlpZiAod2FpdC5m ZW5jZSAhPSBmLnJlYWwpIHsKKwkJcHJfZXJyKCJQcm94eSBsaXN0ZW5lciB3YXMgbm90IHBhc3Nl ZCB0aGUgcmVhbCBmZW5jZSFcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9mcmVl OworCX0KKworCWVyciA9IDA7CitlcnJfZnJlZToKKwlkbWFfZmVuY2Vfc2lnbmFsKGYucmVhbCk7 CisJZnJlZV9mZW5jZXMoJmYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd3JhcF9s aXN0ZW5fY2FuY2VsKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcHJveHlfd2FpdCB3YWl0ID0geyAu YmFzZS5mdW5jID0gcHJveHlfd2FpdF9jYiB9OworCXN0cnVjdCBmZW5jZXMgZjsKKwlpbnQgZXJy ID0gLUVJTlZBTDsKKworCWlmIChjcmVhdGVfZmVuY2VzKCZmLCBmYWxzZSkpCisJCXJldHVybiAt RU5PTUVNOworCisJZG1hX2ZlbmNlX2FkZF9wcm94eV9saXN0ZW5lcihmLnByb3h5LCAmd2FpdC5i YXNlKTsKKwlpZiAoIWRtYV9mZW5jZV9yZW1vdmVfcHJveHlfbGlzdGVuZXIoZi5wcm94eSwgJndh aXQuYmFzZSkpIHsKKwkJcHJfZXJyKCJDYW5jZWxsaW5nIGxpc3RlbmVyLCBhbHJlYWR5IGRldGFj aGVkP1xuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCWRtYV9m ZW5jZV9yZXBsYWNlX3Byb3h5KCZmLnNsb3QsIGYucmVhbCk7CisKKwlpZiAod2FpdC5zZWVuKSB7 CisJCXByX2VycigiUHJveHkgbGlzdGVuZXIgd2FzIGNhbGxlZCBhZnRlciBiZWluZyByZW1vdmVk IVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJaWYgKGRt YV9mZW5jZV9yZW1vdmVfcHJveHlfbGlzdGVuZXIoZi5wcm94eSwgJndhaXQuYmFzZSkpIHsKKwkJ cHJfZXJyKCJEb3VibGUgbGlzdGVuZXIgY2FuY2VsbGF0aW9uIVxuIik7CisJCWVyciA9IC1FSU5W QUw7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZXJyID0gMDsKK2Vycl9mcmVlOgorCWRtYV9m ZW5jZV9zaWduYWwoZi5yZWFsKTsKKwlmcmVlX2ZlbmNlcygmZik7CisJcmV0dXJuIGVycjsKK30K KworaW50IGRtYV9mZW5jZV9wcm94eSh2b2lkKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3Vi dGVzdCB0ZXN0c1tdID0geworCQlTVUJURVNUKHNhbml0eWNoZWNrKSwKKwkJU1VCVEVTVCh3cmFw X3RhcmdldCksCisJCVNVQlRFU1Qod3JhcF9wcm94eSksCisJCVNVQlRFU1Qod3JhcF9zaWduYWxp bmcpLAorCQlTVUJURVNUKHdyYXBfc2lnbmFsaW5nX3JlY3Vyc2UpLAorCQlTVUJURVNUKHdyYXBf YWRkX2NhbGxiYWNrKSwKKwkJU1VCVEVTVCh3cmFwX2FkZF9jYWxsYmFja19yZWN1cnNlKSwKKwkJ U1VCVEVTVCh3cmFwX2xhdGVfYWRkX2NhbGxiYWNrKSwKKwkJU1VCVEVTVCh3cmFwX2Vhcmx5X2Fk ZF9jYWxsYmFjayksCisJCVNVQlRFU1Qod3JhcF9lYXJseV9hZGRfY2FsbGJhY2tfbGF0ZSksCisJ CVNVQlRFU1Qod3JhcF9lYXJseV9hZGRfY2FsbGJhY2tfZWFybHkpLAorCQlTVUJURVNUKHdyYXBf cm1fY2FsbGJhY2spLAorCQlTVUJURVNUKHdyYXBfbGF0ZV9ybV9jYWxsYmFjayksCisJCVNVQlRF U1Qod3JhcF9zdGF0dXMpLAorCQlTVUJURVNUKHdyYXBfZXJyb3IpLAorCQlTVUJURVNUKHdyYXBf d2FpdCksCisJCVNVQlRFU1Qod3JhcF93YWl0X3RpbWVvdXQpLAorCQlTVUJURVNUKHdyYXBfbGlz dGVuX2Vhcmx5KSwKKwkJU1VCVEVTVCh3cmFwX2xpc3Rlbl9sYXRlKSwKKwkJU1VCVEVTVCh3cmFw X2xpc3Rlbl9jYW5jZWwpLAorCX07CisJaW50IHJldDsKKworCXNsYWJfZmVuY2VzID0gS01FTV9D QUNIRShtb2NrX2ZlbmNlLAorCQkJCSBTTEFCX1RZUEVTQUZFX0JZX1JDVSB8CisJCQkJIFNMQUJf SFdDQUNIRV9BTElHTik7CisJaWYgKCFzbGFiX2ZlbmNlcykKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlyZXQgPSBzdWJ0ZXN0cyh0ZXN0cywgTlVMTCk7CisKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc2xh Yl9mZW5jZXMpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv ZG1hLWZlbmNlLXByb3h5LmggYi9pbmNsdWRlL2xpbnV4L2RtYS1mZW5jZS1wcm94eS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNmE5ODZiNWJiMDA5Ci0tLSAvZGV2 L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtZmVuY2UtcHJveHkuaApAQCAtMCwwICsxLDM4 IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICog ZG1hLWZlbmNlLXByb3h5OiBhbGxvd3Mgd2FpdGluZyB1cG9uIHVuc2V0IGFuZCBmdXR1cmUgZmVu Y2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKi8KKwor I2lmbmRlZiBfX0xJTlVYX0RNQV9GRU5DRV9QUk9YWV9ICisjZGVmaW5lIF9fTElOVVhfRE1BX0ZF TkNFX1BST1hZX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4 L2RtYS1mZW5jZS5oPgorCitzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeTsKKworZXh0ZXJuIGNvbnN0 IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGRtYV9mZW5jZV9wcm94eV9vcHM7CisKK3N0cnVjdCBkbWFf ZmVuY2UgKl9fZG1hX2ZlbmNlX2NyZWF0ZV9wcm94eSh1NjQgY29udGV4dCwgdTY0IHNlcW5vKTsK K3N0cnVjdCBkbWFfZmVuY2UgKmRtYV9mZW5jZV9jcmVhdGVfcHJveHkodm9pZCk7CisKK3N0YXRp YyBpbmxpbmUgYm9vbCBkbWFfZmVuY2VfaXNfcHJveHkoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2Up Cit7CisJcmV0dXJuIGZlbmNlLT5vcHMgPT0gJmRtYV9mZW5jZV9wcm94eV9vcHM7Cit9CisKK3Zv aWQgZG1hX2ZlbmNlX3Byb3h5X3NldF9yZWFsKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLCBzdHJ1 Y3QgZG1hX2ZlbmNlICpyZWFsKTsKK3N0cnVjdCBkbWFfZmVuY2UgKmRtYV9mZW5jZV9wcm94eV9n ZXRfcmVhbChzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSk7CisKK3N0cnVjdCBkbWFfZmVuY2UgKgor ZG1hX2ZlbmNlX3JlcGxhY2VfcHJveHkoc3RydWN0IGRtYV9mZW5jZSBfX3JjdSAqKnNsb3QsCisJ CQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSk7CisKK3ZvaWQgZG1hX2ZlbmNlX2FkZF9wcm94eV9s aXN0ZW5lcihzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKKwkJCQkgIHN0cnVjdCB3YWl0X3F1ZXVl X2VudHJ5ICp3YWl0KTsKK2Jvb2wgZG1hX2ZlbmNlX3JlbW92ZV9wcm94eV9saXN0ZW5lcihzdHJ1 Y3QgZG1hX2ZlbmNlICpmZW5jZSwKKwkJCQkgICAgIHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3 YWl0KTsKKworI2VuZGlmIC8qIF9fTElOVVhfRE1BX0ZFTkNFX1BST1hZX0ggKi8KLS0gCjIuMjAu MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==