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=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 8A69FC0650F for ; Tue, 30 Jul 2019 09:39:02 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 5BCA520679 for ; Tue, 30 Jul 2019 09:39:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="jQaRywQ7"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="dOhK6Qwx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5BCA520679 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=UbyF44Bfp3TaMbRnYWXUHlV3mg6Cy9jWb+wArWeWhhg=; b=jQaRywQ7RptdHo hZKw23JNE2fAPKLL/b2B05ymMuuIpYN0aLzBJFwD5EAiiqROOP+0dGwgDei7anf4zxlCOo/Y07XM9 93D6uDj7pspc5EjAmwpjMGmRegYnhQE2Z0Prdz/Mdu5fe7VZxy0TLR7KMR6FN9FtVYqIBKe2Ed50i cwjaODak1INRMX6rF4PPeQSA2bHV3JRELxZRTRO6OlwKf5BoXwDfgHYB8FOpGINjw4KUM6TGX96jr 4O/r/GSxmnch6NMRHlFHUBlJ6xfpIGVWHKXcignqYb7Ej4zV4nfZ8Z0k783KjG00Ipgqjf+PKWAj1 j/2bwrNcPpOSb+WDEVpg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hsOay-00017y-AY; Tue, 30 Jul 2019 09:39:00 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hsOY0-0007FN-Rw for linux-arm-kernel@lists.infradead.org; Tue, 30 Jul 2019 09:35:59 +0000 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id x6U9ZqHl060051; Tue, 30 Jul 2019 04:35:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1564479352; bh=AyEZ4iZajnfl7x+165XabqDdHdIOP3AV4K+iesTBVmw=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=dOhK6Qwx7O5MZb+otpZQRH0LQxEivUaQRzOBf44l+bfmoMdGCNHRGzwcBIMjaMc7/ r9A5ugWwQfAZLon/BIvOEKV5mTpR9XZg4BGh5n2Gce1JHgkrDHxgoVAOGM5FpONCfx bea+w/lWEMmAlfQlJKKSfc0nrRGrvqPabYYLt8xc= Received: from DLEE107.ent.ti.com (dlee107.ent.ti.com [157.170.170.37]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x6U9Zqfg054620 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 30 Jul 2019 04:35:52 -0500 Received: from DLEE100.ent.ti.com (157.170.170.30) by DLEE107.ent.ti.com (157.170.170.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 30 Jul 2019 04:35:51 -0500 Received: from lelv0326.itg.ti.com (10.180.67.84) by DLEE100.ent.ti.com (157.170.170.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Tue, 30 Jul 2019 04:35:51 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id x6U9YkU7027547; Tue, 30 Jul 2019 04:35:48 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v2 10/14] dmaengine: ti: New driver for K3 UDMA - split#3: alloc/free chan_resources Date: Tue, 30 Jul 2019 12:34:46 +0300 Message-ID: <20190730093450.12664-11-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190730093450.12664-1-peter.ujfalusi@ti.com> References: <20190730093450.12664-1-peter.ujfalusi@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190730_023557_132241_6DAEB46A X-CRM114-Status: GOOD ( 17.57 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, grygorii.strashko@ti.com, lokeshvutla@ti.com, j-keerthy@ti.com, linux-kernel@vger.kernel.org, t-kristo@ti.com, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org U3BsaXQgcGF0Y2ggZm9yIHJldmlldyBjb250YWluaW5nOiBjaGFubmVsIHJzb3VyY2UgYWxsb2Nh dGlvbiBhbmQgZnJlZQpmdW5jdGlvbnMuCgpETUEgZHJpdmVyIGZvcgpUZXhhcyBJbnN0cnVtZW50 cyBLMyBOQVZTUyBVbmlmaWVkIERNQSDigJMgUGVyaXBoZXJhbCBSb290IENvbXBsZXggKFVETUEt UCkKClRoZSBVRE1BLVAgaXMgaW50ZW5kZWQgdG8gcGVyZm9ybSBzaW1pbGFyIChidXQgc2lnbmlm aWNhbnRseSB1cGdyYWRlZCkgZnVuY3Rpb25zCmFzIHRoZSBwYWNrZXQtb3JpZW50ZWQgRE1BIHVz ZWQgb24gcHJldmlvdXMgU29DIGRldmljZXMuIFRoZSBVRE1BLVAgbW9kdWxlCnN1cHBvcnRzIHRo ZSB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiBvZiB2YXJpb3VzIHBhY2tldCB0eXBlcy4gVGhl IFVETUEtUCBpcwphcmNoaXRlY3RlZCB0byBmYWNpbGl0YXRlIHRoZSBzZWdtZW50YXRpb24gYW5k IHJlYXNzZW1ibHkgb2YgU29DIERNQSBkYXRhCnN0cnVjdHVyZSBjb21wbGlhbnQgcGFja2V0cyB0 by9mcm9tIHNtYWxsZXIgZGF0YSBibG9ja3MgdGhhdCBhcmUgbmF0aXZlbHkKY29tcGF0aWJsZSB3 aXRoIHRoZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgb2YgZWFjaCBjb25uZWN0ZWQgcGVyaXBoZXJh bC4gTXVsdGlwbGUKVHggYW5kIFJ4IGNoYW5uZWxzIGFyZSBwcm92aWRlZCB3aXRoaW4gdGhlIERN QSB3aGljaCBhbGxvdyBtdWx0aXBsZSBzZWdtZW50YXRpb24Kb3IgcmVhc3NlbWJseSBvcGVyYXRp b25zIHRvIGJlIG9uZ29pbmcuIFRoZSBETUEgY29udHJvbGxlciBtYWludGFpbnMgc3RhdGUKaW5m b3JtYXRpb24gZm9yIGVhY2ggb2YgdGhlIGNoYW5uZWxzIHdoaWNoIGFsbG93cyBwYWNrZXQgc2Vn bWVudGF0aW9uIGFuZApyZWFzc2VtYmx5IG9wZXJhdGlvbnMgdG8gYmUgdGltZSBkaXZpc2lvbiBt dWx0aXBsZXhlZCBiZXR3ZWVuIGNoYW5uZWxzIGluIG9yZGVyCnRvIHNoYXJlIHRoZSB1bmRlcmx5 aW5nIERNQSBoYXJkd2FyZS4gQW4gZXh0ZXJuYWwgRE1BIHNjaGVkdWxlciBpcyB1c2VkIHRvCmNv bnRyb2wgdGhlIG9yZGVyaW5nIGFuZCByYXRlIGF0IHdoaWNoIHRoaXMgbXVsdGlwbGV4aW5nIG9j Y3VycyBmb3IgVHJhbnNtaXQKb3BlcmF0aW9ucy4gVGhlIG9yZGVyaW5nIGFuZCByYXRlIG9mIFJl Y2VpdmUgb3BlcmF0aW9ucyBpcyBpbmRpcmVjdGx5IGNvbnRyb2xsZWQKYnkgdGhlIG9yZGVyIGlu IHdoaWNoIGJsb2NrcyBhcmUgcHVzaGVkIGludG8gdGhlIERNQSBvbiB0aGUgUnggUFNJLUwgaW50 ZXJmYWNlLgoKVGhlIFVETUEtUCBhbHNvIHN1cHBvcnRzIGFjdGluZyBhcyBib3RoIGEgVVRDIGFu ZCBVRE1BLUMgZm9yIGl0cyBpbnRlcm5hbApjaGFubmVscy4gQ2hhbm5lbHMgaW4gdGhlIFVETUEt UCBjYW4gYmUgY29uZmlndXJlZCB0byBiZSBlaXRoZXIgUGFja2V0LUJhc2VkIG9yClRoaXJkLVBh cnR5IGNoYW5uZWxzIG9uIGEgY2hhbm5lbCBieSBjaGFubmVsIGJhc2lzLgoKVGhlIGluaXRpYWwg ZHJpdmVyIHN1cHBvcnRzOgotIE1FTV9UT19NRU0gKFRSIG1vZGUpCi0gREVWX1RPX01FTSAoUGFj a2V0IC8gVFIgbW9kZSkKLSBNRU1fVE9fREVWIChQYWNrZXQgLyBUUiBtb2RlKQotIEN5Y2xpYyAo UGFja2V0IC8gVFIgbW9kZSkKLSBNZXRhZGF0YSBmb3IgZGVzY3JpcHRvcnMKClNpZ25lZC1vZmYt Ynk6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+Ci0tLQogZHJpdmVycy9k bWEvdGkvazMtdWRtYS5jIHwgNzgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMSBmaWxlIGNoYW5nZWQsIDc4MCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9kbWEvdGkvazMtdWRtYS5jIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5jCmluZGV4IDUy Y2NjNmQ0NmRlOS4uMGRlMzhkYjAzYjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS90aS9rMy11 ZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5jCkBAIC0xMDM5LDYgKzEwMzksNzg2 IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB1ZG1hX3VkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9p ZCAqZGF0YSkKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdWRtYV9y ZmxvdyAqX191ZG1hX3Jlc2VydmVfcmZsb3coc3RydWN0IHVkbWFfZGV2ICp1ZCwKKwkJCQkJICAg ICAgIGVudW0gdWRtYV90cF9sZXZlbCB0cGwsIGludCBpZCkKK3sKKwlERUNMQVJFX0JJVE1BUCh0 bXAsIEszX1VETUFfTUFYX1JGTE9XUyk7CisKKwlpZiAoaWQgPj0gMCkgeworCQlpZiAodGVzdF9i aXQoaWQsIHVkLT5yZmxvd19tYXApKSB7CisJCQlkZXZfZXJyKHVkLT5kZXYsICJyZmxvdyVkIGlz IGluIHVzZVxuIiwgaWQpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisJCX0KKwl9IGVs c2UgeworCQliaXRtYXBfb3IodG1wLCB1ZC0+cmZsb3dfbWFwLCB1ZC0+cmZsb3dfbWFwX3Jlc2Vy dmVkLAorCQkJICB1ZC0+cmZsb3dfY250KTsKKworCQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdCh0 bXAsIHVkLT5yZmxvd19jbnQsIHVkLT5yY2hhbl9jbnQpOworCQlpZiAoaWQgPj0gdWQtPnJmbG93 X2NudCkKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCX0KKworCXNldF9iaXQoaWQsIHVk LT5yZmxvd19tYXApOworCXJldHVybiAmdWQtPnJmbG93c1tpZF07Cit9CisKKyNkZWZpbmUgVURN QV9SRVNFUlZFX1JFU09VUkNFKHJlcykJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgdWRtYV8jI3JlcyAq X191ZG1hX3Jlc2VydmVfIyNyZXMoc3RydWN0IHVkbWFfZGV2ICp1ZCwJXAorCQkJCQkgICAgICAg ZW51bSB1ZG1hX3RwX2xldmVsIHRwbCwJXAorCQkJCQkgICAgICAgaW50IGlkKQkJCVwKK3sJCQkJ CQkJCQlcCisJaWYgKGlkID49IDApIHsJCQkJCQkJXAorCQlpZiAodGVzdF9iaXQoaWQsIHVkLT5y ZXMjI19tYXApKSB7CQkJXAorCQkJZGV2X2Vycih1ZC0+ZGV2LCAicmVzIyMlZCBpcyBpbiB1c2Vc biIsIGlkKTsJXAorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CQkJXAorCQl9CQkJCQkJCVwK Kwl9IGVsc2UgewkJCQkJCQlcCisJCWludCBzdGFydDsJCQkJCQlcCisJCQkJCQkJCQlcCisJCWlm ICh0cGwgPj0gdWQtPm1hdGNoX2RhdGEtPnRwbF9sZXZlbHMpCQkJXAorCQkJdHBsID0gdWQtPm1h dGNoX2RhdGEtPnRwbF9sZXZlbHMgLSAxOwkJXAorCQkJCQkJCQkJXAorCQlzdGFydCA9IHVkLT5t YXRjaF9kYXRhLT5sZXZlbF9zdGFydF9pZHhbdHBsXTsJCVwKKwkJCQkJCQkJCVwKKwkJaWQgPSBm aW5kX25leHRfemVyb19iaXQodWQtPnJlcyMjX21hcCwgdWQtPnJlcyMjX2NudCwJXAorCQkJCQlz dGFydCk7CQkJCVwKKwkJaWYgKGlkID09IHVkLT5yZXMjI19jbnQpIHsJCQkJXAorCQkJcmV0dXJu IEVSUl9QVFIoLUVOT0VOVCk7CQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJ CQlcCisJc2V0X2JpdChpZCwgdWQtPnJlcyMjX21hcCk7CQkJCQlcCisJcmV0dXJuICZ1ZC0+cmVz IyNzW2lkXTsJCQkJCQlcCit9CisKK1VETUFfUkVTRVJWRV9SRVNPVVJDRSh0Y2hhbik7CitVRE1B X1JFU0VSVkVfUkVTT1VSQ0UocmNoYW4pOworCitzdGF0aWMgaW50IHVkbWFfZ2V0X3RjaGFuKHN0 cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7CisK KwlpZiAodWMtPnRjaGFuKSB7CisJCWRldl9kYmcodWQtPmRldiwgImNoYW4lZDogYWxyZWFkeSBo YXZlIHRjaGFuJWQgYWxsb2NhdGVkXG4iLAorCQkJdWMtPmlkLCB1Yy0+dGNoYW4tPmlkKTsKKwkJ cmV0dXJuIDA7CisJfQorCisJdWMtPnRjaGFuID0gX191ZG1hX3Jlc2VydmVfdGNoYW4odWQsIHVj LT5jaGFubmVsX3RwbCwgLTEpOworCWlmIChJU19FUlIodWMtPnRjaGFuKSkKKwkJcmV0dXJuIFBU Ul9FUlIodWMtPnRjaGFuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVkbWFfZ2V0 X3JjaGFuKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1 Yy0+dWQ7CisKKwlpZiAodWMtPnJjaGFuKSB7CisJCWRldl9kYmcodWQtPmRldiwgImNoYW4lZDog YWxyZWFkeSBoYXZlIHJjaGFuJWQgYWxsb2NhdGVkXG4iLAorCQkJdWMtPmlkLCB1Yy0+cmNoYW4t PmlkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdWMtPnJjaGFuID0gX191ZG1hX3Jlc2VydmVfcmNo YW4odWQsIHVjLT5jaGFubmVsX3RwbCwgLTEpOworCWlmIChJU19FUlIodWMtPnJjaGFuKSkKKwkJ cmV0dXJuIFBUUl9FUlIodWMtPnJjaGFuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IHVkbWFfZ2V0X2NoYW5fcGFpcihzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3QgdWRt YV9kZXYgKnVkID0gdWMtPnVkOworCWNvbnN0IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgKm1hdGNo X2RhdGEgPSB1ZC0+bWF0Y2hfZGF0YTsKKwlpbnQgY2hhbl9pZCwgZW5kOworCisJaWYgKCh1Yy0+ dGNoYW4gJiYgdWMtPnJjaGFuKSAmJiB1Yy0+dGNoYW4tPmlkID09IHVjLT5yY2hhbi0+aWQpIHsK KwkJZGV2X2luZm8odWQtPmRldiwgImNoYW4lZDogYWxyZWFkeSBoYXZlICVkIHBhaXIgYWxsb2Nh dGVkXG4iLAorCQkJIHVjLT5pZCwgdWMtPnRjaGFuLT5pZCk7CisJCXJldHVybiAwOworCX0KKwor CWlmICh1Yy0+dGNoYW4pIHsKKwkJZGV2X2Vycih1ZC0+ZGV2LCAiY2hhbiVkOiBhbHJlYWR5IGhh dmUgdGNoYW4lZCBhbGxvY2F0ZWRcbiIsCisJCQl1Yy0+aWQsIHVjLT50Y2hhbi0+aWQpOworCQly ZXR1cm4gLUVCVVNZOworCX0gZWxzZSBpZiAodWMtPnJjaGFuKSB7CisJCWRldl9lcnIodWQtPmRl diwgImNoYW4lZDogYWxyZWFkeSBoYXZlIHJjaGFuJWQgYWxsb2NhdGVkXG4iLAorCQkJdWMtPmlk LCB1Yy0+cmNoYW4tPmlkKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBDYW4gYmUgb3B0 aW1pemVkLCBidXQgbGV0J3MgaGF2ZSBpdCBsaWtlIHRoaXMgZm9yIG5vdyAqLworCWVuZCA9IG1p bih1ZC0+dGNoYW5fY250LCB1ZC0+cmNoYW5fY250KTsKKwkvKiBUcnkgdG8gdXNlIHRoZSBoaWdo ZXN0IFRQTCBjaGFubmVsIHBhaXIgZm9yIE1FTV9UT19NRU0gY2hhbm5lbHMgKi8KKwljaGFuX2lk ID0gbWF0Y2hfZGF0YS0+bGV2ZWxfc3RhcnRfaWR4W21hdGNoX2RhdGEtPnRwbF9sZXZlbHMgLSAx XTsKKwlmb3IgKDsgY2hhbl9pZCA8IGVuZDsgY2hhbl9pZCsrKSB7CisJCWlmICghdGVzdF9iaXQo Y2hhbl9pZCwgdWQtPnRjaGFuX21hcCkgJiYKKwkJICAgICF0ZXN0X2JpdChjaGFuX2lkLCB1ZC0+ cmNoYW5fbWFwKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChjaGFuX2lkID09IGVuZCkKKwkJcmV0 dXJuIC1FTk9FTlQ7CisKKwlzZXRfYml0KGNoYW5faWQsIHVkLT50Y2hhbl9tYXApOworCXNldF9i aXQoY2hhbl9pZCwgdWQtPnJjaGFuX21hcCk7CisJdWMtPnRjaGFuID0gJnVkLT50Y2hhbnNbY2hh bl9pZF07CisJdWMtPnJjaGFuID0gJnVkLT5yY2hhbnNbY2hhbl9pZF07CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCB1ZG1hX2dldF9yZmxvdyhzdHJ1Y3QgdWRtYV9jaGFuICp1YywgaW50 IGZsb3dfaWQpCit7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IHVjLT51ZDsKKworCWlmICh1Yy0+ cmZsb3cpIHsKKwkJZGV2X2RiZyh1ZC0+ZGV2LCAiY2hhbiVkOiBhbHJlYWR5IGhhdmUgcmZsb3cl ZCBhbGxvY2F0ZWRcbiIsCisJCQl1Yy0+aWQsIHVjLT5yZmxvdy0+aWQpOworCQlyZXR1cm4gMDsK Kwl9CisKKwlpZiAoIXVjLT5yY2hhbikKKwkJZGV2X3dhcm4odWQtPmRldiwgImNoYW4lZDogZG9l cyBub3QgaGF2ZSByY2hhbj8/XG4iLCB1Yy0+aWQpOworCisJdWMtPnJmbG93ID0gX191ZG1hX3Jl c2VydmVfcmZsb3codWQsIHVjLT5jaGFubmVsX3RwbCwgZmxvd19pZCk7CisJaWYgKElTX0VSUih1 Yy0+cmZsb3cpKQorCQlyZXR1cm4gUFRSX0VSUih1Yy0+cmZsb3cpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIHVkbWFfcHV0X3JjaGFuKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQorewor CXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7CisKKwlpZiAodWMtPnJjaGFuKSB7CisJCWRl dl9kYmcodWQtPmRldiwgImNoYW4lZDogcHV0IHJjaGFuJWRcbiIsIHVjLT5pZCwKKwkJCXVjLT5y Y2hhbi0+aWQpOworCQljbGVhcl9iaXQodWMtPnJjaGFuLT5pZCwgdWQtPnJjaGFuX21hcCk7CisJ CXVjLT5yY2hhbiA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCB1ZG1hX3B1dF90Y2hhbihz dHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0gdWMtPnVkOwor CisJaWYgKHVjLT50Y2hhbikgeworCQlkZXZfZGJnKHVkLT5kZXYsICJjaGFuJWQ6IHB1dCB0Y2hh biVkXG4iLCB1Yy0+aWQsCisJCQl1Yy0+dGNoYW4tPmlkKTsKKwkJY2xlYXJfYml0KHVjLT50Y2hh bi0+aWQsIHVkLT50Y2hhbl9tYXApOworCQl1Yy0+dGNoYW4gPSBOVUxMOworCX0KK30KKworc3Rh dGljIHZvaWQgdWRtYV9wdXRfcmZsb3coc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJc3RydWN0 IHVkbWFfZGV2ICp1ZCA9IHVjLT51ZDsKKworCWlmICh1Yy0+cmZsb3cpIHsKKwkJZGV2X2RiZyh1 ZC0+ZGV2LCAiY2hhbiVkOiBwdXQgcmZsb3clZFxuIiwgdWMtPmlkLAorCQkJdWMtPnJmbG93LT5p ZCk7CisJCWNsZWFyX2JpdCh1Yy0+cmZsb3ctPmlkLCB1ZC0+cmZsb3dfbWFwKTsKKwkJdWMtPnJm bG93ID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfZnJlZV90eF9yZXNvdXJjZXMo c3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJaWYgKCF1Yy0+dGNoYW4pCisJCXJldHVybjsKKwor CWszX3JpbmdhY2NfcmluZ19mcmVlKHVjLT50Y2hhbi0+dF9yaW5nKTsKKwlrM19yaW5nYWNjX3Jp bmdfZnJlZSh1Yy0+dGNoYW4tPnRjX3JpbmcpOworCXVjLT50Y2hhbi0+dF9yaW5nID0gTlVMTDsK Kwl1Yy0+dGNoYW4tPnRjX3JpbmcgPSBOVUxMOworCisJdWRtYV9wdXRfdGNoYW4odWMpOworfQor CitzdGF0aWMgaW50IHVkbWFfYWxsb2NfdHhfcmVzb3VyY2VzKHN0cnVjdCB1ZG1hX2NoYW4gKnVj KQoreworCXN0cnVjdCBrM19yaW5nX2NmZyByaW5nX2NmZzsKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVk ID0gdWMtPnVkOworCWludCByZXQ7CisKKwlyZXQgPSB1ZG1hX2dldF90Y2hhbih1Yyk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXVjLT50Y2hhbi0+dF9yaW5nID0gazNfcmluZ2FjY19y ZXF1ZXN0X3JpbmcodWQtPnJpbmdhY2MsCisJCQkJCQkgICAgdWMtPnRjaGFuLT5pZCwgMCk7CisJ aWYgKCF1Yy0+dGNoYW4tPnRfcmluZykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3R4 X3Jpbmc7CisJfQorCisJdWMtPnRjaGFuLT50Y19yaW5nID0gazNfcmluZ2FjY19yZXF1ZXN0X3Jp bmcodWQtPnJpbmdhY2MsIC0xLCAwKTsKKwlpZiAoIXVjLT50Y2hhbi0+dGNfcmluZykgeworCQly ZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3R4Y19yaW5nOworCX0KKworCW1lbXNldCgmcmluZ19j ZmcsIDAsIHNpemVvZihyaW5nX2NmZykpOworCXJpbmdfY2ZnLnNpemUgPSBLM19VRE1BX0RFRkFV TFRfUklOR19TSVpFOworCXJpbmdfY2ZnLmVsbV9zaXplID0gSzNfUklOR0FDQ19SSU5HX0VMU0la RV84OworCXJpbmdfY2ZnLm1vZGUgPSBLM19SSU5HQUNDX1JJTkdfTU9ERV9NRVNTQUdFOworCisJ cmV0ID0gazNfcmluZ2FjY19yaW5nX2NmZyh1Yy0+dGNoYW4tPnRfcmluZywgJnJpbmdfY2ZnKTsK KwlyZXQgfD0gazNfcmluZ2FjY19yaW5nX2NmZyh1Yy0+dGNoYW4tPnRjX3JpbmcsICZyaW5nX2Nm Zyk7CisKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yaW5nY2ZnOworCisJcmV0dXJuIDA7CisKK2Vy cl9yaW5nY2ZnOgorCWszX3JpbmdhY2NfcmluZ19mcmVlKHVjLT50Y2hhbi0+dGNfcmluZyk7CisJ dWMtPnRjaGFuLT50Y19yaW5nID0gTlVMTDsKK2Vycl90eGNfcmluZzoKKwlrM19yaW5nYWNjX3Jp bmdfZnJlZSh1Yy0+dGNoYW4tPnRfcmluZyk7CisJdWMtPnRjaGFuLT50X3JpbmcgPSBOVUxMOwor ZXJyX3R4X3Jpbmc6CisJdWRtYV9wdXRfdGNoYW4odWMpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHZvaWQgdWRtYV9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgdWRtYV9jaGFuICp1YykK K3sKKwlpZiAoIXVjLT5yY2hhbikKKwkJcmV0dXJuOworCisJaWYgKHVjLT5kaXIgIT0gRE1BX01F TV9UT19NRU0pIHsKKwkJazNfcmluZ2FjY19yaW5nX2ZyZWUodWMtPnJjaGFuLT5mZF9yaW5nKTsK KwkJazNfcmluZ2FjY19yaW5nX2ZyZWUodWMtPnJjaGFuLT5yX3JpbmcpOworCQl1Yy0+cmNoYW4t PmZkX3JpbmcgPSBOVUxMOworCQl1Yy0+cmNoYW4tPnJfcmluZyA9IE5VTEw7CisKKwkJdWRtYV9w dXRfcmZsb3codWMpOworCX0KKworCXVkbWFfcHV0X3JjaGFuKHVjKTsKK30KKworc3RhdGljIGlu dCB1ZG1hX2FsbG9jX3J4X3Jlc291cmNlcyhzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1 Y3QgazNfcmluZ19jZmcgcmluZ19jZmc7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IHVjLT51ZDsK KwlpbnQgZmRfcmluZ19pZDsKKwlpbnQgcmV0OworCisJcmV0ID0gdWRtYV9nZXRfcmNoYW4odWMp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBGb3IgTUVNX1RPX01FTSB3ZSBkb24n dCBuZWVkIHJmbG93IG9yIHJpbmdzICovCisJaWYgKHVjLT5kaXIgPT0gRE1BX01FTV9UT19NRU0p CisJCXJldHVybiAwOworCisJcmV0ID0gdWRtYV9nZXRfcmZsb3codWMsIHVjLT5yY2hhbi0+aWQp OworCWlmIChyZXQpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9yZmxvdzsKKwl9CisK KwlmZF9yaW5nX2lkID0gdWQtPnRjaGFuX2NudCArIHVkLT5lY2hhbl9jbnQgKyB1Yy0+cmNoYW4t PmlkOworCXVjLT5yY2hhbi0+ZmRfcmluZyA9IGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKHVkLT5y aW5nYWNjLAorCQkJCQkJICAgICBmZF9yaW5nX2lkLCAwKTsKKwlpZiAoIXVjLT5yY2hhbi0+ZmRf cmluZykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3J4X3Jpbmc7CisJfQorCisJdWMt PnJjaGFuLT5yX3JpbmcgPSBrM19yaW5nYWNjX3JlcXVlc3RfcmluZyh1ZC0+cmluZ2FjYywgLTEs IDApOworCWlmICghdWMtPnJjaGFuLT5yX3JpbmcpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3Rv IGVycl9yeGNfcmluZzsKKwl9CisKKwltZW1zZXQoJnJpbmdfY2ZnLCAwLCBzaXplb2YocmluZ19j ZmcpKTsKKworCWlmICh1Yy0+cGt0X21vZGUpCisJCXJpbmdfY2ZnLnNpemUgPSBTR19NQVhfU0VH TUVOVFM7CisJZWxzZQorCQlyaW5nX2NmZy5zaXplID0gSzNfVURNQV9ERUZBVUxUX1JJTkdfU0la RTsKKworCXJpbmdfY2ZnLmVsbV9zaXplID0gSzNfUklOR0FDQ19SSU5HX0VMU0laRV84OworCXJp bmdfY2ZnLm1vZGUgPSBLM19SSU5HQUNDX1JJTkdfTU9ERV9NRVNTQUdFOworCisJcmV0ID0gazNf cmluZ2FjY19yaW5nX2NmZyh1Yy0+cmNoYW4tPmZkX3JpbmcsICZyaW5nX2NmZyk7CisJcmluZ19j Zmcuc2l6ZSA9IEszX1VETUFfREVGQVVMVF9SSU5HX1NJWkU7CisJcmV0IHw9IGszX3JpbmdhY2Nf cmluZ19jZmcodWMtPnJjaGFuLT5yX3JpbmcsICZyaW5nX2NmZyk7CisKKwlpZiAocmV0KQorCQln b3RvIGVycl9yaW5nY2ZnOworCisJcmV0dXJuIDA7CisKK2Vycl9yaW5nY2ZnOgorCWszX3Jpbmdh Y2NfcmluZ19mcmVlKHVjLT5yY2hhbi0+cl9yaW5nKTsKKwl1Yy0+cmNoYW4tPnJfcmluZyA9IE5V TEw7CitlcnJfcnhjX3Jpbmc6CisJazNfcmluZ2FjY19yaW5nX2ZyZWUodWMtPnJjaGFuLT5mZF9y aW5nKTsKKwl1Yy0+cmNoYW4tPmZkX3JpbmcgPSBOVUxMOworZXJyX3J4X3Jpbmc6CisJdWRtYV9w dXRfcmZsb3codWMpOworZXJyX3JmbG93OgorCXVkbWFfcHV0X3JjaGFuKHVjKTsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV90aXNjaV9jaGFubmVsX2NvbmZpZyhzdHJ1Y3Qg dWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0gdWMtPnVkOworCXN0cnVj dCB1ZG1hX3Rpc2NpX3JtICp0aXNjaV9ybSA9ICZ1ZC0+dGlzY2lfcm07CisJY29uc3Qgc3RydWN0 IHRpX3NjaV9ybV91ZG1hcF9vcHMgKnRpc2NpX29wcyA9IHRpc2NpX3JtLT50aXNjaV91ZG1hcF9v cHM7CisJc3RydWN0IHVkbWFfdGNoYW4gKnRjaGFuID0gdWMtPnRjaGFuOworCXN0cnVjdCB1ZG1h X3JjaGFuICpyY2hhbiA9IHVjLT5yY2hhbjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1Yy0+ZGly ID09IERNQV9NRU1fVE9fTUVNKSB7CisJCS8qIE5vbiBzeW5jaHJvbml6ZWQgLSBtZW0gdG8gbWVt IHR5cGUgb2YgdHJhbnNmZXIgKi8KKwkJaW50IHRjX3JpbmcgPSBrM19yaW5nYWNjX2dldF9yaW5n X2lkKHRjaGFuLT50Y19yaW5nKTsKKwkJc3RydWN0IHRpX3NjaV9tc2dfcm1fdWRtYXBfdHhfY2hf Y2ZnIHJlcV90eCA9IHsgMCB9OworCQlzdHJ1Y3QgdGlfc2NpX21zZ19ybV91ZG1hcF9yeF9jaF9j ZmcgcmVxX3J4ID0geyAwIH07CisKKwkJcmVxX3R4LnZhbGlkX3BhcmFtcyA9CisJCQlUSV9TQ0lf TVNHX1ZBTFVFX1JNX1VETUFQX0NIX1BBVVNFX09OX0VSUl9WQUxJRCB8CisJCQlUSV9TQ0lfTVNH X1ZBTFVFX1JNX1VETUFQX0NIX1RYX0ZJTFRfRUlORk9fVkFMSUQgfAorCQkJVElfU0NJX01TR19W QUxVRV9STV9VRE1BUF9DSF9UWF9GSUxUX1BTV09SRFNfVkFMSUQgfAorCQkJVElfU0NJX01TR19W QUxVRV9STV9VRE1BUF9DSF9DSEFOX1RZUEVfVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9S TV9VRE1BUF9DSF9UWF9TVVBSX1REUEtUX1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1f VURNQVBfQ0hfRkVUQ0hfU0laRV9WQUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQ X0NIX0NRX1FOVU1fVkFMSUQ7CisKKwkJcmVxX3R4Lm5hdl9pZCA9IHRpc2NpX3JtLT50aXNjaV9k ZXZfaWQ7CisJCXJlcV90eC5pbmRleCA9IHRjaGFuLT5pZDsKKwkJcmVxX3R4LnR4X3BhdXNlX29u X2VyciA9IDA7CisJCXJlcV90eC50eF9maWx0X2VpbmZvID0gMDsKKwkJcmVxX3R4LnR4X2ZpbHRf cHN3b3JkcyA9IDA7CisJCXJlcV90eC50eF9jaGFuX3R5cGUgPSBUSV9TQ0lfUk1fVURNQVBfQ0hB Tl9UWVBFXzNSRFBfQkNPUFlfUEJSUjsKKwkJcmVxX3R4LnR4X3N1cHJfdGRwa3QgPSAwOworCQly ZXFfdHgudHhfZmV0Y2hfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3BwaTVfZGVzY19oZHJfdCkgPj4g MjsKKwkJcmVxX3R4LnR4Y3FfcW51bSA9IHRjX3Jpbmc7CisKKwkJcmV0ID0gdGlzY2lfb3BzLT50 eF9jaF9jZmcodGlzY2lfcm0tPnRpc2NpLCAmcmVxX3R4KTsKKwkJaWYgKHJldCkgeworCQkJZGV2 X2Vycih1ZC0+ZGV2LCAidGNoYW4lZCBjZmcgZmFpbGVkICVkXG4iLAorCQkJCXRjaGFuLT5pZCwg cmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXFfcngudmFsaWRfcGFyYW1zID0KKwkJ CVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfUEFVU0VfT05fRVJSX1ZBTElEIHwKKwkJCVRJ X1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfRkVUQ0hfU0laRV9WQUxJRCB8CisJCQlUSV9TQ0lf TVNHX1ZBTFVFX1JNX1VETUFQX0NIX0NRX1FOVU1fVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxV RV9STV9VRE1BUF9DSF9DSEFOX1RZUEVfVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9V RE1BUF9DSF9SWF9JR05PUkVfU0hPUlRfVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9V RE1BUF9DSF9SWF9JR05PUkVfTE9OR19WQUxJRDsKKworCQlyZXFfcngubmF2X2lkID0gdGlzY2lf cm0tPnRpc2NpX2Rldl9pZDsKKwkJcmVxX3J4LmluZGV4ID0gcmNoYW4tPmlkOworCQlyZXFfcngu cnhfZmV0Y2hfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3BwaTVfZGVzY19oZHJfdCkgPj4gMjsKKwkJ cmVxX3J4LnJ4Y3FfcW51bSA9IHRjX3Jpbmc7CisJCXJlcV9yeC5yeF9wYXVzZV9vbl9lcnIgPSAw OworCQlyZXFfcngucnhfY2hhbl90eXBlID0gVElfU0NJX1JNX1VETUFQX0NIQU5fVFlQRV8zUkRQ X0JDT1BZX1BCUlI7CisJCXJlcV9yeC5yeF9pZ25vcmVfc2hvcnQgPSAwOworCQlyZXFfcngucnhf aWdub3JlX2xvbmcgPSAwOworCisJCXJldCA9IHRpc2NpX29wcy0+cnhfY2hfY2ZnKHRpc2NpX3Jt LT50aXNjaSwgJnJlcV9yeCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIodWQtPmRldiwgInJj aGFuJWQgYWxsb2MgZmFpbGVkICVkXG4iLAorCQkJCXJjaGFuLT5pZCwgcmV0KTsKKwkJCXJldHVy biByZXQ7CisJCX0KKwl9IGVsc2UgeworCQkvKiBTbGF2ZSB0cmFuc2ZlciAqLworCQl1MzIgbW9k ZSwgZmV0Y2hfc2l6ZTsKKworCQlpZiAodWMtPnBrdF9tb2RlKSB7CisJCQltb2RlID0gVElfU0NJ X1JNX1VETUFQX0NIQU5fVFlQRV9QS1RfUEJSUjsKKwkJCWZldGNoX3NpemUgPSBjcHBpNV9oZGVz Y19jYWxjX3NpemUodWMtPm5lZWRzX2VwaWIsCisJCQkJCQkJICAgdWMtPnBzZF9zaXplLCAwKTsK KwkJfSBlbHNlIHsKKwkJCW1vZGUgPSBUSV9TQ0lfUk1fVURNQVBfQ0hBTl9UWVBFXzNSRFBfUEJS UjsKKwkJCWZldGNoX3NpemUgPSBzaXplb2Yoc3RydWN0IGNwcGk1X2Rlc2NfaGRyX3QpOworCQl9 CisKKwkJaWYgKHVjLT5kaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJCS8qIFRYICovCisJCQlp bnQgdGNfcmluZyA9IGszX3JpbmdhY2NfZ2V0X3JpbmdfaWQodGNoYW4tPnRjX3JpbmcpOworCQkJ c3RydWN0IHRpX3NjaV9tc2dfcm1fdWRtYXBfdHhfY2hfY2ZnIHJlcV90eCA9IHsgMCB9OworCisJ CQlyZXFfdHgudmFsaWRfcGFyYW1zID0KKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hf UEFVU0VfT05fRVJSX1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfVFhf RklMVF9FSU5GT19WQUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX1RYX0ZJ TFRfUFNXT1JEU19WQUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX0NIQU5f VFlQRV9WQUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX1RYX1NVUFJfVERQ S1RfVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9DSF9GRVRDSF9TSVpFX1ZB TElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfQ1FfUU5VTV9WQUxJRDsKKwor CQkJcmVxX3R4Lm5hdl9pZCA9IHRpc2NpX3JtLT50aXNjaV9kZXZfaWQ7CisJCQlyZXFfdHguaW5k ZXggPSB0Y2hhbi0+aWQ7CisJCQlyZXFfdHgudHhfcGF1c2Vfb25fZXJyID0gMDsKKwkJCXJlcV90 eC50eF9maWx0X2VpbmZvID0gMDsKKwkJCXJlcV90eC50eF9maWx0X3Bzd29yZHMgPSAwOworCQkJ cmVxX3R4LnR4X2NoYW5fdHlwZSA9IG1vZGU7CisJCQlyZXFfdHgudHhfc3Vwcl90ZHBrdCA9IDA7 CisJCQlyZXFfdHgudHhfZmV0Y2hfc2l6ZSA9IGZldGNoX3NpemUgPj4gMjsKKwkJCXJlcV90eC50 eGNxX3FudW0gPSB0Y19yaW5nOworCisJCQlyZXQgPSB0aXNjaV9vcHMtPnR4X2NoX2NmZyh0aXNj aV9ybS0+dGlzY2ksICZyZXFfdHgpOworCQkJaWYgKHJldCkgeworCQkJCWRldl9lcnIodWQtPmRl diwgInRjaGFuJWQgY2ZnIGZhaWxlZCAlZFxuIiwKKwkJCQkJdGNoYW4tPmlkLCByZXQpOworCQkJ CXJldHVybiByZXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBSWCAqLworCQkJaW50IGZkX3Jp bmcgPSBrM19yaW5nYWNjX2dldF9yaW5nX2lkKHJjaGFuLT5mZF9yaW5nKTsKKwkJCWludCByeF9y aW5nID0gazNfcmluZ2FjY19nZXRfcmluZ19pZChyY2hhbi0+cl9yaW5nKTsKKwkJCXN0cnVjdCB0 aV9zY2lfbXNnX3JtX3VkbWFwX3J4X2NoX2NmZyByZXFfcnggPSB7IDAgfTsKKwkJCXN0cnVjdCB0 aV9zY2lfbXNnX3JtX3VkbWFwX2Zsb3dfY2ZnIGZsb3dfcmVxID0geyAwIH07CisKKwkJCXJlcV9y eC52YWxpZF9wYXJhbXMgPQorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9DSF9QQVVTRV9P Tl9FUlJfVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9DSF9GRVRDSF9TSVpF X1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfQ1FfUU5VTV9WQUxJRCB8 CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX0NIQU5fVFlQRV9WQUxJRCB8CisJCQlU SV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX1JYX0lHTk9SRV9TSE9SVF9WQUxJRCB8CisJCQlU SV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX1JYX0lHTk9SRV9MT05HX1ZBTElEOworCisJCQly ZXFfcngubmF2X2lkID0gdGlzY2lfcm0tPnRpc2NpX2Rldl9pZDsKKwkJCXJlcV9yeC5pbmRleCA9 IHJjaGFuLT5pZDsKKwkJCXJlcV9yeC5yeF9mZXRjaF9zaXplID0gIGZldGNoX3NpemUgPj4gMjsK KwkJCXJlcV9yeC5yeGNxX3FudW0gPSByeF9yaW5nOworCQkJcmVxX3J4LnJ4X3BhdXNlX29uX2Vy ciA9IDA7CisJCQlyZXFfcngucnhfY2hhbl90eXBlID0gbW9kZTsKKwkJCXJlcV9yeC5yeF9pZ25v cmVfc2hvcnQgPSAwOworCQkJcmVxX3J4LnJ4X2lnbm9yZV9sb25nID0gMDsKKworCQkJcmV0ID0g dGlzY2lfb3BzLT5yeF9jaF9jZmcodGlzY2lfcm0tPnRpc2NpLCAmcmVxX3J4KTsKKwkJCWlmIChy ZXQpIHsKKwkJCQlkZXZfZXJyKHVkLT5kZXYsICJyY2hhbiVkIGNmZyBmYWlsZWQgJWRcbiIsCisJ CQkJCXJjaGFuLT5pZCwgcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQlmbG93X3Jl cS52YWxpZF9wYXJhbXMgPQorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX0VJTkZP X1BSRVNFTlRfVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX1BTSU5G T19QUkVTRU5UX1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19FUlJP Ul9IQU5ETElOR19WQUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfREVT Q19UWVBFX1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19ERVNUX1FO VU1fVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX1NSQ19UQUdfSElf U0VMX1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19TUkNfVEFHX0xP X1NFTF9WQUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfREVTVF9UQUdf SElfU0VMX1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19ERVNUX1RB R19MT19TRUxfVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX0ZEUTBf U1owX1FOVU1fVkFMSUQgfAorCQkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX0ZEUTFf UU5VTV9WQUxJRCB8CisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfRkRRMl9RTlVN X1ZBTElEIHwKKwkJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19GRFEzX1FOVU1fVkFM SUQ7CisKKwkJCWZsb3dfcmVxLm5hdl9pZCA9IHRpc2NpX3JtLT50aXNjaV9kZXZfaWQ7CisJCQlm bG93X3JlcS5mbG93X2luZGV4ID0gcmNoYW4tPmlkOworCisJCQlpZiAodWMtPm5lZWRzX2VwaWIp CisJCQkJZmxvd19yZXEucnhfZWluZm9fcHJlc2VudCA9IDE7CisJCQllbHNlCisJCQkJZmxvd19y ZXEucnhfZWluZm9fcHJlc2VudCA9IDA7CisJCQlpZiAodWMtPnBzZF9zaXplKQorCQkJCWZsb3df cmVxLnJ4X3BzaW5mb19wcmVzZW50ID0gMTsKKwkJCWVsc2UKKwkJCQlmbG93X3JlcS5yeF9wc2lu Zm9fcHJlc2VudCA9IDA7CisJCQlmbG93X3JlcS5yeF9lcnJvcl9oYW5kbGluZyA9IDE7CisJCQlm bG93X3JlcS5yeF9kZXNjX3R5cGUgPSAwOworCQkJZmxvd19yZXEucnhfZGVzdF9xbnVtID0gcnhf cmluZzsKKwkJCWZsb3dfcmVxLnJ4X3NyY190YWdfaGlfc2VsID0gMjsKKwkJCWZsb3dfcmVxLnJ4 X3NyY190YWdfbG9fc2VsID0gNDsKKwkJCWZsb3dfcmVxLnJ4X2Rlc3RfdGFnX2hpX3NlbCA9IDU7 CisJCQlmbG93X3JlcS5yeF9kZXN0X3RhZ19sb19zZWwgPSA0OworCQkJZmxvd19yZXEucnhfZmRx MF9zejBfcW51bSA9IGZkX3Jpbmc7CisJCQlmbG93X3JlcS5yeF9mZHExX3FudW0gPSBmZF9yaW5n OworCQkJZmxvd19yZXEucnhfZmRxMl9xbnVtID0gZmRfcmluZzsKKwkJCWZsb3dfcmVxLnJ4X2Zk cTNfcW51bSA9IGZkX3Jpbmc7CisKKwkJCXJldCA9IHRpc2NpX29wcy0+cnhfZmxvd19jZmcodGlz Y2lfcm0tPnRpc2NpLAorCQkJCQkJICAgICAmZmxvd19yZXEpOworCisJCQlpZiAocmV0KSB7CisJ CQkJZGV2X2Vycih1ZC0+ZGV2LCAiZmxvdyVkIGNvbmZpZyBmYWlsZWQ6ICVkXG4iLAorCQkJCQly Y2hhbi0+aWQsIHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IHVkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRt YV9jaGFuICpjaGFuKQoreworCXN0cnVjdCB1ZG1hX2NoYW4gKnVjID0gdG9fdWRtYV9jaGFuKGNo YW4pOworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB0b191ZG1hX2RldihjaGFuLT5kZXZpY2UpOwor CWNvbnN0IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEgPSB1ZC0+bWF0Y2hfZGF0 YTsKKwlzdHJ1Y3QgazNfcmluZyAqaXJxX3Jpbmc7CisJdTMyIGlycV91ZG1hX2lkeDsKKwlpbnQg cmV0OworCisJaWYgKHVjLT5wa3RfbW9kZSB8fCB1Yy0+ZGlyID09IERNQV9NRU1fVE9fTUVNKSB7 CisJCXVjLT51c2VfZG1hX3Bvb2wgPSB0cnVlOworCQkvKiBpbiBjYXNlIG9mIE1FTV9UT19NRU0g d2UgaGF2ZSBtYXhpbXVtIG9mIHR3byBUUnMgKi8KKwkJaWYgKHVjLT5kaXIgPT0gRE1BX01FTV9U T19NRU0pIHsKKwkJCXVjLT5oZGVzY19zaXplID0gY3BwaTVfdHJkZXNjX2NhbGNfc2l6ZSgKKwkJ CQkJc2l6ZW9mKHN0cnVjdCBjcHBpNV90cl90eXBlMTVfdCksIDIpOworCQkJdWMtPnBrdF9tb2Rl ID0gZmFsc2U7CisJCX0KKwl9CisKKwlpZiAodWMtPnVzZV9kbWFfcG9vbCkgeworCQl1Yy0+aGRl c2NfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSh1Yy0+bmFtZSwgdWQtPmRkZXYuZGV2LAorCQkJCQkJ IHVjLT5oZGVzY19zaXplLCB1ZC0+ZGVzY19hbGlnbiwKKwkJCQkJCSAwKTsKKwkJaWYgKCF1Yy0+ aGRlc2NfcG9vbCkgeworCQkJZGV2X2Vycih1ZC0+ZGRldi5kZXYsCisJCQkJIkRlc2NyaXB0b3Ig cG9vbCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCQl1Yy0+dXNlX2RtYV9wb29sID0gZmFsc2U7 CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCXBtX3J1bnRpbWVfZ2V0X3N5bmModWQt PmRkZXYuZGV2KTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgdGhlIGNvbXBsZXRpb24gaXMg aW4gYSBrbm93biBzdGF0ZToKKwkgKiBObyB0ZWFyZG93biwgdGhlIGNoYW5uZWwgaXMgaWRsZQor CSAqLworCXJlaW5pdF9jb21wbGV0aW9uKCZ1Yy0+dGVhcmRvd25fY29tcGxldGVkKTsKKwljb21w bGV0ZV9hbGwoJnVjLT50ZWFyZG93bl9jb21wbGV0ZWQpOworCXVjLT5zdGF0ZSA9IFVETUFfQ0hB Tl9JU19JRExFOworCisJc3dpdGNoICh1Yy0+ZGlyKSB7CisJY2FzZSBETUFfTUVNX1RPX01FTToK KwkJLyogTm9uIHN5bmNocm9uaXplZCAtIG1lbSB0byBtZW0gdHlwZSBvZiB0cmFuc2ZlciAqLwor CQlkZXZfZGJnKHVjLT51ZC0+ZGV2LCAiJXM6IGNoYW4lZCBhcyBNRU0tdG8tTUVNXG4iLCBfX2Z1 bmNfXywKKwkJCXVjLT5pZCk7CisKKwkJcmV0ID0gdWRtYV9nZXRfY2hhbl9wYWlyKHVjKTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gdWRtYV9hbGxvY190eF9yZXNvdXJj ZXModWMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSB1ZG1hX2FsbG9j X3J4X3Jlc291cmNlcyh1Yyk7CisJCWlmIChyZXQpIHsKKwkJCXVkbWFfZnJlZV90eF9yZXNvdXJj ZXModWMpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXVjLT5zcmNfdGhyZWFkID0gdWQtPnBz aWxfYmFzZSArIHVjLT50Y2hhbi0+aWQ7CisJCXVjLT5kc3RfdGhyZWFkID0gKHVkLT5wc2lsX2Jh c2UgKyB1Yy0+cmNoYW4tPmlkKSB8CisJCQkJIFVETUFfUFNJTF9EU1RfVEhSRUFEX0lEX09GRlNF VDsKKworCQlpcnFfcmluZyA9IHVjLT50Y2hhbi0+dGNfcmluZzsKKwkJaXJxX3VkbWFfaWR4ID0g dWMtPnRjaGFuLT5pZDsKKwkJYnJlYWs7CisJY2FzZSBETUFfTUVNX1RPX0RFVjoKKwkJLyogU2xh dmUgdHJhbnNmZXIgc3luY2hyb25pemVkIC0gbWVtIHRvIGRldiAoVFgpIHRyYXNuZmVyICovCisJ CWRldl9kYmcodWMtPnVkLT5kZXYsICIlczogY2hhbiVkIGFzIE1FTS10by1ERVZcbiIsIF9fZnVu Y19fLAorCQkJdWMtPmlkKTsKKworCQlyZXQgPSB1ZG1hX2FsbG9jX3R4X3Jlc291cmNlcyh1Yyk7 CisJCWlmIChyZXQpIHsKKwkJCXVjLT5yZW1vdGVfdGhyZWFkX2lkID0gLTE7CisJCQlyZXR1cm4g cmV0OworCQl9CisKKwkJdWMtPnNyY190aHJlYWQgPSB1ZC0+cHNpbF9iYXNlICsgdWMtPnRjaGFu LT5pZDsKKwkJdWMtPmRzdF90aHJlYWQgPSB1Yy0+cmVtb3RlX3RocmVhZF9pZDsKKwkJdWMtPmRz dF90aHJlYWQgfD0gVURNQV9QU0lMX0RTVF9USFJFQURfSURfT0ZGU0VUOworCisJCWlycV9yaW5n ID0gdWMtPnRjaGFuLT50Y19yaW5nOworCQlpcnFfdWRtYV9pZHggPSB1Yy0+dGNoYW4tPmlkOwor CQlicmVhazsKKwljYXNlIERNQV9ERVZfVE9fTUVNOgorCQkvKiBTbGF2ZSB0cmFuc2ZlciBzeW5j aHJvbml6ZWQgLSBkZXYgdG8gbWVtIChSWCkgdHJhc25mZXIgKi8KKwkJZGV2X2RiZyh1Yy0+dWQt PmRldiwgIiVzOiBjaGFuJWQgYXMgREVWLXRvLU1FTVxuIiwgX19mdW5jX18sCisJCQl1Yy0+aWQp OworCisJCXJldCA9IHVkbWFfYWxsb2NfcnhfcmVzb3VyY2VzKHVjKTsKKwkJaWYgKHJldCkgewor CQkJdWMtPnJlbW90ZV90aHJlYWRfaWQgPSAtMTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQl1 Yy0+c3JjX3RocmVhZCA9IHVjLT5yZW1vdGVfdGhyZWFkX2lkOworCQl1Yy0+ZHN0X3RocmVhZCA9 ICh1ZC0+cHNpbF9iYXNlICsgdWMtPnJjaGFuLT5pZCkgfAorCQkJCSBVRE1BX1BTSUxfRFNUX1RI UkVBRF9JRF9PRkZTRVQ7CisKKwkJaXJxX3JpbmcgPSB1Yy0+cmNoYW4tPnJfcmluZzsKKwkJaXJx X3VkbWFfaWR4ID0gbWF0Y2hfZGF0YS0+cmNoYW5fb2VzX29mZnNldCArIHVjLT5yY2hhbi0+aWQ7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIENhbiBub3QgaGFwcGVuICovCisJCWRldl9lcnIo dWMtPnVkLT5kZXYsICIlczogY2hhbiVkIGludmFsaWQgZGlyZWN0aW9uICgldSlcbiIsCisJCQlf X2Z1bmNfXywgdWMtPmlkLCB1Yy0+ZGlyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyog Q29uZmlndXJlIGNoYW5uZWwocyksIHJmbG93IHZpYSB0aXNjaSAqLworCXJldCA9IHVkbWFfdGlz Y2lfY2hhbm5lbF9jb25maWcodWMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3Jlc19mcmVlOwor CisJaWYgKHVkbWFfaXNfY2hhbl9ydW5uaW5nKHVjKSkgeworCQlkZXZfd2Fybih1ZC0+ZGV2LCAi Y2hhbiVkOiBpcyBydW5uaW5nIVxuIiwgdWMtPmlkKTsKKwkJdWRtYV9zdG9wKHVjKTsKKwkJaWYg KHVkbWFfaXNfY2hhbl9ydW5uaW5nKHVjKSkgeworCQkJZGV2X2Vycih1ZC0+ZGV2LCAiY2hhbiVk OiB3b24ndCBzdG9wIVxuIiwgdWMtPmlkKTsKKwkJCWdvdG8gZXJyX3Jlc19mcmVlOworCQl9CisJ fQorCisJLyogUFNJLUwgcGFpcmluZyAqLworCXJldCA9IG5hdnNzX3BzaWxfcGFpcih1ZCwgdWMt PnNyY190aHJlYWQsIHVjLT5kc3RfdGhyZWFkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIodWQt PmRldiwgIlBTSS1MIHBhaXJpbmcgZmFpbGVkOiAweCUwNHggLT4gMHglMDR4XG4iLAorCQkJdWMt PnNyY190aHJlYWQsIHVjLT5kc3RfdGhyZWFkKTsKKwkJZ290byBlcnJfcmVzX2ZyZWU7CisJfQor CisJdWMtPnBzaWxfcGFpcmVkID0gdHJ1ZTsKKworCXVjLT5pcnFfbnVtX3JpbmcgPSBrM19yaW5n YWNjX2dldF9yaW5nX2lycV9udW0oaXJxX3JpbmcpOworCWlmICh1Yy0+aXJxX251bV9yaW5nIDw9 IDApIHsKKwkJZGV2X2Vycih1ZC0+ZGV2LCAiRmFpbGVkIHRvIGdldCByaW5nIGlycSAoaW5kZXg6 ICV1KVxuIiwKKwkJCWszX3JpbmdhY2NfZ2V0X3JpbmdfaWQoaXJxX3JpbmcpKTsKKwkJcmV0ID0g LUVJTlZBTDsKKwkJZ290byBlcnJfcHNpX2ZyZWU7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEo dWMtPmlycV9udW1fcmluZywgdWRtYV9yaW5nX2lycV9oYW5kbGVyLAorCQkJICBJUlFGX1RSSUdH RVJfSElHSCwgdWMtPm5hbWUsIHVjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIodWQtPmRldiwg ImNoYW4lZDogcmluZyBpcnEgcmVxdWVzdCBmYWlsZWRcbiIsIHVjLT5pZCk7CisJCWdvdG8gZXJy X2lycV9mcmVlOworCX0KKworCS8qIEV2ZW50IGZyb20gVURNQSAoVFIgZXZlbnRzKSBvbmx5IG5l ZWRlZCBmb3Igc2xhdmUgVFIgbW9kZSBjaGFubmVscyAqLworCWlmIChpc19zbGF2ZV9kaXJlY3Rp b24odWMtPmRpcikgJiYgIXVjLT5wa3RfbW9kZSkgeworCQl1Yy0+aXJxX251bV91ZG1hID0gdGlf c2NpX2ludGFfbXNpX2dldF92aXJxKHVkLT5kZXYsCisJCQkJCQkJICAgIGlycV91ZG1hX2lkeCk7 CisJCWlmICh1Yy0+aXJxX251bV91ZG1hIDw9IDApIHsKKwkJCWRldl9lcnIodWQtPmRldiwgIkZh aWxlZCB0byBnZXQgdWRtYSBpcnEgKGluZGV4OiAldSlcbiIsCisJCQkJaXJxX3VkbWFfaWR4KTsK KwkJCWZyZWVfaXJxKHVjLT5pcnFfbnVtX3JpbmcsIHVjKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJ CQlnb3RvIGVycl9pcnFfZnJlZTsKKwkJfQorCisJCXJldCA9IHJlcXVlc3RfaXJxKHVjLT5pcnFf bnVtX3VkbWEsIHVkbWFfdWRtYV9pcnFfaGFuZGxlciwgMCwKKwkJCQkgIHVjLT5uYW1lLCB1Yyk7 CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIodWQtPmRldiwgImNoYW4lZDogVURNQSBpcnEgcmVx dWVzdCBmYWlsZWRcbiIsCisJCQkJdWMtPmlkKTsKKwkJCWZyZWVfaXJxKHVjLT5pcnFfbnVtX3Jp bmcsIHVjKTsKKwkJCWdvdG8gZXJyX2lycV9mcmVlOworCQl9CisJfSBlbHNlIHsKKwkJdWMtPmly cV9udW1fdWRtYSA9IDA7CisJfQorCisJdWRtYV9yZXNldF9yaW5ncyh1Yyk7CisKKwlyZXR1cm4g MDsKKworZXJyX2lycV9mcmVlOgorCXVjLT5pcnFfbnVtX3JpbmcgPSAwOworCXVjLT5pcnFfbnVt X3VkbWEgPSAwOworZXJyX3BzaV9mcmVlOgorCW5hdnNzX3BzaWxfdW5wYWlyKHVkLCB1Yy0+c3Jj X3RocmVhZCwgdWMtPmRzdF90aHJlYWQpOworCXVjLT5wc2lsX3BhaXJlZCA9IGZhbHNlOworZXJy X3Jlc19mcmVlOgorCXVkbWFfZnJlZV90eF9yZXNvdXJjZXModWMpOworCXVkbWFfZnJlZV9yeF9y ZXNvdXJjZXModWMpOworCisJdWMtPnJlbW90ZV90aHJlYWRfaWQgPSAtMTsKKwl1Yy0+ZGlyID0g RE1BX01FTV9UT19NRU07CisJdWMtPnBrdF9tb2RlID0gZmFsc2U7CisJdWMtPnN0YXRpY190cl90 eXBlID0gMDsKKwl1Yy0+ZW5hYmxlX2FjYzMyID0gMDsKKwl1Yy0+ZW5hYmxlX2J1cnN0ID0gMDsK Kwl1Yy0+Y2hhbm5lbF90cGwgPSAwOworCXVjLT5wc2Rfc2l6ZSA9IDA7CisJdWMtPm1ldGFkYXRh X3NpemUgPSAwOworCXVjLT5oZGVzY19zaXplID0gMDsKKworCWlmICh1Yy0+dXNlX2RtYV9wb29s KSB7CisJCWRtYV9wb29sX2Rlc3Ryb3kodWMtPmhkZXNjX3Bvb2wpOworCQl1Yy0+dXNlX2RtYV9w b29sID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdWRtYV9m cmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgdWRt YV9jaGFuICp1YyA9IHRvX3VkbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0g dG9fdWRtYV9kZXYoY2hhbi0+ZGV2aWNlKTsKKworCXVkbWFfdGVybWluYXRlX2FsbChjaGFuKTsK KworCWlmICh1Yy0+aXJxX251bV9yaW5nID4gMCkgeworCQlmcmVlX2lycSh1Yy0+aXJxX251bV9y aW5nLCB1Yyk7CisKKwkJdWMtPmlycV9udW1fcmluZyA9IDA7CisJfQorCWlmICh1Yy0+aXJxX251 bV91ZG1hID4gMCkgeworCQlmcmVlX2lycSh1Yy0+aXJxX251bV91ZG1hLCB1Yyk7CisKKwkJdWMt PmlycV9udW1fdWRtYSA9IDA7CisJfQorCisJLyogUmVsZWFzZSBQU0ktTCBwYWlyaW5nICovCisJ aWYgKHVjLT5wc2lsX3BhaXJlZCkgeworCQluYXZzc19wc2lsX3VucGFpcih1ZCwgdWMtPnNyY190 aHJlYWQsIHVjLT5kc3RfdGhyZWFkKTsKKwkJdWMtPnBzaWxfcGFpcmVkID0gZmFsc2U7CisJfQor CisJdmNoYW5fZnJlZV9jaGFuX3Jlc291cmNlcygmdWMtPnZjKTsKKwl0YXNrbGV0X2tpbGwoJnVj LT52Yy50YXNrKTsKKworCXBtX3J1bnRpbWVfcHV0KHVkLT5kZGV2LmRldik7CisKKwl1ZG1hX2Zy ZWVfdHhfcmVzb3VyY2VzKHVjKTsKKwl1ZG1hX2ZyZWVfcnhfcmVzb3VyY2VzKHVjKTsKKworCXVj LT5yZW1vdGVfdGhyZWFkX2lkID0gLTE7CisJdWMtPmRpciA9IERNQV9NRU1fVE9fTUVNOworCXVj LT5wa3RfbW9kZSA9IGZhbHNlOworCXVjLT5zdGF0aWNfdHJfdHlwZSA9IDA7CisJdWMtPmVuYWJs ZV9hY2MzMiA9IDA7CisJdWMtPmVuYWJsZV9idXJzdCA9IDA7CisJdWMtPmNoYW5uZWxfdHBsID0g MDsKKwl1Yy0+cHNkX3NpemUgPSAwOworCXVjLT5tZXRhZGF0YV9zaXplID0gMDsKKwl1Yy0+aGRl c2Nfc2l6ZSA9IDA7CisKKwlpZiAodWMtPnVzZV9kbWFfcG9vbCkgeworCQlkbWFfcG9vbF9kZXN0 cm95KHVjLT5oZGVzY19wb29sKTsKKwkJdWMtPnVzZV9kbWFfcG9vbCA9IGZhbHNlOworCX0KK30K Kwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWRtYV9kcml2ZXI7CiAKIHN0YXRpYyBi b29sIHVkbWFfc2xhdmVfdGhyZWFkX2lzX3BhY2tldF9tb2RlKHN0cnVjdCB1ZG1hX2NoYW4gKnVj KQotLSAKUGV0ZXIKClRleGFzIEluc3RydW1lbnRzIEZpbmxhbmQgT3ksIFBvcmtrYWxhbmthdHUg MjIsIDAwMTgwIEhlbHNpbmtpLgpZLXR1bm51cy9CdXNpbmVzcyBJRDogMDYxNTUyMS00LiBLb3Rp cGFpa2thL0RvbWljaWxlOiBIZWxzaW5raQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK