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,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 A7B0DECDFB6 for ; Tue, 1 Oct 2019 06:20:15 +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 740A221783 for ; Tue, 1 Oct 2019 06:20:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="KeMJgBnF"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="FIrGZqmM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 740A221783 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=nH+RKQGoMBLWECn9MtdVLIlwrC7CyTtQmcpufC/KGPM=; b=KeMJgBnFhpp7IR XJlhmCcYsNtun3zRIK6BPpxI0G5UJoabP1sjIXJQ2JJNHYxBD31C88FS5L7Ron4AxhhoKmK9qFH2w JuN+ktL8D+0VhVyHUG0mZnMwlHYdpLhhNkNi5MmumcO0oUxTuIYZtaROTuGASzyVmdMDi2GAMXKkd /KfHXef0VQ7dj7vyYO1LZpG3P7AzkeBXK3CvazbKE4vbygXEYZZoB/3tsVfE1my0o3kj/1TKUa1A0 nnEO7hjX2NjJo27czghzlojm+74mYymx4jNYlYft/dixluOd0uWkYYSebxz8yW5MDbW8rbKRiegFQ wUbzzHRuABu76b69pErQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iFBW3-0003TV-3B; Tue, 01 Oct 2019 06:20:07 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iFBT2-0000er-Q2 for linux-arm-kernel@lists.infradead.org; Tue, 01 Oct 2019 06:17:04 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id x916GuSU020265; Tue, 1 Oct 2019 01:16:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1569910616; bh=xmlsKVeIHg26Kr5D2+hIP63LjxBtjphv4RFUK0Jfesg=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=FIrGZqmMHyF1o1aWzS/DCcSMoD20wWNVlJjhvpukryvC4Z2IcGF/RgJN4YuI9squY wfA51v/HNb8QEYUaZTC+5hZEvz1XfZaoyyBqt/tjFOB7INa6MxOZvZxjxBAgHInatI K0wfFkCkRrIPfsOhkMZfabOZB0jQ44Tg3KMsXV18= Received: from DFLE106.ent.ti.com (dfle106.ent.ti.com [10.64.6.27]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x916GuEM115652 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 1 Oct 2019 01:16:56 -0500 Received: from DFLE111.ent.ti.com (10.64.6.32) by DFLE106.ent.ti.com (10.64.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 1 Oct 2019 01:16:56 -0500 Received: from fllv0039.itg.ti.com (10.64.41.19) by DFLE111.ent.ti.com (10.64.6.32) 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, 1 Oct 2019 01:16:56 -0500 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id x916GGXF090310; Tue, 1 Oct 2019 01:16:52 -0500 From: Peter Ujfalusi To: , , , Subject: [PATCH v3 10/14] dmaengine: ti: New driver for K3 UDMA - split#3: alloc/free chan_resources Date: Tue, 1 Oct 2019 09:17:00 +0300 Message-ID: <20191001061704.2399-11-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191001061704.2399-1-peter.ujfalusi@ti.com> References: <20191001061704.2399-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-20190930_231700_950910_A9C02F58 X-CRM114-Status: GOOD ( 18.14 ) 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 bWEvdGkvazMtdWRtYS5jIHwgNzk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMSBmaWxlIGNoYW5nZWQsIDc5NyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9kbWEvdGkvazMtdWRtYS5jIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5jCmluZGV4IGQ0 MGZkMjY4YjQ3Ny4uYzczNjhlMTUwMTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS90aS9rMy11 ZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvdGkvazMtdWRtYS5jCkBAIC0xMDU4LDYgKzEwNTgsODAz IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB1ZG1hX3VkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9p ZCAqZGF0YSkKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdWRtYV9y ZmxvdyAqX191ZG1hX2dldF9yZmxvdyhzdHJ1Y3QgdWRtYV9kZXYgKnVkLCBpbnQgaWQpCit7CisJ LyoKKwkgKiBBdHRlbXB0IHRvIHJlcXVlc3QgcmZsb3cgYnkgSUQgY2FuIGJlIG1hZGUgZm9yIGFu eSByZmxvdworCSAqIGlmIG5vdCBpbiB1c2Ugd2l0aCBhc3N1bXB0aW9uIHRoYXQgY2FsbGVyIGtu b3dzIHdoYXQncyBkb2luZy4KKwkgKiBUSS1TQ0kgRlcgd2lsbCBwZXJmb3JtIGFkZGl0aW9uYWwg cGVybWlzc2lvbiBjaGVjayBhbnQgd2F5LCBpdCdzCisJICogc2FmZQorCSAqLworCisJaWYgKGlk IDwgMCB8fCBpZCA+PSB1ZC0+cmZsb3dfY250KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsK KworCWlmICh0ZXN0X2JpdChpZCwgdWQtPnJmbG93X2luX3VzZSkpCisJCXJldHVybiBFUlJfUFRS KC1FTk9FTlQpOworCisJLyogR1AgcmZsb3cgaGFzIHRvIGJlIGFsbG9jYXRlZCBmaXJzdCAqLwor CWlmICghdGVzdF9iaXQoaWQsIHVkLT5yZmxvd19ncF9tYXApICYmCisJICAgICF0ZXN0X2JpdChp ZCwgdWQtPnJmbG93X2dwX21hcF9hbGxvY2F0ZWQpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFM KTsKKworCWRldl9kYmcodWQtPmRldiwgImdldCByZmxvdyVkXG4iLCBpZCk7CisJc2V0X2JpdChp ZCwgdWQtPnJmbG93X2luX3VzZSk7CisJcmV0dXJuICZ1ZC0+cmZsb3dzW2lkXTsKK30KKworc3Rh dGljIHZvaWQgX191ZG1hX3B1dF9yZmxvdyhzdHJ1Y3QgdWRtYV9kZXYgKnVkLCBzdHJ1Y3QgdWRt YV9yZmxvdyAqcmZsb3cpCit7CisJaWYgKCF0ZXN0X2JpdChyZmxvdy0+aWQsIHVkLT5yZmxvd19p bl91c2UpKSB7CisJCWRldl9lcnIodWQtPmRldiwgImF0dGVtcHQgdG8gcHV0IHVudXNlZCByZmxv dyVkXG4iLCByZmxvdy0+aWQpOworCQlyZXR1cm47CisJfQorCisJZGV2X2RiZyh1ZC0+ZGV2LCAi cHV0IHJmbG93JWRcbiIsIHJmbG93LT5pZCk7CisJY2xlYXJfYml0KHJmbG93LT5pZCwgdWQtPnJm bG93X2luX3VzZSk7Cit9CisKKyNkZWZpbmUgVURNQV9SRVNFUlZFX1JFU09VUkNFKHJlcykJCQkJ CVwKK3N0YXRpYyBzdHJ1Y3QgdWRtYV8jI3JlcyAqX191ZG1hX3Jlc2VydmVfIyNyZXMoc3RydWN0 IHVkbWFfZGV2ICp1ZCwJXAorCQkJCQkgICAgICAgZW51bSB1ZG1hX3RwX2xldmVsIHRwbCwJXAor CQkJCQkgICAgICAgaW50IGlkKQkJCVwKK3sJCQkJCQkJCQlcCisJaWYgKGlkID49IDApIHsJCQkJ CQkJXAorCQlpZiAodGVzdF9iaXQoaWQsIHVkLT5yZXMjI19tYXApKSB7CQkJXAorCQkJZGV2X2Vy cih1ZC0+ZGV2LCAicmVzIyMlZCBpcyBpbiB1c2VcbiIsIGlkKTsJXAorCQkJcmV0dXJuIEVSUl9Q VFIoLUVOT0VOVCk7CQkJXAorCQl9CQkJCQkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCWludCBz dGFydDsJCQkJCQlcCisJCQkJCQkJCQlcCisJCWlmICh0cGwgPj0gdWQtPm1hdGNoX2RhdGEtPnRw bF9sZXZlbHMpCQkJXAorCQkJdHBsID0gdWQtPm1hdGNoX2RhdGEtPnRwbF9sZXZlbHMgLSAxOwkJ XAorCQkJCQkJCQkJXAorCQlzdGFydCA9IHVkLT5tYXRjaF9kYXRhLT5sZXZlbF9zdGFydF9pZHhb dHBsXTsJCVwKKwkJCQkJCQkJCVwKKwkJaWQgPSBmaW5kX25leHRfemVyb19iaXQodWQtPnJlcyMj X21hcCwgdWQtPnJlcyMjX2NudCwJXAorCQkJCQlzdGFydCk7CQkJCVwKKwkJaWYgKGlkID09IHVk LT5yZXMjI19jbnQpIHsJCQkJXAorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CQkJXAorCQl9 CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJc2V0X2JpdChpZCwgdWQtPnJlcyMj X21hcCk7CQkJCQlcCisJcmV0dXJuICZ1ZC0+cmVzIyNzW2lkXTsJCQkJCQlcCit9CisKK1VETUFf UkVTRVJWRV9SRVNPVVJDRSh0Y2hhbik7CitVRE1BX1JFU0VSVkVfUkVTT1VSQ0UocmNoYW4pOwor CitzdGF0aWMgaW50IHVkbWFfZ2V0X3RjaGFuKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0 cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7CisKKwlpZiAodWMtPnRjaGFuKSB7CisJCWRldl9k YmcodWQtPmRldiwgImNoYW4lZDogYWxyZWFkeSBoYXZlIHRjaGFuJWQgYWxsb2NhdGVkXG4iLAor CQkJdWMtPmlkLCB1Yy0+dGNoYW4tPmlkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdWMtPnRjaGFu ID0gX191ZG1hX3Jlc2VydmVfdGNoYW4odWQsIHVjLT5jaGFubmVsX3RwbCwgLTEpOworCWlmIChJ U19FUlIodWMtPnRjaGFuKSkKKwkJcmV0dXJuIFBUUl9FUlIodWMtPnRjaGFuKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IHVkbWFfZ2V0X3JjaGFuKHN0cnVjdCB1ZG1hX2NoYW4gKnVj KQoreworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7CisKKwlpZiAodWMtPnJjaGFuKSB7 CisJCWRldl9kYmcodWQtPmRldiwgImNoYW4lZDogYWxyZWFkeSBoYXZlIHJjaGFuJWQgYWxsb2Nh dGVkXG4iLAorCQkJdWMtPmlkLCB1Yy0+cmNoYW4tPmlkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJ dWMtPnJjaGFuID0gX191ZG1hX3Jlc2VydmVfcmNoYW4odWQsIHVjLT5jaGFubmVsX3RwbCwgLTEp OworCWlmIChJU19FUlIodWMtPnJjaGFuKSkKKwkJcmV0dXJuIFBUUl9FUlIodWMtPnJjaGFuKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVkbWFfZ2V0X2NoYW5fcGFpcihzdHJ1Y3Qg dWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0gdWMtPnVkOworCWNvbnN0 IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEgPSB1ZC0+bWF0Y2hfZGF0YTsKKwlp bnQgY2hhbl9pZCwgZW5kOworCisJaWYgKCh1Yy0+dGNoYW4gJiYgdWMtPnJjaGFuKSAmJiB1Yy0+ dGNoYW4tPmlkID09IHVjLT5yY2hhbi0+aWQpIHsKKwkJZGV2X2luZm8odWQtPmRldiwgImNoYW4l ZDogYWxyZWFkeSBoYXZlICVkIHBhaXIgYWxsb2NhdGVkXG4iLAorCQkJIHVjLT5pZCwgdWMtPnRj aGFuLT5pZCk7CisJCXJldHVybiAwOworCX0KKworCWlmICh1Yy0+dGNoYW4pIHsKKwkJZGV2X2Vy cih1ZC0+ZGV2LCAiY2hhbiVkOiBhbHJlYWR5IGhhdmUgdGNoYW4lZCBhbGxvY2F0ZWRcbiIsCisJ CQl1Yy0+aWQsIHVjLT50Y2hhbi0+aWQpOworCQlyZXR1cm4gLUVCVVNZOworCX0gZWxzZSBpZiAo dWMtPnJjaGFuKSB7CisJCWRldl9lcnIodWQtPmRldiwgImNoYW4lZDogYWxyZWFkeSBoYXZlIHJj aGFuJWQgYWxsb2NhdGVkXG4iLAorCQkJdWMtPmlkLCB1Yy0+cmNoYW4tPmlkKTsKKwkJcmV0dXJu IC1FQlVTWTsKKwl9CisKKwkvKiBDYW4gYmUgb3B0aW1pemVkLCBidXQgbGV0J3MgaGF2ZSBpdCBs aWtlIHRoaXMgZm9yIG5vdyAqLworCWVuZCA9IG1pbih1ZC0+dGNoYW5fY250LCB1ZC0+cmNoYW5f Y250KTsKKwkvKiBUcnkgdG8gdXNlIHRoZSBoaWdoZXN0IFRQTCBjaGFubmVsIHBhaXIgZm9yIE1F TV9UT19NRU0gY2hhbm5lbHMgKi8KKwljaGFuX2lkID0gbWF0Y2hfZGF0YS0+bGV2ZWxfc3RhcnRf aWR4W21hdGNoX2RhdGEtPnRwbF9sZXZlbHMgLSAxXTsKKwlmb3IgKDsgY2hhbl9pZCA8IGVuZDsg Y2hhbl9pZCsrKSB7CisJCWlmICghdGVzdF9iaXQoY2hhbl9pZCwgdWQtPnRjaGFuX21hcCkgJiYK KwkJICAgICF0ZXN0X2JpdChjaGFuX2lkLCB1ZC0+cmNoYW5fbWFwKSkKKwkJCWJyZWFrOworCX0K KworCWlmIChjaGFuX2lkID09IGVuZCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzZXRfYml0KGNo YW5faWQsIHVkLT50Y2hhbl9tYXApOworCXNldF9iaXQoY2hhbl9pZCwgdWQtPnJjaGFuX21hcCk7 CisJdWMtPnRjaGFuID0gJnVkLT50Y2hhbnNbY2hhbl9pZF07CisJdWMtPnJjaGFuID0gJnVkLT5y Y2hhbnNbY2hhbl9pZF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1ZG1hX2dldF9y ZmxvdyhzdHJ1Y3QgdWRtYV9jaGFuICp1YywgaW50IGZsb3dfaWQpCit7CisJc3RydWN0IHVkbWFf ZGV2ICp1ZCA9IHVjLT51ZDsKKworCWlmICh1Yy0+cmZsb3cpIHsKKwkJZGV2X2RiZyh1ZC0+ZGV2 LCAiY2hhbiVkOiBhbHJlYWR5IGhhdmUgcmZsb3clZCBhbGxvY2F0ZWRcbiIsCisJCQl1Yy0+aWQs IHVjLT5yZmxvdy0+aWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXVjLT5yY2hhbikKKwkJ ZGV2X3dhcm4odWQtPmRldiwgImNoYW4lZDogZG9lcyBub3QgaGF2ZSByY2hhbj8/XG4iLCB1Yy0+ aWQpOworCisJdWMtPnJmbG93ID0gX191ZG1hX2dldF9yZmxvdyh1ZCwgZmxvd19pZCk7CisJaWYg KElTX0VSUih1Yy0+cmZsb3cpKQorCQlyZXR1cm4gUFRSX0VSUih1Yy0+cmZsb3cpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfcHV0X3JjaGFuKHN0cnVjdCB1ZG1hX2NoYW4g KnVjKQoreworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7CisKKwlpZiAodWMtPnJjaGFu KSB7CisJCWRldl9kYmcodWQtPmRldiwgImNoYW4lZDogcHV0IHJjaGFuJWRcbiIsIHVjLT5pZCwK KwkJCXVjLT5yY2hhbi0+aWQpOworCQljbGVhcl9iaXQodWMtPnJjaGFuLT5pZCwgdWQtPnJjaGFu X21hcCk7CisJCXVjLT5yY2hhbiA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCB1ZG1hX3B1 dF90Y2hhbihzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0g dWMtPnVkOworCisJaWYgKHVjLT50Y2hhbikgeworCQlkZXZfZGJnKHVkLT5kZXYsICJjaGFuJWQ6 IHB1dCB0Y2hhbiVkXG4iLCB1Yy0+aWQsCisJCQl1Yy0+dGNoYW4tPmlkKTsKKwkJY2xlYXJfYml0 KHVjLT50Y2hhbi0+aWQsIHVkLT50Y2hhbl9tYXApOworCQl1Yy0+dGNoYW4gPSBOVUxMOworCX0K K30KKworc3RhdGljIHZvaWQgdWRtYV9wdXRfcmZsb3coc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7 CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IHVjLT51ZDsKKworCWlmICh1Yy0+cmZsb3cpIHsKKwkJ ZGV2X2RiZyh1ZC0+ZGV2LCAiY2hhbiVkOiBwdXQgcmZsb3clZFxuIiwgdWMtPmlkLAorCQkJdWMt PnJmbG93LT5pZCk7CisJCV9fdWRtYV9wdXRfcmZsb3codWQsIHVjLT5yZmxvdyk7CisJCXVjLT5y ZmxvdyA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCB1ZG1hX2ZyZWVfdHhfcmVzb3VyY2Vz KHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCWlmICghdWMtPnRjaGFuKQorCQlyZXR1cm47CisK KwlrM19yaW5nYWNjX3JpbmdfZnJlZSh1Yy0+dGNoYW4tPnRfcmluZyk7CisJazNfcmluZ2FjY19y aW5nX2ZyZWUodWMtPnRjaGFuLT50Y19yaW5nKTsKKwl1Yy0+dGNoYW4tPnRfcmluZyA9IE5VTEw7 CisJdWMtPnRjaGFuLT50Y19yaW5nID0gTlVMTDsKKworCXVkbWFfcHV0X3RjaGFuKHVjKTsKK30K Kworc3RhdGljIGludCB1ZG1hX2FsbG9jX3R4X3Jlc291cmNlcyhzdHJ1Y3QgdWRtYV9jaGFuICp1 YykKK3sKKwlzdHJ1Y3QgazNfcmluZ19jZmcgcmluZ19jZmc7CisJc3RydWN0IHVkbWFfZGV2ICp1 ZCA9IHVjLT51ZDsKKwlpbnQgcmV0OworCisJcmV0ID0gdWRtYV9nZXRfdGNoYW4odWMpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwl1Yy0+dGNoYW4tPnRfcmluZyA9IGszX3JpbmdhY2Nf cmVxdWVzdF9yaW5nKHVkLT5yaW5nYWNjLAorCQkJCQkJICAgIHVjLT50Y2hhbi0+aWQsIDApOwor CWlmICghdWMtPnRjaGFuLT50X3JpbmcpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl90 eF9yaW5nOworCX0KKworCXVjLT50Y2hhbi0+dGNfcmluZyA9IGszX3JpbmdhY2NfcmVxdWVzdF9y aW5nKHVkLT5yaW5nYWNjLCAtMSwgMCk7CisJaWYgKCF1Yy0+dGNoYW4tPnRjX3JpbmcpIHsKKwkJ cmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl90eGNfcmluZzsKKwl9CisKKwltZW1zZXQoJnJpbmdf Y2ZnLCAwLCBzaXplb2YocmluZ19jZmcpKTsKKwlyaW5nX2NmZy5zaXplID0gSzNfVURNQV9ERUZB VUxUX1JJTkdfU0laRTsKKwlyaW5nX2NmZy5lbG1fc2l6ZSA9IEszX1JJTkdBQ0NfUklOR19FTFNJ WkVfODsKKwlyaW5nX2NmZy5tb2RlID0gSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRTsKKwor CXJldCA9IGszX3JpbmdhY2NfcmluZ19jZmcodWMtPnRjaGFuLT50X3JpbmcsICZyaW5nX2NmZyk7 CisJcmV0IHw9IGszX3JpbmdhY2NfcmluZ19jZmcodWMtPnRjaGFuLT50Y19yaW5nLCAmcmluZ19j ZmcpOworCisJaWYgKHJldCkKKwkJZ290byBlcnJfcmluZ2NmZzsKKworCXJldHVybiAwOworCitl cnJfcmluZ2NmZzoKKwlrM19yaW5nYWNjX3JpbmdfZnJlZSh1Yy0+dGNoYW4tPnRjX3JpbmcpOwor CXVjLT50Y2hhbi0+dGNfcmluZyA9IE5VTEw7CitlcnJfdHhjX3Jpbmc6CisJazNfcmluZ2FjY19y aW5nX2ZyZWUodWMtPnRjaGFuLT50X3JpbmcpOworCXVjLT50Y2hhbi0+dF9yaW5nID0gTlVMTDsK K2Vycl90eF9yaW5nOgorCXVkbWFfcHV0X3RjaGFuKHVjKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIHVkbWFfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IHVkbWFfY2hhbiAqdWMp Cit7CisJaWYgKCF1Yy0+cmNoYW4pCisJCXJldHVybjsKKworCWlmICh1Yy0+ZGlyICE9IERNQV9N RU1fVE9fTUVNKSB7CisJCWszX3JpbmdhY2NfcmluZ19mcmVlKHVjLT5yY2hhbi0+ZmRfcmluZyk7 CisJCWszX3JpbmdhY2NfcmluZ19mcmVlKHVjLT5yY2hhbi0+cl9yaW5nKTsKKwkJdWMtPnJjaGFu LT5mZF9yaW5nID0gTlVMTDsKKwkJdWMtPnJjaGFuLT5yX3JpbmcgPSBOVUxMOworCisJCXVkbWFf cHV0X3JmbG93KHVjKTsKKwl9CisKKwl1ZG1hX3B1dF9yY2hhbih1Yyk7Cit9CisKK3N0YXRpYyBp bnQgdWRtYV9hbGxvY19yeF9yZXNvdXJjZXMoc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJc3Ry dWN0IGszX3JpbmdfY2ZnIHJpbmdfY2ZnOworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7 CisJaW50IGZkX3JpbmdfaWQ7CisJaW50IHJldDsKKworCXJldCA9IHVkbWFfZ2V0X3JjaGFuKHVj KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRm9yIE1FTV9UT19NRU0gd2UgZG9u J3QgbmVlZCByZmxvdyBvciByaW5ncyAqLworCWlmICh1Yy0+ZGlyID09IERNQV9NRU1fVE9fTUVN KQorCQlyZXR1cm4gMDsKKworCXJldCA9IHVkbWFfZ2V0X3JmbG93KHVjLCB1Yy0+cmNoYW4tPmlk KTsKKwlpZiAocmV0KSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfcmZsb3c7CisJfQor CisJZmRfcmluZ19pZCA9IHVkLT50Y2hhbl9jbnQgKyB1ZC0+ZWNoYW5fY250ICsgdWMtPnJjaGFu LT5pZDsKKwl1Yy0+cmNoYW4tPmZkX3JpbmcgPSBrM19yaW5nYWNjX3JlcXVlc3RfcmluZyh1ZC0+ cmluZ2FjYywKKwkJCQkJCSAgICAgZmRfcmluZ19pZCwgMCk7CisJaWYgKCF1Yy0+cmNoYW4tPmZk X3JpbmcpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9yeF9yaW5nOworCX0KKworCXVj LT5yY2hhbi0+cl9yaW5nID0gazNfcmluZ2FjY19yZXF1ZXN0X3JpbmcodWQtPnJpbmdhY2MsIC0x LCAwKTsKKwlpZiAoIXVjLT5yY2hhbi0+cl9yaW5nKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290 byBlcnJfcnhjX3Jpbmc7CisJfQorCisJbWVtc2V0KCZyaW5nX2NmZywgMCwgc2l6ZW9mKHJpbmdf Y2ZnKSk7CisKKwlpZiAodWMtPnBrdF9tb2RlKQorCQlyaW5nX2NmZy5zaXplID0gU0dfTUFYX1NF R01FTlRTOworCWVsc2UKKwkJcmluZ19jZmcuc2l6ZSA9IEszX1VETUFfREVGQVVMVF9SSU5HX1NJ WkU7CisKKwlyaW5nX2NmZy5lbG1fc2l6ZSA9IEszX1JJTkdBQ0NfUklOR19FTFNJWkVfODsKKwly aW5nX2NmZy5tb2RlID0gSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRTsKKworCXJldCA9IGsz X3JpbmdhY2NfcmluZ19jZmcodWMtPnJjaGFuLT5mZF9yaW5nLCAmcmluZ19jZmcpOworCXJpbmdf Y2ZnLnNpemUgPSBLM19VRE1BX0RFRkFVTFRfUklOR19TSVpFOworCXJldCB8PSBrM19yaW5nYWNj X3JpbmdfY2ZnKHVjLT5yY2hhbi0+cl9yaW5nLCAmcmluZ19jZmcpOworCisJaWYgKHJldCkKKwkJ Z290byBlcnJfcmluZ2NmZzsKKworCXJldHVybiAwOworCitlcnJfcmluZ2NmZzoKKwlrM19yaW5n YWNjX3JpbmdfZnJlZSh1Yy0+cmNoYW4tPnJfcmluZyk7CisJdWMtPnJjaGFuLT5yX3JpbmcgPSBO VUxMOworZXJyX3J4Y19yaW5nOgorCWszX3JpbmdhY2NfcmluZ19mcmVlKHVjLT5yY2hhbi0+ZmRf cmluZyk7CisJdWMtPnJjaGFuLT5mZF9yaW5nID0gTlVMTDsKK2Vycl9yeF9yaW5nOgorCXVkbWFf cHV0X3JmbG93KHVjKTsKK2Vycl9yZmxvdzoKKwl1ZG1hX3B1dF9yY2hhbih1Yyk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVkbWFfdGlzY2lfbTJtX2NoYW5uZWxfY29uZmlnKHN0 cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7CisJ c3RydWN0IHVkbWFfdGlzY2lfcm0gKnRpc2NpX3JtID0gJnVkLT50aXNjaV9ybTsKKwljb25zdCBz dHJ1Y3QgdGlfc2NpX3JtX3VkbWFwX29wcyAqdGlzY2lfb3BzID0gdGlzY2lfcm0tPnRpc2NpX3Vk bWFwX29wczsKKwlzdHJ1Y3QgdWRtYV90Y2hhbiAqdGNoYW4gPSB1Yy0+dGNoYW47CisJc3RydWN0 IHVkbWFfcmNoYW4gKnJjaGFuID0gdWMtPnJjaGFuOworCWludCByZXQgPSAwOworCisJLyogTm9u IHN5bmNocm9uaXplZCAtIG1lbSB0byBtZW0gdHlwZSBvZiB0cmFuc2ZlciAqLworCWludCB0Y19y aW5nID0gazNfcmluZ2FjY19nZXRfcmluZ19pZCh0Y2hhbi0+dGNfcmluZyk7CisJc3RydWN0IHRp X3NjaV9tc2dfcm1fdWRtYXBfdHhfY2hfY2ZnIHJlcV90eCA9IHsgMCB9OworCXN0cnVjdCB0aV9z Y2lfbXNnX3JtX3VkbWFwX3J4X2NoX2NmZyByZXFfcnggPSB7IDAgfTsKKworCXJlcV90eC52YWxp ZF9wYXJhbXMgPQorCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX1BBVVNFX09OX0VSUl9W QUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfVFhfRklMVF9FSU5GT19WQUxJ RCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfVFhfRklMVF9QU1dPUkRTX1ZBTElE IHwKKwkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9DSF9DSEFOX1RZUEVfVkFMSUQgfAorCQlU SV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX1RYX1NVUFJfVERQS1RfVkFMSUQgfAorCQlUSV9T Q0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX0ZFVENIX1NJWkVfVkFMSUQgfAorCQlUSV9TQ0lfTVNH X1ZBTFVFX1JNX1VETUFQX0NIX0NRX1FOVU1fVkFMSUQ7CisKKwlyZXFfdHgubmF2X2lkID0gdGlz Y2lfcm0tPnRpc2NpX2Rldl9pZDsKKwlyZXFfdHguaW5kZXggPSB0Y2hhbi0+aWQ7CisJcmVxX3R4 LnR4X3BhdXNlX29uX2VyciA9IDA7CisJcmVxX3R4LnR4X2ZpbHRfZWluZm8gPSAwOworCXJlcV90 eC50eF9maWx0X3Bzd29yZHMgPSAwOworCXJlcV90eC50eF9jaGFuX3R5cGUgPSBUSV9TQ0lfUk1f VURNQVBfQ0hBTl9UWVBFXzNSRFBfQkNPUFlfUEJSUjsKKwlyZXFfdHgudHhfc3Vwcl90ZHBrdCA9 IDA7CisJcmVxX3R4LnR4X2ZldGNoX3NpemUgPSBzaXplb2Yoc3RydWN0IGNwcGk1X2Rlc2NfaGRy X3QpID4+IDI7CisJcmVxX3R4LnR4Y3FfcW51bSA9IHRjX3Jpbmc7CisKKwlyZXQgPSB0aXNjaV9v cHMtPnR4X2NoX2NmZyh0aXNjaV9ybS0+dGlzY2ksICZyZXFfdHgpOworCWlmIChyZXQpIHsKKwkJ ZGV2X2Vycih1ZC0+ZGV2LCAidGNoYW4lZCBjZmcgZmFpbGVkICVkXG4iLCB0Y2hhbi0+aWQsIHJl dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmVxX3J4LnZhbGlkX3BhcmFtcyA9CisJCVRJX1ND SV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfUEFVU0VfT05fRVJSX1ZBTElEIHwKKwkJVElfU0NJX01T R19WQUxVRV9STV9VRE1BUF9DSF9GRVRDSF9TSVpFX1ZBTElEIHwKKwkJVElfU0NJX01TR19WQUxV RV9STV9VRE1BUF9DSF9DUV9RTlVNX1ZBTElEIHwKKwkJVElfU0NJX01TR19WQUxVRV9STV9VRE1B UF9DSF9DSEFOX1RZUEVfVkFMSUQgfAorCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX1JY X0lHTk9SRV9TSE9SVF9WQUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfUlhf SUdOT1JFX0xPTkdfVkFMSUQgfAorCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX1JYX0ZM T1dJRF9TVEFSVF9WQUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfUlhfRkxP V0lEX0NOVF9WQUxJRDsKKworCXJlcV9yeC5uYXZfaWQgPSB0aXNjaV9ybS0+dGlzY2lfZGV2X2lk OworCXJlcV9yeC5pbmRleCA9IHJjaGFuLT5pZDsKKwlyZXFfcngucnhfZmV0Y2hfc2l6ZSA9IHNp emVvZihzdHJ1Y3QgY3BwaTVfZGVzY19oZHJfdCkgPj4gMjsKKwlyZXFfcngucnhjcV9xbnVtID0g dGNfcmluZzsKKwlyZXFfcngucnhfcGF1c2Vfb25fZXJyID0gMDsKKwlyZXFfcngucnhfY2hhbl90 eXBlID0gVElfU0NJX1JNX1VETUFQX0NIQU5fVFlQRV8zUkRQX0JDT1BZX1BCUlI7CisJcmVxX3J4 LnJ4X2lnbm9yZV9zaG9ydCA9IDA7CisJcmVxX3J4LnJ4X2lnbm9yZV9sb25nID0gMDsKKwlyZXFf cnguZmxvd2lkX3N0YXJ0ID0gMDsKKwlyZXFfcnguZmxvd2lkX2NudCA9IDA7CisKKwlyZXQgPSB0 aXNjaV9vcHMtPnJ4X2NoX2NmZyh0aXNjaV9ybS0+dGlzY2ksICZyZXFfcngpOworCWlmIChyZXQp CisJCWRldl9lcnIodWQtPmRldiwgInJjaGFuJWQgYWxsb2MgZmFpbGVkICVkXG4iLCByY2hhbi0+ aWQsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVkbWFfdGlzY2lfdHhf Y2hhbm5lbF9jb25maWcoc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJc3RydWN0IHVkbWFfZGV2 ICp1ZCA9IHVjLT51ZDsKKwlzdHJ1Y3QgdWRtYV90aXNjaV9ybSAqdGlzY2lfcm0gPSAmdWQtPnRp c2NpX3JtOworCWNvbnN0IHN0cnVjdCB0aV9zY2lfcm1fdWRtYXBfb3BzICp0aXNjaV9vcHMgPSB0 aXNjaV9ybS0+dGlzY2lfdWRtYXBfb3BzOworCXN0cnVjdCB1ZG1hX3RjaGFuICp0Y2hhbiA9IHVj LT50Y2hhbjsKKwlpbnQgdGNfcmluZyA9IGszX3JpbmdhY2NfZ2V0X3JpbmdfaWQodGNoYW4tPnRj X3JpbmcpOworCXN0cnVjdCB0aV9zY2lfbXNnX3JtX3VkbWFwX3R4X2NoX2NmZyByZXFfdHggPSB7 IDAgfTsKKwl1MzIgbW9kZSwgZmV0Y2hfc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1Yy0+ cGt0X21vZGUpIHsKKwkJbW9kZSA9IFRJX1NDSV9STV9VRE1BUF9DSEFOX1RZUEVfUEtUX1BCUlI7 CisJCWZldGNoX3NpemUgPSBjcHBpNV9oZGVzY19jYWxjX3NpemUodWMtPm5lZWRzX2VwaWIsIHVj LT5wc2Rfc2l6ZSwKKwkJCQkJCSAgIDApOworCX0gZWxzZSB7CisJCW1vZGUgPSBUSV9TQ0lfUk1f VURNQVBfQ0hBTl9UWVBFXzNSRFBfUEJSUjsKKwkJZmV0Y2hfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg Y3BwaTVfZGVzY19oZHJfdCk7CisJfQorCisJcmVxX3R4LnZhbGlkX3BhcmFtcyA9CisJCVRJX1ND SV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfUEFVU0VfT05fRVJSX1ZBTElEIHwKKwkJVElfU0NJX01T R19WQUxVRV9STV9VRE1BUF9DSF9UWF9GSUxUX0VJTkZPX1ZBTElEIHwKKwkJVElfU0NJX01TR19W QUxVRV9STV9VRE1BUF9DSF9UWF9GSUxUX1BTV09SRFNfVkFMSUQgfAorCQlUSV9TQ0lfTVNHX1ZB TFVFX1JNX1VETUFQX0NIX0NIQU5fVFlQRV9WQUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1f VURNQVBfQ0hfVFhfU1VQUl9URFBLVF9WQUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURN QVBfQ0hfRkVUQ0hfU0laRV9WQUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hf Q1FfUU5VTV9WQUxJRDsKKworCXJlcV90eC5uYXZfaWQgPSB0aXNjaV9ybS0+dGlzY2lfZGV2X2lk OworCXJlcV90eC5pbmRleCA9IHRjaGFuLT5pZDsKKwlyZXFfdHgudHhfcGF1c2Vfb25fZXJyID0g MDsKKwlyZXFfdHgudHhfZmlsdF9laW5mbyA9IDA7CisJcmVxX3R4LnR4X2ZpbHRfcHN3b3JkcyA9 IDA7CisJcmVxX3R4LnR4X2NoYW5fdHlwZSA9IG1vZGU7CisJcmVxX3R4LnR4X3N1cHJfdGRwa3Qg PSB1Yy0+bm90ZHBrdDsKKwlyZXFfdHgudHhfZmV0Y2hfc2l6ZSA9IGZldGNoX3NpemUgPj4gMjsK KwlyZXFfdHgudHhjcV9xbnVtID0gdGNfcmluZzsKKworCXJldCA9IHRpc2NpX29wcy0+dHhfY2hf Y2ZnKHRpc2NpX3JtLT50aXNjaSwgJnJlcV90eCk7CisJaWYgKHJldCkKKwkJZGV2X2Vycih1ZC0+ ZGV2LCAidGNoYW4lZCBjZmcgZmFpbGVkICVkXG4iLCB0Y2hhbi0+aWQsIHJldCk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVkbWFfdGlzY2lfcnhfY2hhbm5lbF9jb25maWcoc3Ry dWN0IHVkbWFfY2hhbiAqdWMpCit7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IHVjLT51ZDsKKwlz dHJ1Y3QgdWRtYV90aXNjaV9ybSAqdGlzY2lfcm0gPSAmdWQtPnRpc2NpX3JtOworCWNvbnN0IHN0 cnVjdCB0aV9zY2lfcm1fdWRtYXBfb3BzICp0aXNjaV9vcHMgPSB0aXNjaV9ybS0+dGlzY2lfdWRt YXBfb3BzOworCXN0cnVjdCB1ZG1hX3JjaGFuICpyY2hhbiA9IHVjLT5yY2hhbjsKKwlpbnQgZmRf cmluZyA9IGszX3JpbmdhY2NfZ2V0X3JpbmdfaWQocmNoYW4tPmZkX3JpbmcpOworCWludCByeF9y aW5nID0gazNfcmluZ2FjY19nZXRfcmluZ19pZChyY2hhbi0+cl9yaW5nKTsKKwlzdHJ1Y3QgdGlf c2NpX21zZ19ybV91ZG1hcF9yeF9jaF9jZmcgcmVxX3J4ID0geyAwIH07CisJc3RydWN0IHRpX3Nj aV9tc2dfcm1fdWRtYXBfZmxvd19jZmcgZmxvd19yZXEgPSB7IDAgfTsKKwl1MzIgbW9kZSwgZmV0 Y2hfc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1Yy0+cGt0X21vZGUpIHsKKwkJbW9kZSA9 IFRJX1NDSV9STV9VRE1BUF9DSEFOX1RZUEVfUEtUX1BCUlI7CisJCWZldGNoX3NpemUgPSBjcHBp NV9oZGVzY19jYWxjX3NpemUodWMtPm5lZWRzX2VwaWIsCisJCQkJCQkJdWMtPnBzZF9zaXplLCAw KTsKKwl9IGVsc2UgeworCQltb2RlID0gVElfU0NJX1JNX1VETUFQX0NIQU5fVFlQRV8zUkRQX1BC UlI7CisJCWZldGNoX3NpemUgPSBzaXplb2Yoc3RydWN0IGNwcGk1X2Rlc2NfaGRyX3QpOworCX0K KworCXJlcV9yeC52YWxpZF9wYXJhbXMgPQorCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NI X1BBVVNFX09OX0VSUl9WQUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfRkVU Q0hfU0laRV9WQUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfQ1FfUU5VTV9W QUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfQ0hBTl9UWVBFX1ZBTElEIHwK KwkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9DSF9SWF9JR05PUkVfU0hPUlRfVkFMSUQgfAor CQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX1JYX0lHTk9SRV9MT05HX1ZBTElEIHwKKwkJ VElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9DSF9SWF9GTE9XSURfU1RBUlRfVkFMSUQgfAorCQlU SV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX1JYX0ZMT1dJRF9DTlRfVkFMSUQ7CisKKwlyZXFf cngubmF2X2lkID0gdGlzY2lfcm0tPnRpc2NpX2Rldl9pZDsKKwlyZXFfcnguaW5kZXggPSByY2hh bi0+aWQ7CisJcmVxX3J4LnJ4X2ZldGNoX3NpemUgPSAgZmV0Y2hfc2l6ZSA+PiAyOworCXJlcV9y eC5yeGNxX3FudW0gPSByeF9yaW5nOworCXJlcV9yeC5yeF9wYXVzZV9vbl9lcnIgPSAwOworCXJl cV9yeC5yeF9jaGFuX3R5cGUgPSBtb2RlOworCXJlcV9yeC5yeF9pZ25vcmVfc2hvcnQgPSAwOwor CXJlcV9yeC5yeF9pZ25vcmVfbG9uZyA9IDA7CisJcmVxX3J4LmZsb3dpZF9zdGFydCA9IDA7CisJ cmVxX3J4LmZsb3dpZF9jbnQgPSAwOworCisJcmV0ID0gdGlzY2lfb3BzLT5yeF9jaF9jZmcodGlz Y2lfcm0tPnRpc2NpLCAmcmVxX3J4KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIodWQtPmRldiwg InJjaGFuJWQgY2ZnIGZhaWxlZCAlZFxuIiwgcmNoYW4tPmlkLCByZXQpOworCQlyZXR1cm4gcmV0 OworCX0KKworCWZsb3dfcmVxLnZhbGlkX3BhcmFtcyA9CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1f VURNQVBfRkxPV19FSU5GT19QUkVTRU5UX1ZBTElEIHwKKwkJVElfU0NJX01TR19WQUxVRV9STV9V RE1BUF9GTE9XX1BTSU5GT19QUkVTRU5UX1ZBTElEIHwKKwkJVElfU0NJX01TR19WQUxVRV9STV9V RE1BUF9GTE9XX0VSUk9SX0hBTkRMSU5HX1ZBTElEIHwKKwkJVElfU0NJX01TR19WQUxVRV9STV9V RE1BUF9GTE9XX0RFU0NfVFlQRV9WQUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBf RkxPV19ERVNUX1FOVU1fVkFMSUQgfAorCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1df U1JDX1RBR19ISV9TRUxfVkFMSUQgfAorCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1df U1JDX1RBR19MT19TRUxfVkFMSUQgfAorCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1df REVTVF9UQUdfSElfU0VMX1ZBTElEIHwKKwkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9X X0RFU1RfVEFHX0xPX1NFTF9WQUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxP V19GRFEwX1NaMF9RTlVNX1ZBTElEIHwKKwkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9X X0ZEUTFfUU5VTV9WQUxJRCB8CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19GRFEy X1FOVU1fVkFMSUQgfAorCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfRkRRM19RTlVN X1ZBTElEOworCisJZmxvd19yZXEubmF2X2lkID0gdGlzY2lfcm0tPnRpc2NpX2Rldl9pZDsKKwlm bG93X3JlcS5mbG93X2luZGV4ID0gcmNoYW4tPmlkOworCisJaWYgKHVjLT5uZWVkc19lcGliKQor CQlmbG93X3JlcS5yeF9laW5mb19wcmVzZW50ID0gMTsKKwllbHNlCisJCWZsb3dfcmVxLnJ4X2Vp bmZvX3ByZXNlbnQgPSAwOworCWlmICh1Yy0+cHNkX3NpemUpCisJCWZsb3dfcmVxLnJ4X3BzaW5m b19wcmVzZW50ID0gMTsKKwllbHNlCisJCWZsb3dfcmVxLnJ4X3BzaW5mb19wcmVzZW50ID0gMDsK KwlmbG93X3JlcS5yeF9lcnJvcl9oYW5kbGluZyA9IDE7CisJZmxvd19yZXEucnhfZGVzY190eXBl ID0gMDsKKwlmbG93X3JlcS5yeF9kZXN0X3FudW0gPSByeF9yaW5nOworCWZsb3dfcmVxLnJ4X3Ny Y190YWdfaGlfc2VsID0gMjsKKwlmbG93X3JlcS5yeF9zcmNfdGFnX2xvX3NlbCA9IDQ7CisJZmxv d19yZXEucnhfZGVzdF90YWdfaGlfc2VsID0gNTsKKwlmbG93X3JlcS5yeF9kZXN0X3RhZ19sb19z ZWwgPSA0OworCWZsb3dfcmVxLnJ4X2ZkcTBfc3owX3FudW0gPSBmZF9yaW5nOworCWZsb3dfcmVx LnJ4X2ZkcTFfcW51bSA9IGZkX3Jpbmc7CisJZmxvd19yZXEucnhfZmRxMl9xbnVtID0gZmRfcmlu ZzsKKwlmbG93X3JlcS5yeF9mZHEzX3FudW0gPSBmZF9yaW5nOworCisJcmV0ID0gdGlzY2lfb3Bz LT5yeF9mbG93X2NmZyh0aXNjaV9ybS0+dGlzY2ksICZmbG93X3JlcSk7CisKKwlpZiAocmV0KQor CQlkZXZfZXJyKHVkLT5kZXYsICJmbG93JWQgY29uZmlnIGZhaWxlZDogJWRcbiIsIHJjaGFuLT5p ZCwgcmV0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVkbWFfYWxsb2NfY2hhbl9y ZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCB1ZG1hX2NoYW4gKnVj ID0gdG9fdWRtYV9jaGFuKGNoYW4pOworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB0b191ZG1hX2Rl dihjaGFuLT5kZXZpY2UpOworCWNvbnN0IHN0cnVjdCB1ZG1hX21hdGNoX2RhdGEgKm1hdGNoX2Rh dGEgPSB1ZC0+bWF0Y2hfZGF0YTsKKwlzdHJ1Y3QgazNfcmluZyAqaXJxX3Jpbmc7CisJdTMyIGly cV91ZG1hX2lkeDsKKwlpbnQgcmV0OworCisJaWYgKHVjLT5wa3RfbW9kZSB8fCB1Yy0+ZGlyID09 IERNQV9NRU1fVE9fTUVNKSB7CisJCXVjLT51c2VfZG1hX3Bvb2wgPSB0cnVlOworCQkvKiBpbiBj YXNlIG9mIE1FTV9UT19NRU0gd2UgaGF2ZSBtYXhpbXVtIG9mIHR3byBUUnMgKi8KKwkJaWYgKHVj LT5kaXIgPT0gRE1BX01FTV9UT19NRU0pIHsKKwkJCXVjLT5oZGVzY19zaXplID0gY3BwaTVfdHJk ZXNjX2NhbGNfc2l6ZSgKKwkJCQkJc2l6ZW9mKHN0cnVjdCBjcHBpNV90cl90eXBlMTVfdCksIDIp OworCQkJdWMtPnBrdF9tb2RlID0gZmFsc2U7CisJCX0KKwl9CisKKwlpZiAodWMtPnVzZV9kbWFf cG9vbCkgeworCQl1Yy0+aGRlc2NfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSh1Yy0+bmFtZSwgdWQt PmRkZXYuZGV2LAorCQkJCQkJIHVjLT5oZGVzY19zaXplLCB1ZC0+ZGVzY19hbGlnbiwKKwkJCQkJ CSAwKTsKKwkJaWYgKCF1Yy0+aGRlc2NfcG9vbCkgeworCQkJZGV2X2Vycih1ZC0+ZGRldi5kZXYs CisJCQkJIkRlc2NyaXB0b3IgcG9vbCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCQl1Yy0+dXNl X2RtYV9wb29sID0gZmFsc2U7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCXBtX3J1 bnRpbWVfZ2V0X3N5bmModWQtPmRkZXYuZGV2KTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQg dGhlIGNvbXBsZXRpb24gaXMgaW4gYSBrbm93biBzdGF0ZToKKwkgKiBObyB0ZWFyZG93biwgdGhl IGNoYW5uZWwgaXMgaWRsZQorCSAqLworCXJlaW5pdF9jb21wbGV0aW9uKCZ1Yy0+dGVhcmRvd25f Y29tcGxldGVkKTsKKwljb21wbGV0ZV9hbGwoJnVjLT50ZWFyZG93bl9jb21wbGV0ZWQpOworCXVj LT5zdGF0ZSA9IFVETUFfQ0hBTl9JU19JRExFOworCisJc3dpdGNoICh1Yy0+ZGlyKSB7CisJY2Fz ZSBETUFfTUVNX1RPX01FTToKKwkJLyogTm9uIHN5bmNocm9uaXplZCAtIG1lbSB0byBtZW0gdHlw ZSBvZiB0cmFuc2ZlciAqLworCQlkZXZfZGJnKHVjLT51ZC0+ZGV2LCAiJXM6IGNoYW4lZCBhcyBN RU0tdG8tTUVNXG4iLCBfX2Z1bmNfXywKKwkJCXVjLT5pZCk7CisKKwkJcmV0ID0gdWRtYV9nZXRf Y2hhbl9wYWlyKHVjKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gdWRt YV9hbGxvY190eF9yZXNvdXJjZXModWMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwor CQlyZXQgPSB1ZG1hX2FsbG9jX3J4X3Jlc291cmNlcyh1Yyk7CisJCWlmIChyZXQpIHsKKwkJCXVk bWFfZnJlZV90eF9yZXNvdXJjZXModWMpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXVjLT5z cmNfdGhyZWFkID0gdWQtPnBzaWxfYmFzZSArIHVjLT50Y2hhbi0+aWQ7CisJCXVjLT5kc3RfdGhy ZWFkID0gKHVkLT5wc2lsX2Jhc2UgKyB1Yy0+cmNoYW4tPmlkKSB8CisJCQkJIFVETUFfUFNJTF9E U1RfVEhSRUFEX0lEX09GRlNFVDsKKworCQlpcnFfcmluZyA9IHVjLT50Y2hhbi0+dGNfcmluZzsK KwkJaXJxX3VkbWFfaWR4ID0gdWMtPnRjaGFuLT5pZDsKKworCQlyZXQgPSB1ZG1hX3Rpc2NpX20y bV9jaGFubmVsX2NvbmZpZyh1Yyk7CisJCWJyZWFrOworCWNhc2UgRE1BX01FTV9UT19ERVY6CisJ CS8qIFNsYXZlIHRyYW5zZmVyIHN5bmNocm9uaXplZCAtIG1lbSB0byBkZXYgKFRYKSB0cmFzbmZl ciAqLworCQlkZXZfZGJnKHVjLT51ZC0+ZGV2LCAiJXM6IGNoYW4lZCBhcyBNRU0tdG8tREVWXG4i LCBfX2Z1bmNfXywKKwkJCXVjLT5pZCk7CisKKwkJcmV0ID0gdWRtYV9hbGxvY190eF9yZXNvdXJj ZXModWMpOworCQlpZiAocmV0KSB7CisJCQl1Yy0+cmVtb3RlX3RocmVhZF9pZCA9IC0xOworCQkJ cmV0dXJuIHJldDsKKwkJfQorCisJCXVjLT5zcmNfdGhyZWFkID0gdWQtPnBzaWxfYmFzZSArIHVj LT50Y2hhbi0+aWQ7CisJCXVjLT5kc3RfdGhyZWFkID0gdWMtPnJlbW90ZV90aHJlYWRfaWQ7CisJ CXVjLT5kc3RfdGhyZWFkIHw9IFVETUFfUFNJTF9EU1RfVEhSRUFEX0lEX09GRlNFVDsKKworCQlp cnFfcmluZyA9IHVjLT50Y2hhbi0+dGNfcmluZzsKKwkJaXJxX3VkbWFfaWR4ID0gdWMtPnRjaGFu LT5pZDsKKworCQlyZXQgPSB1ZG1hX3Rpc2NpX3R4X2NoYW5uZWxfY29uZmlnKHVjKTsKKwkJYnJl YWs7CisJY2FzZSBETUFfREVWX1RPX01FTToKKwkJLyogU2xhdmUgdHJhbnNmZXIgc3luY2hyb25p emVkIC0gZGV2IHRvIG1lbSAoUlgpIHRyYXNuZmVyICovCisJCWRldl9kYmcodWMtPnVkLT5kZXYs ICIlczogY2hhbiVkIGFzIERFVi10by1NRU1cbiIsIF9fZnVuY19fLAorCQkJdWMtPmlkKTsKKwor CQlyZXQgPSB1ZG1hX2FsbG9jX3J4X3Jlc291cmNlcyh1Yyk7CisJCWlmIChyZXQpIHsKKwkJCXVj LT5yZW1vdGVfdGhyZWFkX2lkID0gLTE7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJdWMtPnNy Y190aHJlYWQgPSB1Yy0+cmVtb3RlX3RocmVhZF9pZDsKKwkJdWMtPmRzdF90aHJlYWQgPSAodWQt PnBzaWxfYmFzZSArIHVjLT5yY2hhbi0+aWQpIHwKKwkJCQkgVURNQV9QU0lMX0RTVF9USFJFQURf SURfT0ZGU0VUOworCisJCWlycV9yaW5nID0gdWMtPnJjaGFuLT5yX3Jpbmc7CisJCWlycV91ZG1h X2lkeCA9IG1hdGNoX2RhdGEtPnJjaGFuX29lc19vZmZzZXQgKyB1Yy0+cmNoYW4tPmlkOworCisJ CXJldCA9IHVkbWFfdGlzY2lfcnhfY2hhbm5lbF9jb25maWcodWMpOworCQlicmVhazsKKwlkZWZh dWx0OgorCQkvKiBDYW4gbm90IGhhcHBlbiAqLworCQlkZXZfZXJyKHVjLT51ZC0+ZGV2LCAiJXM6 IGNoYW4lZCBpbnZhbGlkIGRpcmVjdGlvbiAoJXUpXG4iLAorCQkJX19mdW5jX18sIHVjLT5pZCwg dWMtPmRpcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGlmIHRoZSBjaGFu bmVsIGNvbmZpZ3VyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVy cl9yZXNfZnJlZTsKKworCWlmICh1ZG1hX2lzX2NoYW5fcnVubmluZyh1YykpIHsKKwkJZGV2X3dh cm4odWQtPmRldiwgImNoYW4lZDogaXMgcnVubmluZyFcbiIsIHVjLT5pZCk7CisJCXVkbWFfc3Rv cCh1Yyk7CisJCWlmICh1ZG1hX2lzX2NoYW5fcnVubmluZyh1YykpIHsKKwkJCWRldl9lcnIodWQt PmRldiwgImNoYW4lZDogd29uJ3Qgc3RvcCFcbiIsIHVjLT5pZCk7CisJCQlnb3RvIGVycl9yZXNf ZnJlZTsKKwkJfQorCX0KKworCS8qIFBTSS1MIHBhaXJpbmcgKi8KKwlyZXQgPSBuYXZzc19wc2ls X3BhaXIodWQsIHVjLT5zcmNfdGhyZWFkLCB1Yy0+ZHN0X3RocmVhZCk7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKHVkLT5kZXYsICJQU0ktTCBwYWlyaW5nIGZhaWxlZDogMHglMDR4IC0+IDB4JTA0 eFxuIiwKKwkJCXVjLT5zcmNfdGhyZWFkLCB1Yy0+ZHN0X3RocmVhZCk7CisJCWdvdG8gZXJyX3Jl c19mcmVlOworCX0KKworCXVjLT5wc2lsX3BhaXJlZCA9IHRydWU7CisKKwl1Yy0+aXJxX251bV9y aW5nID0gazNfcmluZ2FjY19nZXRfcmluZ19pcnFfbnVtKGlycV9yaW5nKTsKKwlpZiAodWMtPmly cV9udW1fcmluZyA8PSAwKSB7CisJCWRldl9lcnIodWQtPmRldiwgIkZhaWxlZCB0byBnZXQgcmlu ZyBpcnEgKGluZGV4OiAldSlcbiIsCisJCQlrM19yaW5nYWNjX2dldF9yaW5nX2lkKGlycV9yaW5n KSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3BzaV9mcmVlOworCX0KKworCXJldCA9 IHJlcXVlc3RfaXJxKHVjLT5pcnFfbnVtX3JpbmcsIHVkbWFfcmluZ19pcnFfaGFuZGxlciwKKwkJ CSAgSVJRRl9UUklHR0VSX0hJR0gsIHVjLT5uYW1lLCB1Yyk7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKHVkLT5kZXYsICJjaGFuJWQ6IHJpbmcgaXJxIHJlcXVlc3QgZmFpbGVkXG4iLCB1Yy0+aWQp OworCQlnb3RvIGVycl9pcnFfZnJlZTsKKwl9CisKKwkvKiBFdmVudCBmcm9tIFVETUEgKFRSIGV2 ZW50cykgb25seSBuZWVkZWQgZm9yIHNsYXZlIFRSIG1vZGUgY2hhbm5lbHMgKi8KKwlpZiAoaXNf c2xhdmVfZGlyZWN0aW9uKHVjLT5kaXIpICYmICF1Yy0+cGt0X21vZGUpIHsKKwkJdWMtPmlycV9u dW1fdWRtYSA9IHRpX3NjaV9pbnRhX21zaV9nZXRfdmlycSh1ZC0+ZGV2LAorCQkJCQkJCSAgICBp cnFfdWRtYV9pZHgpOworCQlpZiAodWMtPmlycV9udW1fdWRtYSA8PSAwKSB7CisJCQlkZXZfZXJy KHVkLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHVkbWEgaXJxIChpbmRleDogJXUpXG4iLAorCQkJCWly cV91ZG1hX2lkeCk7CisJCQlmcmVlX2lycSh1Yy0+aXJxX251bV9yaW5nLCB1Yyk7CisJCQlyZXQg PSAtRUlOVkFMOworCQkJZ290byBlcnJfaXJxX2ZyZWU7CisJCX0KKworCQlyZXQgPSByZXF1ZXN0 X2lycSh1Yy0+aXJxX251bV91ZG1hLCB1ZG1hX3VkbWFfaXJxX2hhbmRsZXIsIDAsCisJCQkJICB1 Yy0+bmFtZSwgdWMpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKHVkLT5kZXYsICJjaGFuJWQ6 IFVETUEgaXJxIHJlcXVlc3QgZmFpbGVkXG4iLAorCQkJCXVjLT5pZCk7CisJCQlmcmVlX2lycSh1 Yy0+aXJxX251bV9yaW5nLCB1Yyk7CisJCQlnb3RvIGVycl9pcnFfZnJlZTsKKwkJfQorCX0gZWxz ZSB7CisJCXVjLT5pcnFfbnVtX3VkbWEgPSAwOworCX0KKworCXVkbWFfcmVzZXRfcmluZ3ModWMp OworCisJcmV0dXJuIDA7CisKK2Vycl9pcnFfZnJlZToKKwl1Yy0+aXJxX251bV9yaW5nID0gMDsK Kwl1Yy0+aXJxX251bV91ZG1hID0gMDsKK2Vycl9wc2lfZnJlZToKKwluYXZzc19wc2lsX3VucGFp cih1ZCwgdWMtPnNyY190aHJlYWQsIHVjLT5kc3RfdGhyZWFkKTsKKwl1Yy0+cHNpbF9wYWlyZWQg PSBmYWxzZTsKK2Vycl9yZXNfZnJlZToKKwl1ZG1hX2ZyZWVfdHhfcmVzb3VyY2VzKHVjKTsKKwl1 ZG1hX2ZyZWVfcnhfcmVzb3VyY2VzKHVjKTsKKworCXVkbWFfcmVzZXRfdWNoYW4odWMpOworCisJ aWYgKHVjLT51c2VfZG1hX3Bvb2wpIHsKKwkJZG1hX3Bvb2xfZGVzdHJveSh1Yy0+aGRlc2NfcG9v bCk7CisJCXVjLT51c2VfZG1hX3Bvb2wgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgdm9pZCB1ZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpj aGFuKQoreworCXN0cnVjdCB1ZG1hX2NoYW4gKnVjID0gdG9fdWRtYV9jaGFuKGNoYW4pOworCXN0 cnVjdCB1ZG1hX2RldiAqdWQgPSB0b191ZG1hX2RldihjaGFuLT5kZXZpY2UpOworCisJdWRtYV90 ZXJtaW5hdGVfYWxsKGNoYW4pOworCisJaWYgKHVjLT5pcnFfbnVtX3JpbmcgPiAwKSB7CisJCWZy ZWVfaXJxKHVjLT5pcnFfbnVtX3JpbmcsIHVjKTsKKworCQl1Yy0+aXJxX251bV9yaW5nID0gMDsK Kwl9CisJaWYgKHVjLT5pcnFfbnVtX3VkbWEgPiAwKSB7CisJCWZyZWVfaXJxKHVjLT5pcnFfbnVt X3VkbWEsIHVjKTsKKworCQl1Yy0+aXJxX251bV91ZG1hID0gMDsKKwl9CisKKwkvKiBSZWxlYXNl IFBTSS1MIHBhaXJpbmcgKi8KKwlpZiAodWMtPnBzaWxfcGFpcmVkKSB7CisJCW5hdnNzX3BzaWxf dW5wYWlyKHVkLCB1Yy0+c3JjX3RocmVhZCwgdWMtPmRzdF90aHJlYWQpOworCQl1Yy0+cHNpbF9w YWlyZWQgPSBmYWxzZTsKKwl9CisKKwl2Y2hhbl9mcmVlX2NoYW5fcmVzb3VyY2VzKCZ1Yy0+dmMp OworCXRhc2tsZXRfa2lsbCgmdWMtPnZjLnRhc2spOworCisJcG1fcnVudGltZV9wdXQodWQtPmRk ZXYuZGV2KTsKKworCXVkbWFfZnJlZV90eF9yZXNvdXJjZXModWMpOworCXVkbWFfZnJlZV9yeF9y ZXNvdXJjZXModWMpOworCXVkbWFfcmVzZXRfdWNoYW4odWMpOworCisJaWYgKHVjLT51c2VfZG1h X3Bvb2wpIHsKKwkJZG1hX3Bvb2xfZGVzdHJveSh1Yy0+aGRlc2NfcG9vbCk7CisJCXVjLT51c2Vf ZG1hX3Bvb2wgPSBmYWxzZTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IHVkbWFfZHJpdmVyOwogCiBzdGF0aWMgYm9vbCB1ZG1hX3NsYXZlX3RocmVhZF9pc19wYWNrZXRf bW9kZShzdHJ1Y3QgdWRtYV9jaGFuICp1YykKLS0gClBldGVyCgpUZXhhcyBJbnN0cnVtZW50cyBG aW5sYW5kIE95LCBQb3Jra2FsYW5rYXR1IDIyLCAwMDE4MCBIZWxzaW5raS4KWS10dW5udXMvQnVz aW5lc3MgSUQ6IDA2MTU1MjEtNC4gS290aXBhaWtrYS9Eb21pY2lsZTogSGVsc2lua2kKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==