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 B9FF5C43331 for ; Mon, 11 Nov 2019 13:56:04 +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 7EFF9206A3 for ; Mon, 11 Nov 2019 13:56:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="GVlC3xlq"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="h9A3Do4r" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7EFF9206A3 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=SvYy1crlDglhbB9sz3Q0+f1i67d3oOe0ZB33g1yMwV8=; b=GVlC3xlqQXTxwI rmyktsQNORdE9aWxSeMoivtcVZ/mIfcK0YTCii673sXiSOZK7eDOo+8L2cJXH8sYchtl7OrFI61UH bgNVnZTDH/8NZDOE2RSKijro8DIYQTNE7je7QyAaQ9xq/ns96EG0ug0RDbbuDbfgp3Eq+VdEh2M5x s7m5y0cEcp73JeWhPYadpHWl3730URm964C3gLli9QZSuXdzCEQ+1T+CPyHEAFR7DU4N1mVDKiX+a IpHBbaJPs+ngY/Tt2fm7G5Ul+qyBPGIf7lB+9RMeB0DFItQBbG0MM0WGpi93GolZ84ZAwrvUnYM8I 6KdBALsNTAZnkjE3IPmg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUAAl-0004ww-9B; Mon, 11 Nov 2019 13:56:03 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iUA7s-0000vW-KU for linux-arm-kernel@lists.infradead.org; Mon, 11 Nov 2019 13:53:12 +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 xABDqxip090615; Mon, 11 Nov 2019 07:52:59 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1573480379; bh=9AGdJcw7fOzhufR98QHZE1RS5n8CGsJPCOXuNS34ZSw=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=h9A3Do4rS361yAUprN6GPwYMnoEoJ5K7maxOi1rexvr2JbkFcLDFmZ8eWcMLqpIz6 qgopirjOhYUo1LGWg4ukd8cD701T8rEJw4YAknMriyztjhKhbIS+jXfU9r+f1EX5Gw dvx3HLl7Ogbk16sgVYHjrK+9UBrjrvj1/sPnde3E= Received: from DFLE102.ent.ti.com (dfle102.ent.ti.com [10.64.6.23]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xABDqxrX111738 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 11 Nov 2019 07:52:59 -0600 Received: from DFLE108.ent.ti.com (10.64.6.29) by DFLE102.ent.ti.com (10.64.6.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Mon, 11 Nov 2019 07:52:42 -0600 Received: from fllv0040.itg.ti.com (10.64.41.20) by DFLE108.ent.ti.com (10.64.6.29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Mon, 11 Nov 2019 07:52:42 -0600 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 xABDqE8w097668; Mon, 11 Nov 2019 07:52:55 -0600 From: Peter Ujfalusi To: , , , Subject: [PATCH v5 11/15] dmaengine: ti: New driver for K3 UDMA - split#3: alloc/free chan_resources Date: Mon, 11 Nov 2019 15:53:26 +0200 Message-ID: <20191111135330.8235-12-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191111135330.8235-1-peter.ujfalusi@ti.com> References: <20191111135330.8235-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-20191111_055304_978833_9E6F826E X-CRM114-Status: GOOD ( 21.23 ) 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 U3BsaXQgcGF0Y2ggZm9yIHJldmlldyBjb250YWluaW5nOiBjaGFubmVsIHJlc291cmNlIGFsbG9j YXRpb24gYW5kIGZyZWUKZnVuY3Rpb25zLgoKRE1BIGRyaXZlciBmb3IKVGV4YXMgSW5zdHJ1bWVu dHMgSzMgTkFWU1MgVW5pZmllZCBETUEg4oCTIFBlcmlwaGVyYWwgUm9vdCBDb21wbGV4IChVRE1B LVApCgpUaGUgVURNQS1QIGlzIGludGVuZGVkIHRvIHBlcmZvcm0gc2ltaWxhciAoYnV0IHNpZ25p ZmljYW50bHkgdXBncmFkZWQpIGZ1bmN0aW9ucwphcyB0aGUgcGFja2V0LW9yaWVudGVkIERNQSB1 c2VkIG9uIHByZXZpb3VzIFNvQyBkZXZpY2VzLiBUaGUgVURNQS1QIG1vZHVsZQpzdXBwb3J0cyB0 aGUgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gb2YgdmFyaW91cyBwYWNrZXQgdHlwZXMuIFRo ZSBVRE1BLVAgaXMKYXJjaGl0ZWN0ZWQgdG8gZmFjaWxpdGF0ZSB0aGUgc2VnbWVudGF0aW9uIGFu ZCByZWFzc2VtYmx5IG9mIFNvQyBETUEgZGF0YQpzdHJ1Y3R1cmUgY29tcGxpYW50IHBhY2tldHMg dG8vZnJvbSBzbWFsbGVyIGRhdGEgYmxvY2tzIHRoYXQgYXJlIG5hdGl2ZWx5CmNvbXBhdGlibGUg d2l0aCB0aGUgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9mIGVhY2ggY29ubmVjdGVkIHBlcmlwaGVy YWwuIE11bHRpcGxlClR4IGFuZCBSeCBjaGFubmVscyBhcmUgcHJvdmlkZWQgd2l0aGluIHRoZSBE TUEgd2hpY2ggYWxsb3cgbXVsdGlwbGUgc2VnbWVudGF0aW9uCm9yIHJlYXNzZW1ibHkgb3BlcmF0 aW9ucyB0byBiZSBvbmdvaW5nLiBUaGUgRE1BIGNvbnRyb2xsZXIgbWFpbnRhaW5zIHN0YXRlCmlu Zm9ybWF0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGFubmVscyB3aGljaCBhbGxvd3MgcGFja2V0IHNl Z21lbnRhdGlvbiBhbmQKcmVhc3NlbWJseSBvcGVyYXRpb25zIHRvIGJlIHRpbWUgZGl2aXNpb24g bXVsdGlwbGV4ZWQgYmV0d2VlbiBjaGFubmVscyBpbiBvcmRlcgp0byBzaGFyZSB0aGUgdW5kZXJs eWluZyBETUEgaGFyZHdhcmUuIEFuIGV4dGVybmFsIERNQSBzY2hlZHVsZXIgaXMgdXNlZCB0bwpj b250cm9sIHRoZSBvcmRlcmluZyBhbmQgcmF0ZSBhdCB3aGljaCB0aGlzIG11bHRpcGxleGluZyBv Y2N1cnMgZm9yIFRyYW5zbWl0Cm9wZXJhdGlvbnMuIFRoZSBvcmRlcmluZyBhbmQgcmF0ZSBvZiBS ZWNlaXZlIG9wZXJhdGlvbnMgaXMgaW5kaXJlY3RseSBjb250cm9sbGVkCmJ5IHRoZSBvcmRlciBp biB3aGljaCBibG9ja3MgYXJlIHB1c2hlZCBpbnRvIHRoZSBETUEgb24gdGhlIFJ4IFBTSS1MIGlu dGVyZmFjZS4KClRoZSBVRE1BLVAgYWxzbyBzdXBwb3J0cyBhY3RpbmcgYXMgYm90aCBhIFVUQyBh bmQgVURNQS1DIGZvciBpdHMgaW50ZXJuYWwKY2hhbm5lbHMuIENoYW5uZWxzIGluIHRoZSBVRE1B LVAgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gYmUgZWl0aGVyIFBhY2tldC1CYXNlZCBvcgpUaGlyZC1Q YXJ0eSBjaGFubmVscyBvbiBhIGNoYW5uZWwgYnkgY2hhbm5lbCBiYXNpcy4KClRoZSBpbml0aWFs IGRyaXZlciBzdXBwb3J0czoKLSBNRU1fVE9fTUVNIChUUiBtb2RlKQotIERFVl9UT19NRU0gKFBh Y2tldCAvIFRSIG1vZGUpCi0gTUVNX1RPX0RFViAoUGFja2V0IC8gVFIgbW9kZSkKLSBDeWNsaWMg KFBhY2tldCAvIFRSIG1vZGUpCi0gTWV0YWRhdGEgZm9yIGRlc2NyaXB0b3JzCgpTaWduZWQtb2Zm LWJ5OiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgotLS0KIGRyaXZlcnMv ZG1hL3RpL2szLXVkbWEuYyB8IDc3MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDEgZmlsZSBjaGFuZ2VkLCA3NzEgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZG1hL3RpL2szLXVkbWEuYyBiL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwppbmRleCA0 NGYxZDhmNTM3NzguLjExY2VmNzY1ZWY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvdGkvazMt dWRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3RpL2szLXVkbWEuYwpAQCAtMTA0Niw2ICsxMDQ2LDc3 NyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdWRtYV91ZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZv aWQgKmRhdGEpCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgc3RydWN0IHVkbWFf cmZsb3cgKl9fdWRtYV9nZXRfcmZsb3coc3RydWN0IHVkbWFfZGV2ICp1ZCwgaW50IGlkKQorewor CS8qCisJICogQXR0ZW1wdCB0byByZXF1ZXN0IHJmbG93IGJ5IElEIGNhbiBiZSBtYWRlIGZvciBh bnkgcmZsb3cKKwkgKiBpZiBub3QgaW4gdXNlIHdpdGggYXNzdW1wdGlvbiB0aGF0IGNhbGxlciBr bm93cyB3aGF0J3MgZG9pbmcuCisJICogVEktU0NJIEZXIHdpbGwgcGVyZm9ybSBhZGRpdGlvbmFs IHBlcm1pc3Npb24gY2hlY2sgYW50IHdheSwgaXQncworCSAqIHNhZmUKKwkgKi8KKworCWlmIChp ZCA8IDAgfHwgaWQgPj0gdWQtPnJmbG93X2NudCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7 CisKKwlpZiAodGVzdF9iaXQoaWQsIHVkLT5yZmxvd19pbl91c2UpKQorCQlyZXR1cm4gRVJSX1BU UigtRU5PRU5UKTsKKworCS8qIEdQIHJmbG93IGhhcyB0byBiZSBhbGxvY2F0ZWQgZmlyc3QgKi8K KwlpZiAoIXRlc3RfYml0KGlkLCB1ZC0+cmZsb3dfZ3BfbWFwKSAmJgorCSAgICAhdGVzdF9iaXQo aWQsIHVkLT5yZmxvd19ncF9tYXBfYWxsb2NhdGVkKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7CisKKwlkZXZfZGJnKHVkLT5kZXYsICJnZXQgcmZsb3clZFxuIiwgaWQpOworCXNldF9iaXQo aWQsIHVkLT5yZmxvd19pbl91c2UpOworCXJldHVybiAmdWQtPnJmbG93c1tpZF07Cit9CisKK3N0 YXRpYyB2b2lkIF9fdWRtYV9wdXRfcmZsb3coc3RydWN0IHVkbWFfZGV2ICp1ZCwgc3RydWN0IHVk bWFfcmZsb3cgKnJmbG93KQoreworCWlmICghdGVzdF9iaXQocmZsb3ctPmlkLCB1ZC0+cmZsb3df aW5fdXNlKSkgeworCQlkZXZfZXJyKHVkLT5kZXYsICJhdHRlbXB0IHRvIHB1dCB1bnVzZWQgcmZs b3clZFxuIiwgcmZsb3ctPmlkKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9kYmcodWQtPmRldiwg InB1dCByZmxvdyVkXG4iLCByZmxvdy0+aWQpOworCWNsZWFyX2JpdChyZmxvdy0+aWQsIHVkLT5y Zmxvd19pbl91c2UpOworfQorCisjZGVmaW5lIFVETUFfUkVTRVJWRV9SRVNPVVJDRShyZXMpCQkJ CQlcCitzdGF0aWMgc3RydWN0IHVkbWFfIyNyZXMgKl9fdWRtYV9yZXNlcnZlXyMjcmVzKHN0cnVj dCB1ZG1hX2RldiAqdWQsCVwKKwkJCQkJICAgICAgIGVudW0gdWRtYV90cF9sZXZlbCB0cGwsCVwK KwkJCQkJICAgICAgIGludCBpZCkJCQlcCit7CQkJCQkJCQkJXAorCWlmIChpZCA+PSAwKSB7CQkJ CQkJCVwKKwkJaWYgKHRlc3RfYml0KGlkLCB1ZC0+cmVzIyNfbWFwKSkgewkJCVwKKwkJCWRldl9l cnIodWQtPmRldiwgInJlcyMjJWQgaXMgaW4gdXNlXG4iLCBpZCk7CVwKKwkJCXJldHVybiBFUlJf UFRSKC1FTk9FTlQpOwkJCVwKKwkJfQkJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQlpbnQg c3RhcnQ7CQkJCQkJXAorCQkJCQkJCQkJXAorCQlpZiAodHBsID49IHVkLT5tYXRjaF9kYXRhLT50 cGxfbGV2ZWxzKQkJCVwKKwkJCXRwbCA9IHVkLT5tYXRjaF9kYXRhLT50cGxfbGV2ZWxzIC0gMTsJ CVwKKwkJCQkJCQkJCVwKKwkJc3RhcnQgPSB1ZC0+bWF0Y2hfZGF0YS0+bGV2ZWxfc3RhcnRfaWR4 W3RwbF07CQlcCisJCQkJCQkJCQlcCisJCWlkID0gZmluZF9uZXh0X3plcm9fYml0KHVkLT5yZXMj I19tYXAsIHVkLT5yZXMjI19jbnQsCVwKKwkJCQkJc3RhcnQpOwkJCQlcCisJCWlmIChpZCA9PSB1 ZC0+cmVzIyNfY250KSB7CQkJCVwKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwkJCVwKKwkJ fQkJCQkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXNldF9iaXQoaWQsIHVkLT5yZXMj I19tYXApOwkJCQkJXAorCXJldHVybiAmdWQtPnJlcyMjc1tpZF07CQkJCQkJXAorfQorCitVRE1B X1JFU0VSVkVfUkVTT1VSQ0UodGNoYW4pOworVURNQV9SRVNFUlZFX1JFU09VUkNFKHJjaGFuKTsK Kworc3RhdGljIGludCB1ZG1hX2dldF90Y2hhbihzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlz dHJ1Y3QgdWRtYV9kZXYgKnVkID0gdWMtPnVkOworCisJaWYgKHVjLT50Y2hhbikgeworCQlkZXZf ZGJnKHVkLT5kZXYsICJjaGFuJWQ6IGFscmVhZHkgaGF2ZSB0Y2hhbiVkIGFsbG9jYXRlZFxuIiwK KwkJCXVjLT5pZCwgdWMtPnRjaGFuLT5pZCk7CisJCXJldHVybiAwOworCX0KKworCXVjLT50Y2hh biA9IF9fdWRtYV9yZXNlcnZlX3RjaGFuKHVkLCB1Yy0+Y2hhbm5lbF90cGwsIC0xKTsKKwlpZiAo SVNfRVJSKHVjLT50Y2hhbikpCisJCXJldHVybiBQVFJfRVJSKHVjLT50Y2hhbik7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCB1ZG1hX2dldF9yY2hhbihzdHJ1Y3QgdWRtYV9jaGFuICp1 YykKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0gdWMtPnVkOworCisJaWYgKHVjLT5yY2hhbikg eworCQlkZXZfZGJnKHVkLT5kZXYsICJjaGFuJWQ6IGFscmVhZHkgaGF2ZSByY2hhbiVkIGFsbG9j YXRlZFxuIiwKKwkJCXVjLT5pZCwgdWMtPnJjaGFuLT5pZCk7CisJCXJldHVybiAwOworCX0KKwor CXVjLT5yY2hhbiA9IF9fdWRtYV9yZXNlcnZlX3JjaGFuKHVkLCB1Yy0+Y2hhbm5lbF90cGwsIC0x KTsKKwlpZiAoSVNfRVJSKHVjLT5yY2hhbikpCisJCXJldHVybiBQVFJfRVJSKHVjLT5yY2hhbik7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1ZG1hX2dldF9jaGFuX3BhaXIoc3RydWN0 IHVkbWFfY2hhbiAqdWMpCit7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IHVjLT51ZDsKKwljb25z dCBzdHJ1Y3QgdWRtYV9tYXRjaF9kYXRhICptYXRjaF9kYXRhID0gdWQtPm1hdGNoX2RhdGE7CisJ aW50IGNoYW5faWQsIGVuZDsKKworCWlmICgodWMtPnRjaGFuICYmIHVjLT5yY2hhbikgJiYgdWMt PnRjaGFuLT5pZCA9PSB1Yy0+cmNoYW4tPmlkKSB7CisJCWRldl9pbmZvKHVkLT5kZXYsICJjaGFu JWQ6IGFscmVhZHkgaGF2ZSAlZCBwYWlyIGFsbG9jYXRlZFxuIiwKKwkJCSB1Yy0+aWQsIHVjLT50 Y2hhbi0+aWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodWMtPnRjaGFuKSB7CisJCWRldl9l cnIodWQtPmRldiwgImNoYW4lZDogYWxyZWFkeSBoYXZlIHRjaGFuJWQgYWxsb2NhdGVkXG4iLAor CQkJdWMtPmlkLCB1Yy0+dGNoYW4tPmlkKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9IGVsc2UgaWYg KHVjLT5yY2hhbikgeworCQlkZXZfZXJyKHVkLT5kZXYsICJjaGFuJWQ6IGFscmVhZHkgaGF2ZSBy Y2hhbiVkIGFsbG9jYXRlZFxuIiwKKwkJCXVjLT5pZCwgdWMtPnJjaGFuLT5pZCk7CisJCXJldHVy biAtRUJVU1k7CisJfQorCisJLyogQ2FuIGJlIG9wdGltaXplZCwgYnV0IGxldCdzIGhhdmUgaXQg bGlrZSB0aGlzIGZvciBub3cgKi8KKwllbmQgPSBtaW4odWQtPnRjaGFuX2NudCwgdWQtPnJjaGFu X2NudCk7CisJLyogVHJ5IHRvIHVzZSB0aGUgaGlnaGVzdCBUUEwgY2hhbm5lbCBwYWlyIGZvciBN RU1fVE9fTUVNIGNoYW5uZWxzICovCisJY2hhbl9pZCA9IG1hdGNoX2RhdGEtPmxldmVsX3N0YXJ0 X2lkeFttYXRjaF9kYXRhLT50cGxfbGV2ZWxzIC0gMV07CisJZm9yICg7IGNoYW5faWQgPCBlbmQ7 IGNoYW5faWQrKykgeworCQlpZiAoIXRlc3RfYml0KGNoYW5faWQsIHVkLT50Y2hhbl9tYXApICYm CisJCSAgICAhdGVzdF9iaXQoY2hhbl9pZCwgdWQtPnJjaGFuX21hcCkpCisJCQlicmVhazsKKwl9 CisKKwlpZiAoY2hhbl9pZCA9PSBlbmQpCisJCXJldHVybiAtRU5PRU5UOworCisJc2V0X2JpdChj aGFuX2lkLCB1ZC0+dGNoYW5fbWFwKTsKKwlzZXRfYml0KGNoYW5faWQsIHVkLT5yY2hhbl9tYXAp OworCXVjLT50Y2hhbiA9ICZ1ZC0+dGNoYW5zW2NoYW5faWRdOworCXVjLT5yY2hhbiA9ICZ1ZC0+ cmNoYW5zW2NoYW5faWRdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9nZXRf cmZsb3coc3RydWN0IHVkbWFfY2hhbiAqdWMsIGludCBmbG93X2lkKQoreworCXN0cnVjdCB1ZG1h X2RldiAqdWQgPSB1Yy0+dWQ7CisKKwlpZiAoIXVjLT5yY2hhbikgeworCQlkZXZfZXJyKHVkLT5k ZXYsICJjaGFuJWQ6IGRvZXMgbm90IGhhdmUgcmNoYW4/P1xuIiwgdWMtPmlkKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJaWYgKHVjLT5yZmxvdykgeworCQlkZXZfZGJnKHVkLT5kZXYsICJj aGFuJWQ6IGFscmVhZHkgaGF2ZSByZmxvdyVkIGFsbG9jYXRlZFxuIiwKKwkJCXVjLT5pZCwgdWMt PnJmbG93LT5pZCk7CisJCXJldHVybiAwOworCX0KKworCXVjLT5yZmxvdyA9IF9fdWRtYV9nZXRf cmZsb3codWQsIGZsb3dfaWQpOworCWlmIChJU19FUlIodWMtPnJmbG93KSkKKwkJcmV0dXJuIFBU Ul9FUlIodWMtPnJmbG93KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1ZG1hX3B1 dF9yY2hhbihzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0g dWMtPnVkOworCisJaWYgKHVjLT5yY2hhbikgeworCQlkZXZfZGJnKHVkLT5kZXYsICJjaGFuJWQ6 IHB1dCByY2hhbiVkXG4iLCB1Yy0+aWQsCisJCQl1Yy0+cmNoYW4tPmlkKTsKKwkJY2xlYXJfYml0 KHVjLT5yY2hhbi0+aWQsIHVkLT5yY2hhbl9tYXApOworCQl1Yy0+cmNoYW4gPSBOVUxMOworCX0K K30KKworc3RhdGljIHZvaWQgdWRtYV9wdXRfdGNoYW4oc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7 CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IHVjLT51ZDsKKworCWlmICh1Yy0+dGNoYW4pIHsKKwkJ ZGV2X2RiZyh1ZC0+ZGV2LCAiY2hhbiVkOiBwdXQgdGNoYW4lZFxuIiwgdWMtPmlkLAorCQkJdWMt PnRjaGFuLT5pZCk7CisJCWNsZWFyX2JpdCh1Yy0+dGNoYW4tPmlkLCB1ZC0+dGNoYW5fbWFwKTsK KwkJdWMtPnRjaGFuID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkbWFfcHV0X3JmbG93 KHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7 CisKKwlpZiAodWMtPnJmbG93KSB7CisJCWRldl9kYmcodWQtPmRldiwgImNoYW4lZDogcHV0IHJm bG93JWRcbiIsIHVjLT5pZCwKKwkJCXVjLT5yZmxvdy0+aWQpOworCQlfX3VkbWFfcHV0X3JmbG93 KHVkLCB1Yy0+cmZsb3cpOworCQl1Yy0+cmZsb3cgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZv aWQgdWRtYV9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlpZiAo IXVjLT50Y2hhbikKKwkJcmV0dXJuOworCisJazNfcmluZ2FjY19yaW5nX2ZyZWUodWMtPnRjaGFu LT50X3JpbmcpOworCWszX3JpbmdhY2NfcmluZ19mcmVlKHVjLT50Y2hhbi0+dGNfcmluZyk7CisJ dWMtPnRjaGFuLT50X3JpbmcgPSBOVUxMOworCXVjLT50Y2hhbi0+dGNfcmluZyA9IE5VTEw7CisK Kwl1ZG1hX3B1dF90Y2hhbih1Yyk7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9hbGxvY190eF9yZXNv dXJjZXMoc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJc3RydWN0IGszX3JpbmdfY2ZnIHJpbmdf Y2ZnOworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7CisJaW50IHJldDsKKworCXJldCA9 IHVkbWFfZ2V0X3RjaGFuKHVjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdWMtPnRj aGFuLT50X3JpbmcgPSBrM19yaW5nYWNjX3JlcXVlc3RfcmluZyh1ZC0+cmluZ2FjYywKKwkJCQkJ CSAgICB1Yy0+dGNoYW4tPmlkLCAwKTsKKwlpZiAoIXVjLT50Y2hhbi0+dF9yaW5nKSB7CisJCXJl dCA9IC1FQlVTWTsKKwkJZ290byBlcnJfdHhfcmluZzsKKwl9CisKKwl1Yy0+dGNoYW4tPnRjX3Jp bmcgPSBrM19yaW5nYWNjX3JlcXVlc3RfcmluZyh1ZC0+cmluZ2FjYywgLTEsIDApOworCWlmICgh dWMtPnRjaGFuLT50Y19yaW5nKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfdHhjX3Jp bmc7CisJfQorCisJbWVtc2V0KCZyaW5nX2NmZywgMCwgc2l6ZW9mKHJpbmdfY2ZnKSk7CisJcmlu Z19jZmcuc2l6ZSA9IEszX1VETUFfREVGQVVMVF9SSU5HX1NJWkU7CisJcmluZ19jZmcuZWxtX3Np emUgPSBLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzg7CisJcmluZ19jZmcubW9kZSA9IEszX1JJTkdB Q0NfUklOR19NT0RFX01FU1NBR0U7CisKKwlyZXQgPSBrM19yaW5nYWNjX3JpbmdfY2ZnKHVjLT50 Y2hhbi0+dF9yaW5nLCAmcmluZ19jZmcpOworCXJldCB8PSBrM19yaW5nYWNjX3JpbmdfY2ZnKHVj LT50Y2hhbi0+dGNfcmluZywgJnJpbmdfY2ZnKTsKKworCWlmIChyZXQpCisJCWdvdG8gZXJyX3Jp bmdjZmc7CisKKwlyZXR1cm4gMDsKKworZXJyX3JpbmdjZmc6CisJazNfcmluZ2FjY19yaW5nX2Zy ZWUodWMtPnRjaGFuLT50Y19yaW5nKTsKKwl1Yy0+dGNoYW4tPnRjX3JpbmcgPSBOVUxMOworZXJy X3R4Y19yaW5nOgorCWszX3JpbmdhY2NfcmluZ19mcmVlKHVjLT50Y2hhbi0+dF9yaW5nKTsKKwl1 Yy0+dGNoYW4tPnRfcmluZyA9IE5VTEw7CitlcnJfdHhfcmluZzoKKwl1ZG1hX3B1dF90Y2hhbih1 Yyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1ZG1hX2ZyZWVfcnhfcmVzb3Vy Y2VzKHN0cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCWlmICghdWMtPnJjaGFuKQorCQlyZXR1cm47 CisKKwlpZiAodWMtPnJmbG93KSB7CisJCXN0cnVjdCB1ZG1hX3JmbG93ICpyZmxvdyA9IHVjLT5y ZmxvdzsKKworCQlrM19yaW5nYWNjX3JpbmdfZnJlZShyZmxvdy0+ZmRfcmluZyk7CisJCWszX3Jp bmdhY2NfcmluZ19mcmVlKHJmbG93LT5yX3JpbmcpOworCQlyZmxvdy0+ZmRfcmluZyA9IE5VTEw7 CisJCXJmbG93LT5yX3JpbmcgPSBOVUxMOworCisJCXVkbWFfcHV0X3JmbG93KHVjKTsKKwl9CisK Kwl1ZG1hX3B1dF9yY2hhbih1Yyk7Cit9CisKK3N0YXRpYyBpbnQgdWRtYV9hbGxvY19yeF9yZXNv dXJjZXMoc3RydWN0IHVkbWFfY2hhbiAqdWMpCit7CisJc3RydWN0IHVkbWFfZGV2ICp1ZCA9IHVj LT51ZDsKKwlzdHJ1Y3QgazNfcmluZ19jZmcgcmluZ19jZmc7CisJc3RydWN0IHVkbWFfcmZsb3cg KnJmbG93OworCWludCBmZF9yaW5nX2lkOworCWludCByZXQ7CisKKwlyZXQgPSB1ZG1hX2dldF9y Y2hhbih1Yyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEZvciBNRU1fVE9fTUVN IHdlIGRvbid0IG5lZWQgcmZsb3cgb3IgcmluZ3MgKi8KKwlpZiAodWMtPmRpciA9PSBETUFfTUVN X1RPX01FTSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSB1ZG1hX2dldF9yZmxvdyh1YywgdWMtPnJj aGFuLT5pZCk7CisJaWYgKHJldCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JmbG93 OworCX0KKworCXJmbG93ID0gdWMtPnJmbG93OworCWZkX3JpbmdfaWQgPSB1ZC0+dGNoYW5fY250 ICsgdWQtPmVjaGFuX2NudCArIHVjLT5yY2hhbi0+aWQ7CisJcmZsb3ctPmZkX3JpbmcgPSBrM19y aW5nYWNjX3JlcXVlc3RfcmluZyh1ZC0+cmluZ2FjYywgZmRfcmluZ19pZCwgMCk7CisJaWYgKCFy Zmxvdy0+ZmRfcmluZykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3J4X3Jpbmc7CisJ fQorCisJcmZsb3ctPnJfcmluZyA9IGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKHVkLT5yaW5nYWNj LCAtMSwgMCk7CisJaWYgKCFyZmxvdy0+cl9yaW5nKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290 byBlcnJfcnhjX3Jpbmc7CisJfQorCisJbWVtc2V0KCZyaW5nX2NmZywgMCwgc2l6ZW9mKHJpbmdf Y2ZnKSk7CisKKwlpZiAodWMtPnBrdF9tb2RlKQorCQlyaW5nX2NmZy5zaXplID0gU0dfTUFYX1NF R01FTlRTOworCWVsc2UKKwkJcmluZ19jZmcuc2l6ZSA9IEszX1VETUFfREVGQVVMVF9SSU5HX1NJ WkU7CisKKwlyaW5nX2NmZy5lbG1fc2l6ZSA9IEszX1JJTkdBQ0NfUklOR19FTFNJWkVfODsKKwly aW5nX2NmZy5tb2RlID0gSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRTsKKworCXJldCA9IGsz X3JpbmdhY2NfcmluZ19jZmcocmZsb3ctPmZkX3JpbmcsICZyaW5nX2NmZyk7CisJcmluZ19jZmcu c2l6ZSA9IEszX1VETUFfREVGQVVMVF9SSU5HX1NJWkU7CisJcmV0IHw9IGszX3JpbmdhY2Nfcmlu Z19jZmcocmZsb3ctPnJfcmluZywgJnJpbmdfY2ZnKTsKKworCWlmIChyZXQpCisJCWdvdG8gZXJy X3JpbmdjZmc7CisKKwlyZXR1cm4gMDsKKworZXJyX3JpbmdjZmc6CisJazNfcmluZ2FjY19yaW5n X2ZyZWUocmZsb3ctPnJfcmluZyk7CisJcmZsb3ctPnJfcmluZyA9IE5VTEw7CitlcnJfcnhjX3Jp bmc6CisJazNfcmluZ2FjY19yaW5nX2ZyZWUocmZsb3ctPmZkX3JpbmcpOworCXJmbG93LT5mZF9y aW5nID0gTlVMTDsKK2Vycl9yeF9yaW5nOgorCXVkbWFfcHV0X3JmbG93KHVjKTsKK2Vycl9yZmxv dzoKKwl1ZG1hX3B1dF9yY2hhbih1Yyk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFRJ U0NJX1RDSEFOX1ZBTElEX1BBUkFNUyAoCQkJCVwKKwlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQ X0NIX1BBVVNFX09OX0VSUl9WQUxJRCB8CVwKKwlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NI X1RYX0ZJTFRfRUlORk9fVkFMSUQgfAlcCisJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9DSF9U WF9GSUxUX1BTV09SRFNfVkFMSUQgfAlcCisJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9DSF9D SEFOX1RZUEVfVkFMSUQgfAkJXAorCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfVFhfU1VQ Ul9URFBLVF9WQUxJRCB8CVwKKwlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NIX0ZFVENIX1NJ WkVfVkFMSUQgfAkJXAorCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfQ1FfUU5VTV9WQUxJ RCkKKworI2RlZmluZSBUSVNDSV9SQ0hBTl9WQUxJRF9QQVJBTVMgKAkJCQlcCisJVElfU0NJX01T R19WQUxVRV9STV9VRE1BUF9DSF9QQVVTRV9PTl9FUlJfVkFMSUQgfAlcCisJVElfU0NJX01TR19W QUxVRV9STV9VRE1BUF9DSF9GRVRDSF9TSVpFX1ZBTElEIHwJCVwKKwlUSV9TQ0lfTVNHX1ZBTFVF X1JNX1VETUFQX0NIX0NRX1FOVU1fVkFMSUQgfAkJXAorCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURN QVBfQ0hfQ0hBTl9UWVBFX1ZBTElEIHwJCVwKKwlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NI X1JYX0lHTk9SRV9TSE9SVF9WQUxJRCB8CVwKKwlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1VETUFQX0NI X1JYX0lHTk9SRV9MT05HX1ZBTElEIHwJXAorCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hf UlhfRkxPV0lEX1NUQVJUX1ZBTElEIHwJXAorCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hf UlhfRkxPV0lEX0NOVF9WQUxJRCkKKworc3RhdGljIGludCB1ZG1hX3Rpc2NpX20ybV9jaGFubmVs X2NvbmZpZyhzdHJ1Y3QgdWRtYV9jaGFuICp1YykKK3sKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0g dWMtPnVkOworCXN0cnVjdCB1ZG1hX3Rpc2NpX3JtICp0aXNjaV9ybSA9ICZ1ZC0+dGlzY2lfcm07 CisJY29uc3Qgc3RydWN0IHRpX3NjaV9ybV91ZG1hcF9vcHMgKnRpc2NpX29wcyA9IHRpc2NpX3Jt LT50aXNjaV91ZG1hcF9vcHM7CisJc3RydWN0IHVkbWFfdGNoYW4gKnRjaGFuID0gdWMtPnRjaGFu OworCXN0cnVjdCB1ZG1hX3JjaGFuICpyY2hhbiA9IHVjLT5yY2hhbjsKKwlpbnQgcmV0ID0gMDsK KworCS8qIE5vbiBzeW5jaHJvbml6ZWQgLSBtZW0gdG8gbWVtIHR5cGUgb2YgdHJhbnNmZXIgKi8K KwlpbnQgdGNfcmluZyA9IGszX3JpbmdhY2NfZ2V0X3JpbmdfaWQodGNoYW4tPnRjX3JpbmcpOwor CXN0cnVjdCB0aV9zY2lfbXNnX3JtX3VkbWFwX3R4X2NoX2NmZyByZXFfdHggPSB7IDAgfTsKKwlz dHJ1Y3QgdGlfc2NpX21zZ19ybV91ZG1hcF9yeF9jaF9jZmcgcmVxX3J4ID0geyAwIH07CisKKwly ZXFfdHgudmFsaWRfcGFyYW1zID0gVElTQ0lfVENIQU5fVkFMSURfUEFSQU1TOworCXJlcV90eC5u YXZfaWQgPSB0aXNjaV9ybS0+dGlzY2lfZGV2X2lkOworCXJlcV90eC5pbmRleCA9IHRjaGFuLT5p ZDsKKwlyZXFfdHgudHhfY2hhbl90eXBlID0gVElfU0NJX1JNX1VETUFQX0NIQU5fVFlQRV8zUkRQ X0JDT1BZX1BCUlI7CisJcmVxX3R4LnR4X2ZldGNoX3NpemUgPSBzaXplb2Yoc3RydWN0IGNwcGk1 X2Rlc2NfaGRyX3QpID4+IDI7CisJcmVxX3R4LnR4Y3FfcW51bSA9IHRjX3Jpbmc7CisKKwlyZXQg PSB0aXNjaV9vcHMtPnR4X2NoX2NmZyh0aXNjaV9ybS0+dGlzY2ksICZyZXFfdHgpOworCWlmIChy ZXQpIHsKKwkJZGV2X2Vycih1ZC0+ZGV2LCAidGNoYW4lZCBjZmcgZmFpbGVkICVkXG4iLCB0Y2hh bi0+aWQsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmVxX3J4LnZhbGlkX3BhcmFtcyA9 IFRJU0NJX1JDSEFOX1ZBTElEX1BBUkFNUzsKKwlyZXFfcngubmF2X2lkID0gdGlzY2lfcm0tPnRp c2NpX2Rldl9pZDsKKwlyZXFfcnguaW5kZXggPSByY2hhbi0+aWQ7CisJcmVxX3J4LnJ4X2ZldGNo X3NpemUgPSBzaXplb2Yoc3RydWN0IGNwcGk1X2Rlc2NfaGRyX3QpID4+IDI7CisJcmVxX3J4LnJ4 Y3FfcW51bSA9IHRjX3Jpbmc7CisJcmVxX3J4LnJ4X2NoYW5fdHlwZSA9IFRJX1NDSV9STV9VRE1B UF9DSEFOX1RZUEVfM1JEUF9CQ09QWV9QQlJSOworCisJcmV0ID0gdGlzY2lfb3BzLT5yeF9jaF9j ZmcodGlzY2lfcm0tPnRpc2NpLCAmcmVxX3J4KTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHVkLT5k ZXYsICJyY2hhbiVkIGFsbG9jIGZhaWxlZCAlZFxuIiwgcmNoYW4tPmlkLCByZXQpOworCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludCB1ZG1hX3Rpc2NpX3R4X2NoYW5uZWxfY29uZmlnKHN0 cnVjdCB1ZG1hX2NoYW4gKnVjKQoreworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7CisJ c3RydWN0IHVkbWFfdGlzY2lfcm0gKnRpc2NpX3JtID0gJnVkLT50aXNjaV9ybTsKKwljb25zdCBz dHJ1Y3QgdGlfc2NpX3JtX3VkbWFwX29wcyAqdGlzY2lfb3BzID0gdGlzY2lfcm0tPnRpc2NpX3Vk bWFwX29wczsKKwlzdHJ1Y3QgdWRtYV90Y2hhbiAqdGNoYW4gPSB1Yy0+dGNoYW47CisJaW50IHRj X3JpbmcgPSBrM19yaW5nYWNjX2dldF9yaW5nX2lkKHRjaGFuLT50Y19yaW5nKTsKKwlzdHJ1Y3Qg dGlfc2NpX21zZ19ybV91ZG1hcF90eF9jaF9jZmcgcmVxX3R4ID0geyAwIH07CisJdTMyIG1vZGUs IGZldGNoX3NpemU7CisJaW50IHJldCA9IDA7CisKKwlpZiAodWMtPnBrdF9tb2RlKSB7CisJCW1v ZGUgPSBUSV9TQ0lfUk1fVURNQVBfQ0hBTl9UWVBFX1BLVF9QQlJSOworCQlmZXRjaF9zaXplID0g Y3BwaTVfaGRlc2NfY2FsY19zaXplKHVjLT5uZWVkc19lcGliLCB1Yy0+cHNkX3NpemUsCisJCQkJ CQkgICAwKTsKKwl9IGVsc2UgeworCQltb2RlID0gVElfU0NJX1JNX1VETUFQX0NIQU5fVFlQRV8z UkRQX1BCUlI7CisJCWZldGNoX3NpemUgPSBzaXplb2Yoc3RydWN0IGNwcGk1X2Rlc2NfaGRyX3Qp OworCX0KKworCXJlcV90eC52YWxpZF9wYXJhbXMgPSBUSVNDSV9UQ0hBTl9WQUxJRF9QQVJBTVM7 CisJcmVxX3R4Lm5hdl9pZCA9IHRpc2NpX3JtLT50aXNjaV9kZXZfaWQ7CisJcmVxX3R4LmluZGV4 ID0gdGNoYW4tPmlkOworCXJlcV90eC50eF9jaGFuX3R5cGUgPSBtb2RlOworCXJlcV90eC50eF9z dXByX3RkcGt0ID0gdWMtPm5vdGRwa3Q7CisJcmVxX3R4LnR4X2ZldGNoX3NpemUgPSBmZXRjaF9z aXplID4+IDI7CisJcmVxX3R4LnR4Y3FfcW51bSA9IHRjX3Jpbmc7CisJaWYgKHVjLT5lcF90eXBl ID09IFBTSUxfRVBfUERNQV9YWSkgeworCQkvKiB3YWl0IGZvciBwZWVyIHRvIGNvbXBsZXRlIHRo ZSB0ZWFyZG93biBmb3IgUERNQXMgKi8KKwkJcmVxX3R4LnZhbGlkX3BhcmFtcyB8PQorCQkJCVRJ X1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfQ0hfVFhfVERUWVBFX1ZBTElEOworCQlyZXFfdHgudHhf dGR0eXBlID0gMTsKKwl9CisKKwlyZXQgPSB0aXNjaV9vcHMtPnR4X2NoX2NmZyh0aXNjaV9ybS0+ dGlzY2ksICZyZXFfdHgpOworCWlmIChyZXQpCisJCWRldl9lcnIodWQtPmRldiwgInRjaGFuJWQg Y2ZnIGZhaWxlZCAlZFxuIiwgdGNoYW4tPmlkLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCB1ZG1hX3Rpc2NpX3J4X2NoYW5uZWxfY29uZmlnKHN0cnVjdCB1ZG1hX2NoYW4g KnVjKQoreworCXN0cnVjdCB1ZG1hX2RldiAqdWQgPSB1Yy0+dWQ7CisJc3RydWN0IHVkbWFfdGlz Y2lfcm0gKnRpc2NpX3JtID0gJnVkLT50aXNjaV9ybTsKKwljb25zdCBzdHJ1Y3QgdGlfc2NpX3Jt X3VkbWFwX29wcyAqdGlzY2lfb3BzID0gdGlzY2lfcm0tPnRpc2NpX3VkbWFwX29wczsKKwlzdHJ1 Y3QgdWRtYV9yY2hhbiAqcmNoYW4gPSB1Yy0+cmNoYW47CisJaW50IGZkX3JpbmcgPSBrM19yaW5n YWNjX2dldF9yaW5nX2lkKHVjLT5yZmxvdy0+ZmRfcmluZyk7CisJaW50IHJ4X3JpbmcgPSBrM19y aW5nYWNjX2dldF9yaW5nX2lkKHVjLT5yZmxvdy0+cl9yaW5nKTsKKwlzdHJ1Y3QgdGlfc2NpX21z Z19ybV91ZG1hcF9yeF9jaF9jZmcgcmVxX3J4ID0geyAwIH07CisJc3RydWN0IHRpX3NjaV9tc2df cm1fdWRtYXBfZmxvd19jZmcgZmxvd19yZXEgPSB7IDAgfTsKKwl1MzIgbW9kZSwgZmV0Y2hfc2l6 ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1Yy0+cGt0X21vZGUpIHsKKwkJbW9kZSA9IFRJX1ND SV9STV9VRE1BUF9DSEFOX1RZUEVfUEtUX1BCUlI7CisJCWZldGNoX3NpemUgPSBjcHBpNV9oZGVz Y19jYWxjX3NpemUodWMtPm5lZWRzX2VwaWIsCisJCQkJCQkgICB1Yy0+cHNkX3NpemUsIDApOwor CX0gZWxzZSB7CisJCW1vZGUgPSBUSV9TQ0lfUk1fVURNQVBfQ0hBTl9UWVBFXzNSRFBfUEJSUjsK KwkJZmV0Y2hfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3BwaTVfZGVzY19oZHJfdCk7CisJfQorCisJ cmVxX3J4LnZhbGlkX3BhcmFtcyA9IFRJU0NJX1JDSEFOX1ZBTElEX1BBUkFNUzsKKwlyZXFfcngu bmF2X2lkID0gdGlzY2lfcm0tPnRpc2NpX2Rldl9pZDsKKwlyZXFfcnguaW5kZXggPSByY2hhbi0+ aWQ7CisJcmVxX3J4LnJ4X2ZldGNoX3NpemUgPSAgZmV0Y2hfc2l6ZSA+PiAyOworCXJlcV9yeC5y eGNxX3FudW0gPSByeF9yaW5nOworCXJlcV9yeC5yeF9jaGFuX3R5cGUgPSBtb2RlOworCisJcmV0 ID0gdGlzY2lfb3BzLT5yeF9jaF9jZmcodGlzY2lfcm0tPnRpc2NpLCAmcmVxX3J4KTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIodWQtPmRldiwgInJjaGFuJWQgY2ZnIGZhaWxlZCAlZFxuIiwgcmNo YW4tPmlkLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZsb3dfcmVxLnZhbGlkX3BhcmFt cyA9CisJCVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19FSU5GT19QUkVTRU5UX1ZBTElE IHwKKwkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX1BTSU5GT19QUkVTRU5UX1ZBTElE IHwKKwkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX0VSUk9SX0hBTkRMSU5HX1ZBTElE IHwKKwkJVElfU0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX0RFU0NfVFlQRV9WQUxJRCB8CisJ CVRJX1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19ERVNUX1FOVU1fVkFMSUQgfAorCQlUSV9T Q0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfU1JDX1RBR19ISV9TRUxfVkFMSUQgfAorCQlUSV9T Q0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfU1JDX1RBR19MT19TRUxfVkFMSUQgfAorCQlUSV9T Q0lfTVNHX1ZBTFVFX1JNX1VETUFQX0ZMT1dfREVTVF9UQUdfSElfU0VMX1ZBTElEIHwKKwkJVElf U0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX0RFU1RfVEFHX0xPX1NFTF9WQUxJRCB8CisJCVRJ X1NDSV9NU0dfVkFMVUVfUk1fVURNQVBfRkxPV19GRFEwX1NaMF9RTlVNX1ZBTElEIHwKKwkJVElf U0NJX01TR19WQUxVRV9STV9VRE1BUF9GTE9XX0ZEUTFfUU5VTV9WQUxJRCB8CisJCVRJX1NDSV9N U0dfVkFMVUVfUk1fVURNQVBfRkxPV19GRFEyX1FOVU1fVkFMSUQgfAorCQlUSV9TQ0lfTVNHX1ZB TFVFX1JNX1VETUFQX0ZMT1dfRkRRM19RTlVNX1ZBTElEOworCisJZmxvd19yZXEubmF2X2lkID0g dGlzY2lfcm0tPnRpc2NpX2Rldl9pZDsKKwlmbG93X3JlcS5mbG93X2luZGV4ID0gcmNoYW4tPmlk OworCisJaWYgKHVjLT5uZWVkc19lcGliKQorCQlmbG93X3JlcS5yeF9laW5mb19wcmVzZW50ID0g MTsKKwllbHNlCisJCWZsb3dfcmVxLnJ4X2VpbmZvX3ByZXNlbnQgPSAwOworCWlmICh1Yy0+cHNk X3NpemUpCisJCWZsb3dfcmVxLnJ4X3BzaW5mb19wcmVzZW50ID0gMTsKKwllbHNlCisJCWZsb3df cmVxLnJ4X3BzaW5mb19wcmVzZW50ID0gMDsKKwlmbG93X3JlcS5yeF9lcnJvcl9oYW5kbGluZyA9 IDE7CisJZmxvd19yZXEucnhfZGVzdF9xbnVtID0gcnhfcmluZzsKKwlmbG93X3JlcS5yeF9zcmNf dGFnX2hpX3NlbCA9IFVETUFfUkZMT1dfU1JDVEFHX05PTkU7CisJZmxvd19yZXEucnhfc3JjX3Rh Z19sb19zZWwgPSBVRE1BX1JGTE9XX1NSQ1RBR19TUkNfVEFHOworCWZsb3dfcmVxLnJ4X2Rlc3Rf dGFnX2hpX3NlbCA9IFVETUFfUkZMT1dfRFNUVEFHX0RTVF9UQUdfSEk7CisJZmxvd19yZXEucnhf ZGVzdF90YWdfbG9fc2VsID0gVURNQV9SRkxPV19EU1RUQUdfRFNUX1RBR19MTzsKKwlmbG93X3Jl cS5yeF9mZHEwX3N6MF9xbnVtID0gZmRfcmluZzsKKwlmbG93X3JlcS5yeF9mZHExX3FudW0gPSBm ZF9yaW5nOworCWZsb3dfcmVxLnJ4X2ZkcTJfcW51bSA9IGZkX3Jpbmc7CisJZmxvd19yZXEucnhf ZmRxM19xbnVtID0gZmRfcmluZzsKKworCXJldCA9IHRpc2NpX29wcy0+cnhfZmxvd19jZmcodGlz Y2lfcm0tPnRpc2NpLCAmZmxvd19yZXEpOworCisJaWYgKHJldCkKKwkJZGV2X2Vycih1ZC0+ZGV2 LCAiZmxvdyVkIGNvbmZpZyBmYWlsZWQ6ICVkXG4iLCByY2hhbi0+aWQsIHJldCk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCB1ZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBk bWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgdWRtYV9jaGFuICp1YyA9IHRvX3VkbWFfY2hhbihj aGFuKTsKKwlzdHJ1Y3QgdWRtYV9kZXYgKnVkID0gdG9fdWRtYV9kZXYoY2hhbi0+ZGV2aWNlKTsK Kwljb25zdCBzdHJ1Y3QgdWRtYV9tYXRjaF9kYXRhICptYXRjaF9kYXRhID0gdWQtPm1hdGNoX2Rh dGE7CisJc3RydWN0IGszX3JpbmcgKmlycV9yaW5nOworCXUzMiBpcnFfdWRtYV9pZHg7CisJaW50 IHJldDsKKworCWlmICh1Yy0+cGt0X21vZGUgfHwgdWMtPmRpciA9PSBETUFfTUVNX1RPX01FTSkg eworCQl1Yy0+dXNlX2RtYV9wb29sID0gdHJ1ZTsKKwkJLyogaW4gY2FzZSBvZiBNRU1fVE9fTUVN IHdlIGhhdmUgbWF4aW11bSBvZiB0d28gVFJzICovCisJCWlmICh1Yy0+ZGlyID09IERNQV9NRU1f VE9fTUVNKSB7CisJCQl1Yy0+aGRlc2Nfc2l6ZSA9IGNwcGk1X3RyZGVzY19jYWxjX3NpemUoCisJ CQkJCXNpemVvZihzdHJ1Y3QgY3BwaTVfdHJfdHlwZTE1X3QpLCAyKTsKKwkJCXVjLT5wa3RfbW9k ZSA9IGZhbHNlOworCQl9CisJfQorCisJaWYgKHVjLT51c2VfZG1hX3Bvb2wpIHsKKwkJdWMtPmhk ZXNjX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUodWMtPm5hbWUsIHVkLT5kZGV2LmRldiwKKwkJCQkJ CSB1Yy0+aGRlc2Nfc2l6ZSwgdWQtPmRlc2NfYWxpZ24sCisJCQkJCQkgMCk7CisJCWlmICghdWMt PmhkZXNjX3Bvb2wpIHsKKwkJCWRldl9lcnIodWQtPmRkZXYuZGV2LAorCQkJCSJEZXNjcmlwdG9y IHBvb2wgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQkJdWMtPnVzZV9kbWFfcG9vbCA9IGZhbHNl OworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0 IHRoZSBjb21wbGV0aW9uIGlzIGluIGEga25vd24gc3RhdGU6CisJICogTm8gdGVhcmRvd24sIHRo ZSBjaGFubmVsIGlzIGlkbGUKKwkgKi8KKwlyZWluaXRfY29tcGxldGlvbigmdWMtPnRlYXJkb3du X2NvbXBsZXRlZCk7CisJY29tcGxldGVfYWxsKCZ1Yy0+dGVhcmRvd25fY29tcGxldGVkKTsKKwl1 Yy0+c3RhdGUgPSBVRE1BX0NIQU5fSVNfSURMRTsKKworCXN3aXRjaCAodWMtPmRpcikgeworCWNh c2UgRE1BX01FTV9UT19NRU06CisJCS8qIE5vbiBzeW5jaHJvbml6ZWQgLSBtZW0gdG8gbWVtIHR5 cGUgb2YgdHJhbnNmZXIgKi8KKwkJZGV2X2RiZyh1Yy0+dWQtPmRldiwgIiVzOiBjaGFuJWQgYXMg TUVNLXRvLU1FTVxuIiwgX19mdW5jX18sCisJCQl1Yy0+aWQpOworCisJCXJldCA9IHVkbWFfZ2V0 X2NoYW5fcGFpcih1Yyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHVk bWFfYWxsb2NfdHhfcmVzb3VyY2VzKHVjKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisK KwkJcmV0ID0gdWRtYV9hbGxvY19yeF9yZXNvdXJjZXModWMpOworCQlpZiAocmV0KSB7CisJCQl1 ZG1hX2ZyZWVfdHhfcmVzb3VyY2VzKHVjKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQl1Yy0+ c3JjX3RocmVhZCA9IHVkLT5wc2lsX2Jhc2UgKyB1Yy0+dGNoYW4tPmlkOworCQl1Yy0+ZHN0X3Ro cmVhZCA9ICh1ZC0+cHNpbF9iYXNlICsgdWMtPnJjaGFuLT5pZCkgfAorCQkJCSBLM19QU0lMX0RT VF9USFJFQURfSURfT0ZGU0VUOworCisJCWlycV9yaW5nID0gdWMtPnRjaGFuLT50Y19yaW5nOwor CQlpcnFfdWRtYV9pZHggPSB1Yy0+dGNoYW4tPmlkOworCisJCXJldCA9IHVkbWFfdGlzY2lfbTJt X2NoYW5uZWxfY29uZmlnKHVjKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfTUVNX1RPX0RFVjoKKwkJ LyogU2xhdmUgdHJhbnNmZXIgc3luY2hyb25pemVkIC0gbWVtIHRvIGRldiAoVFgpIHRyYXNuZmVy ICovCisJCWRldl9kYmcodWMtPnVkLT5kZXYsICIlczogY2hhbiVkIGFzIE1FTS10by1ERVZcbiIs IF9fZnVuY19fLAorCQkJdWMtPmlkKTsKKworCQlyZXQgPSB1ZG1hX2FsbG9jX3R4X3Jlc291cmNl cyh1Yyk7CisJCWlmIChyZXQpIHsKKwkJCXVjLT5yZW1vdGVfdGhyZWFkX2lkID0gLTE7CisJCQly ZXR1cm4gcmV0OworCQl9CisKKwkJdWMtPnNyY190aHJlYWQgPSB1ZC0+cHNpbF9iYXNlICsgdWMt PnRjaGFuLT5pZDsKKwkJdWMtPmRzdF90aHJlYWQgPSB1Yy0+cmVtb3RlX3RocmVhZF9pZDsKKwkJ dWMtPmRzdF90aHJlYWQgfD0gSzNfUFNJTF9EU1RfVEhSRUFEX0lEX09GRlNFVDsKKworCQlpcnFf cmluZyA9IHVjLT50Y2hhbi0+dGNfcmluZzsKKwkJaXJxX3VkbWFfaWR4ID0gdWMtPnRjaGFuLT5p ZDsKKworCQlyZXQgPSB1ZG1hX3Rpc2NpX3R4X2NoYW5uZWxfY29uZmlnKHVjKTsKKwkJYnJlYWs7 CisJY2FzZSBETUFfREVWX1RPX01FTToKKwkJLyogU2xhdmUgdHJhbnNmZXIgc3luY2hyb25pemVk IC0gZGV2IHRvIG1lbSAoUlgpIHRyYXNuZmVyICovCisJCWRldl9kYmcodWMtPnVkLT5kZXYsICIl czogY2hhbiVkIGFzIERFVi10by1NRU1cbiIsIF9fZnVuY19fLAorCQkJdWMtPmlkKTsKKworCQly ZXQgPSB1ZG1hX2FsbG9jX3J4X3Jlc291cmNlcyh1Yyk7CisJCWlmIChyZXQpIHsKKwkJCXVjLT5y ZW1vdGVfdGhyZWFkX2lkID0gLTE7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJdWMtPnNyY190 aHJlYWQgPSB1Yy0+cmVtb3RlX3RocmVhZF9pZDsKKwkJdWMtPmRzdF90aHJlYWQgPSAodWQtPnBz aWxfYmFzZSArIHVjLT5yY2hhbi0+aWQpIHwKKwkJCQkgSzNfUFNJTF9EU1RfVEhSRUFEX0lEX09G RlNFVDsKKworCQlpcnFfcmluZyA9IHVjLT5yZmxvdy0+cl9yaW5nOworCQlpcnFfdWRtYV9pZHgg PSBtYXRjaF9kYXRhLT5yY2hhbl9vZXNfb2Zmc2V0ICsgdWMtPnJjaGFuLT5pZDsKKworCQlyZXQg PSB1ZG1hX3Rpc2NpX3J4X2NoYW5uZWxfY29uZmlnKHVjKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJLyogQ2FuIG5vdCBoYXBwZW4gKi8KKwkJZGV2X2Vycih1Yy0+dWQtPmRldiwgIiVzOiBjaGFu JWQgaW52YWxpZCBkaXJlY3Rpb24gKCV1KVxuIiwKKwkJCV9fZnVuY19fLCB1Yy0+aWQsIHVjLT5k aXIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBpZiB0aGUgY2hhbm5lbCBj b25maWd1cmF0aW9uIHdhcyBzdWNjZXNzZnVsICovCisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVz X2ZyZWU7CisKKwlpZiAodWRtYV9pc19jaGFuX3J1bm5pbmcodWMpKSB7CisJCWRldl93YXJuKHVk LT5kZXYsICJjaGFuJWQ6IGlzIHJ1bm5pbmchXG4iLCB1Yy0+aWQpOworCQl1ZG1hX3N0b3AodWMp OworCQlpZiAodWRtYV9pc19jaGFuX3J1bm5pbmcodWMpKSB7CisJCQlkZXZfZXJyKHVkLT5kZXYs ICJjaGFuJWQ6IHdvbid0IHN0b3AhXG4iLCB1Yy0+aWQpOworCQkJZ290byBlcnJfcmVzX2ZyZWU7 CisJCX0KKwl9CisKKwkvKiBQU0ktTCBwYWlyaW5nICovCisJcmV0ID0gbmF2c3NfcHNpbF9wYWly KHVkLCB1Yy0+c3JjX3RocmVhZCwgdWMtPmRzdF90aHJlYWQpOworCWlmIChyZXQpIHsKKwkJZGV2 X2Vycih1ZC0+ZGV2LCAiUFNJLUwgcGFpcmluZyBmYWlsZWQ6IDB4JTA0eCAtPiAweCUwNHhcbiIs CisJCQl1Yy0+c3JjX3RocmVhZCwgdWMtPmRzdF90aHJlYWQpOworCQlnb3RvIGVycl9yZXNfZnJl ZTsKKwl9CisKKwl1Yy0+cHNpbF9wYWlyZWQgPSB0cnVlOworCisJdWMtPmlycV9udW1fcmluZyA9 IGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bShpcnFfcmluZyk7CisJaWYgKHVjLT5pcnFfbnVt X3JpbmcgPD0gMCkgeworCQlkZXZfZXJyKHVkLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHJpbmcgaXJx IChpbmRleDogJXUpXG4iLAorCQkJazNfcmluZ2FjY19nZXRfcmluZ19pZChpcnFfcmluZykpOwor CQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9wc2lfZnJlZTsKKwl9CisKKwlyZXQgPSByZXF1 ZXN0X2lycSh1Yy0+aXJxX251bV9yaW5nLCB1ZG1hX3JpbmdfaXJxX2hhbmRsZXIsCisJCQkgIElS UUZfVFJJR0dFUl9ISUdILCB1Yy0+bmFtZSwgdWMpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycih1 ZC0+ZGV2LCAiY2hhbiVkOiByaW5nIGlycSByZXF1ZXN0IGZhaWxlZFxuIiwgdWMtPmlkKTsKKwkJ Z290byBlcnJfaXJxX2ZyZWU7CisJfQorCisJLyogRXZlbnQgZnJvbSBVRE1BIChUUiBldmVudHMp IG9ubHkgbmVlZGVkIGZvciBzbGF2ZSBUUiBtb2RlIGNoYW5uZWxzICovCisJaWYgKGlzX3NsYXZl X2RpcmVjdGlvbih1Yy0+ZGlyKSAmJiAhdWMtPnBrdF9tb2RlKSB7CisJCXVjLT5pcnFfbnVtX3Vk bWEgPSB0aV9zY2lfaW50YV9tc2lfZ2V0X3ZpcnEodWQtPmRldiwKKwkJCQkJCQkgICAgaXJxX3Vk bWFfaWR4KTsKKwkJaWYgKHVjLT5pcnFfbnVtX3VkbWEgPD0gMCkgeworCQkJZGV2X2Vycih1ZC0+ ZGV2LCAiRmFpbGVkIHRvIGdldCB1ZG1hIGlycSAoaW5kZXg6ICV1KVxuIiwKKwkJCQlpcnFfdWRt YV9pZHgpOworCQkJZnJlZV9pcnEodWMtPmlycV9udW1fcmluZywgdWMpOworCQkJcmV0ID0gLUVJ TlZBTDsKKwkJCWdvdG8gZXJyX2lycV9mcmVlOworCQl9CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEo dWMtPmlycV9udW1fdWRtYSwgdWRtYV91ZG1hX2lycV9oYW5kbGVyLCAwLAorCQkJCSAgdWMtPm5h bWUsIHVjKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycih1ZC0+ZGV2LCAiY2hhbiVkOiBVRE1B IGlycSByZXF1ZXN0IGZhaWxlZFxuIiwKKwkJCQl1Yy0+aWQpOworCQkJZnJlZV9pcnEodWMtPmly cV9udW1fcmluZywgdWMpOworCQkJZ290byBlcnJfaXJxX2ZyZWU7CisJCX0KKwl9IGVsc2Ugewor CQl1Yy0+aXJxX251bV91ZG1hID0gMDsKKwl9CisKKwl1ZG1hX3Jlc2V0X3JpbmdzKHVjKTsKKwor CXJldHVybiAwOworCitlcnJfaXJxX2ZyZWU6CisJdWMtPmlycV9udW1fcmluZyA9IDA7CisJdWMt PmlycV9udW1fdWRtYSA9IDA7CitlcnJfcHNpX2ZyZWU6CisJbmF2c3NfcHNpbF91bnBhaXIodWQs IHVjLT5zcmNfdGhyZWFkLCB1Yy0+ZHN0X3RocmVhZCk7CisJdWMtPnBzaWxfcGFpcmVkID0gZmFs c2U7CitlcnJfcmVzX2ZyZWU6CisJdWRtYV9mcmVlX3R4X3Jlc291cmNlcyh1Yyk7CisJdWRtYV9m cmVlX3J4X3Jlc291cmNlcyh1Yyk7CisKKwl1ZG1hX3Jlc2V0X3VjaGFuKHVjKTsKKworCWlmICh1 Yy0+dXNlX2RtYV9wb29sKSB7CisJCWRtYV9wb29sX2Rlc3Ryb3kodWMtPmhkZXNjX3Bvb2wpOwor CQl1Yy0+dXNlX2RtYV9wb29sID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIHZvaWQgdWRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikK K3sKKwlzdHJ1Y3QgdWRtYV9jaGFuICp1YyA9IHRvX3VkbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3Qg dWRtYV9kZXYgKnVkID0gdG9fdWRtYV9kZXYoY2hhbi0+ZGV2aWNlKTsKKworCXVkbWFfdGVybWlu YXRlX2FsbChjaGFuKTsKKworCWlmICh1Yy0+aXJxX251bV9yaW5nID4gMCkgeworCQlmcmVlX2ly cSh1Yy0+aXJxX251bV9yaW5nLCB1Yyk7CisKKwkJdWMtPmlycV9udW1fcmluZyA9IDA7CisJfQor CWlmICh1Yy0+aXJxX251bV91ZG1hID4gMCkgeworCQlmcmVlX2lycSh1Yy0+aXJxX251bV91ZG1h LCB1Yyk7CisKKwkJdWMtPmlycV9udW1fdWRtYSA9IDA7CisJfQorCisJLyogUmVsZWFzZSBQU0kt TCBwYWlyaW5nICovCisJaWYgKHVjLT5wc2lsX3BhaXJlZCkgeworCQluYXZzc19wc2lsX3VucGFp cih1ZCwgdWMtPnNyY190aHJlYWQsIHVjLT5kc3RfdGhyZWFkKTsKKwkJdWMtPnBzaWxfcGFpcmVk ID0gZmFsc2U7CisJfQorCisJdmNoYW5fZnJlZV9jaGFuX3Jlc291cmNlcygmdWMtPnZjKTsKKwl0 YXNrbGV0X2tpbGwoJnVjLT52Yy50YXNrKTsKKworCXVkbWFfZnJlZV90eF9yZXNvdXJjZXModWMp OworCXVkbWFfZnJlZV9yeF9yZXNvdXJjZXModWMpOworCXVkbWFfcmVzZXRfdWNoYW4odWMpOwor CisJaWYgKHVjLT51c2VfZG1hX3Bvb2wpIHsKKwkJZG1hX3Bvb2xfZGVzdHJveSh1Yy0+aGRlc2Nf cG9vbCk7CisJCXVjLT51c2VfZG1hX3Bvb2wgPSBmYWxzZTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIHVkbWFfZHJpdmVyOwogCiBzdGF0aWMgYm9vbCB1ZG1hX2RtYV9m aWx0ZXJfZm4oc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpwYXJhbSkKLS0gClBldGVyCgpU ZXhhcyBJbnN0cnVtZW50cyBGaW5sYW5kIE95LCBQb3Jra2FsYW5rYXR1IDIyLCAwMDE4MCBIZWxz aW5raS4KWS10dW5udXMvQnVzaW5lc3MgSUQ6IDA2MTU1MjEtNC4gS290aXBhaWtrYS9Eb21pY2ls ZTogSGVsc2lua2kKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hcm0ta2VybmVsCg==