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=-8.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,T_DKIMWL_WL_HIGH,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 24FA9C04A6B for ; Mon, 6 May 2019 12:37:39 +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 DB05920830 for ; Mon, 6 May 2019 12:37:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="e+7X/sao"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="Glp/6Bqk" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DB05920830 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=in+Tpu9pAF+KskW2MYo3nYGDVPSVayXgfWlDphxey5w=; b=e+7X/saoAg34JA NjqcgX6R79UFiOAqLI2qXYV6DNyq8Kq4YWAKwoKifwDJSJAfrdF69ewAXnE4rks85WD/wvncb9egS rj4oqgWaCrnOR8BZr/pf0jdh1iRt+OU1MhyGcaJ+xKxWTUznVvhB7ZA+N8t6mdJcNeGUZ7f8OZiMv WCDz70A2hIVGv7594WXJs62Ct/k5VvqRRx49Gz48t+INZch16VgUeRHSkU+e3po4V5sY7A8ikB7VV YCJr8dfi4HJXzGr1ov2OpVnxA83Hk7aSKJ2qGDqaHvDO5hh68yHZNGSVXKNa8UVyZwxnX6QQWgnmA 9JfS6jiNKRciCinwhyFw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNcs7-0001aG-3w; Mon, 06 May 2019 12:37:31 +0000 Received: from lelv0142.ext.ti.com ([198.47.23.249]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNcqI-0007or-Vl for linux-arm-kernel@lists.infradead.org; Mon, 06 May 2019 12:36:12 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id x46CZZTG017899; Mon, 6 May 2019 07:35:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1557146135; bh=iV+uu6cGfBzBA0bS8hulLTUu9dvPFDGcL7dAEXBGF8U=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=Glp/6Bqk/EwiSItedmeloBWQLld1sQsb6N7SCwr7enQokSYnWL7N75XO7qOUCLZTI ohmYB3u+5Ee4ofMc46JkUQxFM79jXLSWs4mbUBkWON6FEKhlVLbVu9OLbjf8x0Oypv A3V5eAEnFUlGumwEFBo3g6BPfHm2h5HR5PtI30sk= Received: from DLEE102.ent.ti.com (dlee102.ent.ti.com [157.170.170.32]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x46CZZxs024455 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 6 May 2019 07:35:35 -0500 Received: from DLEE107.ent.ti.com (157.170.170.37) by DLEE102.ent.ti.com (157.170.170.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Mon, 6 May 2019 07:35:31 -0500 Received: from fllv0040.itg.ti.com (10.64.41.20) 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 via Frontend Transport; Mon, 6 May 2019 07:35:31 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id x46CYpUI110286; Mon, 6 May 2019 07:35:28 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH 12/16] dmaengine: ti: New driver for K3 UDMA - split#3: alloc/free chan_resources Date: Mon, 6 May 2019 15:34:52 +0300 Message-ID: <20190506123456.6777-13-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190506123456.6777-1-peter.ujfalusi@ti.com> References: <20190506123456.6777-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-20190506_053539_368224_4C27B4F2 X-CRM114-Status: GOOD ( 17.23 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 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, 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 bWEvdGkvazMtdWRtYS5jIHwgNzczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMSBmaWxlIGNoYW5nZWQsIDc3MyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9kbWEvdGkvazMtdWRtYS5jIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5jCmluZGV4IGI5 ZGI3M2ZlZTFiNy4uNWQ4ZTBjNWQxYWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS90aS9rMy11 ZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5jCkBAIC0xMDA3LDYgKzEwMDcsNzc5 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 CXN0cnVjdCBrM19yaW5nICppcnFfcmluZzsKKwl1MzIgaXJxX3VkbWFfaWR4OworCWludCByZXQ7 CisKKwlpZiAodWMtPnBrdF9tb2RlIHx8IHVjLT5kaXIgPT0gRE1BX01FTV9UT19NRU0pIHsKKwkJ dWMtPnVzZV9kbWFfcG9vbCA9IHRydWU7CisJCS8qIGluIGNhc2Ugb2YgTUVNX1RPX01FTSB3ZSBo YXZlIG1heGltdW0gb2YgdHdvIFRScyAqLworCQlpZiAodWMtPmRpciA9PSBETUFfTUVNX1RPX01F TSkKKwkJCXVjLT5oZGVzY19zaXplID0gY3BwaTVfdHJkZXNjX2NhbGNfc2l6ZSgKKwkJCQkJc2l6 ZW9mKHN0cnVjdCBjcHBpNV90cl90eXBlMTVfdCksIDIpOworCX0KKworCWlmICh1Yy0+dXNlX2Rt YV9wb29sKSB7CisJCXVjLT5oZGVzY19wb29sID0gZG1hX3Bvb2xfY3JlYXRlKHVjLT5uYW1lLCB1 ZC0+ZGRldi5kZXYsCisJCQkJCQkgdWMtPmhkZXNjX3NpemUsIHVkLT5kZXNjX2FsaWduLAorCQkJ CQkJIDApOworCQlpZiAoIXVjLT5oZGVzY19wb29sKSB7CisJCQlkZXZfZXJyKHVkLT5kZGV2LmRl diwKKwkJCQkiRGVzY3JpcHRvciBwb29sIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJCXVjLT51 c2VfZG1hX3Bvb2wgPSBmYWxzZTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJcG1f cnVudGltZV9nZXRfc3luYyh1ZC0+ZGRldi5kZXYpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhh dCB0aGUgY29tcGxldGlvbiBpcyBpbiBhIGtub3duIHN0YXRlOgorCSAqIE5vIHRlYXJkb3duLCB0 aGUgY2hhbm5lbCBpcyBpZGxlCisJICovCisJcmVpbml0X2NvbXBsZXRpb24oJnVjLT50ZWFyZG93 bl9jb21wbGV0ZWQpOworCWNvbXBsZXRlX2FsbCgmdWMtPnRlYXJkb3duX2NvbXBsZXRlZCk7CisJ dWMtPnN0YXRlID0gVURNQV9DSEFOX0lTX0lETEU7CisKKwlzd2l0Y2ggKHVjLT5kaXIpIHsKKwlj YXNlIERNQV9NRU1fVE9fTUVNOgorCQkvKiBOb24gc3luY2hyb25pemVkIC0gbWVtIHRvIG1lbSB0 eXBlIG9mIHRyYW5zZmVyICovCisJCWRldl9kYmcodWMtPnVkLT5kZXYsICIlczogY2hhbiVkIGFz IE1FTS10by1NRU1cbiIsIF9fZnVuY19fLAorCQkJdWMtPmlkKTsKKworCQlyZXQgPSB1ZG1hX2dl dF9jaGFuX3BhaXIodWMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSB1 ZG1hX2FsbG9jX3R4X3Jlc291cmNlcyh1Yyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0Owor CisJCXJldCA9IHVkbWFfYWxsb2NfcnhfcmVzb3VyY2VzKHVjKTsKKwkJaWYgKHJldCkgeworCQkJ dWRtYV9mcmVlX3R4X3Jlc291cmNlcyh1Yyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJdWMt PnNyY190aHJlYWQgPSB1ZC0+cHNpbF9iYXNlICsgdWMtPnRjaGFuLT5pZDsKKwkJdWMtPmRzdF90 aHJlYWQgPSAodWQtPnBzaWxfYmFzZSArIHVjLT5yY2hhbi0+aWQpIHwKKwkJCQkgVURNQV9QU0lM X0RTVF9USFJFQURfSURfT0ZGU0VUOworCisJCWlycV9yaW5nID0gdWMtPnRjaGFuLT50Y19yaW5n OworCQlpcnFfdWRtYV9pZHggPSB1Yy0+dGNoYW4tPmlkOworCQlicmVhazsKKwljYXNlIERNQV9N RU1fVE9fREVWOgorCQkvKiBTbGF2ZSB0cmFuc2ZlciBzeW5jaHJvbml6ZWQgLSBtZW0gdG8gZGV2 IChUWCkgdHJhc25mZXIgKi8KKwkJZGV2X2RiZyh1Yy0+dWQtPmRldiwgIiVzOiBjaGFuJWQgYXMg TUVNLXRvLURFVlxuIiwgX19mdW5jX18sCisJCQl1Yy0+aWQpOworCisJCXJldCA9IHVkbWFfYWxs b2NfdHhfcmVzb3VyY2VzKHVjKTsKKwkJaWYgKHJldCkgeworCQkJdWMtPnJlbW90ZV90aHJlYWRf aWQgPSAtMTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQl1Yy0+c3JjX3RocmVhZCA9IHVkLT5w c2lsX2Jhc2UgKyB1Yy0+dGNoYW4tPmlkOworCQl1Yy0+ZHN0X3RocmVhZCA9IHVjLT5yZW1vdGVf dGhyZWFkX2lkOworCQl1Yy0+ZHN0X3RocmVhZCB8PSBVRE1BX1BTSUxfRFNUX1RIUkVBRF9JRF9P RkZTRVQ7CisKKwkJaXJxX3JpbmcgPSB1Yy0+dGNoYW4tPnRjX3Jpbmc7CisJCWlycV91ZG1hX2lk eCA9IHVjLT50Y2hhbi0+aWQ7CisJCWJyZWFrOworCWNhc2UgRE1BX0RFVl9UT19NRU06CisJCS8q IFNsYXZlIHRyYW5zZmVyIHN5bmNocm9uaXplZCAtIGRldiB0byBtZW0gKFJYKSB0cmFzbmZlciAq LworCQlkZXZfZGJnKHVjLT51ZC0+ZGV2LCAiJXM6IGNoYW4lZCBhcyBERVYtdG8tTUVNXG4iLCBf X2Z1bmNfXywKKwkJCXVjLT5pZCk7CisKKwkJcmV0ID0gdWRtYV9hbGxvY19yeF9yZXNvdXJjZXMo dWMpOworCQlpZiAocmV0KSB7CisJCQl1Yy0+cmVtb3RlX3RocmVhZF9pZCA9IC0xOworCQkJcmV0 dXJuIHJldDsKKwkJfQorCisJCXVjLT5zcmNfdGhyZWFkID0gdWMtPnJlbW90ZV90aHJlYWRfaWQ7 CisJCXVjLT5kc3RfdGhyZWFkID0gKHVkLT5wc2lsX2Jhc2UgKyB1Yy0+cmNoYW4tPmlkKSB8CisJ CQkJIFVETUFfUFNJTF9EU1RfVEhSRUFEX0lEX09GRlNFVDsKKworCQlpcnFfcmluZyA9IHVjLT5y Y2hhbi0+cl9yaW5nOworCQlpcnFfdWRtYV9pZHggPSAweDIwMDAgKyB1Yy0+cmNoYW4tPmlkOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBDYW4gbm90IGhhcHBlbiAqLworCQlkZXZfZXJyKHVj LT51ZC0+ZGV2LCAiJXM6IGNoYW4lZCBpbnZhbGlkIGRpcmVjdGlvbiAoJXUpXG4iLAorCQkJX19m dW5jX18sIHVjLT5pZCwgdWMtPmRpcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENv bmZpZ3VyZSBjaGFubmVsKHMpLCByZmxvdyB2aWEgdGlzY2kgKi8KKwlyZXQgPSB1ZG1hX3Rpc2Np X2NoYW5uZWxfY29uZmlnKHVjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZXNfZnJlZTsKKwor CWlmICh1ZG1hX2lzX2NoYW5fcnVubmluZyh1YykpIHsKKwkJZGV2X3dhcm4odWQtPmRldiwgImNo YW4lZDogaXMgcnVubmluZyFcbiIsIHVjLT5pZCk7CisJCXVkbWFfc3RvcCh1Yyk7CisJCWlmICh1 ZG1hX2lzX2NoYW5fcnVubmluZyh1YykpIHsKKwkJCWRldl9lcnIodWQtPmRldiwgImNoYW4lZDog d29uJ3Qgc3RvcCFcbiIsIHVjLT5pZCk7CisJCQlnb3RvIGVycl9yZXNfZnJlZTsKKwkJfQorCX0K KworCS8qIFBTSS1MIHBhaXJpbmcgKi8KKwlyZXQgPSBuYXZzc19wc2lsX3BhaXIodWQsIHVjLT5z cmNfdGhyZWFkLCB1Yy0+ZHN0X3RocmVhZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHVkLT5k ZXYsICJQU0ktTCBwYWlyaW5nIGZhaWxlZDogMHglMDR4IC0+IDB4JTA0eFxuIiwKKwkJCXVjLT5z cmNfdGhyZWFkLCB1Yy0+ZHN0X3RocmVhZCk7CisJCWdvdG8gZXJyX3Jlc19mcmVlOworCX0KKwor CXVjLT5wc2lsX3BhaXJlZCA9IHRydWU7CisKKwl1Yy0+aXJxX251bV9yaW5nID0gazNfcmluZ2Fj Y19nZXRfcmluZ19pcnFfbnVtKGlycV9yaW5nKTsKKwlpZiAodWMtPmlycV9udW1fcmluZyA8PSAw KSB7CisJCWRldl9lcnIodWQtPmRldiwgIkZhaWxlZCB0byBnZXQgcmluZyBpcnEgKGluZGV4OiAl dSlcbiIsCisJCQlrM19yaW5nYWNjX2dldF9yaW5nX2lkKGlycV9yaW5nKSk7CisJCXJldCA9IC1F SU5WQUw7CisJCWdvdG8gZXJyX3BzaV9mcmVlOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHVj LT5pcnFfbnVtX3JpbmcsIHVkbWFfcmluZ19pcnFfaGFuZGxlciwKKwkJCSAgSVJRRl9UUklHR0VS X0hJR0gsIHVjLT5uYW1lLCB1Yyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHVkLT5kZXYsICJj aGFuJWQ6IHJpbmcgaXJxIHJlcXVlc3QgZmFpbGVkXG4iLCB1Yy0+aWQpOworCQlnb3RvIGVycl9p cnFfZnJlZTsKKwl9CisKKwkvKiBFdmVudCBmcm9tIFVETUEgKFRSIGV2ZW50cykgb25seSBuZWVk ZWQgZm9yIHNsYXZlIFRSIG1vZGUgY2hhbm5lbHMgKi8KKwlpZiAoaXNfc2xhdmVfZGlyZWN0aW9u KHVjLT5kaXIpICYmICF1Yy0+cGt0X21vZGUpIHsKKwkJdWMtPmlycV9udW1fdWRtYSA9IHRpX3Nj aV9pbnRhX21zaV9nZXRfdmlycSh1ZC0+ZGV2LAorCQkJCQkJCSAgICBpcnFfdWRtYV9pZHgpOwor CQlpZiAodWMtPmlycV9udW1fdWRtYSA8PSAwKSB7CisJCQlkZXZfZXJyKHVkLT5kZXYsICJGYWls ZWQgdG8gZ2V0IHVkbWEgaXJxIChpbmRleDogJXUpXG4iLAorCQkJCWlycV91ZG1hX2lkeCk7CisJ CQlmcmVlX2lycSh1Yy0+aXJxX251bV9yaW5nLCB1Yyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJ Z290byBlcnJfaXJxX2ZyZWU7CisJCX0KKworCQlyZXQgPSByZXF1ZXN0X2lycSh1Yy0+aXJxX251 bV91ZG1hLCB1ZG1hX3VkbWFfaXJxX2hhbmRsZXIsIDAsCisJCQkJICB1Yy0+bmFtZSwgdWMpOwor CQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKHVkLT5kZXYsICJjaGFuJWQ6IFVETUEgaXJxIHJlcXVl c3QgZmFpbGVkXG4iLAorCQkJCXVjLT5pZCk7CisJCQlmcmVlX2lycSh1Yy0+aXJxX251bV9yaW5n LCB1Yyk7CisJCQlnb3RvIGVycl9pcnFfZnJlZTsKKwkJfQorCX0gZWxzZSB7CisJCXVjLT5pcnFf bnVtX3VkbWEgPSAwOworCX0KKworCXVkbWFfcmVzZXRfcmluZ3ModWMpOworCisJcmV0dXJuIDA7 CisKK2Vycl9pcnFfZnJlZToKKwl1Yy0+aXJxX251bV9yaW5nID0gMDsKKwl1Yy0+aXJxX251bV91 ZG1hID0gMDsKK2Vycl9wc2lfZnJlZToKKwluYXZzc19wc2lsX3VucGFpcih1ZCwgdWMtPnNyY190 aHJlYWQsIHVjLT5kc3RfdGhyZWFkKTsKKwl1Yy0+cHNpbF9wYWlyZWQgPSBmYWxzZTsKK2Vycl9y ZXNfZnJlZToKKwl1ZG1hX2ZyZWVfdHhfcmVzb3VyY2VzKHVjKTsKKwl1ZG1hX2ZyZWVfcnhfcmVz b3VyY2VzKHVjKTsKKworCXVjLT5yZW1vdGVfdGhyZWFkX2lkID0gLTE7CisJdWMtPmRpciA9IERN QV9NRU1fVE9fTUVNOworCXVjLT5wa3RfbW9kZSA9IGZhbHNlOworCXVjLT5zdGF0aWNfdHJfdHlw ZSA9IDA7CisJdWMtPmNoYW5uZWxfdHBsID0gMDsKKwl1Yy0+cHNkX3NpemUgPSAwOworCXVjLT5t ZXRhZGF0YV9zaXplID0gMDsKKwl1Yy0+aGRlc2Nfc2l6ZSA9IDA7CisKKwlpZiAodWMtPnVzZV9k bWFfcG9vbCkgeworCQlkbWFfcG9vbF9kZXN0cm95KHVjLT5oZGVzY19wb29sKTsKKwkJdWMtPnVz ZV9kbWFfcG9vbCA9IGZhbHNlOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IHVkbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3Ry dWN0IHVkbWFfY2hhbiAqdWMgPSB0b191ZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IHVkbWFfZGV2 ICp1ZCA9IHRvX3VkbWFfZGV2KGNoYW4tPmRldmljZSk7CisKKwl1ZG1hX3Rlcm1pbmF0ZV9hbGwo Y2hhbik7CisKKwlpZiAodWMtPmlycV9udW1fcmluZyA+IDApIHsKKwkJZnJlZV9pcnEodWMtPmly cV9udW1fcmluZywgdWMpOworCisJCXVjLT5pcnFfbnVtX3JpbmcgPSAwOworCX0KKwlpZiAodWMt PmlycV9udW1fdWRtYSA+IDApIHsKKwkJZnJlZV9pcnEodWMtPmlycV9udW1fdWRtYSwgdWMpOwor CisJCXVjLT5pcnFfbnVtX3VkbWEgPSAwOworCX0KKworCS8qIFJlbGVhc2UgUFNJLUwgcGFpcmlu ZyAqLworCWlmICh1Yy0+cHNpbF9wYWlyZWQpIHsKKwkJbmF2c3NfcHNpbF91bnBhaXIodWQsIHVj LT5zcmNfdGhyZWFkLCB1Yy0+ZHN0X3RocmVhZCk7CisJCXVjLT5wc2lsX3BhaXJlZCA9IGZhbHNl OworCX0KKworCXZjaGFuX2ZyZWVfY2hhbl9yZXNvdXJjZXMoJnVjLT52Yyk7CisJdGFza2xldF9r aWxsKCZ1Yy0+dmMudGFzayk7CisKKwlwbV9ydW50aW1lX3B1dCh1ZC0+ZGRldi5kZXYpOworCisJ dWRtYV9mcmVlX3R4X3Jlc291cmNlcyh1Yyk7CisJdWRtYV9mcmVlX3J4X3Jlc291cmNlcyh1Yyk7 CisKKwl1Yy0+cmVtb3RlX3RocmVhZF9pZCA9IC0xOworCXVjLT5kaXIgPSBETUFfTUVNX1RPX01F TTsKKwl1Yy0+cGt0X21vZGUgPSBmYWxzZTsKKwl1Yy0+c3RhdGljX3RyX3R5cGUgPSAwOworCXVj LT5jaGFubmVsX3RwbCA9IDA7CisJdWMtPnBzZF9zaXplID0gMDsKKwl1Yy0+bWV0YWRhdGFfc2l6 ZSA9IDA7CisJdWMtPmhkZXNjX3NpemUgPSAwOworCisJaWYgKHVjLT51c2VfZG1hX3Bvb2wpIHsK KwkJZG1hX3Bvb2xfZGVzdHJveSh1Yy0+aGRlc2NfcG9vbCk7CisJCXVjLT51c2VfZG1hX3Bvb2wg PSBmYWxzZTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVkbWFfZHJp dmVyOwogCiBzdGF0aWMgYm9vbCB1ZG1hX2RtYV9maWx0ZXJfZm4oc3RydWN0IGRtYV9jaGFuICpj aGFuLCB2b2lkICpwYXJhbSkKLS0gClBldGVyCgpUZXhhcyBJbnN0cnVtZW50cyBGaW5sYW5kIE95 LCBQb3Jra2FsYW5rYXR1IDIyLCAwMDE4MCBIZWxzaW5raS4KWS10dW5udXMvQnVzaW5lc3MgSUQ6 IDA2MTU1MjEtNC4gS290aXBhaWtrYS9Eb21pY2lsZTogSGVsc2lua2kKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==