From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 219EE2F83C3; Thu, 18 Dec 2025 09:11:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.2 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766049102; cv=none; b=rq+JtpRkZcLG0gli0FwOwlCJzwREXCbhlorZAkwDRk+rdd8hKF46NQp7JGG/EOHBODBwhX6VmzT1AVF2frOrBLt7Wbes4PAnIqwX0F0fhi0wBiywrNMaxil0uqV1uZbR5Zr70vKvUiCsvJl3rTACpwmqU9l4AHUBrK9BA2J0TzM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766049102; c=relaxed/simple; bh=mkuCdz7ZhjZz0oup8x7y+ZbWdUE9yNiTbLVuGJid1Zc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ndk7mOUaH+5i3nP8sY7ZLcoG+0/gqxZL0NZR4WF6bkHHBkiuSxsH0UDTGF++Zp8t3qrvsHM1eCY04ApbCEp6c5gldW0stw93rV/btjvy5W1fcp3UREu470iQPJIHlApEGFgYNumwwKs9I2eKTXkQwCmNzndy9F7dOJKD5QmSdyc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=ooVpGiMY; arc=none smtp.client-ip=220.197.31.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="ooVpGiMY" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=mk uCdz7ZhjZz0oup8x7y+ZbWdUE9yNiTbLVuGJid1Zc=; b=ooVpGiMYZzvaMG9ZOb pjF8AEMf3520/mGjccUd250GL0F9wS4roje9jz2ythKYmIAprU9eD8Zbey5N1MH7 xHrfqxeRcMOTWE5hgd/hSgPIuZJuF7hwMvKMixwtOYUIn0bZMt+3lL5kFh2pEPjv MTFT5M3v6Dd5w1nttpAYzNH1A= Received: from xwm-TianYi510Pro-14IMB.. (unknown []) by gzga-smtp-mtada-g0-4 (Coremail) with SMTP id _____wC3U84cxUNpI7dcBA--.210S6; Thu, 18 Dec 2025 17:10:57 +0800 (CST) From: Xiong Weimin <15927021679@163.com> To: "Michael S . Tsirkin" , David Hildenbrand , Jason Wang , Stefano Garzarella , Thomas Monjalon , David Marchand , Luca Boccassi , Kevin Traynor , Christian Ehrhardt , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Xueming Li , Maxime Coquelin , Chenbo Xia , Bruce Richardson Cc: kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, xiongweimin Subject: [PATCH 04/10] drivers/infiniband/hw/virtio: Implement MR, GID, ucontext and AH resource management verbs Date: Thu, 18 Dec 2025 17:09:44 +0800 Message-ID: <20251218091050.55047-5-15927021679@163.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251218091050.55047-1-15927021679@163.com> References: <20251218091050.55047-1-15927021679@163.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: base64 X-CM-TRANSID:_____wC3U84cxUNpI7dcBA--.210S6 X-Coremail-Antispam: 1Uf129KBjvAXoWfuF15uw1fWFyxtF15XF4xWFg_yoW5Gr1kJo WfuwnxX3W8twn3ZFW8KFWkKFW3Zan7WFn5Jrs8XFs09a9rZ3W5Ga43Kw13J34fGryYkF4x C34fJw1xXrs2qF4rn29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxU7038UUUUU X-CM-SenderInfo: jprvmjixqsilmxzbiqqrwthudrp/xtbC0gKkLWlDxSIFLQAA38 RnJvbTogeGlvbmd3ZWltaW4gPHhpb25nd2VpbWluQGt5bGlub3MuY24+CgpUaGlzIGNvbW1pdCBh ZGRzIGZvdW5kYXRpb25hbCByZXNvdXJjZSBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcyB0byB0aGUK dmhvc3QtdXNlciBSRE1BIGRyaXZlciwgZW5hYmxpbmcgZnVsbCBSRE1BIG9wZXJhdGlvbnM6Cgox LiBNZW1vcnkgUmVnaW9uIChNUikgTWFuYWdlbWVudDoKICAgLSBETUEgTVIgcmVnaXN0cmF0aW9u IHZpYSBHRVRfRE1BX01SCiAgIC0gVHdvLWxldmVsIHBhZ2UgdGFibGUgZm9yIGxhcmdlIHNjYXR0 ZXItZ2F0aGVyIGxpc3RzCiAgIC0gQ1JFQVRFX01SL0RFUkVHX01SIGJhY2tlbmQgY29tbWFuZCBm bG93CiAgIC0gQXRvbWljIGNvbW1hbmQgZXhlY3V0aW9uIHdpdGggdmlydHF1ZXVlCgoyLiBHbG9i YWwgSWRlbnRpZmllciAoR0lEKSBNYW5hZ2VtZW50OgogICAtIEFERF9HSUQvREVMX0dJRCBiYWNr ZW5kIGNvbW1hbmRzCiAgIC0gUm9DRSB2MS92MiBHSUQgdHlwZSBzdXBwb3J0CiAgIC0gUG9ydC1i YXNlZCBHSUQgdGFibGUgb3BlcmF0aW9ucwoKMy4gVXNlciBDb250ZXh0ICh1Y29udGV4dCkgU3Vw cG9ydDoKICAgLSBBbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaG9va3MKICAgLSBEZXZpY2Ug YXNzb2NpYXRpb24gZm9yIGZ1dHVyZSBQRC9DUS9NUiBtYW5hZ2VtZW50Cgo0LiBBZGRyZXNzIEhh bmRsZSAoQUgpIE1hbmFnZW1lbnQ6CiAgIC0gUm9DRS1zcGVjaWZpYyBBSCBjcmVhdGlvbi92YWxp ZGF0aW9uCiAgIC0gVW5pY2FzdCBHUkggZW5mb3JjZW1lbnQKICAgLSBEZXZpY2Utd2lkZSBBSCBs aW1pdCB0cmFja2luZwoKS2V5IHRlY2huaWNhbCBmZWF0dXJlczoKLSBNUnMgc3VwcG9ydCBib3Ro IERNQS1kaXJlY3QgYW5kIHVzZXItYmFja2VkIHJlZ2lzdHJhdGlvbnMKLSBQYWdlLXRhYmxlIG9w dGltaXplZCBmb3IgbGFyZ2Ugc2NhdHRlci1saXN0cwotIEdJRCBvcGVyYXRpb25zIGludGVncmF0 ZSB3aXRoIFJETUEgY29yZSBub3RpZmljYXRpb25zCi0gQUhzIHN0b3JlIGZ1bGwgYWRkcmVzcyB2 ZWN0b3JzIGZvciBwYWNrZXQgY29uc3RydWN0aW9uCi0gUmVzb3VyY2UgbGltaXRzIGVuZm9yY2Vk IHZpYSBhdG9taWMgY291bnRlcnMKClNpZ25lZC1vZmYtYnk6IFhpb25nIFdlaW1pbiA8eGlvbmd3 ZWltaW5Aa3lsaW5vcy5jbj4KLS0tCiAuLi4vaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfZGV2 X2FwaS5oICAgICAgfCAgNDAgKysKIC4uLi9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3Zy ZG1hX2liLmMgICB8IDYwMCArKysrKysrKysrKysrKysrKysKIC4uLi9kcml2ZXJzL2luZmluaWJh bmQvaHcvdmlydGlvL3ZyZG1hX2liLmggICB8ICA4MCArKysKIDMgZmlsZXMgY2hhbmdlZCwgNzIw IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmli YW5kL2h3L3ZpcnRpby92cmRtYV9kZXZfYXBpLmggYi9saW51eC02LjE2LjgvZHJpdmVycy9pbmZp bmliYW5kL2h3L3ZpcnRpby92cmRtYV9kZXZfYXBpLmgKaW5kZXggZDFkYjFiZWE0Li5kYTk5ZjFm MzIgMTAwNjQ0Ci0tLSBhL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlv L3ZyZG1hX2Rldl9hcGkuaAorKysgYi9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3 L3ZpcnRpby92cmRtYV9kZXZfYXBpLmgKQEAgLTE2MCw2ICsxNjAsNDYgQEAgc3RydWN0IHZyZG1h X2NtZF9kZXN0cm95X3FwIHsKICAgICBfX3UzMiBxcG47CiB9OwogCitzdHJ1Y3QgdnJkbWFfY21k X2dldF9kbWFfbXIgeworCV9fdTMyIHBkbjsKKwlfX3UzMiBhY2Nlc3NfZmxhZ3M7Cit9OworCitz dHJ1Y3QgdnJkbWFfcnNwX2dldF9kbWFfbXIgeworCV9fdTMyIG1ybjsKKwlfX3UzMiBsa2V5Owor CV9fdTMyIHJrZXk7Cit9OworCitzdHJ1Y3QgdnJkbWFfY21kX2NyZWF0ZV9tciB7CisJX191MzIg cGRuOworCV9fdTMyIGFjY2Vzc19mbGFnczsKKworCV9fdTMyIG1heF9udW1fc2c7Cit9OworCitz dHJ1Y3QgdnJkbWFfcnNwX2NyZWF0ZV9tciB7CisJX191MzIgbXJuOworCV9fdTMyIGxrZXk7CisJ X191MzIgcmtleTsKK307CisKK3N0cnVjdCB2cmRtYV9jbWRfZGVyZWdfbXIgeworICAgIF9fdTMy IG1ybjsKK307CisKK3N0cnVjdCB2cmRtYV9jbWRfYWRkX2dpZCB7CisJX191OCBnaWRbMTZdOwor CV9fdTMyIGdpZF90eXBlOworCV9fdTE2IGluZGV4OworCV9fdTMyIHBvcnRfbnVtOworfTsKKwor c3RydWN0IHZyZG1hX2NtZF9kZWxfZ2lkIHsKKwlfX3UxNiBpbmRleDsKKwlfX3UzMiBwb3J0X251 bTsKK307CisKICNkZWZpbmUgVlJETUFfQ1RSTF9PSwkwCiAjZGVmaW5lIFZSRE1BX0NUUkxfRVJS CTEKIApkaWZmIC0tZ2l0IGEvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0 aW8vdnJkbWFfaWIuYyBiL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlv L3ZyZG1hX2liLmMKaW5kZXggZjFmNTMzMTRmLi5iNGMxNmRkYmIgMTAwNjQ0Ci0tLSBhL2xpbnV4 LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX2liLmMKKysrIGIvbGlu dXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfaWIuYwpAQCAtMTA4 Niw2ICsxMDg2LDU5NyBAQCBzdGF0aWMgaW50IHZyZG1hX2Rlc3Ryb3lfcXAoc3RydWN0IGliX3Fw ICppYnFwLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogCXJldHVybiByYzsKIH0KIAorLyoqCisg KiB2cmRtYV9nZXRfZG1hX21yIC0gR2V0IGEgRE1BIG1lbW9yeSByZWdpb24gKHVuY2FjaGVkLCBk aXJlY3QtYWNjZXNzIE1SKQorICogQHBkOgkJUHJvdGVjdGlvbiBEb21haW4gdG8gYXNzb2NpYXRl IHRoaXMgTVIgd2l0aAorICogQGZsYWdzOglBY2Nlc3MgcGVybWlzc2lvbnMgKElCX0FDQ0VTU19M T0NBTF9XUklURSwgSUJfQUNDRVNTX1JFTU9URV9SRUFELCBldGMuKQorICoKKyAqIFRoaXMgZnVu Y3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgdHlwZSBvZiBNZW1vcnkgUmVnaW9uIChNUikgdGhhdCBy ZWZlcnMgdG8KKyAqIHBoeXNpY2FsbHkgY29udGlndW91cyBvciBzY2F0dGVyLWdhdGhlciBETUEt Y2FwYWJsZSBtZW1vcnksIHR5cGljYWxseSB1c2VkCisgKiBmb3IgemVyby1jb3B5IG9yIGtlcm5l bC1zcGFjZSByZWdpc3RyYXRpb25zIHdpdGhvdXQgdXNlciBidWZmZXIgYmFja2luZy4KKyAqCisg KiBJdCBpc3N1ZXMgdGhlIFZJUlRJT19SRE1BX0NNRF9HRVRfRE1BX01SIGNvbW1hbmQgdG8gdGhl IGJhY2tlbmQgZGV2aWNlLAorICogd2hpY2ggcmV0dXJuczoKKyAqICAgLSBBbiBNUiBoYW5kbGUg KG1ybikKKyAqICAgLSBMb2NhbCBLZXkgKGxrZXkpCisgKiAgIC0gUmVtb3RlIEtleSAocmtleSkK KyAqCisgKiBVbmxpa2UgcmVndWxhciBNUnMgY3JlYXRlZCB2aWEgaWJfcmVnX21yKCksIHRoaXMg TVIgZG9lcyBub3QgYmFjayBhbnkKKyAqIHVzZXItc3BhY2UgdmlydHVhbCBtZW1vcnkgKGkuZS4s IG5vIGliX3VtZW0pLiBJdCBpcyB0eXBpY2FsbHkgdXNlZCBmb3IKKyAqIGRldmljZS1zcGVjaWZp YyBidWZmZXJzLCBzY3JhdGNoIG1lbW9yeSwgb3IgY29udHJvbCBzdHJ1Y3R1cmVzLgorICoKKyAq IENvbnRleHQ6IENhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQuIE1heSBzbGVlcC4KKyAqIFJldHVy bjoKKyAqICogJm1yLT5pYm1yIG9uIHN1Y2Nlc3MKKyAqICogRVJSX1BUUigtRU5PTUVNKSBpZiBt ZW1vcnkgYWxsb2NhdGlvbiBmYWlscworICogKiBFUlJfUFRSKC1FSU8pIGlmIGRldmljZSBjb21t dW5pY2F0aW9uIGZhaWxzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaWJfbXIgKnZyZG1hX2dldF9kbWFf bXIoc3RydWN0IGliX3BkICpwZCwgaW50IGZsYWdzKQoreworCXN0cnVjdCB2cmRtYV9kZXYgKnZk ZXYgPSB0b192ZGV2KHBkLT5kZXZpY2UpOworCXN0cnVjdCB2cmRtYV9tciAqbXI7CisJc3RydWN0 IHZyZG1hX2NtZF9nZXRfZG1hX21yICpjbWQ7CisJc3RydWN0IHZyZG1hX3JzcF9nZXRfZG1hX21y ICpyc3A7CisJc3RydWN0IHNjYXR0ZXJsaXN0IGluLCBvdXQ7CisJaW50IHJjOworCisJLyogQWxs b2NhdGUgc29mdHdhcmUgTVIgc3RydWN0dXJlICovCisJbXIgPSBremFsbG9jKHNpemVvZigqbXIp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1yKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwor CWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgewor CQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfbXI7CisJfQorCisJcnNwID0ga3phbGxv YyhzaXplb2YoKnJzcCksIEdGUF9LRVJORUwpOworCWlmICghcnNwKSB7CisJCXJjID0gLUVOT01F TTsKKwkJZ290byBlcnJfZnJlZV9jbWQ7CisJfQorCisJLyogUHJlcGFyZSBjb21tYW5kIHBhcmFt ZXRlcnMgKi8KKwljbWQtPnBkbiA9IHRvX3ZwZChwZCktPnBkX2hhbmRsZTsKKwljbWQtPmFjY2Vz c19mbGFncyA9IGZsYWdzOworCisJc2dfaW5pdF9vbmUoJmluLCBjbWQsIHNpemVvZigqY21kKSk7 CisJc2dfaW5pdF9vbmUoJm91dCwgcnNwLCBzaXplb2YoKnJzcCkpOworCisJLyogU2VuZCBHRVRf RE1BX01SIGNvbW1hbmQgdG8gZGV2aWNlICovCisJcmMgPSB2cmRtYV9leGVjX3ZlcmJzX2NtZCh2 ZGV2LCBWSVJUSU9fUkRNQV9DTURfR0VUX0RNQV9NUiwgJmluLCAmb3V0KTsKKwlpZiAocmMpIHsK KwkJZGV2X2VycigmdmRldi0+dmRldi0+ZGV2LAorCQkJIkdFVF9ETUFfTVIgY29tbWFuZCBmYWls ZWQ6ICVkXG4iLCByYyk7CisJCWdvdG8gZXJyX2ZyZWVfcnNwOworCX0KKworCS8qIEluaXRpYWxp emUgTVIgZmllbGRzIGZyb20gcmVzcG9uc2UgKi8KKwltci0+bXJfaGFuZGxlID0gcnNwLT5tcm47 CisJbXItPmlibXIubGtleSA9IHJzcC0+bGtleTsKKwltci0+aWJtci5ya2V5ID0gcnNwLT5ya2V5 OworCW1yLT5pYm1yLnBkID0gcGQ7CisJbXItPmlibXIuZGV2aWNlID0gcGQtPmRldmljZTsKKwlt ci0+aWJtci50eXBlID0gSUJfTVJfVFlQRV9NRU1fUkVHOyAvKiBTdGFuZGFyZCBtZW1vcnkgcmVn aXN0cmF0aW9uICovCisKKwkvKiBObyBiYWNraW5nIHVzZXIgbWVtb3J5ICovCisJbXItPnVtZW0g PSBOVUxMOworCW1yLT5pb3ZhID0gMDsKKwltci0+c2l6ZSA9IDA7CisJbXItPnBhZ2VzID0gTlVM TDsKKwltci0+cGFnZXNfayA9IE5VTEw7CisJbXItPmRtYV9wYWdlcyA9IDA7CisJbXItPm5wYWdl cyA9IDA7CisJbXItPm1heF9wYWdlcyA9IDA7CisKKwkvKiBDbGVhbnVwIGNvbW1hbmQvcmVzcG9u c2UgYnVmZmVycyAqLworCWtmcmVlKGNtZCk7CisJa2ZyZWUocnNwKTsKKworCXJldHVybiAmbXIt PmlibXI7CisKK2Vycl9mcmVlX3JzcDoKKwlrZnJlZShyc3ApOworCitlcnJfZnJlZV9jbWQ6CisJ a2ZyZWUoY21kKTsKKworZXJyX2ZyZWVfbXI6CisJa2ZyZWUobXIpOworCXJldHVybiBFUlJfUFRS KHJjKTsKK30KKworLyoqCisgKiB2cmRtYV9pbml0X3BhZ2VfdGJsIC0gSW5pdGlhbGl6ZSBhIHR3 by1sZXZlbCBwYWdlIHRhYmxlIGZvciBNUiBtYW5hZ2VtZW50CisgKiBAZGV2OgkJdlJETUEgZGV2 aWNlIHBvaW50ZXIKKyAqIEBucGFnZXM6CQlNYXhpbXVtIG51bWJlciBvZiBkYXRhIHBhZ2VzIHRo aXMgdGFibGUgY2FuIG1hcAorICogQHBhZ2VzX2RtYToJCU91dHB1dDogTDEgdGFibGUgd2l0aCBl bnRyaWVzIHBvaW50aW5nIHRvIERNQSBhZGRyZXNzZXMgb2YgTDIgdGFibGVzCisgKiBAZG1hX3Bh Z2VzX3A6CU91dHB1dDogRE1BIGFkZHJlc3Mgb2YgdGhlIEwxIHRhYmxlIGl0c2VsZgorICoKKyAq IFRoaXMgZnVuY3Rpb24gc2V0cyB1cCBhIHR3by1sZXZlbCBwYWdlIHRhYmxlIHN0cnVjdHVyZSB1 c2VkIGluIE1lbW9yeSBSZWdpb24gKE1SKQorICogcmVnaXN0cmF0aW9uIHRvIHN1cHBvcnQgc2Nh dHRlci1nYXRoZXIgSS9PLiBUaGUgbGF5b3V0IGlzOgorICoKKyAqICAgTDEgKExldmVsIDEpOiBT aW5nbGUgcGFnZSwgRE1BLWNvaGVyZW50LCBob2xkcyBwb2ludGVycyB0byBMMiB0YWJsZXMuCisg KiAgICAgICAgICAgICAgICAgV2lsbCBiZSBwYXNzZWQgdG8gaGFyZHdhcmUgdmlhIFdRRSBvciBj b21tYW5kLgorICoKKyAqICAgTDIgKExldmVsIDIpOiBBcnJheSBvZiBwYWdlcywgZWFjaCBob2xk aW5nIHVwIHRvIDUxMiB4IDgtYnl0ZSBETUEgYWRkcmVzc2VzCisgKiAgICAgICAgICAgICAgICAg KGZvciA0S0IgcGFnZSBzaXplKS4gRWFjaCBMMiB0YWJsZSBtYXBzIHBhcnQgb2YgdGhlIFMvRyBs aXN0LgorICoKKyAqIEV4YW1wbGU6CisgKiAgIG5wYWdlcyA9IDEwMjQgID0+IG5lZWRzIDEwMjQg LyA1MTIgPSAyIEwyIHRhYmxlcworICoKKyAqIFJldHVybjoKKyAqICAgUG9pbnRlciB0byBrZXJu ZWwgdmlydHVhbCBhZGRyZXNzIG9mIEwxIHRhYmxlIChwYWdlc19rKSwgd2hpY2ggc3RvcmVzCisg KiAgIHZpcnR1YWwgYWRkcmVzc2VzIG9mIEwyIHRhYmxlcyBmb3IgY2xlYW51cC4KKyAqICAgT24g ZmFpbHVyZSwgcmV0dXJucyBOVUxMIGFuZCBjbGVhbnMgdXAgYWxsIGFsbG9jYXRlZCBtZW1vcnku CisgKi8KK3N0YXRpYyB1aW50NjRfdCAqKnZyZG1hX2luaXRfcGFnZV90Ymwoc3RydWN0IHZyZG1h X2RldiAqZGV2LAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBucGFnZXMsCisJCQkJICAgICAgdWlu dDY0X3QgKioqcGFnZXNfZG1hLAorCQkJCSAgICAgIGRtYV9hZGRyX3QgKmRtYV9wYWdlc19wKQor eworCXVuc2lnbmVkIGludCBubDIgPSAobnBhZ2VzID09IDApID8gMCA6IChucGFnZXMgKyA1MTEp IC8gNTEyOyAvKiBjZWlsKG5wYWdlcyAvIDUxMikgKi8KKwl1aW50NjRfdCAqKmwxX3RhYmxlOyAg ICAgICAgICAgLyogTDE6IHN0b3JlcyBETUEgYWRkcnMgb2YgTDJzIChkZXZpY2UtcmVhZGFibGUp ICovCisJdWludDY0X3QgKipsMV90YWJsZV9rOyAgICAgICAgIC8qIEwxOiBzdG9yZXMga2VybmVs IHZhZGRycyBvZiBMMnMgKGZvciBmcmVlKSAqLworCWRtYV9hZGRyX3QgbDFfZG1hX2FkZHI7CisJ ZG1hX2FkZHJfdCBsMl9kbWFfYWRkcjsKKwlpbnQgaTsKKworCS8qIEFsbG9jYXRlIEwxIHRhYmxl OiBtdXN0IGJlIERNQS1jb2hlcmVudCBiZWNhdXNlIGRldmljZSByZWFkcyBpdCAqLworCWwxX3Rh YmxlID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+dmRldi0+ZGV2LnBhcmVudCwgUEFHRV9TSVpF LCAmbDFfZG1hX2FkZHIsIEdGUF9LRVJORUwpOworCWlmICghbDFfdGFibGUpCisJCXJldHVybiBO VUxMOworCisJLyogQWxsb2NhdGUga2VybmVsLXNwYWNlIGFycmF5IHRvIHRyYWNrIEwyIHZpcnR1 YWwgYWRkcmVzc2VzICovCisJbDFfdGFibGVfayA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWwxX3RhYmxlX2spCisJCWdvdG8gZXJyX2ZyZWVfbDFfdGFibGU7CisKKwkv KiBBbGxvY2F0ZSBlYWNoIEwyIHRhYmxlIChETUEtY29oZXJlbnQsIG9uZSBwZXIgNTEyIGVudHJp ZXMpICovCisJZm9yIChpID0gMDsgaSA8IG5sMjsgaSsrKSB7CisJCWwxX3RhYmxlX2tbaV0gPSBk bWFfYWxsb2NfY29oZXJlbnQoZGV2LT52ZGV2LT5kZXYucGFyZW50LCBQQUdFX1NJWkUsICZsMl9k bWFfYWRkciwgR0ZQX0tFUk5FTCk7CisJCWlmICghbDFfdGFibGVfa1tpXSkKKwkJCWdvdG8gZXJy X2ZyZWVfbDJfdGFibGVzOworCisJCWwxX3RhYmxlW2ldID0gKHVpbnQ2NF90ICopbDJfZG1hX2Fk ZHI7IC8qIERldmljZSBzZWVzIERNQSBhZGRyZXNzICovCisJfQorCisJLyogT3V0cHV0IHBhcmFt ZXRlcnMgKi8KKwkqcGFnZXNfZG1hID0gbDFfdGFibGU7ICAgICAgICAvKiBEZXZpY2UtdmlzaWJs ZSBMMSAod2l0aCBETUEgcG9pbnRlcnMpICovCisJKmRtYV9wYWdlc19wID0gbDFfZG1hX2FkZHI7 ICAgLyogRE1BIGFkZHJlc3Mgb2YgTDEgdGFibGUgKi8KKworCXJldHVybiBsMV90YWJsZV9rOyAv KiBSZXR1cm4ga2VybmVsIHZpZXcgZm9yIGxhdGVyIGNsZWFudXAgKi8KKworZXJyX2ZyZWVfbDJf dGFibGVzOgorCS8qIFJvbGwgYmFjayBhbnkgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBMMiB0YWJs ZXMgKi8KKwl3aGlsZSAoLS1pID49IDApIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT52ZGV2 LT5kZXYucGFyZW50LCBQQUdFX1NJWkUsIGwxX3RhYmxlX2tbaV0sIChkbWFfYWRkcl90KWwxX3Rh YmxlW2ldKTsKKwl9CisJa2ZyZWUobDFfdGFibGVfayk7CisKK2Vycl9mcmVlX2wxX3RhYmxlOgor CWRtYV9mcmVlX2NvaGVyZW50KGRldi0+dmRldi0+ZGV2LnBhcmVudCwgUEFHRV9TSVpFLCBsMV90 YWJsZSwgbDFfZG1hX2FkZHIpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdnJkbWFf ZnJlZV9wYWdlX3RibCAtIEZyZWUgYSB0d28tbGV2ZWwgcGFnZSB0YWJsZQorICogQGRldjoJCXZS RE1BIGRldmljZQorICogQHBhZ2VzX2s6CQlSZXR1cm4gdmFsdWUgZnJvbSB2cmRtYV9pbml0X3Bh Z2VfdGJsIChrZXJuZWwgTDIgcG9pbnRlcnMpCisgKiBAcGFnZXM6CQlMMSB0YWJsZSB3aXRoIERN QSBhZGRyZXNzZXMgKG91dHB1dCBvZiBwYWdlc19kbWEpCisgKiBAZG1hX3BhZ2VzOgkJRE1BIGFk ZHJlc3Mgb2YgTDEgdGFibGUKKyAqIEBucGFnZXM6CQlOdW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJl IHRvIGJlIHN1cHBvcnRlZAorICoKKyAqIEZyZWVzIGJvdGggTDEgYW5kIGFsbCBMMiBwYWdlIHRh YmxlcyBhbGxvY2F0ZWQgYnkgdnJkbWFfaW5pdF9wYWdlX3RibC4KKyAqLworc3RhdGljIHZvaWQg dnJkbWFfZnJlZV9wYWdlX3RibChzdHJ1Y3QgdnJkbWFfZGV2ICpkZXYsCisJCQkJdWludDY0X3Qg KipwYWdlc19rLAorCQkJCXVpbnQ2NF90ICoqcGFnZXMsCisJCQkJZG1hX2FkZHJfdCBkbWFfcGFn ZXMsCisJCQkJdW5zaWduZWQgaW50IG5wYWdlcykKK3sKKwl1bnNpZ25lZCBpbnQgbmwyID0gKG5w YWdlcyA9PSAwKSA/IDAgOiAobnBhZ2VzICsgNTExKSAvIDUxMjsKKwlpbnQgaTsKKworCWlmICgh cGFnZXNfayB8fCAhcGFnZXMpCisJCXJldHVybjsKKworCS8qIEZyZWUgYWxsIEwyIHRhYmxlcyAq LworCWZvciAoaSA9IDA7IGkgPCBubDI7IGkrKykgeworCQlpZiAocGFnZXNfa1tpXSkKKwkJCWRt YV9mcmVlX2NvaGVyZW50KGRldi0+dmRldi0+ZGV2LnBhcmVudCwgUEFHRV9TSVpFLCBwYWdlc19r W2ldLAorCQkJCQkgIHZpcnRfdG9fcGh5cygodm9pZCAqKXBhZ2VzW2ldKSk7CisJfQorCisJLyog RnJlZSBMMSB0cmFja2luZyBhcnJheSAqLworCWtmcmVlKHBhZ2VzX2spOworCisJLyogRnJlZSBM MSBETUEgdGFibGUgKi8KKwlkbWFfZnJlZV9jb2hlcmVudChkZXYtPnZkZXYtPmRldi5wYXJlbnQs IFBBR0VfU0laRSwgcGFnZXMsIGRtYV9wYWdlcyk7Cit9CisKKy8qKgorICogdnJkbWFfYWxsb2Nf bXIgLSBBbGxvY2F0ZSBhIG11bHRpLXNlZ21lbnQgTWVtb3J5IFJlZ2lvbiAoTVIpIHdpdGggcGFn ZSB0YWJsZXMKKyAqIEBwZDoJCVByb3RlY3Rpb24gRG9tYWluIHRvIGFzc29jaWF0ZSB0aGUgTVIg d2l0aAorICogQG1yX3R5cGU6CVR5cGUgb2YgTVIgKG11c3QgYmUgSUJfTVJfVFlQRV9NRU1fUkVH KQorICogQG1heF9udW1fc2c6CU1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyIGVudHJp ZXMgc3VwcG9ydGVkIGJ5IHRoaXMgTVIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBh IHNvZnR3YXJlIE1SIHN0cnVjdHVyZSBhbmQgcmVzZXJ2ZXMgYSBoYXJkd2FyZSBNUgorICogY29u dGV4dCBvbiB0aGUgYmFja2VuZCB2UkRNQSBkZXZpY2UuIEl0IHByZXBhcmVzIGEgdHdvLWxldmVs IHBhZ2UgdGFibGUKKyAqIChMMS9MMikgdG8gc3VwcG9ydCB1cCB0byBAbWF4X251bV9zZyBwYWdl cywgd2hpY2ggd2lsbCBsYXRlciBiZSBmaWxsZWQgZHVyaW5nCisgKiBtZW1vcnkgcmVnaXN0cmF0 aW9uIChlLmcuLCB2aWEgaWJfdXBkYXRlX3BhZ2UoKSkuCisgKgorICogVGhlIGFsbG9jYXRlZCBN UiBpcyBub3QgeWV0IGJhY2tlZCBieSBhbnkgYWN0dWFsIG1lbW9yeSAtIGl0IHNlcnZlcyBhcyBh CisgKiBjb250YWluZXIgZm9yIGZ1dHVyZSBwYWdlIHBvcHVsYXRpb24gKHVzZWQgcHJpbWFyaWx5 IGJ5IGliX2dldF9kbWFfbXIoKSBwYXRoCisgKiBvciBzcGVjaWFsIGZhc3QtcmVnaXN0ZXIgbWVj aGFuaXNtcykuCisgKgorICogQ29tbWFuZCBmbG93OgorICogICAtIFNlbmRzIFZJUlRJT19SRE1B X0NNRF9DUkVBVEVfTVIgdG8gZGV2aWNlCisgKiAgIC0gUmVjZWl2ZXMgbXJfaGFuZGxlLCBsa2V5 LCBya2V5IGZyb20gcmVzcG9uc2UKKyAqCisgKiBDb250ZXh0OiBDYWxsZWQgaW4gcHJvY2VzcyBj b250ZXh0LiBNYXkgc2xlZXAuCisgKiBSZXR1cm46CisgKiAqICZtci0+aWJtciBvbiBzdWNjZXNz CisgKiAqIEVSUl9QVFIoLUVJTlZBTCkgaWYgdW5zdXBwb3J0ZWQgTVIgdHlwZQorICogKiBFUlJf UFRSKC1FTk9NRU0pIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzCisgKiAqIEVSUl9QVFIoLUVJ TykgaWYgZGV2aWNlIGNvbW1hbmQgZmFpbHMKKyAqLworc3RhdGljIHN0cnVjdCBpYl9tciAqdnJk bWFfYWxsb2NfbXIoc3RydWN0IGliX3BkICpwZCwKKwkJCQkgICAgZW51bSBpYl9tcl90eXBlIG1y X3R5cGUsCisJCQkJICAgIHUzMiBtYXhfbnVtX3NnKQoreworCXN0cnVjdCB2cmRtYV9kZXYgKnZk ZXYgPSB0b192ZGV2KHBkLT5kZXZpY2UpOworCXN0cnVjdCB2cmRtYV9tciAqbXI7CisJc3RydWN0 IHZyZG1hX2NtZF9jcmVhdGVfbXIgKmNtZDsKKwlzdHJ1Y3QgdnJkbWFfcnNwX2NyZWF0ZV9tciAq cnNwOworCXN0cnVjdCBzY2F0dGVybGlzdCBpbiwgb3V0OworCWludCByYzsKKworCS8qIE9ubHkg c3VwcG9ydCBzdGFuZGFyZCBtZW1vcnkgcmVnaXN0cmF0aW9uICovCisJaWYgKG1yX3R5cGUgIT0g SUJfTVJfVFlQRV9NRU1fUkVHKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIEFs bG9jYXRlIHNvZnR3YXJlIE1SIHN0cnVjdHVyZSAqLworCW1yID0ga3phbGxvYyhzaXplb2YoKm1y KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisK KwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpIHsK KwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21yOworCX0KKworCXJzcCA9IGt6YWxs b2Moc2l6ZW9mKCpyc3ApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJzcCkgeworCQlyYyA9IC1FTk9N RU07CisJCWdvdG8gZXJyX2ZyZWVfY21kOworCX0KKworCS8qCisJICogQWxsb2NhdGUgdHdvLWxl dmVsIHBhZ2UgdGFibGUgZm9yIFMvRyBzdXBwb3J0LgorCSAqIEVhY2ggTDIgdGFibGUgaG9sZHMg UEFHRV9TSVpFIC8gc2l6ZW9mKHU2NCkgZW50cmllcy4KKwkgKiBMMSB0YWJsZSBwb2ludHMgdG8g bXVsdGlwbGUgTDJzLgorCSAqLworCW1yLT5wYWdlc19rID0gdnJkbWFfaW5pdF9wYWdlX3RibCh2 ZGV2LCBtYXhfbnVtX3NnLAorCQkJCQkJJm1yLT5wYWdlcywgJm1yLT5kbWFfcGFnZXMpOworCWlm ICghbXItPnBhZ2VzX2spIHsKKwkJZGV2X2VycigmdmRldi0+dmRldi0+ZGV2LAorCQkJIkZhaWxl ZCB0byBhbGxvY2F0ZSBwYWdlIHRhYmxlIGZvciAldSBTL0cgZW50cmllc1xuIiwKKwkJCW1heF9u dW1fc2cpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfcnNwOworCX0KKworCW1y LT5tYXhfcGFnZXMgPSBtYXhfbnVtX3NnOworCW1yLT5ucGFnZXMgPSAwOworCW1yLT51bWVtID0g TlVMTDsgLyogTm8gdXNlciBtZW1vcnkgYmFja2luZyBhdCB0aGlzIHN0YWdlICovCisJbXItPmlv dmEgPSAwOworCW1yLT5zaXplID0gMDsKKworCS8qIFByZXBhcmUgY29tbWFuZCAqLworCWNtZC0+ cGRuID0gdG9fdnBkKHBkKS0+cGRfaGFuZGxlOworCWNtZC0+bWF4X251bV9zZyA9IG1heF9udW1f c2c7CisKKwlzZ19pbml0X29uZSgmaW4sIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwlzZ19pbml0X29u ZSgmb3V0LCByc3AsIHNpemVvZigqcnNwKSk7CisKKwkvKiBTZW5kIENSRUFURV9NUiBjb21tYW5k IHRvIGJhY2tlbmQgZGV2aWNlICovCisJcmMgPSB2cmRtYV9leGVjX3ZlcmJzX2NtZCh2ZGV2LCBW SVJUSU9fUkRNQV9DTURfQ1JFQVRFX01SLCAmaW4sICZvdXQpOworCWlmIChyYykgeworCQlkZXZf ZXJyKCZ2ZGV2LT52ZGV2LT5kZXYsICJDUkVBVEVfTVIgZmFpbGVkOiAlZFxuIiwgcmMpOworCQln b3RvIGVycl9mcmVlX3BhZ2VfdGJsOworCX0KKworCS8qIEluaXRpYWxpemUgTVIgbWV0YWRhdGEg ZnJvbSByZXNwb25zZSAqLworCW1yLT5tcl9oYW5kbGUgPSByc3AtPm1ybjsKKwltci0+aWJtci5s a2V5ID0gcnNwLT5sa2V5OworCW1yLT5pYm1yLnJrZXkgPSByc3AtPnJrZXk7CisJbXItPmlibXIu cGQgPSBwZDsKKwltci0+aWJtci5kZXZpY2UgPSAmdmRldi0+aWJfZGV2OworCW1yLT5pYm1yLnR5 cGUgPSBJQl9NUl9UWVBFX01FTV9SRUc7CisKKwkvKiBDbGVhbiB1cCBjb21tYW5kL3Jlc3BvbnNl IGJ1ZmZlcnMgKi8KKwlrZnJlZShjbWQpOworCWtmcmVlKHJzcCk7CisKKwlyZXR1cm4gJm1yLT5p Ym1yOworCitlcnJfZnJlZV9wYWdlX3RibDoKKwl2cmRtYV9mcmVlX3BhZ2VfdGJsKHZkZXYsIG1y LT5wYWdlc19rLCBtci0+cGFnZXMsIG1yLT5kbWFfcGFnZXMsCisJCQkJICBtYXhfbnVtX3NnKTsK K2Vycl9mcmVlX3JzcDoKKwlrZnJlZShyc3ApOworZXJyX2ZyZWVfY21kOgorCWtmcmVlKGNtZCk7 CitlcnJfZnJlZV9tcjoKKwlrZnJlZShtcik7CisJcmV0dXJuIEVSUl9QVFIocmMpOworfQorCisv KioKKyAqIHZyZG1hX2RlcmVnX21yIC0gRGVyZWdpc3RlciBhbmQgZGVzdHJveSBhIE1lbW9yeSBS ZWdpb24gKE1SKQorICogQGlibXI6CVRoZSBJQiBtZW1vcnkgcmVnaW9uIHRvIGRlcmVnaXN0ZXIK KyAqIEB1ZGF0YToJVXNlciBkYXRhIChvcHRpb25hbCwgZm9yIHVzZXItc3BhY2UgTVJzKQorICoK KyAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBNUiBm cm9tIHRoZSB2UkRNQSBkZXZpY2UuCisgKiBJdCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBz OgorICogICAxLiBTZW5kcyBWSVJUSU9fUkRNQV9DTURfREVSRUdfTVIgY29tbWFuZCB0byB0aGUg YmFja2VuZCBkZXZpY2UKKyAqICAgMi4gRnJlZXMgc29mdHdhcmUgcGFnZSB0YWJsZXMgKEwxL0wy KSB1c2VkIGZvciBzY2F0dGVyLWdhdGhlciBtYXBwaW5nCisgKiAgIDMuIFJlbGVhc2VzIHVzZXIg bWVtb3J5IChpZiBhbnkpIHZpYSBpYl91bWVtX3JlbGVhc2UoKQorICogICA0LiBGcmVlcyBsb2Nh bCBtZXRhZGF0YSAoc3RydWN0IHZyZG1hX21yKQorICoKKyAqIENvbnRleHQ6IENhbiBiZSBjYWxs ZWQgaW4gcHJvY2VzcyBjb250ZXh0LiBNYXkgc2xlZXAuCisgKiBSZXR1cm46CisgKiAqIDAgb24g c3VjY2VzcworICogKiAtRUlPIGlmIGRldmljZSBjb21tdW5pY2F0aW9uIGZhaWxzCisgKiAqIE90 aGVyIG5lZ2F0aXZlIGVycm5vIGNvZGVzIG9uIGFsbG9jYXRpb24gZmFpbHVyZSAocmFyZSBkdXJp bmcgZGVyZWcpCisgKi8KK3N0YXRpYyBpbnQgdnJkbWFfZGVyZWdfbXIoc3RydWN0IGliX21yICpp Ym1yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCB2cmRtYV9kZXYgKnZkZXYg PSB0b192ZGV2KGlibXItPmRldmljZSk7CisJc3RydWN0IHZyZG1hX21yICptciA9IHRvX3Ztcihp Ym1yKTsKKwlzdHJ1Y3QgdnJkbWFfY21kX2RlcmVnX21yICpjbWQ7CisJc3RydWN0IHNjYXR0ZXJs aXN0IGluOworCWludCByYzsKKworCS8qIEFsbG9jYXRlIGNvbW1hbmQgYnVmZmVyICovCisJY21k ID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCS8qIFByZXBhcmUgY29tbWFuZCAqLworCWNtZC0+bXJuID0gbXItPm1y X2hhbmRsZTsKKwlzZ19pbml0X29uZSgmaW4sIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKworCS8qIE5v dGlmeSBoYXJkd2FyZSB0byByZWxlYXNlIE1SIGNvbnRleHQgKi8KKwlyYyA9IHZyZG1hX2V4ZWNf dmVyYnNfY21kKHZkZXYsIFZJUlRJT19SRE1BX0NNRF9ERVJFR19NUiwgJmluLCBOVUxMKTsKKwlp ZiAocmMpIHsKKwkJZGV2X2VycigmdmRldi0+dmRldi0+ZGV2LAorCQkJIlZJUlRJT19SRE1BX0NN RF9ERVJFR19NUiBmYWlsZWQgZm9yIG1ybj0weCV4LCBlcnI9JWRcbiIsCisJCQltci0+bXJfaGFu ZGxlLCByYyk7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXRfZnJlZV9jbWQ7CisJfQorCisJLyog RnJlZSB0d28tbGV2ZWwgcGFnZSB0YWJsZSB1c2VkIGZvciBTL0cgZW50cmllcyAqLworCXZyZG1h X2ZyZWVfcGFnZV90YmwodmRldiwgbXItPnBhZ2VzX2ssIG1yLT5wYWdlcywgbXItPmRtYV9wYWdl cywgbXItPm1heF9wYWdlcyk7CisKKwkvKiBSZWxlYXNlIHVzZXIgbWVtb3J5IGlmIHByZXNlbnQg Ki8KKwlpZiAobXItPnVtZW0pCisJCWliX3VtZW1fcmVsZWFzZShtci0+dW1lbSk7CisKKwkvKiBT dWNjZXNzICovCisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfY21kOgorCWtm cmVlKGNtZCk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHZyZG1hX2FkZF9naWQgLSBBZGQg YSBHSUQgKEdsb2JhbCBJZGVudGlmaWVyKSBlbnRyeSB0byB0aGUgaGFyZHdhcmUKKyAqIEBhdHRy OglHSUQgYXR0cmlidXRlIGNvbnRhaW5pbmcgcG9ydCwgaW5kZXgsIEdJRCB2YWx1ZSwgYW5kIEdJ RCB0eXBlCisgKiBAY29udGV4dDoJUG9pbnRlciB0byBzdG9yZSBkcml2ZXItc3BlY2lmaWMgY29u dGV4dCAodW51c2VkIGluIHZSRE1BKQorICoKKyAqIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCBi eSB0aGUgUkRNQSBjb3JlIHdoZW4gYSBHSUQgdGFibGUgZW50cnkgaXMgYWRkZWQsCisgKiBlaXRo ZXIgbWFudWFsbHkgdmlhIHN5c2ZzIG9yIGF1dG9tYXRpY2FsbHkgZHVyaW5nIElQdjYgYWRkcmVz cyBhc3NpZ25tZW50LgorICoKKyAqIFRoZSBmdW5jdGlvbiBzZW5kcyBWSVJUSU9fUkRNQV9DTURf QUREX0dJRCB0byB0aGUgYmFja2VuZCBkZXZpY2UgdG8gcmVnaXN0ZXIKKyAqIHRoZSBHSUQgYXQg dGhlIHNwZWNpZmllZCBpbmRleCBhbmQgcG9ydC4gVGhpcyBhbGxvd3MgdGhlIGRldmljZSB0byB1 c2UgdGhpcworICogR0lEIGZvciBSb0NFIHRyYWZmaWMgKGUuZy4sIGFzIHNvdXJjZSBpbiBHUkgp LgorICoKKyAqIE5vdGU6IFRoZSBAY29udGV4dCBwYXJhbWV0ZXIgaXMgdW51c2VkIGluIHZSRE1B IGRyaXZlcnMgc2luY2Ugbm8gYWRkaXRpb25hbAorICogcGVyLUdJRCBzb2Z0d2FyZSBzdGF0ZSBp cyBtYWludGFpbmVkLgorICoKKyAqIENvbnRleHQ6IENhbiBzbGVlcCAoY2FsbGVkIGluIHByb2Nl c3MgY29udGV4dCkuCisgKiBSZXR1cm46CisgKiAqIDAgb24gc3VjY2VzcworICogKiAtRU5PTUVN IGlmIGttYWxsb2MgZmFpbHMKKyAqICogLUVJTyBpZiBkZXZpY2UgY29tbWFuZCBmYWlscworICov CitzdGF0aWMgaW50IHZyZG1hX2FkZF9naWQoY29uc3Qgc3RydWN0IGliX2dpZF9hdHRyICphdHRy LCB2b2lkICoqY29udGV4dCkKK3sKKwlzdHJ1Y3QgdnJkbWFfZGV2ICp2ZGV2ID0gdG9fdmRldihh dHRyLT5kZXZpY2UpOworCXN0cnVjdCB2cmRtYV9jbWRfYWRkX2dpZCAqY21kOworCXN0cnVjdCBz Y2F0dGVybGlzdCBpbjsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogRmlsbCBj b21tYW5kIHBhcmFtZXRlcnMgKi8KKwltZW1jcHkoY21kLT5naWQsIGF0dHItPmdpZC5yYXcsIHNp emVvZihjbWQtPmdpZCkpOworCWNtZC0+aW5kZXggPSBhdHRyLT5pbmRleDsKKwljbWQtPnBvcnRf bnVtID0gYXR0ci0+cG9ydF9udW07CisJY21kLT5naWRfdHlwZSA9IGF0dHItPmdpZF90eXBlOyAv KiBlLmcuLCBJQl9HSURfVFlQRV9ST0NFIG9yIElCX0dJRF9UWVBFX1JPQ0VfVURQX0VOQ0FQICov CisKKwlzZ19pbml0X29uZSgmaW4sIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKworCS8qIFNlbmQgY29t bWFuZCB0byBiYWNrZW5kICovCisJcmMgPSB2cmRtYV9leGVjX3ZlcmJzX2NtZCh2ZGV2LCBWSVJU SU9fUkRNQV9DTURfQUREX0dJRCwgJmluLCBOVUxMKTsKKwlpZiAocmMpCisJCWRldl9lcnIoJnZk ZXYtPnZkZXYtPmRldiwKKwkJCSJBRERfR0lEIGZhaWxlZDogcG9ydD0ldSBpbmRleD0ldSB0eXBl PSVkLCBlcnI9JWRcbiIsCisJCQlhdHRyLT5wb3J0X251bSwgYXR0ci0+aW5kZXgsIGF0dHItPmdp ZF90eXBlLCByYyk7CisKKwlrZnJlZShjbWQpOworCXJldHVybiByYyA/IC1FSU8gOiAwOworfQor CisvKioKKyAqIHZyZG1hX2RlbF9naWQgLSBSZW1vdmUgYSBHSUQgZW50cnkgZnJvbSB0aGUgaGFy ZHdhcmUKKyAqIEBhdHRyOglHSUQgYXR0cmlidXRlIHNwZWNpZnlpbmcgd2hpY2ggR0lEIHRvIGRl bGV0ZSAoYnkgaW5kZXgvcG9ydCkKKyAqIEBjb250ZXh0OglEcml2ZXItc3BlY2lmaWMgY29udGV4 dCAocGFzc2VkIGZyb20gYWRkX2dpZDsgdW51c2VkIGhlcmUpCisgKgorICogVGhpcyBjYWxsYmFj ayBpcyBjYWxsZWQgd2hlbiBhIEdJRCBpcyByZW1vdmVkIGZyb20gdGhlIEdJRCB0YWJsZS4KKyAq IEl0IG5vdGlmaWVzIHRoZSBiYWNrZW5kIGRldmljZSB0byBpbnZhbGlkYXRlIHRoZSBHSUQgbWFw cGluZyBhdCB0aGUgZ2l2ZW4gaW5kZXguCisgKgorICogVGhlIEBjb250ZXh0IHBvaW50ZXIgaXMg aWdub3JlZCBiZWNhdXNlIHZSRE1BIGRvZXMgbm90IG1haW50YWluIHBlci1HSUQgc29mdHdhcmUg c3RhdGUuCisgKgorICogQ29udGV4dDogQ2FuIHNsZWVwIChwcm9jZXNzIGNvbnRleHQpLgorICog UmV0dXJuOgorICogKiAwIG9uIHN1Y2Nlc3MKKyAqICogLUVOT01FTSBpZiBhbGxvY2F0aW9uIGZh aWxzCisgKiAqIC1FSU8gaWYgZGV2aWNlIGNvbW1hbmQgZmFpbHMKKyAqLworc3RhdGljIGludCB2 cmRtYV9kZWxfZ2lkKGNvbnN0IHN0cnVjdCBpYl9naWRfYXR0ciAqYXR0ciwgdm9pZCAqKmNvbnRl eHQpCit7CisJc3RydWN0IHZyZG1hX2RldiAqdmRldiA9IHRvX3ZkZXYoYXR0ci0+ZGV2aWNlKTsK KwlzdHJ1Y3QgdnJkbWFfY21kX2RlbF9naWQgKmNtZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgaW47 CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwor CWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIE9ubHkgaW5kZXggYW5kIHBvcnQg YXJlIG5lZWRlZCB0byBpZGVudGlmeSB0aGUgR0lEICovCisJY21kLT5pbmRleCA9IGF0dHItPmlu ZGV4OworCWNtZC0+cG9ydF9udW0gPSBhdHRyLT5wb3J0X251bTsKKworCXNnX2luaXRfb25lKCZp biwgY21kLCBzaXplb2YoKmNtZCkpOworCisJLyogU2VuZCBjb21tYW5kIHRvIGJhY2tlbmQgKi8K KwlyYyA9IHZyZG1hX2V4ZWNfdmVyYnNfY21kKHZkZXYsIFZJUlRJT19SRE1BX0NNRF9ERUxfR0lE LCAmaW4sIE5VTEwpOworCWlmIChyYykKKwkJZGV2X2VycigmdmRldi0+dmRldi0+ZGV2LAorCQkJ IkRFTF9HSUQgZmFpbGVkOiBwb3J0PSV1IGluZGV4PSV1LCBlcnI9JWRcbiIsCisJCQlhdHRyLT5w b3J0X251bSwgYXR0ci0+aW5kZXgsIHJjKTsKKworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJjID8g LUVJTyA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdnJkbWFfYWxsb2NfdWNvbnRleHQoc3RydWN0IGli X3Vjb250ZXh0ICp1Y3R4LCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCB2cmRt YV91Y29udGV4dCAqdnVjID0gdG9fdnVjb250ZXh0KHVjdHgpOworCQorCXZ1Yy0+ZGV2ID0gdG9f dmRldih1Y3R4LT5kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZyZG1h X2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYmNvbnRleHQpCit7Cit9CisK Ky8qKgorICogdnJkbWFfY3JlYXRlX2FoIC0gQ3JlYXRlIGFuIEFkZHJlc3MgSGFuZGxlIChBSCkg Zm9yIFJvQ0UgY29tbXVuaWNhdGlvbgorICogQGliYWg6CUlCIGFkZHJlc3MgaGFuZGxlIHRvIGlu aXRpYWxpemUKKyAqIEBpbml0X2F0dHI6CUFIIGluaXRpYWxpemF0aW9uIGF0dHJpYnV0ZXMKKyAq IEB1ZGF0YToJVXNlciBkYXRhICh1bnVzZWQgaW4gdlJETUEpCisgKgorICogVGhpcyBmdW5jdGlv biBjcmVhdGVzIGEgc29mdHdhcmUtb25seSBBZGRyZXNzIEhhbmRsZSAoQUgpLCB3aGljaCByZXBy ZXNlbnRzCisgKiBhIHJlbW90ZSBkZXN0aW5hdGlvbiBmb3IgVUQgb3IgUkMgUVAgc2VuZHMuIFNp bmNlIHRoaXMgaXMgYSB2aXJ0dWFsaXplZCBkcml2ZXIsCisgKiBubyBoYXJkd2FyZSBjb21tYW5k IGlzIHNlbnQ7IGluc3RlYWQsIHRoZSBBSCBjb250ZXh0IGlzIHN0b3JlZCBsb2NhbGx5IGluCisg KiBzdHJ1Y3QgdnJkbWFfYWggZm9yIGxhdGVyIHVzZSBkdXJpbmcgcGFja2V0IGNvbnN0cnVjdGlv bi4KKyAqCisgKiBUaGUgQUggbXVzdDoKKyAqICAgLSBCZSBSb0NFIHR5cGUKKyAqICAgLSBDb250 YWluIEdSSCAoR2xvYmFsIFJvdXRpbmcgSGVhZGVyKQorICogICAtIE5vdCBiZSBtdWx0aWNhc3Qg KGN1cnJlbnRseSB1bnN1cHBvcnRlZCkKKyAqCisgKiBBbHNvIGVuZm9yY2VzIGRldmljZSBsaW1p dCBvbiBtYXhpbXVtIG51bWJlciBvZiBhY3RpdmUgQUhzIHZpYSBhdG9taWMgY291bnRlci4KKyAq CisgKiBDb250ZXh0OiBDYW4gc2xlZXAgKGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQpLgorICog UmV0dXJuOgorICogKiAwIG9uIHN1Y2Nlc3MKKyAqICogLUVJTlZBTCBpZiBhdHRyaWJ1dGVzIGFy ZSBpbnZhbGlkCisgKiAqIC1FTk9NRU0gaWYgQUggbGltaXQgZXhjZWVkZWQKKyAqLworc3RhdGlj IGludCB2cmRtYV9jcmVhdGVfYWgoc3RydWN0IGliX2FoICppYmFoLAorCQkJICAgc3RydWN0IHJk bWFfYWhfaW5pdF9hdHRyICppbml0X2F0dHIsCisJCQkgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRh KQoreworCXN0cnVjdCB2cmRtYV9kZXYgKnZkZXYgPSB0b192ZGV2KGliYWgtPmRldmljZSk7CisJ c3RydWN0IHZyZG1hX2FoICphaCA9IHRvX3ZhaChpYmFoKTsKKwljb25zdCBzdHJ1Y3QgaWJfZ2xv YmFsX3JvdXRlICpncmg7CisJdTMyIHBvcnRfbnVtID0gcmRtYV9haF9nZXRfcG9ydF9udW0oaW5p dF9hdHRyLT5haF9hdHRyKTsKKworCS8qIE11c3QgaGF2ZSBHUkggZW5hYmxlZCAqLworCWlmICgh KHJkbWFfYWhfZ2V0X2FoX2ZsYWdzKGluaXRfYXR0ci0+YWhfYXR0cikgJiBJQl9BSF9HUkgpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWdyaCA9IHJkbWFfYWhfcmVhZF9ncmgoaW5pdF9hdHRyLT5h aF9hdHRyKTsKKworCS8qIE9ubHkgc3VwcG9ydCBSb0NFIHR5cGUgYW5kIHVuaWNhc3QgREdSQU0g Ki8KKwlpZiAoaW5pdF9hdHRyLT5haF9hdHRyLT50eXBlICE9IFJETUFfQUhfQVRUUl9UWVBFX1JP Q0UpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJkbWFfaXNfbXVsdGljYXN0X2FkZHIoKHN0 cnVjdCBpbjZfYWRkciAqKWdyaC0+ZGdpZC5yYXcpKSB7CisJCWRldl9kYmcoJnZkZXYtPnZkZXYt PmRldiwgIk11bHRpY2FzdCBHSUQgbm90IHN1cHBvcnRlZCBpbiBBSFxuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCS8qIEVuZm9yY2UgbWF4X2FoIGxpbWl0IHVzaW5nIGF0b21pYyBpbmNy ZW1lbnQgd2l0aCBiYXJyaWVyICovCisJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmdmRldi0+bnVt X2FoLCAxLCB2ZGV2LT5pYl9kZXYuYXR0cnMubWF4X2FoKSkgeworCQlkZXZfZGJnKCZ2ZGV2LT52 ZGV2LT5kZXYsICJFeGNlZWRlZCBtYXggbnVtYmVyIG9mIEFIcyAoJXUpXG4iLAorCQkJdmRldi0+ aWJfZGV2LmF0dHJzLm1heF9haCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEluaXRp YWxpemUgQVYgKEFkZHJlc3MgVmVjdG9yKSB3aXRoIHJlbGV2YW50IGZpZWxkcyAqLworCWFoLT5h di5wb3J0ID0gcG9ydF9udW07CisJYWgtPmF2LnBkbiA9IHRvX3ZwZChpYmFoLT5wZCktPnBkX2hh bmRsZTsgICAgICAgICAvKiBQcm90ZWN0aW9uIERvbWFpbiBOdW1iZXIgKi8KKwlhaC0+YXYuZ2lk X2luZGV4ID0gZ3JoLT5zZ2lkX2luZGV4OyAgICAgICAgICAgICAgIC8qIFNvdXJjZSBHSUQgdGFi bGUgaW5kZXggKi8KKwlhaC0+YXYuaG9wX2xpbWl0ID0gZ3JoLT5ob3BfbGltaXQ7CisJYWgtPmF2 LnNsX3RjbGFzc19mbG93bGFiZWwgPSAodTMyKShncmgtPnRyYWZmaWNfY2xhc3MgPDwgMjApIHwK KwkJCQkgICAgICAoZ3JoLT5mbG93X2xhYmVsICYgMHhmZmZmZik7IC8qIDgtYml0IFNMICsgMjAt Yml0IGZsb3cgbGFiZWwgKi8KKworCW1lbWNweShhaC0+YXYuZGdpZCwgZ3JoLT5kZ2lkLnJhdywg c2l6ZW9mKGFoLT5hdi5kZ2lkKSk7ICAgICAgICAvKiAxMjgtYml0IERlc3QgR0lEICovCisJbWVt Y3B5KGFoLT5hdi5kbWFjLCBpbml0X2F0dHItPmFoX2F0dHItPnJvY2UuZG1hYywgRVRIX0FMRU4p OyAgICAvKiBOZXh0LWhvcCBNQUMgKi8KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZyZG1h X2Rlc3Ryb3lfYWggLSBEZXN0cm95IGFuIEFkZHJlc3MgSGFuZGxlCisgKiBAaWJhaDoJVGhlIElC IGFkZHJlc3MgaGFuZGxlIHRvIGRlc3Ryb3kKKyAqIEBmbGFnczoJRGVzdHJveSBmbGFncyAoZS5n LiwgZm9yIGRlZmVycmVkIGNsZWFudXA7IHVudXNlZCBoZXJlKQorICoKKyAqIFRoaXMgY2FsbGJh Y2sgcmVsZWFzZXMgdGhlIHNvZnR3YXJlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhbiBBSC4KKyAq IEl0IGRlY3JlbWVudHMgdGhlIHBlci1kZXZpY2UgQUggY291bnRlciB0byBhbGxvdyBuZXcgQUgg Y3JlYXRpb24uCisgKgorICogTm8gaGFyZHdhcmUgaW50ZXJhY3Rpb24gaXMgbmVlZGVkIHNpbmNl IEFIcyBhcmUgcHVyZWx5IHNvZnR3YXJlIGNvbnN0cnVjdHMKKyAqIGluIHRoaXMgdmlydGlvLXJk bWEgaW1wbGVtZW50YXRpb24uCisgKgorICogQ29udGV4dDogQ2FuIHNsZWVwIChwcm9jZXNzIGNv bnRleHQpLiBNYXkgYmUgY2FsbGVkIGZyb20gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9u LgorICogUmV0dXJuOiBBbHdheXMgcmV0dXJucyAwIChzdWNjZXNzKS4KKyAqLworc3RhdGljIGlu dCB2cmRtYV9kZXN0cm95X2FoKHN0cnVjdCBpYl9haCAqaWJhaCwgdTMyIGZsYWdzKQoreworCXN0 cnVjdCB2cmRtYV9kZXYgKnZkZXYgPSB0b192ZGV2KGliYWgtPmRldmljZSk7CisKKwlhdG9taWNf ZGVjKCZ2ZGV2LT5udW1fYWgpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgaWJfZGV2aWNlX29wcyB2cmRtYV9kZXZfb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxF LAogCS51dmVyYnNfYWJpX3ZlciA9IFZJUlRJT19SRE1BX0FCSV9WRVJTSU9OLApAQCAtMTEwMSw2 ICsxNjkyLDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyB2cmRtYV9kZXZf b3BzID0gewogCS5kZWFsbG9jX3BkID0gdnJkbWFfZGVhbGxvY19wZCwKIAkuY3JlYXRlX3FwID0g dnJkbWFfY3JlYXRlX3FwLAogCS5kZXN0cm95X3FwID0gdnJkbWFfZGVzdHJveV9xcCwKKwkuZ2V0 X2RtYV9tciA9IHZyZG1hX2dldF9kbWFfbXIsCisJLmFsbG9jX21yID0gdnJkbWFfYWxsb2NfbXIs CisJLmRlcmVnX21yID0gdnJkbWFfZGVyZWdfbXIsCisJLmFkZF9naWQgPSB2cmRtYV9hZGRfZ2lk LAorCS5kZWxfZ2lkID0gdnJkbWFfZGVsX2dpZCwKKwkuYWxsb2NfdWNvbnRleHQgPSB2cmRtYV9h bGxvY191Y29udGV4dCwKKwkuZGVhbGxvY191Y29udGV4dCA9IHZyZG1hX2RlYWxsb2NfdWNvbnRl eHQsCisJLmNyZWF0ZV9haCA9IHZyZG1hX2NyZWF0ZV9haCwKKwkuZGVzdHJveV9haCA9IHZyZG1h X2Rlc3Ryb3lfYWgsCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2xpbnV4LTYuMTYuOC9kcml2ZXJz L2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX2liLmggYi9saW51eC02LjE2LjgvZHJpdmVycy9p bmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9pYi5oCmluZGV4IGJhODg1OTljOC4uNjc1OWM0MzQ5 IDEwMDY0NAotLS0gYS9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92 cmRtYV9pYi5oCisrKyBiL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlv L3ZyZG1hX2liLmgKQEAgLTExLDYgKzExLDggQEAKICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+ CiAjaW5jbHVkZSA8cmRtYS92cmRtYV9hYmkuaD4KIAorI2luY2x1ZGUgInZyZG1hX2FiaS5oIgor CiAjZGVmaW5lIFZSRE1BX0NPTU1fVElNRU9VVCAxMDAwMDAwCiAKIGVudW0gdnJkbWFfdHlwZSB7 CkBAIC0xMzAsNiArMTMyLDExIEBAIHN0cnVjdCB2cmRtYV91Y29udGV4dCB7CiAJc3RydWN0IHZy ZG1hX2RldiAqZGV2OwogfTsKIAorc3RydWN0IHZyZG1hX2FoIHsKKwlzdHJ1Y3QgaWJfYWggaWJh aDsKKwlzdHJ1Y3QgdnJkbWFfYXYgYXY7Cit9OworCiAvKioKICAqIHN0cnVjdCB2cmRtYV9xcCAt IFZpcnR1YWwgUkRNQSBRdWV1ZSBQYWlyIChRUCkgcHJpdmF0ZSBkYXRhCiAgKgpAQCAtMTY2LDYg KzE3Myw2NCBAQCBzdHJ1Y3QgdnJkbWFfcXAgewogCXN0cnVjdCB2cmRtYV91c2VyX21tYXBfZW50 cnkgKnJxX2VudHJ5OyAvKiBNbWFwIGVudHJ5IGZvciBSUSBidWZmZXIgKi8KIH07CiAKKy8qKgor ICogc3RydWN0IHZyZG1hX21yIC0gU29mdHdhcmUgc3RhdGUgb2YgYSBWaXJ0aW8tUkRNQSBNZW1v cnkgUmVnaW9uIChNUikKKyAqIEBpYm1yOgkJSW5maW5pQmFuZCBjb3JlIE1SIG9iamVjdCAoY29u dGFpbnMgcmtleSwgbGtleSwgZXRjLikKKyAqIEB1bWVtOgkJVXNlciBtZW1vcnkgZGVzY3JpcHRv ciBmcm9tIGliX3VtZW1fZ2V0KCksIGhvbGRzCisgKgkJCXBhZ2UgbGlzdCBhbmQgcmVmZXJlbmNl IHRvIHVzZXIgVk1BCisgKiBAbXJfaGFuZGxlOgkJSGFuZGxlIHJldHVybmVkIGJ5IGJhY2tlbmQg ZGV2aWNlIGZvciB0aGlzIE1SCisgKiBAaW92YToJCUkvTyB2aXJ0dWFsIGFkZHJlc3MgKHN0YXJ0 IG9mIHRoZSBtYXBwZWQgcmVnaW9uKQorICogQHNpemU6CQlUb3RhbCBzaXplIG9mIHRoZSBtZW1v cnkgcmVnaW9uIGluIGJ5dGVzCisgKiBAcGFnZXM6CQlMZXZlbCAxIChMMSkgcGFnZSB0YWJsZSAt IGFycmF5IG9mIGtlcm5lbCBwb2ludGVycyB0bworICoJCQlsZXZlbCAyIChMMikgcGFnZSB0YWJs ZXMgY29udGFpbmluZyBETUEgYWRkcmVzc2VzLgorICoJCQlUaGlzIGlzIHVzZWQgYnkgdGhlIGhv c3QgZHJpdmVyIHRvIG1hbmFnZSBzY2F0dGVyLWdhdGhlciBsYXlvdXQuCisgKiBAcGFnZXNfazoJ CUFycmF5IG9mIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyBvZiBMMiBwYWdlIHRhYmxlcy4KKyAq CQkJVXNlZCB0byBmcmVlIG1lbW9yeSBjb3JyZWN0bHkgZHVyaW5nIGNsZWFudXAuCisgKiBAZG1h X3BhZ2VzOgkJRE1BIGFkZHJlc3Mgb2YgdGhlIEwxIHBhZ2UgdGFibGUgKGZpcnN0LWxldmVsIHRh YmxlKSwKKyAqCQkJdG8gYmUgcGFzc2VkIHRvIHRoZSBkZXZpY2Ugb3Igd3JpdHRlbiBpbiBjb21t YW5kIFdRRS4KKyAqIEBucGFnZXM6CQlOdW1iZXIgb2YgdmFsaWQgcGFnZXMgaW4gdGhlIG1lbW9y eSByZWdpb24KKyAqIEBtYXhfcGFnZXM6CQlNYXhpbXVtIG51bWJlciBvZiBwYWdlcyB0aGF0IGNh biBiZSBoZWxkIGluIGN1cnJlbnQKKyAqCQkJcGFnZSB0YWJsZSBhbGxvY2F0aW9uIChiYXNlZCBv biBpbml0aWFsIG1hcHBpbmcgc2l6ZSkKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRz IGEgcmVnaXN0ZXJlZCBtZW1vcnkgcmVnaW9uIGluIHRoZSB2UkRNQSBkcml2ZXIuCisgKiBJdCBz dXBwb3J0cyBsYXJnZSBtZW1vcnkgcmVnaXN0cmF0aW9ucyB1c2luZyBhIHR3by1sZXZlbCBwYWdl IHRhYmxlIGRlc2lnbjoKKyAqCisgKiAgIEwxIFBhZ2UgVGFibGUgKGNvbnRpZ3VvdXMgRE1BLW1h cHBlZCk6CisgKiAgICAgQ29udGFpbnMgcG9pbnRlcnMgdG8gbXVsdGlwbGUgTDIgdGFibGVzIChl YWNoIEwyID0gb25lIHBhZ2UpLgorICoKKyAqICAgTDIgUGFnZSBUYWJsZXM6CisgKiAgICAgRWFj aCBzdG9yZXMgdXAgdG8gTiBETUEgYWRkcmVzc2VzIChwaHlzaWNhbCBwYWdlIGFkZHJlc3Nlcyku CisgKgorICogVGhlIGxheW91dCBhbGxvd3MgZWZmaWNpZW50IGhhcmR3YXJlIGFjY2VzcyB3aGls ZSBrZWVwaW5nIGtlcm5lbCBhbGxvY2F0aW9ucworICogbWFuYWdlYWJsZSBmb3IgdmVyeSBsYXJn ZSBtYXBwaW5ncyAoZS5nLiwgdGVucyBvZiBHQikuCisgKgorICogRXhhbXBsZSBsYXlvdXQgZm9y IDRLIHBhZ2VzIGFuZCA1MTIgZW50cmllcyBwZXIgTDIgdGFibGU6CisgKgorICogICBMMSAoZG1h X3BhZ2VzKSAtPiBbTDJfMF0gLT4gW0RNQV9BRERSX0EsIC4uLiwgRE1BX0FERFJfWl0KKyAqICAg ICAgICAgICAgICAgICAgIFtMMl8xXSAtPiBbRE1BX0FERFJfWCwgLi4uLCBETUFfQUREUl9ZXQor ICogICAgICAgICAgICAgICAgICAgLi4uCisgKgorICogVXNlZCBkdXJpbmc6CisgKiAgIC0gaWJf cmVnX21yKCkKKyAqICAgLSBTRU5EL1dSSVRFL1JFQUQgb3BlcmF0aW9ucyB3aXRoIHJlbW90ZSBh Y2Nlc3MKKyAqICAgLSBNUiBpbnZhbGlkYXRpb24gYW5kIGNsZWFudXAgaW4gdnJkbWFfZGVyZWdf bXIoKQorICovCitzdHJ1Y3QgdnJkbWFfbXIgeworCXN0cnVjdCBpYl9tciBpYm1yOworCXN0cnVj dCBpYl91bWVtICp1bWVtOworCisJdTMyIG1yX2hhbmRsZTsKKwl1NjQgaW92YTsKKwl1NjQgc2l6 ZTsKKworCXU2NCAqKnBhZ2VzOyAgICAgICAgLyogTDE6IGFycmF5IG9mIEwyIHRhYmxlIERNQSBh ZGRyZXNzIHBvaW50ZXJzICovCisJdTY0ICoqcGFnZXNfazsgICAgICAvKiBMMTogYXJyYXkgb2Yg TDIgdGFibGUga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzICovCisJZG1hX2FkZHJfdCBkbWFfcGFn ZXM7IC8qIERNQSBhZGRyZXNzIG9mIHRoZSBMMSB0YWJsZSBpdHNlbGYgKi8KKworCXUzMiBucGFn ZXM7CisJdTMyIG1heF9wYWdlczsKK307CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZyZG1hX2Nx ICp0b192Y3Eoc3RydWN0IGliX2NxICppYmNxKQogewogICAgICAgIHJldHVybiBjb250YWluZXJf b2YoaWJjcSwgc3RydWN0IHZyZG1hX2NxLCBpYmNxKTsKQEAgLTE4MSw2ICsyNDYsMjEgQEAgc3Rh dGljIGlubGluZSBzdHJ1Y3QgdnJkbWFfcXAgKnRvX3ZxcChzdHJ1Y3QgaWJfcXAgKmlicXApCiAJ cmV0dXJuIGNvbnRhaW5lcl9vZihpYnFwLCBzdHJ1Y3QgdnJkbWFfcXAsIGlicXApOwogfQogCitz dGF0aWMgaW5saW5lIHN0cnVjdCB2cmRtYV9tciAqdG9fdm1yKHN0cnVjdCBpYl9tciAqaWJtcikK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlibXIsIHN0cnVjdCB2cmRtYV9tciwgaWJtcik7Cit9 CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZyZG1hX3Vjb250ZXh0ICp0b192dWNvbnRleHQoc3Ry dWN0IGliX3Vjb250ZXh0ICppYnVjb250ZXh0KQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJ1 Y29udGV4dCwgc3RydWN0IHZyZG1hX3Vjb250ZXh0LCBpYnVjb250ZXh0KTsKK30KKworc3RhdGlj IGlubGluZSBzdHJ1Y3QgdnJkbWFfYWggKnRvX3ZhaChzdHJ1Y3QgaWJfYWggKmliYWgpCit7CisJ cmV0dXJuIGNvbnRhaW5lcl9vZihpYmFoLCBzdHJ1Y3QgdnJkbWFfYWgsIGliYWgpOworfQorCiBp bnQgdnJkbWFfcmVnaXN0ZXJfaWJfZGV2aWNlKHN0cnVjdCB2cmRtYV9kZXYgKnZyZGV2KTsKIHZv aWQgdnJkbWFfdW5yZWdpc3Rlcl9pYl9kZXZpY2Uoc3RydWN0IHZyZG1hX2RldiAqdnJkZXYpOwog Ci0tIAoyLjQzLjAKCg==