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=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 1594DC433DB for ; Wed, 27 Jan 2021 03:06:14 +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 D33D3205F4 for ; Wed, 27 Jan 2021 03:06:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D33D3205F4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com 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 7AD886E4E6; Wed, 27 Jan 2021 03:06:13 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7CFAA6E4E8 for ; Wed, 27 Jan 2021 03:06:05 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-463-NqfrxMHfOqO_KKPQCRIu-A-1; Tue, 26 Jan 2021 22:06:00 -0500 X-MC-Unique: NqfrxMHfOqO_KKPQCRIu-A-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2E9F4425CE; Wed, 27 Jan 2021 03:05:59 +0000 (UTC) Received: from dreadlord-bne-redhat-com.bne.redhat.com (unknown [10.64.32.209]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0A95760C05; Wed, 27 Jan 2021 03:05:57 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Wed, 27 Jan 2021 13:05:42 +1000 Message-Id: <20210127030548.29296-5-airlied@gmail.com> In-Reply-To: <20210127030548.29296-1-airlied@gmail.com> References: <20210127030548.29296-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 04/10] drm/i915: move pipe update code into crtc. (v2) 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: Jani Nikula , Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KCkRhbmllbCBzdWdnZXN0ZWQg dGhpcyBzaG91bGQgbW92ZSBoZXJlLgoKdjI6IG1vdmUgdnJyIGNvZGUuCgpTaWduZWQtb2ZmLWJ5 OiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgpTaWduZWQtb2ZmLWJ5OiBKYW5pIE5p a3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogVmlsbGUgU3lyasOkbMOk IDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2NydGMuYyAgIHwgMjQ1ICsrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jIHwgMjQyIC0tLS0tLS0tLS0t LS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjQ1IGluc2VydGlvbnMoKyksIDI0MiBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Ny dGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3J0Yy5jCmluZGV4IGVi NDc4NzEyYzM4MS4uZmRjODk2YzU1MTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2NydGMuYwpAQCAtMTAsNiArMTAsOSBAQAogI2luY2x1ZGUgPGRybS9kcm1fcGxhbmUu aD4KICNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgogCisjaW5jbHVkZSAiaTkxNV90 cmFjZS5oIgorI2luY2x1ZGUgImk5MTVfdmdwdS5oIgorCiAjaW5jbHVkZSAiaW50ZWxfYXRvbWlj LmgiCiAjaW5jbHVkZSAiaW50ZWxfYXRvbWljX3BsYW5lLmgiCiAjaW5jbHVkZSAiaW50ZWxfY29s b3IuaCIKQEAgLTE3LDggKzIwLDExIEBACiAjaW5jbHVkZSAiaW50ZWxfY3Vyc29yLmgiCiAjaW5j bHVkZSAiaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90 eXBlcy5oIgorI2luY2x1ZGUgImludGVsX2RzaS5oIgogI2luY2x1ZGUgImludGVsX3BpcGVfY3Jj LmgiCisjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCisj aW5jbHVkZSAiaW50ZWxfdnJyLmgiCiAjaW5jbHVkZSAiaTl4eF9wbGFuZS5oIgogI2luY2x1ZGUg InNrbF91bml2ZXJzYWxfcGxhbmUuaCIKIApAQCAtMzMyLDMgKzMzOCwyNDIgQEAgaW50IGludGVs X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBw aXBlKQogCiAJcmV0dXJuIHJldDsKIH0KKworaW50IGludGVsX3VzZWNzX3RvX3NjYW5saW5lcyhj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSwKKwkJCSAgICAgaW50 IHVzZWNzKQoreworCS8qIHBhcmFub2lhICovCisJaWYgKCFhZGp1c3RlZF9tb2RlLT5jcnRjX2h0 b3RhbCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gRElWX1JPVU5EX1VQKHVzZWNzICogYWRqdXN0 ZWRfbW9kZS0+Y3J0Y19jbG9jaywKKwkJCSAgICAxMDAwICogYWRqdXN0ZWRfbW9kZS0+Y3J0Y19o dG90YWwpOworfQorCitzdGF0aWMgaW50IGludGVsX21vZGVfdmJsYW5rX3N0YXJ0KGNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWludCB2Ymxhbmtfc3RhcnQgPSBtb2Rl LT5jcnRjX3ZibGFua19zdGFydDsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdf SU5URVJMQUNFKQorCQl2Ymxhbmtfc3RhcnQgPSBESVZfUk9VTkRfVVAodmJsYW5rX3N0YXJ0LCAy KTsKKworCXJldHVybiB2Ymxhbmtfc3RhcnQ7Cit9CisKKy8qKgorICogaW50ZWxfcGlwZV91cGRh dGVfc3RhcnQoKSAtIHN0YXJ0IHVwZGF0ZSBvZiBhIHNldCBvZiBkaXNwbGF5IHJlZ2lzdGVycwor ICogQG5ld19jcnRjX3N0YXRlOiB0aGUgbmV3IGNydGMgc3RhdGUKKyAqCisgKiBNYXJrIHRoZSBz dGFydCBvZiBhbiB1cGRhdGUgdG8gcGlwZSByZWdpc3RlcnMgdGhhdCBzaG91bGQgYmUgdXBkYXRl ZAorICogYXRvbWljYWxseSByZWdhcmRpbmcgdmJsYW5rLiBJZiB0aGUgbmV4dCB2Ymxhbmsgd2ls bCBoYXBwZW5zIHdpdGhpbgorICogdGhlIG5leHQgMTAwIHVzLCB0aGlzIGZ1bmN0aW9uIHdhaXRz IHVudGlsIHRoZSB2YmxhbmsgcGFzc2VzLgorICoKKyAqIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxs IHRvIHRoaXMgZnVuY3Rpb24sIGludGVycnVwdHMgd2lsbCBiZSBkaXNhYmxlZAorICogdW50aWwg YSBzdWJzZXF1ZW50IGNhbGwgdG8gaW50ZWxfcGlwZV91cGRhdGVfZW5kKCkuIFRoYXQgaXMgZG9u ZSB0bworICogYXZvaWQgcmFuZG9tIGRlbGF5cy4KKyAqLwordm9pZCBpbnRlbF9waXBlX3VwZGF0 ZV9zdGFydChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUpCit7 CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKG5ld19jcnRjX3N0YXRl LT51YXBpLmNydGMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoY3J0Yy0+YmFzZS5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1 c3RlZF9tb2RlID0gJm5ld19jcnRjX3N0YXRlLT5ody5hZGp1c3RlZF9tb2RlOworCWxvbmcgdGlt ZW91dCA9IG1zZWNzX3RvX2ppZmZpZXNfdGltZW91dCgxKTsKKwlpbnQgc2NhbmxpbmUsIG1pbiwg bWF4LCB2Ymxhbmtfc3RhcnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxID0gZHJtX2NydGNfdmJs YW5rX3dhaXRxdWV1ZSgmY3J0Yy0+YmFzZSk7CisJYm9vbCBuZWVkX3Zsdl9kc2lfd2EgPSAoSVNf VkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpICYmCisJCWlu dGVsX2NydGNfaGFzX3R5cGUobmV3X2NydGNfc3RhdGUsIElOVEVMX09VVFBVVF9EU0kpOworCURF RklORV9XQUlUKHdhaXQpOworCXUzMiBwc3Jfc3RhdHVzOworCisJaWYgKG5ld19jcnRjX3N0YXRl LT51YXBpLmFzeW5jX2ZsaXApCisJCXJldHVybjsKKworCWlmIChuZXdfY3J0Y19zdGF0ZS0+dnJy LmVuYWJsZSkKKwkJdmJsYW5rX3N0YXJ0ID0gaW50ZWxfdnJyX3ZtYXhfdmJsYW5rX3N0YXJ0KG5l d19jcnRjX3N0YXRlKTsKKwllbHNlCisJCXZibGFua19zdGFydCA9IGludGVsX21vZGVfdmJsYW5r X3N0YXJ0KGFkanVzdGVkX21vZGUpOworCisJLyogRklYTUUgbmVlZHMgdG8gYmUgY2FsaWJyYXRl ZCBzZW5zaWJseSAqLworCW1pbiA9IHZibGFua19zdGFydCAtIGludGVsX3VzZWNzX3RvX3NjYW5s aW5lcyhhZGp1c3RlZF9tb2RlLAorCQkJCQkJICAgICAgVkJMQU5LX0VWQVNJT05fVElNRV9VUyk7 CisJbWF4ID0gdmJsYW5rX3N0YXJ0IC0gMTsKKworCWlmIChtaW4gPD0gMCB8fCBtYXggPD0gMCkK KwkJZ290byBpcnFfZGlzYWJsZTsKKworCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwg ZHJtX2NydGNfdmJsYW5rX2dldCgmY3J0Yy0+YmFzZSkpKQorCQlnb3RvIGlycV9kaXNhYmxlOwor CisJLyoKKwkgKiBXYWl0IGZvciBwc3IgdG8gaWRsZSBvdXQgYWZ0ZXIgZW5hYmxpbmcgdGhlIFZC TCBpbnRlcnJ1cHRzCisJICogVkJMIGludGVycnVwdHMgd2lsbCBzdGFydCB0aGUgUFNSIGV4aXQg YW5kIHByZXZlbnQgYSBQU1IKKwkgKiByZS1lbnRyeSBhcyB3ZWxsLgorCSAqLworCWlmIChpbnRl bF9wc3Jfd2FpdF9mb3JfaWRsZShuZXdfY3J0Y19zdGF0ZSwgJnBzcl9zdGF0dXMpKQorCQlkcm1f ZXJyKCZkZXZfcHJpdi0+ZHJtLAorCQkJIlBTUiBpZGxlIHRpbWVkIG91dCAweCV4LCBhdG9taWMg dXBkYXRlIG1heSBmYWlsXG4iLAorCQkJcHNyX3N0YXR1cyk7CisKKwlsb2NhbF9pcnFfZGlzYWJs ZSgpOworCisJY3J0Yy0+ZGVidWcubWluX3ZibCA9IG1pbjsKKwljcnRjLT5kZWJ1Zy5tYXhfdmJs ID0gbWF4OworCXRyYWNlX2ludGVsX3BpcGVfdXBkYXRlX3N0YXJ0KGNydGMpOworCisJZm9yICg7 OykgeworCQkvKgorCQkgKiBwcmVwYXJlX3RvX3dhaXQoKSBoYXMgYSBtZW1vcnkgYmFycmllciwg d2hpY2ggZ3VhcmFudGVlcworCQkgKiBvdGhlciBDUFVzIGNhbiBzZWUgdGhlIHRhc2sgc3RhdGUg dXBkYXRlIGJ5IHRoZSB0aW1lIHdlCisJCSAqIHJlYWQgdGhlIHNjYW5saW5lLgorCQkgKi8KKwkJ cHJlcGFyZV90b193YWl0KHdxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCisJCXNj YW5saW5lID0gaW50ZWxfZ2V0X2NydGNfc2NhbmxpbmUoY3J0Yyk7CisJCWlmIChzY2FubGluZSA8 IG1pbiB8fCBzY2FubGluZSA+IG1heCkKKwkJCWJyZWFrOworCisJCWlmICghdGltZW91dCkgewor CQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwKKwkJCQkiUG90ZW50aWFsIGF0b21pYyB1cGRhdGUg ZmFpbHVyZSBvbiBwaXBlICVjXG4iLAorCQkJCXBpcGVfbmFtZShjcnRjLT5waXBlKSk7CisJCQli cmVhazsKKwkJfQorCisJCWxvY2FsX2lycV9lbmFibGUoKTsKKworCQl0aW1lb3V0ID0gc2NoZWR1 bGVfdGltZW91dCh0aW1lb3V0KTsKKworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCX0KKworCWZp bmlzaF93YWl0KHdxLCAmd2FpdCk7CisKKwlkcm1fY3J0Y192YmxhbmtfcHV0KCZjcnRjLT5iYXNl KTsKKworCS8qCisJICogT24gVkxWL0NIViBEU0kgdGhlIHNjYW5saW5lIGNvdW50ZXIgd291bGQg YXBwZWFyIHRvCisJICogaW5jcmVtZW50IGFwcHJveC4gMS8zIG9mIGEgc2NhbmxpbmUgYmVmb3Jl IHN0YXJ0IG9mIHZibGFuay4KKwkgKiBUaGUgcmVnaXN0ZXJzIHN0aWxsIGdldCBsYXRjaGVkIGF0 IHN0YXJ0IG9mIHZibGFuayBob3dldmVyLgorCSAqIFRoaXMgbWVhbnMgd2UgbXVzdCBub3Qgd3Jp dGUgYW55IHJlZ2lzdGVycyBvbiB0aGUgZmlyc3QKKwkgKiBsaW5lIG9mIHZibGFuayAoc2luY2Ug bm90IHRoZSB3aG9sZSBsaW5lIGlzIGFjdHVhbGx5IGluCisJICogdmJsYW5rKS4gQW5kIHVuZm9y dHVuYXRlbHkgd2UgY2FuJ3QgdXNlIHRoZSBpbnRlcnJ1cHQgdG8KKwkgKiB3YWl0IGhlcmUgc2lu Y2UgaXQgd2lsbCBmaXJlIHRvbyBzb29uLiBXZSBjb3VsZCB1c2UgdGhlCisJICogZnJhbWUgc3Rh cnQgaW50ZXJydXB0IGluc3RlYWQgc2luY2UgaXQgd2lsbCBmaXJlIGFmdGVyIHRoZQorCSAqIGNy aXRpY2FsIHNjYW5saW5lLCBidXQgdGhhdCB3b3VsZCByZXF1aXJlIG1vcmUgY2hhbmdlcworCSAq IGluIHRoZSBpbnRlcnJ1cHQgY29kZS4gU28gZm9yIG5vdyB3ZSdsbCBqdXN0IGRvIHRoZSBuYXN0 eQorCSAqIHRoaW5nIGFuZCBwb2xsIGZvciB0aGUgYmFkIHNjYW5saW5lIHRvIHBhc3MgdXMgYnku CisJICoKKwkgKiBGSVhNRSBmaWd1cmUgb3V0IGlmIEJYVCsgRFNJIHN1ZmZlcnMgZnJvbSB0aGlz IGFzIHdlbGwKKwkgKi8KKwl3aGlsZSAobmVlZF92bHZfZHNpX3dhICYmIHNjYW5saW5lID09IHZi bGFua19zdGFydCkKKwkJc2NhbmxpbmUgPSBpbnRlbF9nZXRfY3J0Y19zY2FubGluZShjcnRjKTsK KworCWNydGMtPmRlYnVnLnNjYW5saW5lX3N0YXJ0ID0gc2NhbmxpbmU7CisJY3J0Yy0+ZGVidWcu c3RhcnRfdmJsX3RpbWUgPSBrdGltZV9nZXQoKTsKKwljcnRjLT5kZWJ1Zy5zdGFydF92YmxfY291 bnQgPSBpbnRlbF9jcnRjX2dldF92YmxhbmtfY291bnRlcihjcnRjKTsKKworCXRyYWNlX2ludGVs X3BpcGVfdXBkYXRlX3ZibGFua19ldmFkZWQoY3J0Yyk7CisJcmV0dXJuOworCitpcnFfZGlzYWJs ZToKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworfQorCisjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJN X0k5MTVfREVCVUdfVkJMQU5LX0VWQURFKQorc3RhdGljIHZvaWQgZGJnX3ZibGFua19ldmFkZShz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yywga3RpbWVfdCBlbmQpCit7CisJdTY0IGRlbHRhID0ga3Rp bWVfdG9fbnMoa3RpbWVfc3ViKGVuZCwgY3J0Yy0+ZGVidWcuc3RhcnRfdmJsX3RpbWUpKTsKKwl1 bnNpZ25lZCBpbnQgaDsKKworCWggPSBpbG9nMihkZWx0YSA+PiA5KTsKKwlpZiAoaCA+PSBBUlJB WV9TSVpFKGNydGMtPmRlYnVnLnZibC50aW1lcykpCisJCWggPSBBUlJBWV9TSVpFKGNydGMtPmRl YnVnLnZibC50aW1lcykgLSAxOworCWNydGMtPmRlYnVnLnZibC50aW1lc1toXSsrOworCisJY3J0 Yy0+ZGVidWcudmJsLnN1bSArPSBkZWx0YTsKKwlpZiAoIWNydGMtPmRlYnVnLnZibC5taW4gfHwg ZGVsdGEgPCBjcnRjLT5kZWJ1Zy52YmwubWluKQorCQljcnRjLT5kZWJ1Zy52YmwubWluID0gZGVs dGE7CisJaWYgKGRlbHRhID4gY3J0Yy0+ZGVidWcudmJsLm1heCkKKwkJY3J0Yy0+ZGVidWcudmJs Lm1heCA9IGRlbHRhOworCisJaWYgKGRlbHRhID4gMTAwMCAqIFZCTEFOS19FVkFTSU9OX1RJTUVf VVMpIHsKKwkJZHJtX2RiZ19rbXMoY3J0Yy0+YmFzZS5kZXYsCisJCQkgICAgIkF0b21pYyB1cGRh dGUgb24gcGlwZSAoJWMpIHRvb2sgJWxsZCB1cywgbWF4IHRpbWUgdW5kZXIgZXZhc2lvbiBpcyAl dSB1c1xuIiwKKwkJCSAgICBwaXBlX25hbWUoY3J0Yy0+cGlwZSksCisJCQkgICAgZGl2X3U2NChk ZWx0YSwgMTAwMCksCisJCQkgICAgVkJMQU5LX0VWQVNJT05fVElNRV9VUyk7CisJCWNydGMtPmRl YnVnLnZibC5vdmVyKys7CisJfQorfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGRiZ192YmxhbmtfZXZh ZGUoc3RydWN0IGludGVsX2NydGMgKmNydGMsIGt0aW1lX3QgZW5kKSB7fQorI2VuZGlmCisKKy8q KgorICogaW50ZWxfcGlwZV91cGRhdGVfZW5kKCkgLSBlbmQgdXBkYXRlIG9mIGEgc2V0IG9mIGRp c3BsYXkgcmVnaXN0ZXJzCisgKiBAbmV3X2NydGNfc3RhdGU6IHRoZSBuZXcgY3J0YyBzdGF0ZQor ICoKKyAqIE1hcmsgdGhlIGVuZCBvZiBhbiB1cGRhdGUgc3RhcnRlZCB3aXRoIGludGVsX3BpcGVf dXBkYXRlX3N0YXJ0KCkuIFRoaXMKKyAqIHJlLWVuYWJsZXMgaW50ZXJydXB0cyBhbmQgdmVyaWZp ZXMgdGhlIHVwZGF0ZSB3YXMgYWN0dWFsbHkgY29tcGxldGVkCisgKiBiZWZvcmUgYSB2Ymxhbmsu CisgKi8KK3ZvaWQgaW50ZWxfcGlwZV91cGRhdGVfZW5kKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpuZXdfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVs X2NydGMobmV3X2NydGNfc3RhdGUtPnVhcGkuY3J0Yyk7CisJZW51bSBwaXBlIHBpcGUgPSBjcnRj LT5waXBlOworCWludCBzY2FubGluZV9lbmQgPSBpbnRlbF9nZXRfY3J0Y19zY2FubGluZShjcnRj KTsKKwl1MzIgZW5kX3ZibF9jb3VudCA9IGludGVsX2NydGNfZ2V0X3ZibGFua19jb3VudGVyKGNy dGMpOworCWt0aW1lX3QgZW5kX3ZibF90aW1lID0ga3RpbWVfZ2V0KCk7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisKKwlpZiAo bmV3X2NydGNfc3RhdGUtPnVhcGkuYXN5bmNfZmxpcCkKKwkJcmV0dXJuOworCisJdHJhY2VfaW50 ZWxfcGlwZV91cGRhdGVfZW5kKGNydGMsIGVuZF92YmxfY291bnQsIHNjYW5saW5lX2VuZCk7CisK KwkvKgorCSAqIEluY2FzZSBvZiBtaXBpIGRzaSBjb21tYW5kIG1vZGUsIHdlIG5lZWQgdG8gc2V0 IGZyYW1lIHVwZGF0ZQorCSAqIHJlcXVlc3QgZm9yIGV2ZXJ5IGNvbW1pdC4KKwkgKi8KKwlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSAmJgorCSAgICBpbnRlbF9jcnRjX2hhc190eXBlKG5l d19jcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRFNJKSkKKwkJaWNsX2RzaV9mcmFtZV91cGRhdGUo bmV3X2NydGNfc3RhdGUpOworCisJLyogV2UncmUgc3RpbGwgaW4gdGhlIHZibGFuay1ldmFkZSBj cml0aWNhbCBzZWN0aW9uLCB0aGlzIGNhbid0IHJhY2UuCisJICogV291bGQgYmUgc2xpZ2h0bHkg bmljZSB0byBqdXN0IGdyYWIgdGhlIHZibGFuayBjb3VudCBhbmQgYXJtIHRoZQorCSAqIGV2ZW50 IG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24gLSB0aGUgc3BpbmxvY2sgbWlnaHQgc3Bp biBmb3IgYQorCSAqIHdoaWxlIC4uLiAqLworCWlmIChuZXdfY3J0Y19zdGF0ZS0+dWFwaS5ldmVu dCkgeworCQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwKKwkJCSAgICBkcm1fY3J0Y192Ymxh bmtfZ2V0KCZjcnRjLT5iYXNlKSAhPSAwKTsKKworCQlzcGluX2xvY2soJmNydGMtPmJhc2UuZGV2 LT5ldmVudF9sb2NrKTsKKwkJZHJtX2NydGNfYXJtX3ZibGFua19ldmVudCgmY3J0Yy0+YmFzZSwK KwkJCQkJICBuZXdfY3J0Y19zdGF0ZS0+dWFwaS5ldmVudCk7CisJCXNwaW5fdW5sb2NrKCZjcnRj LT5iYXNlLmRldi0+ZXZlbnRfbG9jayk7CisKKwkJbmV3X2NydGNfc3RhdGUtPnVhcGkuZXZlbnQg PSBOVUxMOworCX0KKworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCS8qIFNlbmQgVlJSIFB1c2gg dG8gdGVybWluYXRlIFZibGFuayAqLworCWludGVsX3Zycl9zZW5kX3B1c2gobmV3X2NydGNfc3Rh dGUpOworCisJaWYgKGludGVsX3ZncHVfYWN0aXZlKGRldl9wcml2KSkKKwkJcmV0dXJuOworCisJ aWYgKGNydGMtPmRlYnVnLnN0YXJ0X3ZibF9jb3VudCAmJgorCSAgICBjcnRjLT5kZWJ1Zy5zdGFy dF92YmxfY291bnQgIT0gZW5kX3ZibF9jb3VudCkgeworCQlkcm1fZXJyKCZkZXZfcHJpdi0+ZHJt LAorCQkJIkF0b21pYyB1cGRhdGUgZmFpbHVyZSBvbiBwaXBlICVjIChzdGFydD0ldSBlbmQ9JXUp IHRpbWUgJWxsZCB1cywgbWluICVkLCBtYXggJWQsIHNjYW5saW5lIHN0YXJ0ICVkLCBlbmQgJWRc biIsCisJCQlwaXBlX25hbWUocGlwZSksIGNydGMtPmRlYnVnLnN0YXJ0X3ZibF9jb3VudCwKKwkJ CWVuZF92YmxfY291bnQsCisJCQlrdGltZV91c19kZWx0YShlbmRfdmJsX3RpbWUsCisJCQkJICAg ICAgIGNydGMtPmRlYnVnLnN0YXJ0X3ZibF90aW1lKSwKKwkJCWNydGMtPmRlYnVnLm1pbl92Ymws IGNydGMtPmRlYnVnLm1heF92YmwsCisJCQljcnRjLT5kZWJ1Zy5zY2FubGluZV9zdGFydCwgc2Nh bmxpbmVfZW5kKTsKKwl9CisKKwlkYmdfdmJsYW5rX2V2YWRlKGNydGMsIGVuZF92YmxfdGltZSk7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0 ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYwppbmRleCAy OWUyMGM1M2EzM2MuLjc3ZTk3YzIzZTMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9zcHJpdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNw bGF5L2ludGVsX3Nwcml0ZS5jCkBAIC00NSwyNTIgKzQ1LDEwIEBACiAjaW5jbHVkZSAiaW50ZWxf YXRvbWljX3BsYW5lLmgiCiAjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIgogI2luY2x1 ZGUgImludGVsX2Zyb250YnVmZmVyLmgiCi0jaW5jbHVkZSAiaW50ZWxfcG0uaCIKLSNpbmNsdWRl ICJpbnRlbF9wc3IuaCIKLSNpbmNsdWRlICJpbnRlbF9kc2kuaCIKICNpbmNsdWRlICJpbnRlbF9z cHJpdGUuaCIKICNpbmNsdWRlICJpOXh4X3BsYW5lLmgiCiAjaW5jbHVkZSAiaW50ZWxfdnJyLmgi CiAKLWludCBpbnRlbF91c2Vjc190b19zY2FubGluZXMoY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmFkanVzdGVkX21vZGUsCi0JCQkgICAgIGludCB1c2VjcykKLXsKLQkvKiBwYXJhbm9p YSAqLwotCWlmICghYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwpCi0JCXJldHVybiAxOwotCi0J cmV0dXJuIERJVl9ST1VORF9VUCh1c2VjcyAqIGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2ssCi0J CQkgICAgMTAwMCAqIGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsKTsKLX0KLQotc3RhdGljIGlu dCBpbnRlbF9tb2RlX3ZibGFua19zdGFydChjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKLXsKLQlpbnQgdmJsYW5rX3N0YXJ0ID0gbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQ7Ci0K LQlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJdmJsYW5rX3N0 YXJ0ID0gRElWX1JPVU5EX1VQKHZibGFua19zdGFydCwgMik7Ci0KLQlyZXR1cm4gdmJsYW5rX3N0 YXJ0OwotfQotCi0vKioKLSAqIGludGVsX3BpcGVfdXBkYXRlX3N0YXJ0KCkgLSBzdGFydCB1cGRh dGUgb2YgYSBzZXQgb2YgZGlzcGxheSByZWdpc3RlcnMKLSAqIEBuZXdfY3J0Y19zdGF0ZTogdGhl IG5ldyBjcnRjIHN0YXRlCi0gKgotICogTWFyayB0aGUgc3RhcnQgb2YgYW4gdXBkYXRlIHRvIHBp cGUgcmVnaXN0ZXJzIHRoYXQgc2hvdWxkIGJlIHVwZGF0ZWQKLSAqIGF0b21pY2FsbHkgcmVnYXJk aW5nIHZibGFuay4gSWYgdGhlIG5leHQgdmJsYW5rIHdpbGwgaGFwcGVucyB3aXRoaW4KLSAqIHRo ZSBuZXh0IDEwMCB1cywgdGhpcyBmdW5jdGlvbiB3YWl0cyB1bnRpbCB0aGUgdmJsYW5rIHBhc3Nl cy4KLSAqCi0gKiBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLCBpbnRl cnJ1cHRzIHdpbGwgYmUgZGlzYWJsZWQKLSAqIHVudGlsIGEgc3Vic2VxdWVudCBjYWxsIHRvIGlu dGVsX3BpcGVfdXBkYXRlX2VuZCgpLiBUaGF0IGlzIGRvbmUgdG8KLSAqIGF2b2lkIHJhbmRvbSBk ZWxheXMuCi0gKi8KLXZvaWQgaW50ZWxfcGlwZV91cGRhdGVfc3RhcnQoY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICpj cnRjID0gdG9faW50ZWxfY3J0YyhuZXdfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQlj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9ICZuZXdfY3J0Y19z dGF0ZS0+aHcuYWRqdXN0ZWRfbW9kZTsKLQlsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVz X3RpbWVvdXQoMSk7Ci0JaW50IHNjYW5saW5lLCBtaW4sIG1heCwgdmJsYW5rX3N0YXJ0OwotCXdh aXRfcXVldWVfaGVhZF90ICp3cSA9IGRybV9jcnRjX3ZibGFua193YWl0cXVldWUoJmNydGMtPmJh c2UpOwotCWJvb2wgbmVlZF92bHZfZHNpX3dhID0gKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8 IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSAmJgotCQlpbnRlbF9jcnRjX2hhc190eXBlKG5ld19j cnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfRFNJKTsKLQlERUZJTkVfV0FJVCh3YWl0KTsKLQl1MzIg cHNyX3N0YXR1czsKLQotCWlmIChuZXdfY3J0Y19zdGF0ZS0+dWFwaS5hc3luY19mbGlwKQotCQly ZXR1cm47Ci0KLQlpZiAobmV3X2NydGNfc3RhdGUtPnZyci5lbmFibGUpCi0JCXZibGFua19zdGFy dCA9IGludGVsX3Zycl92bWF4X3ZibGFua19zdGFydChuZXdfY3J0Y19zdGF0ZSk7Ci0JZWxzZQot CQl2Ymxhbmtfc3RhcnQgPSBpbnRlbF9tb2RlX3ZibGFua19zdGFydChhZGp1c3RlZF9tb2RlKTsK LQotCS8qIEZJWE1FIG5lZWRzIHRvIGJlIGNhbGlicmF0ZWQgc2Vuc2libHkgKi8KLQltaW4gPSB2 Ymxhbmtfc3RhcnQgLSBpbnRlbF91c2Vjc190b19zY2FubGluZXMoYWRqdXN0ZWRfbW9kZSwKLQkJ CQkJCSAgICAgIFZCTEFOS19FVkFTSU9OX1RJTUVfVVMpOwotCW1heCA9IHZibGFua19zdGFydCAt IDE7Ci0KLQlpZiAobWluIDw9IDAgfHwgbWF4IDw9IDApCi0JCWdvdG8gaXJxX2Rpc2FibGU7Ci0K LQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGRybV9jcnRjX3ZibGFua19nZXQoJmNy dGMtPmJhc2UpKSkKLQkJZ290byBpcnFfZGlzYWJsZTsKLQotCS8qCi0JICogV2FpdCBmb3IgcHNy IHRvIGlkbGUgb3V0IGFmdGVyIGVuYWJsaW5nIHRoZSBWQkwgaW50ZXJydXB0cwotCSAqIFZCTCBp bnRlcnJ1cHRzIHdpbGwgc3RhcnQgdGhlIFBTUiBleGl0IGFuZCBwcmV2ZW50IGEgUFNSCi0JICog cmUtZW50cnkgYXMgd2VsbC4KLQkgKi8KLQlpZiAoaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUobmV3 X2NydGNfc3RhdGUsICZwc3Jfc3RhdHVzKSkKLQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwKLQkJ CSJQU1IgaWRsZSB0aW1lZCBvdXQgMHgleCwgYXRvbWljIHVwZGF0ZSBtYXkgZmFpbFxuIiwKLQkJ CXBzcl9zdGF0dXMpOwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCWNydGMtPmRlYnVnLm1p bl92YmwgPSBtaW47Ci0JY3J0Yy0+ZGVidWcubWF4X3ZibCA9IG1heDsKLQl0cmFjZV9pbnRlbF9w aXBlX3VwZGF0ZV9zdGFydChjcnRjKTsKLQotCWZvciAoOzspIHsKLQkJLyoKLQkJICogcHJlcGFy ZV90b193YWl0KCkgaGFzIGEgbWVtb3J5IGJhcnJpZXIsIHdoaWNoIGd1YXJhbnRlZXMKLQkJICog b3RoZXIgQ1BVcyBjYW4gc2VlIHRoZSB0YXNrIHN0YXRlIHVwZGF0ZSBieSB0aGUgdGltZSB3ZQot CQkgKiByZWFkIHRoZSBzY2FubGluZS4KLQkJICovCi0JCXByZXBhcmVfdG9fd2FpdCh3cSwgJndh aXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQotCQlzY2FubGluZSA9IGludGVsX2dldF9jcnRj X3NjYW5saW5lKGNydGMpOwotCQlpZiAoc2NhbmxpbmUgPCBtaW4gfHwgc2NhbmxpbmUgPiBtYXgp Ci0JCQlicmVhazsKLQotCQlpZiAoIXRpbWVvdXQpIHsKLQkJCWRybV9lcnIoJmRldl9wcml2LT5k cm0sCi0JCQkJIlBvdGVudGlhbCBhdG9taWMgdXBkYXRlIGZhaWx1cmUgb24gcGlwZSAlY1xuIiwK LQkJCQlwaXBlX25hbWUoY3J0Yy0+cGlwZSkpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlsb2NhbF9p cnFfZW5hYmxlKCk7Ci0KLQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7Ci0K LQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQl9Ci0KLQlmaW5pc2hfd2FpdCh3cSwgJndhaXQpOwot Ci0JZHJtX2NydGNfdmJsYW5rX3B1dCgmY3J0Yy0+YmFzZSk7Ci0KLQkvKgotCSAqIE9uIFZMVi9D SFYgRFNJIHRoZSBzY2FubGluZSBjb3VudGVyIHdvdWxkIGFwcGVhciB0bwotCSAqIGluY3JlbWVu dCBhcHByb3guIDEvMyBvZiBhIHNjYW5saW5lIGJlZm9yZSBzdGFydCBvZiB2YmxhbmsuCi0JICog VGhlIHJlZ2lzdGVycyBzdGlsbCBnZXQgbGF0Y2hlZCBhdCBzdGFydCBvZiB2YmxhbmsgaG93ZXZl ci4KLQkgKiBUaGlzIG1lYW5zIHdlIG11c3Qgbm90IHdyaXRlIGFueSByZWdpc3RlcnMgb24gdGhl IGZpcnN0Ci0JICogbGluZSBvZiB2YmxhbmsgKHNpbmNlIG5vdCB0aGUgd2hvbGUgbGluZSBpcyBh Y3R1YWxseSBpbgotCSAqIHZibGFuaykuIEFuZCB1bmZvcnR1bmF0ZWx5IHdlIGNhbid0IHVzZSB0 aGUgaW50ZXJydXB0IHRvCi0JICogd2FpdCBoZXJlIHNpbmNlIGl0IHdpbGwgZmlyZSB0b28gc29v bi4gV2UgY291bGQgdXNlIHRoZQotCSAqIGZyYW1lIHN0YXJ0IGludGVycnVwdCBpbnN0ZWFkIHNp bmNlIGl0IHdpbGwgZmlyZSBhZnRlciB0aGUKLQkgKiBjcml0aWNhbCBzY2FubGluZSwgYnV0IHRo YXQgd291bGQgcmVxdWlyZSBtb3JlIGNoYW5nZXMKLQkgKiBpbiB0aGUgaW50ZXJydXB0IGNvZGUu IFNvIGZvciBub3cgd2UnbGwganVzdCBkbyB0aGUgbmFzdHkKLQkgKiB0aGluZyBhbmQgcG9sbCBm b3IgdGhlIGJhZCBzY2FubGluZSB0byBwYXNzIHVzIGJ5LgotCSAqCi0JICogRklYTUUgZmlndXJl IG91dCBpZiBCWFQrIERTSSBzdWZmZXJzIGZyb20gdGhpcyBhcyB3ZWxsCi0JICovCi0Jd2hpbGUg KG5lZWRfdmx2X2RzaV93YSAmJiBzY2FubGluZSA9PSB2Ymxhbmtfc3RhcnQpCi0JCXNjYW5saW5l ID0gaW50ZWxfZ2V0X2NydGNfc2NhbmxpbmUoY3J0Yyk7Ci0KLQljcnRjLT5kZWJ1Zy5zY2FubGlu ZV9zdGFydCA9IHNjYW5saW5lOwotCWNydGMtPmRlYnVnLnN0YXJ0X3ZibF90aW1lID0ga3RpbWVf Z2V0KCk7Ci0JY3J0Yy0+ZGVidWcuc3RhcnRfdmJsX2NvdW50ID0gaW50ZWxfY3J0Y19nZXRfdmJs YW5rX2NvdW50ZXIoY3J0Yyk7Ci0KLQl0cmFjZV9pbnRlbF9waXBlX3VwZGF0ZV92YmxhbmtfZXZh ZGVkKGNydGMpOwotCXJldHVybjsKLQotaXJxX2Rpc2FibGU6Ci0JbG9jYWxfaXJxX2Rpc2FibGUo KTsKLX0KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X0RFQlVHX1ZCTEFOS19FVkFE RSkKLXN0YXRpYyB2b2lkIGRiZ192YmxhbmtfZXZhZGUoc3RydWN0IGludGVsX2NydGMgKmNydGMs IGt0aW1lX3QgZW5kKQotewotCXU2NCBkZWx0YSA9IGt0aW1lX3RvX25zKGt0aW1lX3N1YihlbmQs IGNydGMtPmRlYnVnLnN0YXJ0X3ZibF90aW1lKSk7Ci0JdW5zaWduZWQgaW50IGg7Ci0KLQloID0g aWxvZzIoZGVsdGEgPj4gOSk7Ci0JaWYgKGggPj0gQVJSQVlfU0laRShjcnRjLT5kZWJ1Zy52Ymwu dGltZXMpKQotCQloID0gQVJSQVlfU0laRShjcnRjLT5kZWJ1Zy52YmwudGltZXMpIC0gMTsKLQlj cnRjLT5kZWJ1Zy52YmwudGltZXNbaF0rKzsKLQotCWNydGMtPmRlYnVnLnZibC5zdW0gKz0gZGVs dGE7Ci0JaWYgKCFjcnRjLT5kZWJ1Zy52YmwubWluIHx8IGRlbHRhIDwgY3J0Yy0+ZGVidWcudmJs Lm1pbikKLQkJY3J0Yy0+ZGVidWcudmJsLm1pbiA9IGRlbHRhOwotCWlmIChkZWx0YSA+IGNydGMt PmRlYnVnLnZibC5tYXgpCi0JCWNydGMtPmRlYnVnLnZibC5tYXggPSBkZWx0YTsKLQotCWlmIChk ZWx0YSA+IDEwMDAgKiBWQkxBTktfRVZBU0lPTl9USU1FX1VTKSB7Ci0JCWRybV9kYmdfa21zKGNy dGMtPmJhc2UuZGV2LAotCQkJICAgICJBdG9taWMgdXBkYXRlIG9uIHBpcGUgKCVjKSB0b29rICVs bGQgdXMsIG1heCB0aW1lIHVuZGVyIGV2YXNpb24gaXMgJXUgdXNcbiIsCi0JCQkgICAgcGlwZV9u YW1lKGNydGMtPnBpcGUpLAotCQkJICAgIGRpdl91NjQoZGVsdGEsIDEwMDApLAotCQkJICAgIFZC TEFOS19FVkFTSU9OX1RJTUVfVVMpOwotCQljcnRjLT5kZWJ1Zy52Ymwub3ZlcisrOwotCX0KLX0K LSNlbHNlCi1zdGF0aWMgdm9pZCBkYmdfdmJsYW5rX2V2YWRlKHN0cnVjdCBpbnRlbF9jcnRjICpj cnRjLCBrdGltZV90IGVuZCkge30KLSNlbmRpZgotCi0vKioKLSAqIGludGVsX3BpcGVfdXBkYXRl X2VuZCgpIC0gZW5kIHVwZGF0ZSBvZiBhIHNldCBvZiBkaXNwbGF5IHJlZ2lzdGVycwotICogQG5l d19jcnRjX3N0YXRlOiB0aGUgbmV3IGNydGMgc3RhdGUKLSAqCi0gKiBNYXJrIHRoZSBlbmQgb2Yg YW4gdXBkYXRlIHN0YXJ0ZWQgd2l0aCBpbnRlbF9waXBlX3VwZGF0ZV9zdGFydCgpLiBUaGlzCi0g KiByZS1lbmFibGVzIGludGVycnVwdHMgYW5kIHZlcmlmaWVzIHRoZSB1cGRhdGUgd2FzIGFjdHVh bGx5IGNvbXBsZXRlZAotICogYmVmb3JlIGEgdmJsYW5rLgotICovCi12b2lkIGludGVsX3BpcGVf dXBkYXRlX2VuZChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUpCi17Ci0J c3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKG5ld19jcnRjX3N0YXRlLT51 YXBpLmNydGMpOwotCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQlpbnQgc2NhbmxpbmVf ZW5kID0gaW50ZWxfZ2V0X2NydGNfc2NhbmxpbmUoY3J0Yyk7Ci0JdTMyIGVuZF92YmxfY291bnQg PSBpbnRlbF9jcnRjX2dldF92YmxhbmtfY291bnRlcihjcnRjKTsKLQlrdGltZV90IGVuZF92Ymxf dGltZSA9IGt0aW1lX2dldCgpOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwotCi0JaWYgKG5ld19jcnRjX3N0YXRlLT51YXBpLmFz eW5jX2ZsaXApCi0JCXJldHVybjsKLQotCXRyYWNlX2ludGVsX3BpcGVfdXBkYXRlX2VuZChjcnRj LCBlbmRfdmJsX2NvdW50LCBzY2FubGluZV9lbmQpOwotCi0JLyoKLQkgKiBJbmNhc2Ugb2YgbWlw aSBkc2kgY29tbWFuZCBtb2RlLCB3ZSBuZWVkIHRvIHNldCBmcmFtZSB1cGRhdGUKLQkgKiByZXF1 ZXN0IGZvciBldmVyeSBjb21taXQuCi0JICovCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTEgJiYKLQkgICAgaW50ZWxfY3J0Y19oYXNfdHlwZShuZXdfY3J0Y19zdGF0ZSwgSU5URUxfT1VU UFVUX0RTSSkpCi0JCWljbF9kc2lfZnJhbWVfdXBkYXRlKG5ld19jcnRjX3N0YXRlKTsKLQotCS8q IFdlJ3JlIHN0aWxsIGluIHRoZSB2YmxhbmstZXZhZGUgY3JpdGljYWwgc2VjdGlvbiwgdGhpcyBj YW4ndCByYWNlLgotCSAqIFdvdWxkIGJlIHNsaWdodGx5IG5pY2UgdG8ganVzdCBncmFiIHRoZSB2 YmxhbmsgY291bnQgYW5kIGFybSB0aGUKLQkgKiBldmVudCBvdXRzaWRlIG9mIHRoZSBjcml0aWNh bCBzZWN0aW9uIC0gdGhlIHNwaW5sb2NrIG1pZ2h0IHNwaW4gZm9yIGEKLQkgKiB3aGlsZSAuLi4g Ki8KLQlpZiAobmV3X2NydGNfc3RhdGUtPnVhcGkuZXZlbnQpIHsKLQkJZHJtX1dBUk5fT04oJmRl dl9wcml2LT5kcm0sCi0JCQkgICAgZHJtX2NydGNfdmJsYW5rX2dldCgmY3J0Yy0+YmFzZSkgIT0g MCk7Ci0KLQkJc3Bpbl9sb2NrKCZjcnRjLT5iYXNlLmRldi0+ZXZlbnRfbG9jayk7Ci0JCWRybV9j cnRjX2FybV92YmxhbmtfZXZlbnQoJmNydGMtPmJhc2UsCi0JCQkJICAgICAgICAgIG5ld19jcnRj X3N0YXRlLT51YXBpLmV2ZW50KTsKLQkJc3Bpbl91bmxvY2soJmNydGMtPmJhc2UuZGV2LT5ldmVu dF9sb2NrKTsKLQotCQluZXdfY3J0Y19zdGF0ZS0+dWFwaS5ldmVudCA9IE5VTEw7Ci0JfQotCi0J bG9jYWxfaXJxX2VuYWJsZSgpOwotCi0JLyogU2VuZCBWUlIgUHVzaCB0byB0ZXJtaW5hdGUgVmJs YW5rICovCi0JaW50ZWxfdnJyX3NlbmRfcHVzaChuZXdfY3J0Y19zdGF0ZSk7Ci0KLQlpZiAoaW50 ZWxfdmdwdV9hY3RpdmUoZGV2X3ByaXYpKQotCQlyZXR1cm47Ci0KLQlpZiAoY3J0Yy0+ZGVidWcu c3RhcnRfdmJsX2NvdW50ICYmCi0JICAgIGNydGMtPmRlYnVnLnN0YXJ0X3ZibF9jb3VudCAhPSBl bmRfdmJsX2NvdW50KSB7Ci0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0sCi0JCQkiQXRvbWljIHVw ZGF0ZSBmYWlsdXJlIG9uIHBpcGUgJWMgKHN0YXJ0PSV1IGVuZD0ldSkgdGltZSAlbGxkIHVzLCBt aW4gJWQsIG1heCAlZCwgc2NhbmxpbmUgc3RhcnQgJWQsIGVuZCAlZFxuIiwKLQkJCXBpcGVfbmFt ZShwaXBlKSwgY3J0Yy0+ZGVidWcuc3RhcnRfdmJsX2NvdW50LAotCQkJZW5kX3ZibF9jb3VudCwK LQkJCWt0aW1lX3VzX2RlbHRhKGVuZF92YmxfdGltZSwKLQkJCQkgICAgICAgY3J0Yy0+ZGVidWcu c3RhcnRfdmJsX3RpbWUpLAotCQkJY3J0Yy0+ZGVidWcubWluX3ZibCwgY3J0Yy0+ZGVidWcubWF4 X3ZibCwKLQkJCWNydGMtPmRlYnVnLnNjYW5saW5lX3N0YXJ0LCBzY2FubGluZV9lbmQpOwotCX0K LQotCWRiZ192YmxhbmtfZXZhZGUoY3J0YywgZW5kX3ZibF90aW1lKTsKLX0KLQogaW50IGludGVs X3BsYW5lX2NoZWNrX3N0cmlkZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQogewogCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShw bGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Ci0tIAoyLjI3LjAKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=