From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1AFDCC433E4 for ; Mon, 29 Jun 2020 19:07:06 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 D8B6B20663 for ; Mon, 29 Jun 2020 19:07:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="0hcT8Xjx"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="flFgMN5C" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D8B6B20663 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.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=TsfK2gc3N0Ir1enK3HN4E9uR8F9G3uZNY/tuppZVSC0=; b=0hcT8Xjx596X/tjGqg6pxaa33 s+6ZTB0Dvbeo9vXCtcAu/tQVBRHsX53TuHjlCExcCEdNb7LASQW0X8dofkdyusWckDXPMhb6BFAaJ Ibij3SkkogPTBsWGL+EATyTwbiPoS5nq2LnKYGm7dholUP+uEhjUEDsU7hH6hy6vsWvI+IFBVz8IK pWov/Q7jT3kCG/JFE1hkXFwZtLe+RBBYJIBmDhJJ69bkPbVvl3/82B8FU8zD63tR2W9Vyc/ESJFJf WEPWG3UPfXxT/ubc/QEZabgbcPV/R8xRu7HeheroKUEZFqAUPNkMR6192fVrMOR4rdLjKzxk6A6P6 8pdLv0X4w==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpz7N-0006ti-5S; Mon, 29 Jun 2020 19:07:01 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jpz7C-0006qS-UL for linux-nvme@lists.infradead.org; Mon, 29 Jun 2020 19:06:53 +0000 Received: from dhcp-10-100-145-180.wdl.wdc.com (unknown [199.255.45.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 305DE2064B; Mon, 29 Jun 2020 19:06:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593457610; bh=AlYM5AUtriXnEBDUPmLm3TghGhAGS5OqYBlA8uunaeM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=flFgMN5CitG1drAHpTonMJPS7ctKYZReRUPCQk4JOJJPZ8JOGx0Bh2BaaeIwFPjs+ I0lDLmhYp/K3hwFMvPdImZbVFWWNEu/lbgBwwTrw9yYUlZLWDRkrSLD8Bm4ssG3D8x tjnX3Mdgi/n9mZaCLxa26eXBePMwg1vj5Mn1iFVM= From: Keith Busch To: linux-nvme@lists.infradead.org, hch@lst.de, sagi@grimberg.me, linux-block@vger.kernel.org Subject: [PATCHv4 5/5] nvme: support for zoned namespaces Date: Mon, 29 Jun 2020 12:06:41 -0700 Message-Id: <20200629190641.1986462-6-kbusch@kernel.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200629190641.1986462-1-kbusch@kernel.org> References: <20200629190641.1986462-1-kbusch@kernel.org> MIME-Version: 1.0 X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: axboe@kernel.dk, Niklas Cassel , Damien Le Moal , Ajay Joshi , Keith Busch , "Martin K . Petersen" , Dmitry Fomichev , Johannes Thumshirn , Aravind Ramesh , Hans Holmberg , Hannes Reinecke , =?UTF-8?q?Javier=20Gonz=C3=A1lez?= , =?UTF-8?q?Matias=20Bj=C3=B8rling?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org RnJvbTogS2VpdGggQnVzY2ggPGtlaXRoLmJ1c2NoQHdkYy5jb20+CgpBZGQgc3VwcG9ydCBmb3Ig TlZNIEV4cHJlc3MgWm9uZWQgTmFtZXNwYWNlcyAoWk5TKSBDb21tYW5kIFNldCBkZWZpbmVkCmlu IE5WTSBFeHByZXNzIFRQNDA1My4gWm9uZWQgbmFtZXNwYWNlcyBhcmUgZGlzY292ZXJlZCBiYXNl ZCBvbiB0aGVpcgpDb21tYW5kIFNldCBJZGVudGlmaWVyIHJlcG9ydGVkIGluIHRoZSBuYW1lc3Bh Y2VzIE5hbWVzcGFjZQpJZGVudGlmaWNhdGlvbiBEZXNjcmlwdG9yIGxpc3QuIEEgc3VjY2Vzc2Z1 bGx5IGRpc2NvdmVyZWQgWm9uZWQKTmFtZXNwYWNlIHdpbGwgYmUgcmVnaXN0ZXJlZCB3aXRoIHRo ZSBibG9jayBsYXllciBhcyBhIGhvc3QgbWFuYWdlZAp6b25lZCBibG9jayBkZXZpY2Ugd2l0aCBa b25lIEFwcGVuZCBjb21tYW5kIHN1cHBvcnQuIEEgbmFtZXNwYWNlIHRoYXQKZG9lcyBub3Qgc3Vw cG9ydCBhcHBlbmQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgoKUmV2aWV3ZWQtYnk6 IE1hcnRpbiBLLiBQZXRlcnNlbiA8bWFydGluLnBldGVyc2VuQG9yYWNsZS5jb20+ClJldmlld2Vk LWJ5OiBKb2hhbm5lcyBUaHVtc2hpcm4gPGpvaGFubmVzLnRodW1zaGlybkB3ZGMuY29tPgpSZXZp ZXdlZC1ieTogSGFubmVzIFJlaW5lY2tlIDxoYXJlQHN1c2UuZGU+ClJldmlld2VkLWJ5OiBTYWdp IEdyaW1iZXJnIDxzYWdpQGdyaW1iZXJnLm1lPgpSZXZpZXdlZC1ieTogSmF2aWVyIEdvbnrDoWxl eiA8amF2aWVyLmdvbnpAc2Ftc3VuZy5jb20+ClNpZ25lZC1vZmYtYnk6IEhhbnMgSG9sbWJlcmcg PGhhbnMuaG9sbWJlcmdAd2RjLmNvbT4KU2lnbmVkLW9mZi1ieTogRG1pdHJ5IEZvbWljaGV2IDxk bWl0cnkuZm9taWNoZXZAd2RjLmNvbT4KU2lnbmVkLW9mZi1ieTogQWpheSBKb3NoaSA8YWpheS5q b3NoaUB3ZGMuY29tPgpTaWduZWQtb2ZmLWJ5OiBBcmF2aW5kIFJhbWVzaCA8YXJhdmluZC5yYW1l c2hAd2RjLmNvbT4KU2lnbmVkLW9mZi1ieTogTmlrbGFzIENhc3NlbCA8bmlrbGFzLmNhc3NlbEB3 ZGMuY29tPgpTaWduZWQtb2ZmLWJ5OiBNYXRpYXMgQmrDuHJsaW5nIDxtYXRpYXMuYmpvcmxpbmdA d2RjLmNvbT4KU2lnbmVkLW9mZi1ieTogRGFtaWVuIExlIE1vYWwgPGRhbWllbi5sZW1vYWxAd2Rj LmNvbT4KU2lnbmVkLW9mZi1ieTogS2VpdGggQnVzY2ggPGtlaXRoLmJ1c2NoQHdkYy5jb20+Ci0t LQogYmxvY2svS2NvbmZpZyAgICAgICAgICAgICAgfCAgIDUgKy0KIGRyaXZlcnMvbnZtZS9ob3N0 L01ha2VmaWxlIHwgICAxICsKIGRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyAgIHwgIDk3ICsrKysr KysrKysrKy0tCiBkcml2ZXJzL252bWUvaG9zdC9udm1lLmggICB8ICAzOSArKysrKysKIGRyaXZl cnMvbnZtZS9ob3N0L3pucy5jICAgIHwgMjUzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGluY2x1ZGUvbGludXgvbnZtZS5oICAgICAgIHwgMTExICsrKysrKysrKysrKysr KysKIDYgZmlsZXMgY2hhbmdlZCwgNDkxIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZtZS9ob3N0L3pucy5jCgpkaWZmIC0tZ2l0IGEv YmxvY2svS2NvbmZpZyBiL2Jsb2NrL0tjb25maWcKaW5kZXggOTM1N2Q3MzAyMzk4Li5iYmFkNWU4 YmJmZmUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL0tjb25maWcKKysrIGIvYmxvY2svS2NvbmZpZwpAQCAt ODYsOSArODYsMTAgQEAgY29uZmlnIEJMS19ERVZfWk9ORUQKIAlzZWxlY3QgTVFfSU9TQ0hFRF9E RUFETElORQogCWhlbHAKIAlCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4g VGhpcyBvcHRpb24gZW5hYmxlcwotCXN1cHBvcnQgZm9yIFpBQy9aQkMgaG9zdC1tYW5hZ2VkIGFu ZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrIGRldmljZXMuCisJc3VwcG9ydCBmb3IgWkFDL1pCQy9a TlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrCisJZGV2aWNlcy4KIAot CVNheSB5ZXMgaGVyZSBpZiB5b3UgaGF2ZSBhIFpBQyBvciBaQkMgc3RvcmFnZSBkZXZpY2UuCisJ U2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIGEgWkFDLCBaQkMsIG9yIFpOUyBzdG9yYWdlIGRldmlj ZS4KIAogY29uZmlnIEJMS19ERVZfVEhST1RUTElORwogCWJvb2wgIkJsb2NrIGxheWVyIGJpbyB0 aHJvdHRsaW5nIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9NYWtlZmls ZSBiL2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlCmluZGV4IGZjN2IyNmJlNjkyZC4uZDdmNmE4 NzY4N2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2 ZXJzL252bWUvaG9zdC9NYWtlZmlsZQpAQCAtMTMsNiArMTMsNyBAQCBudm1lLWNvcmUteQkJCQk6 PSBjb3JlLm8KIG52bWUtY29yZS0kKENPTkZJR19UUkFDSU5HKQkJKz0gdHJhY2UubwogbnZtZS1j b3JlLSQoQ09ORklHX05WTUVfTVVMVElQQVRIKQkrPSBtdWx0aXBhdGgubwogbnZtZS1jb3JlLSQo Q09ORklHX05WTSkJCQkrPSBsaWdodG52bS5vCitudm1lLWNvcmUtJChDT05GSUdfQkxLX0RFVl9a T05FRCkJKz0gem5zLm8KIG52bWUtY29yZS0kKENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdf RlMpCSs9IGZhdWx0X2luamVjdC5vCiBudm1lLWNvcmUtJChDT05GSUdfTlZNRV9IV01PTikJCSs9 IGh3bW9uLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVy cy9udm1lL2hvc3QvY29yZS5jCmluZGV4IGE0YTYxZDdlNzkzZC4uMDJiNDI3M2EwYjEwIDEwMDY0 NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKKysrIGIvZHJpdmVycy9udm1lL2hvc3Qv Y29yZS5jCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBkZXZfdCBudm1lX2Nocl9kZXZ0Owogc3Rh dGljIHN0cnVjdCBjbGFzcyAqbnZtZV9jbGFzczsKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKm52bWVf c3Vic3lzX2NsYXNzOwogCi1zdGF0aWMgaW50IG52bWVfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBn ZW5kaXNrICpkaXNrKTsKK3N0YXRpYyBpbnQgX252bWVfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBn ZW5kaXNrICpkaXNrKTsKIHN0YXRpYyB2b2lkIG52bWVfcHV0X3N1YnN5c3RlbShzdHJ1Y3QgbnZt ZV9zdWJzeXN0ZW0gKnN1YnN5cyk7CiBzdGF0aWMgdm9pZCBudm1lX3JlbW92ZV9pbnZhbGlkX25h bWVzcGFjZXMoc3RydWN0IG52bWVfY3RybCAqY3RybCwKIAkJCQkJICAgdW5zaWduZWQgbnNpZCk7 CkBAIC0yODcsNiArMjg3LDEwIEBAIHZvaWQgbnZtZV9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVz dCAqcmVxKQogCQkJbnZtZV9yZXRyeV9yZXEocmVxKTsKIAkJCXJldHVybjsKIAkJfQorCX0gZWxz ZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9aT05FRCkgJiYKKwkJICAgcmVxX29wKHJl cSkgPT0gUkVRX09QX1pPTkVfQVBQRU5EKSB7CisJCXJlcS0+X19zZWN0b3IgPSBudm1lX2xiYV90 b19zZWN0KHJlcS0+cS0+cXVldWVkYXRhLAorCQkJbGU2NF90b19jcHUobnZtZV9yZXEocmVxKS0+ cmVzdWx0LnU2NCkpOwogCX0KIAogCW52bWVfdHJhY2VfYmlvX2NvbXBsZXRlKHJlcSwgc3RhdHVz KTsKQEAgLTY3Myw3ICs2NzcsOCBAQCBzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBudm1lX3Nl dHVwX3dyaXRlX3plcm9lcyhzdHJ1Y3QgbnZtZV9ucyAqbnMsCiB9CiAKIHN0YXRpYyBpbmxpbmUg YmxrX3N0YXR1c190IG52bWVfc2V0dXBfcncoc3RydWN0IG52bWVfbnMgKm5zLAotCQlzdHJ1Y3Qg cmVxdWVzdCAqcmVxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbW5kKQorCQlzdHJ1Y3QgcmVxdWVz dCAqcmVxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbW5kLAorCQllbnVtIG52bWVfb3Bjb2RlIG9w KQogewogCXN0cnVjdCBudm1lX2N0cmwgKmN0cmwgPSBucy0+Y3RybDsKIAl1MTYgY29udHJvbCA9 IDA7CkBAIC02ODcsNyArNjkyLDcgQEAgc3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgbnZtZV9z ZXR1cF9ydyhzdHJ1Y3QgbnZtZV9ucyAqbnMsCiAJaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1JB SEVBRCkKIAkJZHNtZ210IHw9IE5WTUVfUldfRFNNX0ZSRVFfUFJFRkVUQ0g7CiAKLQljbW5kLT5y dy5vcGNvZGUgPSAocnFfZGF0YV9kaXIocmVxKSA/IG52bWVfY21kX3dyaXRlIDogbnZtZV9jbWRf cmVhZCk7CisJY21uZC0+cncub3Bjb2RlID0gb3A7CiAJY21uZC0+cncubnNpZCA9IGNwdV90b19s ZTMyKG5zLT5oZWFkLT5uc19pZCk7CiAJY21uZC0+cncuc2xiYSA9IGNwdV90b19sZTY0KG52bWVf c2VjdF90b19sYmEobnMsIGJsa19ycV9wb3MocmVxKSkpOwogCWNtbmQtPnJ3Lmxlbmd0aCA9IGNw dV90b19sZTE2KChibGtfcnFfYnl0ZXMocmVxKSA+PiBucy0+bGJhX3NoaWZ0KSAtIDEpOwpAQCAt NzE2LDYgKzcyMSw4IEBAIHN0YXRpYyBpbmxpbmUgYmxrX3N0YXR1c190IG52bWVfc2V0dXBfcnco c3RydWN0IG52bWVfbnMgKm5zLAogCQljYXNlIE5WTUVfTlNfRFBTX1BJX1RZUEUyOgogCQkJY29u dHJvbCB8PSBOVk1FX1JXX1BSSU5GT19QUkNIS19HVUFSRCB8CiAJCQkJCU5WTUVfUldfUFJJTkZP X1BSQ0hLX1JFRjsKKwkJCWlmIChvcCA9PSBudm1lX2NtZF96b25lX2FwcGVuZCkKKwkJCQljb250 cm9sIHw9IE5WTUVfUldfQVBQRU5EX1BJUkVNQVA7CiAJCQljbW5kLT5ydy5yZWZ0YWcgPSBjcHVf dG9fbGUzMih0MTBfcGlfcmVmX3RhZyhyZXEpKTsKIAkJCWJyZWFrOwogCQl9CkBAIC03NTYsNiAr NzYzLDE5IEBAIGJsa19zdGF0dXNfdCBudm1lX3NldHVwX2NtZChzdHJ1Y3QgbnZtZV9ucyAqbnMs IHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJY2FzZSBSRVFfT1BfRkxVU0g6CiAJCW52bWVfc2V0dXBf Zmx1c2gobnMsIGNtZCk7CiAJCWJyZWFrOworCWNhc2UgUkVRX09QX1pPTkVfUkVTRVRfQUxMOgor CWNhc2UgUkVRX09QX1pPTkVfUkVTRVQ6CisJCXJldCA9IG52bWVfc2V0dXBfem9uZV9tZ210X3Nl bmQobnMsIHJlcSwgY21kLCBOVk1FX1pPTkVfUkVTRVQpOworCQlicmVhazsKKwljYXNlIFJFUV9P UF9aT05FX09QRU46CisJCXJldCA9IG52bWVfc2V0dXBfem9uZV9tZ210X3NlbmQobnMsIHJlcSwg Y21kLCBOVk1FX1pPTkVfT1BFTik7CisJCWJyZWFrOworCWNhc2UgUkVRX09QX1pPTkVfQ0xPU0U6 CisJCXJldCA9IG52bWVfc2V0dXBfem9uZV9tZ210X3NlbmQobnMsIHJlcSwgY21kLCBOVk1FX1pP TkVfQ0xPU0UpOworCQlicmVhazsKKwljYXNlIFJFUV9PUF9aT05FX0ZJTklTSDoKKwkJcmV0ID0g bnZtZV9zZXR1cF96b25lX21nbXRfc2VuZChucywgcmVxLCBjbWQsIE5WTUVfWk9ORV9GSU5JU0gp OworCQlicmVhazsKIAljYXNlIFJFUV9PUF9XUklURV9aRVJPRVM6CiAJCXJldCA9IG52bWVfc2V0 dXBfd3JpdGVfemVyb2VzKG5zLCByZXEsIGNtZCk7CiAJCWJyZWFrOwpAQCAtNzYzLDggKzc4Mywx MyBAQCBibGtfc3RhdHVzX3QgbnZtZV9zZXR1cF9jbWQoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1 Y3QgcmVxdWVzdCAqcmVxLAogCQlyZXQgPSBudm1lX3NldHVwX2Rpc2NhcmQobnMsIHJlcSwgY21k KTsKIAkJYnJlYWs7CiAJY2FzZSBSRVFfT1BfUkVBRDoKKwkJcmV0ID0gbnZtZV9zZXR1cF9ydyhu cywgcmVxLCBjbWQsIG52bWVfY21kX3JlYWQpOworCQlicmVhazsKIAljYXNlIFJFUV9PUF9XUklU RToKLQkJcmV0ID0gbnZtZV9zZXR1cF9ydyhucywgcmVxLCBjbWQpOworCQlyZXQgPSBudm1lX3Nl dHVwX3J3KG5zLCByZXEsIGNtZCwgbnZtZV9jbWRfd3JpdGUpOworCQlicmVhazsKKwljYXNlIFJF UV9PUF9aT05FX0FQUEVORDoKKwkJcmV0ID0gbnZtZV9zZXR1cF9ydyhucywgcmVxLCBjbWQsIG52 bWVfY21kX3pvbmVfYXBwZW5kKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTl9PTkNF KDEpOwpAQCAtMTM5OCwxNCArMTQyMywyMyBAQCBzdGF0aWMgdTMyIG52bWVfcGFzc3RocnVfc3Rh cnQoc3RydWN0IG52bWVfY3RybCAqY3RybCwgc3RydWN0IG52bWVfbnMgKm5zLAogCXJldHVybiBl ZmZlY3RzOwogfQogCi1zdGF0aWMgdm9pZCBudm1lX3VwZGF0ZV9mb3JtYXRzKHN0cnVjdCBudm1l X2N0cmwgKmN0cmwpCitzdGF0aWMgdm9pZCBudm1lX3VwZGF0ZV9mb3JtYXRzKHN0cnVjdCBudm1l X2N0cmwgKmN0cmwsIHUzMiAqZWZmZWN0cykKIHsKIAlzdHJ1Y3QgbnZtZV9ucyAqbnM7CiAKIAlk b3duX3JlYWQoJmN0cmwtPm5hbWVzcGFjZXNfcndzZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnko bnMsICZjdHJsLT5uYW1lc3BhY2VzLCBsaXN0KQotCQlpZiAobnMtPmRpc2sgJiYgbnZtZV9yZXZh bGlkYXRlX2Rpc2sobnMtPmRpc2spKQorCQlpZiAobnMtPmRpc2sgJiYgX252bWVfcmV2YWxpZGF0 ZV9kaXNrKG5zLT5kaXNrKSkKIAkJCW52bWVfc2V0X3F1ZXVlX2R5aW5nKG5zKTsKKwkJZWxzZSBp ZiAoYmxrX3F1ZXVlX2lzX3pvbmVkKG5zLT5kaXNrLT5xdWV1ZSkpIHsKKwkJCS8qCisJCQkgKiBJ TyBjb21tYW5kcyBhcmUgcmVxdWlyZWQgdG8gZnVsbHkgcmV2YWxpZGF0ZSBhIHpvbmVkCisJCQkg KiBkZXZpY2UuIEZvcmNlIHRoZSBjb21tYW5kIGVmZmVjdHMgdG8gdHJpZ2dlciByZXNjYW4KKwkJ CSAqIHdvcmsgc28gcmVwb3J0IHpvbmVzIGNhbiBydW4gaW4gYSBjb250ZXh0IHdpdGgKKwkJCSAq IHVuZnJvemVuIElPIHF1ZXVlcy4KKwkJCSAqLworCQkJKmVmZmVjdHMgfD0gTlZNRV9DTURfRUZG RUNUU19OQ0M7CisJCX0KIAl1cF9yZWFkKCZjdHJsLT5uYW1lc3BhY2VzX3J3c2VtKTsKIH0KIApA QCAtMTQxNyw3ICsxNDUxLDcgQEAgc3RhdGljIHZvaWQgbnZtZV9wYXNzdGhydV9lbmQoc3RydWN0 IG52bWVfY3RybCAqY3RybCwgdTMyIGVmZmVjdHMpCiAJICogdGhpcyBjb21tYW5kLgogCSAqLwog CWlmIChlZmZlY3RzICYgTlZNRV9DTURfRUZGRUNUU19MQkNDKQotCQludm1lX3VwZGF0ZV9mb3Jt YXRzKGN0cmwpOworCQludm1lX3VwZGF0ZV9mb3JtYXRzKGN0cmwsICZlZmZlY3RzKTsKIAlpZiAo ZWZmZWN0cyAmIChOVk1FX0NNRF9FRkZFQ1RTX0xCQ0MgfCBOVk1FX0NNRF9FRkZFQ1RTX0NTRV9N QVNLKSkgewogCQludm1lX3VuZnJlZXplKGN0cmwpOwogCQludm1lX21wYXRoX3VuZnJlZXplKGN0 cmwtPnN1YnN5cyk7CkBAIC0xNTMyLDcgKzE1NjYsNyBAQCBzdGF0aWMgaW50IG52bWVfdXNlcl9j bWQ2NChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBzdHJ1Y3QgbnZtZV9ucyAqbnMsCiAgKiBJc3N1 ZSBpb2N0bCByZXF1ZXN0cyBvbiB0aGUgZmlyc3QgYXZhaWxhYmxlIHBhdGguICBOb3RlIHRoYXQg dW5saWtlIG5vcm1hbAogICogYmxvY2sgbGF5ZXIgcmVxdWVzdHMgd2Ugd2lsbCBub3QgcmV0cnkg ZmFpbGVkIHJlcXVlc3Qgb24gYW5vdGhlciBjb250cm9sbGVyLgogICovCi1zdGF0aWMgc3RydWN0 IG52bWVfbnMgKm52bWVfZ2V0X25zX2Zyb21fZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKK3N0 cnVjdCBudm1lX25zICpudm1lX2dldF9uc19mcm9tX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2ss CiAJCXN0cnVjdCBudm1lX25zX2hlYWQgKipoZWFkLCBpbnQgKnNyY3VfaWR4KQogewogI2lmZGVm IENPTkZJR19OVk1FX01VTFRJUEFUSApAQCAtMTU1Miw3ICsxNTg2LDcgQEAgc3RhdGljIHN0cnVj dCBudm1lX25zICpudm1lX2dldF9uc19mcm9tX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJ cmV0dXJuIGRpc2stPnByaXZhdGVfZGF0YTsKIH0KIAotc3RhdGljIHZvaWQgbnZtZV9wdXRfbnNf ZnJvbV9kaXNrKHN0cnVjdCBudm1lX25zX2hlYWQgKmhlYWQsIGludCBpZHgpCit2b2lkIG52bWVf cHV0X25zX2Zyb21fZGlzayhzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkLCBpbnQgaWR4KQogewog CWlmIChoZWFkKQogCQlzcmN1X3JlYWRfdW5sb2NrKCZoZWFkLT5zcmN1LCBpZHgpOwpAQCAtMTk0 NSwyMyArMTk3OSwzNCBAQCBzdGF0aWMgdm9pZCBudm1lX3VwZGF0ZV9kaXNrX2luZm8oc3RydWN0 IGdlbmRpc2sgKmRpc2ssCiAKIHN0YXRpYyBpbnQgX19udm1lX3JldmFsaWRhdGVfZGlzayhzdHJ1 Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IG52bWVfaWRfbnMgKmlkKQogeworCXVuc2lnbmVkIGxi YWYgPSBpZC0+ZmxiYXMgJiBOVk1FX05TX0ZMQkFTX0xCQV9NQVNLOwogCXN0cnVjdCBudm1lX25z ICpucyA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsID0gbnMt PmN0cmw7CisJaW50IHJldDsKIAl1MzIgaW9iOwogCiAJLyoKIAkgKiBJZiBpZGVudGlmeSBuYW1l c3BhY2UgZmFpbGVkLCB1c2UgZGVmYXVsdCA1MTIgYnl0ZSBibG9jayBzaXplIHNvCiAJICogYmxv Y2sgbGF5ZXIgY2FuIHVzZSBiZWZvcmUgZmFpbGluZyByZWFkL3dyaXRlIGZvciAwIGNhcGFjaXR5 LgogCSAqLwotCW5zLT5sYmFfc2hpZnQgPSBpZC0+bGJhZltpZC0+ZmxiYXMgJiBOVk1FX05TX0ZM QkFTX0xCQV9NQVNLXS5kczsKKwlucy0+bGJhX3NoaWZ0ID0gaWQtPmxiYWZbbGJhZl0uZHM7CiAJ aWYgKG5zLT5sYmFfc2hpZnQgPT0gMCkKIAkJbnMtPmxiYV9zaGlmdCA9IDk7CiAKIAlzd2l0Y2gg KG5zLT5oZWFkLT5pZHMuY3NpKSB7CiAJY2FzZSBOVk1FX0NTSV9OVk06CiAJCWJyZWFrOworCWNh c2UgTlZNRV9DU0lfWk5TOgorCQlyZXQgPSBudm1lX3VwZGF0ZV96b25lX2luZm8oZGlzaywgbnMs IGxiYWYpOworCQlpZiAocmV0KSB7CisJCQlkZXZfd2FybihjdHJsLT5kZXZpY2UsCisJCQkJImZh aWxlZCB0byBhZGQgem9uZWQgbmFtZXNwYWNlOiV1IHJldDolZFxuIiwKKwkJCQlucy0+aGVhZC0+ bnNfaWQsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0J CWRldl93YXJuKGN0cmwtPmRldmljZSwgInVua25vd24gY3NpOiVkIG5zOiVkXG4iLAorCQlkZXZf d2FybihjdHJsLT5kZXZpY2UsICJ1bmtub3duIGNzaToldSBuczoldVxuIiwKIAkJCW5zLT5oZWFk LT5pZHMuY3NpLCBucy0+aGVhZC0+bnNfaWQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0x OTczLDcgKzIwMTgsNyBAQCBzdGF0aWMgaW50IF9fbnZtZV9yZXZhbGlkYXRlX2Rpc2soc3RydWN0 IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBudm1lX2lkX25zICppZCkKIAkJaW9iID0gbnZtZV9sYmFf dG9fc2VjdChucywgbGUxNl90b19jcHUoaWQtPm5vaW9iKSk7CiAKIAlucy0+ZmVhdHVyZXMgPSAw OwotCW5zLT5tcyA9IGxlMTZfdG9fY3B1KGlkLT5sYmFmW2lkLT5mbGJhcyAmIE5WTUVfTlNfRkxC QVNfTEJBX01BU0tdLm1zKTsKKwlucy0+bXMgPSBsZTE2X3RvX2NwdShpZC0+bGJhZltsYmFmXS5t cyk7CiAJLyogdGhlIFBJIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIG1ldGFkYXRhIGVxdWFsIHQx MCBwaSB0dXBsZSBzaXplICovCiAJaWYgKG5zLT5tcyA9PSBzaXplb2Yoc3RydWN0IHQxMF9waV90 dXBsZSkpCiAJCW5zLT5waV90eXBlID0gaWQtPmRwcyAmIE5WTUVfTlNfRFBTX1BJX01BU0s7CkBA IC0yMDE1LDcgKzIwNjAsNyBAQCBzdGF0aWMgaW50IF9fbnZtZV9yZXZhbGlkYXRlX2Rpc2soc3Ry dWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBudm1lX2lkX25zICppZCkKIAlyZXR1cm4gMDsKIH0K IAotc3RhdGljIGludCBudm1lX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykK K3N0YXRpYyBpbnQgX252bWVfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQog ewogCXN0cnVjdCBudm1lX25zICpucyA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbnZt ZV9jdHJsICpjdHJsID0gbnMtPmN0cmw7CkBAIC0yMDYzLDYgKzIxMDgsMjggQEAgc3RhdGljIGlu dCBudm1lX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAlyZXR1cm4gcmV0 OwogfQogCitzdGF0aWMgaW50IG52bWVfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpk aXNrKQoreworCWludCByZXQ7CisKKwlyZXQgPSBfbnZtZV9yZXZhbGlkYXRlX2Rpc2soZGlzayk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworI2lmZGVmIENPTkZJR19CTEtfREVWX1pPTkVE CisJaWYgKGJsa19xdWV1ZV9pc196b25lZChkaXNrLT5xdWV1ZSkpIHsKKwkJc3RydWN0IG52bWVf bnMgKm5zID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCQlzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsID0g bnMtPmN0cmw7CisKKwkJcmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrLCBOVUxM KTsKKwkJaWYgKCFyZXQpCisJCQlibGtfcXVldWVfbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMoZGlz ay0+cXVldWUsCisJCQkJCQkJICBjdHJsLT5tYXhfem9uZV9hcHBlbmQpOworCX0KKyNlbmRpZgor CXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBjaGFyIG52bWVfcHJfdHlwZShlbnVtIHByX3R5cGUg dHlwZSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTIxOTMsNiArMjI2MCw3IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9mb3BzID0gewogCS5yZWxl YXNlCT0gbnZtZV9yZWxlYXNlLAogCS5nZXRnZW8JCT0gbnZtZV9nZXRnZW8sCiAJLnJldmFsaWRh dGVfZGlzaz0gbnZtZV9yZXZhbGlkYXRlX2Rpc2ssCisJLnJlcG9ydF96b25lcwk9IG52bWVfcmVw b3J0X3pvbmVzLAogCS5wcl9vcHMJCT0gJm52bWVfcHJfb3BzLAogfTsKIApAQCAtMjIxOCw2ICsy Mjg2LDcgQEAgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfbnNfaGVh ZF9vcHMgPSB7CiAJLmlvY3RsCQk9IG52bWVfaW9jdGwsCiAJLmNvbXBhdF9pb2N0bAk9IG52bWVf Y29tcGF0X2lvY3RsLAogCS5nZXRnZW8JCT0gbnZtZV9nZXRnZW8sCisJLnJlcG9ydF96b25lcwk9 IG52bWVfcmVwb3J0X3pvbmVzLAogCS5wcl9vcHMJCT0gJm52bWVfcHJfb3BzLAogfTsKICNlbmRp ZiAvKiBDT05GSUdfTlZNRV9NVUxUSVBBVEggKi8KQEAgLTQ0NDUsNiArNDUxNCw4IEBAIHN0YXRp YyBpbmxpbmUgdm9pZCBfbnZtZV9jaGVja19zaXplKHZvaWQpCiAJQlVJTERfQlVHX09OKHNpemVv ZihzdHJ1Y3QgbnZtZV9jb21tYW5kKSAhPSA2NCk7CiAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1 Y3QgbnZtZV9pZF9jdHJsKSAhPSBOVk1FX0lERU5USUZZX0RBVEFfU0laRSk7CiAJQlVJTERfQlVH X09OKHNpemVvZihzdHJ1Y3QgbnZtZV9pZF9ucykgIT0gTlZNRV9JREVOVElGWV9EQVRBX1NJWkUp OworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG52bWVfaWRfbnNfem5zKSAhPSBOVk1FX0lE RU5USUZZX0RBVEFfU0laRSk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbnZtZV9pZF9j dHJsX3pucykgIT0gTlZNRV9JREVOVElGWV9EQVRBX1NJWkUpOwogCUJVSUxEX0JVR19PTihzaXpl b2Yoc3RydWN0IG52bWVfbGJhX3JhbmdlX3R5cGUpICE9IDY0KTsKIAlCVUlMRF9CVUdfT04oc2l6 ZW9mKHN0cnVjdCBudm1lX3NtYXJ0X2xvZykgIT0gNTEyKTsKIAlCVUlMRF9CVUdfT04oc2l6ZW9m KHN0cnVjdCBudm1lX2RiYnVmKSAhPSA2NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9z dC9udm1lLmggYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmgKaW5kZXggZGQyNGE5NGM0MmZmLi5l ZDEwYmZmZjkxZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaAorKysgYi9k cml2ZXJzL252bWUvaG9zdC9udm1lLmgKQEAgLTIzOCw2ICsyMzgsOSBAQCBzdHJ1Y3QgbnZtZV9j dHJsIHsKIAl1MzIgbWF4X2h3X3NlY3RvcnM7CiAJdTMyIG1heF9zZWdtZW50czsKIAl1MzIgbWF4 X2ludGVncml0eV9zZWdtZW50czsKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRAorCXUzMiBt YXhfem9uZV9hcHBlbmQ7CisjZW5kaWYKIAl1MTYgY3JkdFszXTsKIAl1MTYgb25jczsKIAl1MTYg b2FjczsKQEAgLTQwNCw2ICs0MDcsOSBAQCBzdHJ1Y3QgbnZtZV9ucyB7CiAJdTE2IHNnczsKIAl1 MzIgc3dzOwogCXU4IHBpX3R5cGU7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfWk9ORUQKKwl1NjQg enN6ZTsKKyNlbmRpZgogCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXM7CiAJdW5zaWduZWQgbG9uZyBm bGFnczsKICNkZWZpbmUgTlZNRV9OU19SRU1PVklORwkwCkBAIC01NzEsNiArNTc3LDkgQEAgaW50 IG52bWVfZGVsZXRlX2N0cmwoc3RydWN0IG52bWVfY3RybCAqY3RybCk7CiAKIGludCBudm1lX2dl dF9sb2coc3RydWN0IG52bWVfY3RybCAqY3RybCwgdTMyIG5zaWQsIHU4IGxvZ19wYWdlLCB1OCBs c3AsIHU4IGNzaSwKIAkJdm9pZCAqbG9nLCBzaXplX3Qgc2l6ZSwgdTY0IG9mZnNldCk7CitzdHJ1 Y3QgbnZtZV9ucyAqbnZtZV9nZXRfbnNfZnJvbV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrLAor CQlzdHJ1Y3QgbnZtZV9uc19oZWFkICoqaGVhZCwgaW50ICpzcmN1X2lkeCk7Cit2b2lkIG52bWVf cHV0X25zX2Zyb21fZGlzayhzdHJ1Y3QgbnZtZV9uc19oZWFkICpoZWFkLCBpbnQgaWR4KTsKIAog ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm52bWVfbnNfaWRfYXR0cl9ncm91 cHNbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9u c19oZWFkX29wczsKQEAgLTY5Miw2ICs3MDEsMzYgQEAgc3RhdGljIGlubGluZSB2b2lkIG52bWVf bXBhdGhfc3RhcnRfZnJlZXplKHN0cnVjdCBudm1lX3N1YnN5c3RlbSAqc3Vic3lzKQogfQogI2Vu ZGlmIC8qIENPTkZJR19OVk1FX01VTFRJUEFUSCAqLwogCisjaWZkZWYgQ09ORklHX0JMS19ERVZf Wk9ORUQKK2ludCBudm1lX3VwZGF0ZV96b25lX2luZm8oc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0 cnVjdCBudm1lX25zICpucywKKwkJCSAgdW5zaWduZWQgbGJhZik7CisKK2ludCBudm1lX3JlcG9y dF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLAorCQkgICAgICB1 bnNpZ25lZCBpbnQgbnJfem9uZXMsIHJlcG9ydF96b25lc19jYiBjYiwgdm9pZCAqZGF0YSk7CisK K2Jsa19zdGF0dXNfdCBudm1lX3NldHVwX3pvbmVfbWdtdF9zZW5kKHN0cnVjdCBudm1lX25zICpu cywgc3RydWN0IHJlcXVlc3QgKnJlcSwKKwkJCQkgICAgICAgc3RydWN0IG52bWVfY29tbWFuZCAq Y21uZCwKKwkJCQkgICAgICAgZW51bSBudm1lX3pvbmVfbWdtdF9hY3Rpb24gYWN0aW9uKTsKKyNl bHNlCisjZGVmaW5lIG52bWVfcmVwb3J0X3pvbmVzIE5VTEwKKworc3RhdGljIGlubGluZSBibGtf c3RhdHVzX3QgbnZtZV9zZXR1cF96b25lX21nbXRfc2VuZChzdHJ1Y3QgbnZtZV9ucyAqbnMsCisJ CXN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtbmQsCisJCWVudW0g bnZtZV96b25lX21nbXRfYWN0aW9uIGFjdGlvbikKK3sKKwlyZXR1cm4gQkxLX1NUU19OT1RTVVBQ OworfQorCitzdGF0aWMgaW5saW5lIGludCBudm1lX3VwZGF0ZV96b25lX2luZm8oc3RydWN0IGdl bmRpc2sgKmRpc2ssCisJCQkJCXN0cnVjdCBudm1lX25zICpucywKKwkJCQkJdW5zaWduZWQgbGJh ZikKK3sKKwlkZXZfd2Fybihucy0+Y3RybC0+ZGV2aWNlLAorCQkgIlBsZWFzZSBlbmFibGUgQ09O RklHX0JMS19ERVZfWk9ORUQgdG8gc3VwcG9ydCBaTlMgZGV2aWNlc1xuIik7CisJcmV0dXJuIC1F UFJPVE9OT1NVUFBPUlQ7Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19OVk0KIGludCBudm1l X252bV9yZWdpc3RlcihzdHJ1Y3QgbnZtZV9ucyAqbnMsIGNoYXIgKmRpc2tfbmFtZSwgaW50IG5v ZGUpOwogdm9pZCBudm1lX252bV91bnJlZ2lzdGVyKHN0cnVjdCBudm1lX25zICpucyk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC96bnMuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L3pucy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzAzM2M2MGNlNzUxCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9udm1lL2hvc3Qvem5zLmMKQEAgLTAsMCArMSwyNTMg QEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0 IChDKSAyMDIwIFdlc3Rlcm4gRGlnaXRhbCBDb3Jwb3JhdGlvbiBvciBpdHMgYWZmaWxpYXRlcy4K KyAqLworCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxv Yy5oPgorI2luY2x1ZGUgIm52bWUuaCIKKworc3RhdGljIGludCBudm1lX3NldF9tYXhfYXBwZW5k KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpCit7CisJc3RydWN0IG52bWVfY29tbWFuZCBjID0geyB9 OworCXN0cnVjdCBudm1lX2lkX2N0cmxfem5zICppZDsKKwlpbnQgc3RhdHVzOworCisJaWQgPSBr emFsbG9jKHNpemVvZigqaWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlkKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWMuaWRlbnRpZnkub3Bjb2RlID0gbnZtZV9hZG1pbl9pZGVudGlmeTsKKwljLmlk ZW50aWZ5LmNucyA9IE5WTUVfSURfQ05TX0NTX0NUUkw7CisJYy5pZGVudGlmeS5jc2kgPSBOVk1F X0NTSV9aTlM7CisKKwlzdGF0dXMgPSBudm1lX3N1Ym1pdF9zeW5jX2NtZChjdHJsLT5hZG1pbl9x LCAmYywgaWQsIHNpemVvZigqaWQpKTsKKwlpZiAoc3RhdHVzKSB7CisJCWtmcmVlKGlkKTsKKwkJ cmV0dXJuIHN0YXR1czsKKwl9CisKKwlpZiAoaWQtPnphc2wpCisJCWN0cmwtPm1heF96b25lX2Fw cGVuZCA9IDEgPDwgKGlkLT56YXNsICsgMyk7CisJZWxzZQorCQljdHJsLT5tYXhfem9uZV9hcHBl bmQgPSBjdHJsLT5tYXhfaHdfc2VjdG9yczsKKwlrZnJlZShpZCk7CisJcmV0dXJuIDA7Cit9CisK K2ludCBudm1lX3VwZGF0ZV96b25lX2luZm8oc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBu dm1lX25zICpucywKKwkJCSAgdW5zaWduZWQgbGJhZikKK3sKKwlzdHJ1Y3QgbnZtZV9lZmZlY3Rz X2xvZyAqbG9nID0gbnMtPmhlYWQtPmVmZmVjdHM7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEg PSBkaXNrLT5xdWV1ZTsKKwlzdHJ1Y3QgbnZtZV9jb21tYW5kIGMgPSB7IH07CisJc3RydWN0IG52 bWVfaWRfbnNfem5zICppZDsKKwlpbnQgc3RhdHVzOworCisJLyogRHJpdmVyIHJlcXVpcmVzIHpv bmUgYXBwZW5kIHN1cHBvcnQgKi8KKwlpZiAoIShsb2ctPmlvY3NbbnZtZV9jbWRfem9uZV9hcHBl bmRdICYgTlZNRV9DTURfRUZGRUNUU19DU1VQUCkpIHsKKwkJZGV2X3dhcm4obnMtPmN0cmwtPmRl dmljZSwKKwkJCSJhcHBlbmQgbm90IHN1cHBvcnRlZCBmb3Igem9uZWQgbmFtZXNwYWNlOiVkXG4i LAorCQkJbnMtPmhlYWQtPm5zX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTGF6 aWx5IHF1ZXJ5IGNvbnRyb2xsZXIgYXBwZW5kIGxpbWl0IGZvciB0aGUgZmlyc3Qgem9uZWQgbmFt ZXNwYWNlICovCisJaWYgKCFucy0+Y3RybC0+bWF4X3pvbmVfYXBwZW5kKSB7CisJCXN0YXR1cyA9 IG52bWVfc2V0X21heF9hcHBlbmQobnMtPmN0cmwpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJu IHN0YXR1czsKKwl9CisKKwlpZCA9IGt6YWxsb2Moc2l6ZW9mKCppZCksIEdGUF9LRVJORUwpOwor CWlmICghaWQpCisJCXJldHVybiAtRU5PTUVNOworCisJYy5pZGVudGlmeS5vcGNvZGUgPSBudm1l X2FkbWluX2lkZW50aWZ5OworCWMuaWRlbnRpZnkubnNpZCA9IGNwdV90b19sZTMyKG5zLT5oZWFk LT5uc19pZCk7CisJYy5pZGVudGlmeS5jbnMgPSBOVk1FX0lEX0NOU19DU19OUzsKKwljLmlkZW50 aWZ5LmNzaSA9IE5WTUVfQ1NJX1pOUzsKKworCXN0YXR1cyA9IG52bWVfc3VibWl0X3N5bmNfY21k KG5zLT5jdHJsLT5hZG1pbl9xLCAmYywgaWQsIHNpemVvZigqaWQpKTsKKwlpZiAoc3RhdHVzKQor CQlnb3RvIGZyZWVfZGF0YTsKKworCS8qCisJICogV2UgY3VycmVudGx5IGRvIG5vdCBoYW5kbGUg ZGV2aWNlcyByZXF1aXJpbmcgYW55IG9mIHRoZSB6b25lZAorCSAqIG9wZXJhdGlvbiBjaGFyYWN0 ZXJpc3RpY3MuCisJICovCisJaWYgKGlkLT56b2MpIHsKKwkJZGV2X3dhcm4obnMtPmN0cmwtPmRl dmljZSwKKwkJCSJ6b25lIG9wZXJhdGlvbnM6JXggbm90IHN1cHBvcnRlZCBmb3IgbmFtZXNwYWNl OiV1XG4iLAorCQkJbGUxNl90b19jcHUoaWQtPnpvYyksIG5zLT5oZWFkLT5uc19pZCk7CisJCXN0 YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gZnJlZV9kYXRhOworCX0KKworCW5zLT56c3plID0gbnZt ZV9sYmFfdG9fc2VjdChucywgbGU2NF90b19jcHUoaWQtPmxiYWZlW2xiYWZdLnpzemUpKTsKKwlp ZiAoIWlzX3Bvd2VyX29mXzIobnMtPnpzemUpKSB7CisJCWRldl93YXJuKG5zLT5jdHJsLT5kZXZp Y2UsCisJCQkiaW52YWxpZCB6b25lIHNpemU6JWxsdSBmb3IgbmFtZXNwYWNlOiV1XG4iLAorCQkJ bnMtPnpzemUsIG5zLT5oZWFkLT5uc19pZCk7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8g ZnJlZV9kYXRhOworCX0KKworCXEtPmxpbWl0cy56b25lZCA9IEJMS19aT05FRF9ITTsKKwlibGtf cXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19aT05FX1JFU0VUQUxMLCBxKTsKK2ZyZWVfZGF0YToK KwlrZnJlZShpZCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgKm52bWVfem5z X2FsbG9jX3JlcG9ydF9idWZmZXIoc3RydWN0IG52bWVfbnMgKm5zLAorCQkJCQkgIHVuc2lnbmVk IGludCBucl96b25lcywgc2l6ZV90ICpidWZsZW4pCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUg KnEgPSBucy0+ZGlzay0+cXVldWU7CisJc2l6ZV90IGJ1ZnNpemU7CisJdm9pZCAqYnVmOworCisJ Y29uc3Qgc2l6ZV90IG1pbl9idWZzaXplID0gc2l6ZW9mKHN0cnVjdCBudm1lX3pvbmVfcmVwb3J0 KSArCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBudm1lX3pvbmVfZGVzY3JpcHRvcik7CisKKwlucl96 b25lcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbnJfem9uZXMsCisJCQkgZ2V0X2NhcGFjaXR5KG5z LT5kaXNrKSA+PiBpbG9nMihucy0+enN6ZSkpOworCisJYnVmc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg bnZtZV96b25lX3JlcG9ydCkgKworCQlucl96b25lcyAqIHNpemVvZihzdHJ1Y3QgbnZtZV96b25l X2Rlc2NyaXB0b3IpOworCWJ1ZnNpemUgPSBtaW5fdChzaXplX3QsIGJ1ZnNpemUsCisJCQlxdWV1 ZV9tYXhfaHdfc2VjdG9ycyhxKSA8PCBTRUNUT1JfU0hJRlQpOworCWJ1ZnNpemUgPSBtaW5fdChz aXplX3QsIGJ1ZnNpemUsIHF1ZXVlX21heF9zZWdtZW50cyhxKSA8PCBQQUdFX1NISUZUKTsKKwor CXdoaWxlIChidWZzaXplID49IG1pbl9idWZzaXplKSB7CisJCWJ1ZiA9IF9fdm1hbGxvYyhidWZz aXplLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSk7CisJCWlmIChidWYpIHsKKwkJCSpidWZs ZW4gPSBidWZzaXplOworCQkJcmV0dXJuIGJ1ZjsKKwkJfQorCQlidWZzaXplID4+PSAxOworCX0K KwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBfX252bWVfbnNfcmVwb3J0X3pvbmVzKHN0 cnVjdCBudm1lX25zICpucywgc2VjdG9yX3Qgc2VjdG9yLAorCQkJCSAgc3RydWN0IG52bWVfem9u ZV9yZXBvcnQgKnJlcG9ydCwKKwkJCQkgIHNpemVfdCBidWZsZW4pCit7CisJc3RydWN0IG52bWVf Y29tbWFuZCBjID0geyB9OworCWludCByZXQ7CisKKwljLnptci5vcGNvZGUgPSBudm1lX2NtZF96 b25lX21nbXRfcmVjdjsKKwljLnptci5uc2lkID0gY3B1X3RvX2xlMzIobnMtPmhlYWQtPm5zX2lk KTsKKwljLnptci5zbGJhID0gY3B1X3RvX2xlNjQobnZtZV9zZWN0X3RvX2xiYShucywgc2VjdG9y KSk7CisJYy56bXIubnVtZCA9IGNwdV90b19sZTMyKG52bWVfYnl0ZXNfdG9fbnVtZChidWZsZW4p KTsKKwljLnptci56cmEgPSBOVk1FX1pSQV9aT05FX1JFUE9SVDsKKwljLnptci56cmFzZiA9IE5W TUVfWlJBU0ZfWk9ORV9SRVBPUlRfQUxMOworCWMuem1yLnByID0gTlZNRV9SRVBPUlRfWk9ORV9Q QVJUSUFMOworCisJcmV0ID0gbnZtZV9zdWJtaXRfc3luY19jbWQobnMtPnF1ZXVlLCAmYywgcmVw b3J0LCBidWZsZW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gbGU2NF90 b19jcHUocmVwb3J0LT5ucl96b25lcyk7Cit9CisKK3N0YXRpYyBpbnQgbnZtZV96b25lX3BhcnNl X2VudHJ5KHN0cnVjdCBudm1lX25zICpucywKKwkJCQkgc3RydWN0IG52bWVfem9uZV9kZXNjcmlw dG9yICplbnRyeSwKKwkJCQkgdW5zaWduZWQgaW50IGlkeCwgcmVwb3J0X3pvbmVzX2NiIGNiLAor CQkJCSB2b2lkICpkYXRhKQoreworCXN0cnVjdCBibGtfem9uZSB6b25lID0geyB9OworCisJaWYg KChlbnRyeS0+enQgJiAweGYpICE9IE5WTUVfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUSkgeworCQlk ZXZfZXJyKG5zLT5jdHJsLT5kZXZpY2UsICJpbnZhbGlkIHpvbmUgdHlwZSAlI3hcbiIsCisJCQkJ ZW50cnktPnp0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJem9uZS50eXBlID0gQkxLX1pP TkVfVFlQRV9TRVFXUklURV9SRVE7CisJem9uZS5jb25kID0gZW50cnktPnpzID4+IDQ7CisJem9u ZS5sZW4gPSBucy0+enN6ZTsKKwl6b25lLmNhcGFjaXR5ID0gbnZtZV9sYmFfdG9fc2VjdChucywg bGU2NF90b19jcHUoZW50cnktPnpjYXApKTsKKwl6b25lLnN0YXJ0ID0gbnZtZV9sYmFfdG9fc2Vj dChucywgbGU2NF90b19jcHUoZW50cnktPnpzbGJhKSk7CisJem9uZS53cCA9IG52bWVfbGJhX3Rv X3NlY3QobnMsIGxlNjRfdG9fY3B1KGVudHJ5LT53cCkpOworCisJcmV0dXJuIGNiKCZ6b25lLCBp ZHgsIGRhdGEpOworfQorCitzdGF0aWMgaW50IG52bWVfbnNfcmVwb3J0X3pvbmVzKHN0cnVjdCBu dm1lX25zICpucywgc2VjdG9yX3Qgc2VjdG9yLAorCQkJdW5zaWduZWQgaW50IG5yX3pvbmVzLCBy ZXBvcnRfem9uZXNfY2IgY2IsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG52bWVfem9uZV9yZXBv cnQgKnJlcG9ydDsKKwlpbnQgcmV0LCB6b25lX2lkeCA9IDA7CisJdW5zaWduZWQgaW50IG56LCBp OworCXNpemVfdCBidWZsZW47CisKKwlyZXBvcnQgPSBudm1lX3puc19hbGxvY19yZXBvcnRfYnVm ZmVyKG5zLCBucl96b25lcywgJmJ1Zmxlbik7CisJaWYgKCFyZXBvcnQpCisJCXJldHVybiAtRU5P TUVNOworCisJc2VjdG9yICY9IH4obnMtPnpzemUgLSAxKTsKKwl3aGlsZSAoem9uZV9pZHggPCBu cl96b25lcyAmJiBzZWN0b3IgPCBnZXRfY2FwYWNpdHkobnMtPmRpc2spKSB7CisJCW1lbXNldChy ZXBvcnQsIDAsIGJ1Zmxlbik7CisJCXJldCA9IF9fbnZtZV9uc19yZXBvcnRfem9uZXMobnMsIHNl Y3RvciwgcmVwb3J0LCBidWZsZW4pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2ZyZWU7 CisKKwkJbnogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHJldCwgbnJfem9uZXMpOworCQlpZiAoIW56 KQorCQkJYnJlYWs7CisKKwkJZm9yIChpID0gMDsgaSA8IG56ICYmIHpvbmVfaWR4IDwgbnJfem9u ZXM7IGkrKykgeworCQkJcmV0ID0gbnZtZV96b25lX3BhcnNlX2VudHJ5KG5zLCAmcmVwb3J0LT5l bnRyaWVzW2ldLAorCQkJCQkJICAgIHpvbmVfaWR4LCBjYiwgZGF0YSk7CisJCQlpZiAocmV0KQor CQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl6b25lX2lkeCsrOworCQl9CisKKwkJc2VjdG9yICs9IG5z LT56c3plICogbno7CisJfQorCisJaWYgKHpvbmVfaWR4ID4gMCkKKwkJcmV0ID0gem9uZV9pZHg7 CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworb3V0X2ZyZWU6CisJa3ZmcmVlKHJlcG9ydCk7CisJ cmV0dXJuIHJldDsKK30KKworaW50IG52bWVfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpk aXNrLCBzZWN0b3JfdCBzZWN0b3IsCisJCSAgICAgIHVuc2lnbmVkIGludCBucl96b25lcywgcmVw b3J0X3pvbmVzX2NiIGNiLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBudm1lX25zX2hlYWQgKmhl YWQgPSBOVUxMOworCXN0cnVjdCBudm1lX25zICpuczsKKwlpbnQgc3JjdV9pZHgsIHJldDsKKwor CW5zID0gbnZtZV9nZXRfbnNfZnJvbV9kaXNrKGRpc2ssICZoZWFkLCAmc3JjdV9pZHgpOworCWlm ICh1bmxpa2VseSghbnMpKQorCQlyZXR1cm4gLUVXT1VMREJMT0NLOworCisJaWYgKG5zLT5oZWFk LT5pZHMuY3NpID09IE5WTUVfQ1NJX1pOUykKKwkJcmV0ID0gbnZtZV9uc19yZXBvcnRfem9uZXMo bnMsIHNlY3RvciwgbnJfem9uZXMsIGNiLCBkYXRhKTsKKwllbHNlCisJCXJldCA9IC1FSU5WQUw7 CisJbnZtZV9wdXRfbnNfZnJvbV9kaXNrKGhlYWQsIHNyY3VfaWR4KTsKKworCXJldHVybiByZXQ7 Cit9CisKK2Jsa19zdGF0dXNfdCBudm1lX3NldHVwX3pvbmVfbWdtdF9zZW5kKHN0cnVjdCBudm1l X25zICpucywgc3RydWN0IHJlcXVlc3QgKnJlcSwKKwkJc3RydWN0IG52bWVfY29tbWFuZCAqYywg ZW51bSBudm1lX3pvbmVfbWdtdF9hY3Rpb24gYWN0aW9uKQoreworCWMtPnptcy5vcGNvZGUgPSBu dm1lX2NtZF96b25lX21nbXRfc2VuZDsKKwljLT56bXMubnNpZCA9IGNwdV90b19sZTMyKG5zLT5o ZWFkLT5uc19pZCk7CisJYy0+em1zLnNsYmEgPSBjcHVfdG9fbGU2NChudm1lX3NlY3RfdG9fbGJh KG5zLCBibGtfcnFfcG9zKHJlcSkpKTsKKwljLT56bXMuenNhID0gYWN0aW9uOworCisJaWYgKHJl cV9vcChyZXEpID09IFJFUV9PUF9aT05FX1JFU0VUX0FMTCkKKwkJYy0+em1zLnNlbGVjdF9hbGwg PSAxOworCisJcmV0dXJuIEJMS19TVFNfT0s7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L252bWUuaCBiL2luY2x1ZGUvbGludXgvbnZtZS5oCmluZGV4IDk1Y2QwM2UyNDBhMS4uMTY0MzAw NWQyMWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L252bWUuaAorKysgYi9pbmNsdWRlL2xp bnV4L252bWUuaApAQCAtMzc0LDYgKzM3NCwzMCBAQCBzdHJ1Y3QgbnZtZV9pZF9ucyB7CiAJX191 OAkJCXZzWzM3MTJdOwogfTsKIAorc3RydWN0IG52bWVfem5zX2xiYWZlIHsKKwlfX2xlNjQJCQl6 c3plOworCV9fdTgJCQl6ZGVzOworCV9fdTgJCQlyc3ZkOVs3XTsKK307CisKK3N0cnVjdCBudm1l X2lkX25zX3pucyB7CisJX19sZTE2CQkJem9jOworCV9fbGUxNgkJCW96Y3M7CisJX19sZTMyCQkJ bWFyOworCV9fbGUzMgkJCW1vcjsKKwlfX2xlMzIJCQlycmw7CisJX19sZTMyCQkJZnJsOworCV9f dTgJCQlyc3ZkMjBbMjc5Nl07CisJc3RydWN0IG52bWVfem5zX2xiYWZlCWxiYWZlWzE2XTsKKwlf X3U4CQkJcnN2ZDMwNzJbNzY4XTsKKwlfX3U4CQkJdnNbMjU2XTsKK307CisKK3N0cnVjdCBudm1l X2lkX2N0cmxfem5zIHsKKwlfX3U4CXphc2w7CisJX191OAlyc3ZkMVs0MDk1XTsKK307CisKIGVu dW0gewogCU5WTUVfSURfQ05TX05TCQkJPSAweDAwLAogCU5WTUVfSURfQ05TX0NUUkwJCT0gMHgw MSwKQEAgLTM5Miw2ICs0MTYsNyBAQCBlbnVtIHsKIAogZW51bSB7CiAJTlZNRV9DU0lfTlZNCQkJ PSAwLAorCU5WTUVfQ1NJX1pOUwkJCT0gMiwKIH07CiAKIGVudW0gewpAQCAtNTMyLDYgKzU1Nywy NyBAQCBzdHJ1Y3QgbnZtZV9hbmFfcnNwX2hkciB7CiAJX19sZTE2CXJzdmQxMFszXTsKIH07CiAK K3N0cnVjdCBudm1lX3pvbmVfZGVzY3JpcHRvciB7CisJX191OAkJenQ7CisJX191OAkJenM7CisJ X191OAkJemE7CisJX191OAkJcnN2ZDNbNV07CisJX19sZTY0CQl6Y2FwOworCV9fbGU2NAkJenNs YmE7CisJX19sZTY0CQl3cDsKKwlfX3U4CQlyc3ZkMzJbMzJdOworfTsKKworZW51bSB7CisJTlZN RV9aT05FX1RZUEVfU0VRV1JJVEVfUkVRCT0gMHgyLAorfTsKKworc3RydWN0IG52bWVfem9uZV9y ZXBvcnQgeworCV9fbGU2NAkJbnJfem9uZXM7CisJX191OAkJcmVzdjhbNTZdOworCXN0cnVjdCBu dm1lX3pvbmVfZGVzY3JpcHRvciBlbnRyaWVzW107Cit9OworCiBlbnVtIHsKIAlOVk1FX1NNQVJU X0NSSVRfU1BBUkUJCT0gMSA8PCAwLAogCU5WTUVfU01BUlRfQ1JJVF9URU1QRVJBVFVSRQk9IDEg PDwgMSwKQEAgLTYyNiw2ICs2NzIsOSBAQCBlbnVtIG52bWVfb3Bjb2RlIHsKIAludm1lX2NtZF9y ZXN2X3JlcG9ydAk9IDB4MGUsCiAJbnZtZV9jbWRfcmVzdl9hY3F1aXJlCT0gMHgxMSwKIAludm1l X2NtZF9yZXN2X3JlbGVhc2UJPSAweDE1LAorCW52bWVfY21kX3pvbmVfbWdtdF9zZW5kCT0gMHg3 OSwKKwludm1lX2NtZF96b25lX21nbXRfcmVjdgk9IDB4N2EsCisJbnZtZV9jbWRfem9uZV9hcHBl bmQJPSAweDdkLAogfTsKIAogI2RlZmluZSBudm1lX29wY29kZV9uYW1lKG9wY29kZSkJeyBvcGNv ZGUsICNvcGNvZGUgfQpAQCAtNzY0LDYgKzgxMyw3IEBAIHN0cnVjdCBudm1lX3J3X2NvbW1hbmQg ewogZW51bSB7CiAJTlZNRV9SV19MUgkJCT0gMSA8PCAxNSwKIAlOVk1FX1JXX0ZVQQkJCT0gMSA8 PCAxNCwKKwlOVk1FX1JXX0FQUEVORF9QSVJFTUFQCQk9IDEgPDwgOSwKIAlOVk1FX1JXX0RTTV9G UkVRX1VOU1BFQwkJPSAwLAogCU5WTUVfUldfRFNNX0ZSRVFfVFlQSUNBTAk9IDEsCiAJTlZNRV9S V19EU01fRlJFUV9SQVJFCQk9IDIsCkBAIC04MjksNiArODc5LDUzIEBAIHN0cnVjdCBudm1lX3dy aXRlX3plcm9lc19jbWQgewogCV9fbGUxNgkJCWFwcG1hc2s7CiB9OwogCitlbnVtIG52bWVfem9u ZV9tZ210X2FjdGlvbiB7CisJTlZNRV9aT05FX0NMT1NFCQk9IDB4MSwKKwlOVk1FX1pPTkVfRklO SVNICT0gMHgyLAorCU5WTUVfWk9ORV9PUEVOCQk9IDB4MywKKwlOVk1FX1pPTkVfUkVTRVQJCT0g MHg0LAorCU5WTUVfWk9ORV9PRkZMSU5FCT0gMHg1LAorCU5WTUVfWk9ORV9TRVRfREVTQ19FWFQJ PSAweDEwLAorfTsKKworc3RydWN0IG52bWVfem9uZV9tZ210X3NlbmRfY21kIHsKKwlfX3U4CQkJ b3Bjb2RlOworCV9fdTgJCQlmbGFnczsKKwlfX3UxNgkJCWNvbW1hbmRfaWQ7CisJX19sZTMyCQkJ bnNpZDsKKwlfX2xlMzIJCQljZHcyWzJdOworCV9fbGU2NAkJCW1ldGFkYXRhOworCXVuaW9uIG52 bWVfZGF0YV9wdHIJZHB0cjsKKwlfX2xlNjQJCQlzbGJhOworCV9fbGUzMgkJCWNkdzEyOworCV9f dTgJCQl6c2E7CisJX191OAkJCXNlbGVjdF9hbGw7CisJX191OAkJCXJzdmQxM1syXTsKKwlfX2xl MzIJCQljZHcxNFsyXTsKK307CisKK3N0cnVjdCBudm1lX3pvbmVfbWdtdF9yZWN2X2NtZCB7CisJ X191OAkJCW9wY29kZTsKKwlfX3U4CQkJZmxhZ3M7CisJX191MTYJCQljb21tYW5kX2lkOworCV9f bGUzMgkJCW5zaWQ7CisJX19sZTY0CQkJcnN2ZDJbMl07CisJdW5pb24gbnZtZV9kYXRhX3B0cglk cHRyOworCV9fbGU2NAkJCXNsYmE7CisJX19sZTMyCQkJbnVtZDsKKwlfX3U4CQkJenJhOworCV9f dTgJCQl6cmFzZjsKKwlfX3U4CQkJcHI7CisJX191OAkJCXJzdmQxMzsKKwlfX2xlMzIJCQljZHcx NFsyXTsKK307CisKK2VudW0geworCU5WTUVfWlJBX1pPTkVfUkVQT1JUCQk9IDAsCisJTlZNRV9a UkFTRl9aT05FX1JFUE9SVF9BTEwJPSAwLAorCU5WTUVfUkVQT1JUX1pPTkVfUEFSVElBTAk9IDEs Cit9OworCiAvKiBGZWF0dXJlcyAqLwogCiBlbnVtIHsKQEAgLTEzMDAsNiArMTM5Nyw4IEBAIHN0 cnVjdCBudm1lX2NvbW1hbmQgewogCQlzdHJ1Y3QgbnZtZV9mb3JtYXRfY21kIGZvcm1hdDsKIAkJ c3RydWN0IG52bWVfZHNtX2NtZCBkc207CiAJCXN0cnVjdCBudm1lX3dyaXRlX3plcm9lc19jbWQg d3JpdGVfemVyb2VzOworCQlzdHJ1Y3QgbnZtZV96b25lX21nbXRfc2VuZF9jbWQgem1zOworCQlz dHJ1Y3QgbnZtZV96b25lX21nbXRfcmVjdl9jbWQgem1yOwogCQlzdHJ1Y3QgbnZtZV9hYm9ydF9j bWQgYWJvcnQ7CiAJCXN0cnVjdCBudm1lX2dldF9sb2dfcGFnZV9jb21tYW5kIGdldF9sb2dfcGFn ZTsKIAkJc3RydWN0IG52bWZfY29tbW9uX2NvbW1hbmQgZmFicmljczsKQEAgLTE0MzMsNiArMTUz MiwxOCBAQCBlbnVtIHsKIAlOVk1FX1NDX0RJU0NPVkVSWV9SRVNUQVJUCT0gMHgxOTAsCiAJTlZN RV9TQ19BVVRIX1JFUVVJUkVECQk9IDB4MTkxLAogCisJLyoKKwkgKiBJL08gQ29tbWFuZCBTZXQg U3BlY2lmaWMgLSBab25lZCBjb21tYW5kczoKKwkgKi8KKwlOVk1FX1NDX1pPTkVfQk9VTkRBUllf RVJST1IJPSAweDFiOCwKKwlOVk1FX1NDX1pPTkVfRlVMTAkJPSAweDFiOSwKKwlOVk1FX1NDX1pP TkVfUkVBRF9PTkxZCQk9IDB4MWJhLAorCU5WTUVfU0NfWk9ORV9PRkZMSU5FCQk9IDB4MWJiLAor CU5WTUVfU0NfWk9ORV9JTlZBTElEX1dSSVRFCT0gMHgxYmMsCisJTlZNRV9TQ19aT05FX1RPT19N QU5ZX0FDVElWRQk9IDB4MWJkLAorCU5WTUVfU0NfWk9ORV9UT09fTUFOWV9PUEVOCT0gMHgxYmUs CisJTlZNRV9TQ19aT05FX0lOVkFMSURfVFJBTlNJVElPTgk9IDB4MWJmLAorCiAJLyoKIAkgKiBN ZWRpYSBhbmQgRGF0YSBJbnRlZ3JpdHkgRXJyb3JzOgogCSAqLwotLSAKMi4yNC4xCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbnZtZSBtYWls aW5nIGxpc3QKTGludXgtbnZtZUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbnZtZQo=