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 32C5D329E48; Thu, 18 Dec 2025 09:11:43 +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=1766049107; cv=none; b=ciq13J/0ldbkk/1ZBMRdhi8qRPMWAbhmhynw1uOH8Yam7ZdbEI8l+rrcsjswmn3F9Br+VLU9KcryO/GJioNc2NFxQ5uq/+ueBWRj86UvcAEUSnqWfQAODN7jPa2PKv4RF+bI6BnOgKNKDz5ZD+oudLKUXipHsecPHgozC1G3Utk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766049107; c=relaxed/simple; bh=sl/4qBUKzAXMPHSgcjfUmSYSBbayZkWzusolsJnaGio=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EiBLW99BMhxv5WYkSYxUfugbPIEHkuwUd4HqO+VRNK4jFwH/ZbKuS8Iy+yl/+93HMGkxCLM4XGOuD+RrO7z1QyI8YKd59OAr+5fqH8C6Nk8gGS7k0mTyhA2qrFxYZpyIya8xyWlNqew00K33V8vsFM3oewBE+3fmNRofFUoD82M= 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=XeH32Rdg; 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="XeH32Rdg" 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=sl /4qBUKzAXMPHSgcjfUmSYSBbayZkWzusolsJnaGio=; b=XeH32Rdgq6OEdUUTBl 69ql7hGo9JCMra/+7RSHLZDNEypGpA8By/zYVQCB39Fi7Fhd614WLqzXRAeD1Vsj MZqNwFsQ30fAYFxk06EbbyLjSpvIj1kX78z+S4MODs0potb2TJgU7xxaUccs9/Fk FO05w3MwP4ZHj2J5VD49XfJhI= Received: from xwm-TianYi510Pro-14IMB.. (unknown []) by gzga-smtp-mtada-g0-4 (Coremail) with SMTP id _____wC3U84cxUNpI7dcBA--.210S11; Thu, 18 Dec 2025 17:11:00 +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 09/10] drivers/infiniband/hw/virtio: Implement P_key, QP query and user MR resource management verbs Date: Thu, 18 Dec 2025 17:09:49 +0800 Message-ID: <20251218091050.55047-10-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--.210S11 X-Coremail-Antispam: 1Uf129KBjvAXoW3CF4DZF4kWr47trW3JrW7CFg_yoW8Gw1DGo WfC3sxXanYqw1xJFWDtrs7KFZavayDW3WrAr4rZ3Z0vF47X3W5AFWfKw15Ja4SqryYyF18 CrWfJw1IqFs2qFyrn29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxU7038UUUUU X-CM-SenderInfo: jprvmjixqsilmxzbiqqrwthudrp/xtbC0gSlLmlDxSQFfQAA3u RnJvbTogeGlvbmd3ZWltaW4gPHhpb25nd2VpbWluQGt5bGlub3MuY24+CgpUaGlzIGNvbW1pdCBh ZGRzIHN1cHBvcnQgZm9yIGVzc2VudGlhbCBSRE1BIHJlc291cmNlIG1hbmFnZW1lbnQgdmVyYnM6 CgoxLiBQX0tleSBUYWJsZSBRdWVyeToKICAgLSBJbXBsZW1lbnRzIElCX1FVRVJZX1BLRVkgdmVy YiBmb3IgcGFydGl0aW9uIGtleSByZXRyaWV2YWwKICAgLSBIYW5kbGVzIGVuZGlhbm5lc3MgY29u dmVyc2lvbiBmb3IgY3Jvc3MtcGxhdGZvcm0gY29tcGF0aWJpbGl0eQogICAtIFByb3ZpZGVzIGNv bXBsZXRlIGVycm9yIGhhbmRsaW5nIGZvciBkZXZpY2UgY29tbXVuaWNhdGlvbiBmYWlsdXJlcwoK Mi4gUVAgQXR0cmlidXRlIFF1ZXJ5OgogICAtIEZ1bGwgUVAgc3RhdGUgcmV0cmlldmFsIGluY2x1 ZGluZyBjYXBhYmlsaXRpZXMgYW5kIEFIIGF0dHJpYnV0ZXMKICAgLSBCeXRlIG9yZGVyIGhhbmRs aW5nIGZvciBhbGwgc3RydWN0IGZpZWxkcwogICAtIEluaXQgYXR0cmlidXRlIHByZXNlcnZhdGlv biBmb3IgY29uc2lzdGVuY3kgY2hlY2tzCiAgIC0gRGV0YWlsZWQgZXJyb3IgbG9nZ2luZyBmb3Ig ZGVidWdnaW5nCgozLiBVc2VyIE1lbW9yeSBSZWdpc3RyYXRpb246CiAgIC0gTWVtb3J5IHBpbm5p bmcgdmlhIGliX3VtZW1fZ2V0KCkgd2l0aCBhY2Nlc3MgZmxhZyBlbmZvcmNlbWVudAogICAtIERN QS1zYWZlIHBhZ2UgdGFibGUgY29uc3RydWN0aW9uIGFuZCBidWxrIHRyYW5zZmVyIHRvIGRldmlj ZQogICAtIE11bHRpLWFyY2hpdGVjdHVyZSBETUEgYWRkcmVzcyBoYW5kbGluZwogICAtIFN0cmlj dCBtZW1vcnkgYm91bmRhcnkgdmFsaWRhdGlvbgogICAtIFJlc291cmNlIGNsZWFudXAgZ3VhcmFu dGVlcyBvbiBhbGwgZXJyb3IgcGF0aHMKCktleSBlbmhhbmNlbWVudHM6Ci0gVW5pZmllZCB2aXJ0 cXVldWUgY29tbWFuZCBpbmZyYXN0cnVjdHVyZQotIENyb3NzLWFyY2hpdGVjdHVyZSBlbmRpYW5u ZXNzIGhhbmRsaW5nCi0gQXRvbWljIHBhZ2UgdGFibGUgdHJhbnNmZXIgZm9yIHJlZ2lzdGVyZWQg bWVtb3J5IHJlZ2lvbnMKLSBQcm90ZWN0aW9uIGRvbWFpbiBpbnRlZ3JhdGlvbiBmb3IgbWVtb3J5 IGFjY2VzcyBjb250cm9sCi0gRXJyb3IgaW5qZWN0aW9uIHBvaW50cyBmb3Igcm9idXN0IHJlc291 cmNlIHJlY292ZXJ5CgpTaWduZWQtb2ZmLWJ5OiBYaW9uZyBXZWltaW4gPHhpb25nd2VpbWluQGt5 bGlub3MuY24+Ci0tLQogLi4uL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX2Rldl9hcGkuaCAg ICAgIHwgIDM1ICsrCiAuLi4vZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9pYi5j ICAgfCAzMzMgKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDM2NyBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbGludXgtNi4xNi44L2RyaXZlcnMv aW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfZGV2X2FwaS5oIGIvbGludXgtNi4xNi44L2RyaXZl cnMvaW5maW5pYmFuZC9ody92aXJ0aW8vdnJkbWFfZGV2X2FwaS5oCmluZGV4IGQwY2UwMjYwMS4u ODZiNWVjYWRlIDEwMDY0NAotLS0gYS9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3 L3ZpcnRpby92cmRtYV9kZXZfYXBpLmgKKysrIGIvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5p YmFuZC9ody92aXJ0aW8vdnJkbWFfZGV2X2FwaS5oCkBAIC0yMjUsNiArMjI1LDQxIEBAIHN0cnVj dCB2cmRtYV9yc3BfbW9kaWZ5X3FwIHsKICAgICBfX3UzMiBxcG47CiB9OwogCitzdHJ1Y3QgdnJk bWFfY21kX3F1ZXJ5X3BrZXkgeworCV9fdTMyIHBvcnQ7CisJX191MTYgaW5kZXg7Cit9OworCitz dHJ1Y3QgdnJkbWFfcnNwX3F1ZXJ5X3BrZXkgeworCV9fdTE2IHBrZXk7Cit9OworCitzdHJ1Y3Qg dnJkbWFfY21kX3F1ZXJ5X3FwIHsKKwlfX3UzMiBxcG47CisJX191MzIgYXR0cl9tYXNrOworfTsK Kworc3RydWN0IHZyZG1hX3JzcF9xdWVyeV9xcCB7CisJc3RydWN0IHZyZG1hX3FwX2F0dHIgYXR0 cjsKK307CisKK3N0cnVjdCB2cmRtYV9jbWRfcmVnX3VzZXJfbXIgeworCV9fdTMyIHBkbjsKKwlf X3UzMiBhY2Nlc3NfZmxhZ3M7CisJX191NjQgc3RhcnQ7CisJX191NjQgbGVuZ3RoOworCV9fdTY0 IHZpcnRfYWRkcjsKKworCV9fdTY0IHBhZ2VzOworCV9fdTMyIG5wYWdlczsKK307CisKK3N0cnVj dCB2cmRtYV9yc3BfcmVnX3VzZXJfbXIgeworCV9fdTMyIG1ybjsKKwlfX3UzMiBsa2V5OworCV9f dTMyIHJrZXk7Cit9OworCiAjZGVmaW5lIFZSRE1BX0NUUkxfT0sJMAogI2RlZmluZSBWUkRNQV9D VFJMX0VSUgkxCiAKZGlmZiAtLWdpdCBhL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQv aHcvdmlydGlvL3ZyZG1hX2liLmMgYi9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3 L3ZpcnRpby92cmRtYV9pYi5jCmluZGV4IGY5YjEyOTc3NC4uYjE0MjllMDcyIDEwMDY0NAotLS0g YS9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9pYi5jCisr KyBiL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX2liLmMK QEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJ2cmRtYV9xdWV1ZS5oIgogCiAjZGVmaW5lIFZS VElPX1JETUFfUEFHRV9QRVJfVEJMIDUxMgorI2RlZmluZSBWUkRNQV9NQVhfUEFHRVMgICAgICAg ICA1MTIgKiA1MTIKIAogLyoqCiAgKiBjbWRfc3RyIC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9m IHZpcnRpbyBSRE1BIGNvbnRyb2wgY29tbWFuZHMKQEAgLTg2LDYgKzg3LDM2IEBAIHN0YXRpYyB2 b2lkIHJkbWFfYWhfYXR0cl90b192cmRtYShzdHJ1Y3QgdnJkbWFfYWhfYXR0ciAqZHN0LAogCW1l bWNweSgmZHN0LT5yb2NlLCAmc3JjLT5yb2NlLCBzaXplb2Yoc3RydWN0IHJvY2VfYWhfYXR0cikp OwogfQogCitzdGF0aWMgdm9pZCB2cmRtYV90b19pYl9nbG9iYWxfcm91dGUoc3RydWN0IGliX2ds b2JhbF9yb3V0ZSAqZHN0LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB2cmRtYV9nbG9iYWxfcm91 dGUgKnNyYykKK3sKKwlkc3QtPmRnaWQgPSBzcmMtPmRnaWQ7CisJZHN0LT5mbG93X2xhYmVsID0g c3JjLT5mbG93X2xhYmVsOworCWRzdC0+c2dpZF9pbmRleCA9IHNyYy0+c2dpZF9pbmRleDsKKwlk c3QtPmhvcF9saW1pdCA9IHNyYy0+aG9wX2xpbWl0OworCWRzdC0+dHJhZmZpY19jbGFzcyA9IHNy Yy0+dHJhZmZpY19jbGFzczsKK30KKworc3RhdGljIHZvaWQgdnJkbWFfdG9faWJfcXBfY2FwKHN0 cnVjdCBpYl9xcF9jYXAgKmRzdCwgY29uc3Qgc3RydWN0IHZyZG1hX3FwX2NhcCAqc3JjKQorewor CWRzdC0+bWF4X3NlbmRfd3IgPSBzcmMtPm1heF9zZW5kX3dyOworCWRzdC0+bWF4X3JlY3Zfd3Ig PSBzcmMtPm1heF9yZWN2X3dyOworCWRzdC0+bWF4X3NlbmRfc2dlID0gc3JjLT5tYXhfc2VuZF9z Z2U7CisJZHN0LT5tYXhfcmVjdl9zZ2UgPSBzcmMtPm1heF9yZWN2X3NnZTsKKwlkc3QtPm1heF9p bmxpbmVfZGF0YSA9IHNyYy0+bWF4X2lubGluZV9kYXRhOworfQorCitzdGF0aWMgdm9pZCB2cmRt YV90b19yZG1hX2FoX2F0dHIoc3RydWN0IHJkbWFfYWhfYXR0ciAqZHN0LAorCQkJICAgIGNvbnN0 IHN0cnVjdCB2cmRtYV9haF9hdHRyICpzcmMpCit7CisJdnJkbWFfdG9faWJfZ2xvYmFsX3JvdXRl KHJkbWFfYWhfcmV0cmlldmVfZ3JoKGRzdCksICZzcmMtPmdyaCk7CisJcmRtYV9haF9zZXRfc2wo ZHN0LCBzcmMtPnNsKTsKKwlyZG1hX2FoX3NldF9zdGF0aWNfcmF0ZShkc3QsIHNyYy0+c3RhdGlj X3JhdGUpOworCXJkbWFfYWhfc2V0X3BvcnRfbnVtKGRzdCwgc3JjLT5wb3J0X251bSk7CisJcmRt YV9haF9zZXRfYWhfZmxhZ3MoZHN0LCBzcmMtPmFoX2ZsYWdzKTsKKwltZW1jcHkoJmRzdC0+cm9j ZSwgJnNyYy0+cm9jZSwgc2l6ZW9mKHN0cnVjdCByb2NlX2FoX2F0dHIpKTsKK30KKwogLyoqCiAg KiB2cmRtYV9leGVjX3ZlcmJzX2NtZCAtIEV4ZWN1dGUgYSB2ZXJicyBjb21tYW5kIHZpYSBjb250 cm9sIHZpcnRxdWV1ZQogICogQHZyZGV2OiBWUkRNQSBkZXZpY2UKQEAgLTI1MjEsNiArMjU1Miwz MDMgQEAgc3RhdGljIGludCB2cmRtYV9wb3N0X3NlbmQoc3RydWN0IGliX3FwICppYnFwLCBjb25z dCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IsCiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIHZyZG1h X3F1ZXJ5X3BrZXkgLSBRdWVyeSBQYXJ0aXRpb24gS2V5IChQX0tleSkgYXQgZ2l2ZW4gaW5kZXgK KyAqIEBpYmRldjoJVmVyYnMgZGV2aWNlICh2UkRNQSB2aXJ0dWFsIGRldmljZSkKKyAqIEBwb3J0 OglQb3J0IG51bWJlciAoMS1pbmRleGVkKQorICogQGluZGV4OglQX0tleSB0YWJsZSBpbmRleAor ICogQHBrZXk6CU91dHB1dCBidWZmZXIgdG8gc3RvcmUgdGhlIFBfS2V5IHZhbHVlCisgKgorICog UXVlcmllcyB0aGUgUF9LZXkgZnJvbSB0aGUgYmFja2VuZCB2aWEgdmlydHF1ZXVlIGNvbW1hbmQu CisgKiBPbmx5IG1lYW5pbmdmdWwgZm9yIElCLXN0eWxlIHBvcnRzIChub3QgUm9DRSkuCisgKgor ICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0IChtYXkgc2xlZXApLiBDYW4gYmUgY2FsbGVkIGZy b20gdXNlciBJT0NUTCBwYXRoLgorICogUmV0dXJuOgorICogKiAwIG9uIHN1Y2Nlc3MKKyAqICog LUVOT01FTSBpZiBjb21tYW5kIGFsbG9jYXRpb24gZmFpbHMKKyAqICogLUVJTyBvciBvdGhlciBu ZWdhdGl2ZSBlcnJubyBvbiBjb21tdW5pY2F0aW9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCB2 cmRtYV9xdWVyeV9wa2V5KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydCwgdTE2IGlu ZGV4LCB1MTYgKnBrZXkpCit7CisJc3RydWN0IHZyZG1hX2RldiAqdmRldiA9IHRvX3ZkZXYoaWJk ZXYpOworCXN0cnVjdCB2cmRtYV9jbWRfcXVlcnlfcGtleSAqY21kOworCXN0cnVjdCB2cmRtYV9y c3BfcXVlcnlfcGtleSAqcnNwOworCXN0cnVjdCBzY2F0dGVybGlzdCBpbiwgb3V0OworCWludCBy YzsKKworCS8qIEFsbG9jYXRlIGNvbW1hbmQgYW5kIHJlc3BvbnNlIGJ1ZmZlcnMgKi8KKwljbWQg PSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpCisJCXJldHVy biAtRU5PTUVNOworCisJcnNwID0ga3phbGxvYyhzaXplb2YoKnJzcCksIEdGUF9LRVJORUwpOwor CWlmICghcnNwKSB7CisJCWtmcmVlKGNtZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8q IEZpbGwgaW5wdXQgcGFyYW1ldGVycyAqLworCWNtZC0+cG9ydCA9IGNwdV90b19sZTMyKHBvcnQp OworCWNtZC0+aW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CisKKwkvKiBQcmVwYXJlIHNjYXR0 ZXJsaXN0cyBmb3IgdmlydHF1ZXVlIEkvTyAqLworCXNnX2luaXRfb25lKCZpbiwgY21kLCBzaXpl b2YoKmNtZCkpOworCXNnX2luaXRfb25lKCZvdXQsIHJzcCwgc2l6ZW9mKCpyc3ApKTsKKworCS8q IEV4ZWN1dGUgY29tbWFuZCAqLworCXJjID0gdnJkbWFfZXhlY192ZXJic19jbWQodmRldiwgVklS VElPX1JETUFfQ01EX1FVRVJZX1BLRVksICZpbiwgJm91dCk7CisJaWYgKHJjKSB7CisJCWRldl9l cnIoJnZkZXYtPnZkZXYtPmRldiwKKwkJCSJWSVJUSU9fUkRNQV9DTURfUVVFUllfUEtFWSBmYWls ZWQ6IHBvcnQ9JXUgaWR4PSV1IGVycj0lZFxuIiwKKwkJCXBvcnQsIGluZGV4LCByYyk7CisJCWdv dG8gb3V0X2ZyZWU7CisJfQorCisJLyogQ29weSByZXN1bHQgdG8gdXNlciAqLworCSpwa2V5ID0g bGUxNl90b19jcHUocnNwLT5wa2V5KTsKKworb3V0X2ZyZWU6CisJa2ZyZWUocnNwKTsKKwlrZnJl ZShjbWQpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiB2cmRtYV9xdWVyeV9xcCAtIFF1ZXJ5 IFFQIGF0dHJpYnV0ZXMgZnJvbSB0aGUgYmFja2VuZAorICogQGlicXA6CVF1ZXVlIHBhaXIgdG8g cXVlcnkKKyAqIEBhdHRyOglPdXRwdXQgc3RydWN0dXJlIGZvciBRUCBhdHRyaWJ1dGVzCisgKiBA YXR0cl9tYXNrOglXaGljaCBmaWVsZHMgYXJlIHJlcXVlc3RlZCAoaWdub3JlZCBieSBzb21lIGJh Y2tlbmRzKQorICogQGluaXRfYXR0cjoJT3V0cHV0IHN0cnVjdHVyZSBmb3IgaW5pdC10aW1lIGF0 dHJpYnV0ZXMKKyAqCisgKiBRdWVyaWVzIHRoZSBRUCBzdGF0ZSBhbmQgY29uZmlndXJhdGlvbiB2 aWEgYSBjb250cm9sIHZpcnRxdWV1ZSBjb21tYW5kLgorICogVGhpcyBpcyBhIHN5bmNocm9ub3Vz IG9wZXJhdGlvbi4KKyAqCisgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRleHQgKGNhbiBzbGVlcCkK KyAqIFJldHVybjoKKyAqICogMCBvbiBzdWNjZXNzCisgKiAqIC1FTk9NRU0gaWYgYWxsb2NhdGlv biBmYWlscworICogKiAtRUlPIG9yIG90aGVyIG5lZ2F0aXZlIGVycm5vIG9uIGNvbW11bmljYXRp b24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IHZyZG1hX3F1ZXJ5X3FwKHN0cnVjdCBpYl9xcCAq aWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCisJCQkgIGludCBhdHRyX21hc2ssIHN0cnVj dCBpYl9xcF9pbml0X2F0dHIgKmluaXRfYXR0cikKK3sKKwlzdHJ1Y3QgdnJkbWFfcXAgKnZxcCA9 IHRvX3ZxcChpYnFwKTsKKwlzdHJ1Y3QgdnJkbWFfZGV2ICp2ZGV2ID0gdG9fdmRldihpYnFwLT5k ZXZpY2UpOworCXN0cnVjdCB2cmRtYV9jbWRfcXVlcnlfcXAgKmNtZDsKKwlzdHJ1Y3QgdnJkbWFf cnNwX3F1ZXJ5X3FwICpyc3A7CisJc3RydWN0IHNjYXR0ZXJsaXN0IGluLCBvdXQ7CisJaW50IHJj OworCisJLyogQWxsb2NhdGUgY29tbWFuZCBhbmQgcmVzcG9uc2UgYnVmZmVycyAqLworCWNtZCA9 IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlyc3AgPSBremFsbG9jKHNpemVvZigqcnNwKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFyc3ApIHsKKwkJa2ZyZWUoY21kKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyog RmlsbCBpbnB1dCBwYXJhbWV0ZXJzICovCisJY21kLT5xcG4gPSBjcHVfdG9fbGUzMih2cXAtPnFw X2hhbmRsZSk7CisJY21kLT5hdHRyX21hc2sgPSBjcHVfdG9fbGUzMihhdHRyX21hc2spOyAvKiBP cHRpb25hbCBvcHRpbWl6YXRpb24gKi8KKworCXNnX2luaXRfb25lKCZpbiwgY21kLCBzaXplb2Yo KmNtZCkpOworCXNnX2luaXRfb25lKCZvdXQsIHJzcCwgc2l6ZW9mKCpyc3ApKTsKKworCS8qIEV4 ZWN1dGUgY29tbWFuZCBvdmVyIGNvbnRyb2wgdmlydHF1ZXVlICovCisJcmMgPSB2cmRtYV9leGVj X3ZlcmJzX2NtZCh2ZGV2LCBWSVJUSU9fUkRNQV9DTURfUVVFUllfUVAsICZpbiwgJm91dCk7CisJ aWYgKHJjKSB7CisJCWRldl9lcnIoJnZkZXYtPnZkZXYtPmRldiwKKwkJCSJWSVJUSU9fUkRNQV9D TURfUVVFUllfUVAgZmFpbGVkOiBxcG49MHgleCBlcnI9JWRcbiIsCisJCQl2cXAtPnFwX2hhbmRs ZSwgcmMpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCS8qIE9ubHkgY29weSByZXN1bHRzIG9u IHN1Y2Nlc3MgKi8KKwlhdHRyLT5xcF9zdGF0ZSA9IHJzcC0+YXR0ci5xcF9zdGF0ZTsKKwlhdHRy LT5jdXJfcXBfc3RhdGUgPSByc3AtPmF0dHIuY3VyX3FwX3N0YXRlOworCWF0dHItPnBhdGhfbXR1 ID0gcnNwLT5hdHRyLnBhdGhfbXR1OworCWF0dHItPnBhdGhfbWlnX3N0YXRlID0gcnNwLT5hdHRy LnBhdGhfbWlnX3N0YXRlOworCWF0dHItPnFrZXkgPSBsZTMyX3RvX2NwdShyc3AtPmF0dHIucWtl eSk7CisJYXR0ci0+cnFfcHNuID0gbGUzMl90b19jcHUocnNwLT5hdHRyLnJxX3Bzbik7CisJYXR0 ci0+c3FfcHNuID0gbGUzMl90b19jcHUocnNwLT5hdHRyLnNxX3Bzbik7CisJYXR0ci0+ZGVzdF9x cF9udW0gPSBsZTMyX3RvX2NwdShyc3AtPmF0dHIuZGVzdF9xcF9udW0pOworCWF0dHItPnFwX2Fj Y2Vzc19mbGFncyA9IGxlMzJfdG9fY3B1KHJzcC0+YXR0ci5xcF9hY2Nlc3NfZmxhZ3MpOworCWF0 dHItPnBrZXlfaW5kZXggPSBsZTE2X3RvX2NwdShyc3AtPmF0dHIucGtleV9pbmRleCk7CisJYXR0 ci0+YWx0X3BrZXlfaW5kZXggPSBsZTE2X3RvX2NwdShyc3AtPmF0dHIuYWx0X3BrZXlfaW5kZXgp OworCWF0dHItPmVuX3NxZF9hc3luY19ub3RpZnkgPSByc3AtPmF0dHIuZW5fc3FkX2FzeW5jX25v dGlmeTsKKwlhdHRyLT5zcV9kcmFpbmluZyA9IHJzcC0+YXR0ci5zcV9kcmFpbmluZzsKKwlhdHRy LT5tYXhfcmRfYXRvbWljID0gcnNwLT5hdHRyLm1heF9yZF9hdG9taWM7CisJYXR0ci0+bWF4X2Rl c3RfcmRfYXRvbWljID0gcnNwLT5hdHRyLm1heF9kZXN0X3JkX2F0b21pYzsKKwlhdHRyLT5taW5f cm5yX3RpbWVyID0gcnNwLT5hdHRyLm1pbl9ybnJfdGltZXI7CisJYXR0ci0+cG9ydF9udW0gPSBy c3AtPmF0dHIucG9ydF9udW07CisJYXR0ci0+dGltZW91dCA9IHJzcC0+YXR0ci50aW1lb3V0Owor CWF0dHItPnJldHJ5X2NudCA9IHJzcC0+YXR0ci5yZXRyeV9jbnQ7CisJYXR0ci0+cm5yX3JldHJ5 ID0gcnNwLT5hdHRyLnJucl9yZXRyeTsKKwlhdHRyLT5hbHRfcG9ydF9udW0gPSByc3AtPmF0dHIu YWx0X3BvcnRfbnVtOworCWF0dHItPmFsdF90aW1lb3V0ID0gcnNwLT5hdHRyLmFsdF90aW1lb3V0 OworCWF0dHItPnJhdGVfbGltaXQgPSBsZTMyX3RvX2NwdShyc3AtPmF0dHIucmF0ZV9saW1pdCk7 CisKKwkvKiBDb3B5IGNhcGFiaWxpdGllcyAqLworCXZyZG1hX3RvX2liX3FwX2NhcCgmYXR0ci0+ Y2FwLCAmcnNwLT5hdHRyLmNhcCk7CisKKwkvKiBDb252ZXJ0IEFIIGF0dHJpYnV0ZXMgKGNvbnRh aW5zIEdSSCArIERJUCkgKi8KKwl2cmRtYV90b19yZG1hX2FoX2F0dHIoJmF0dHItPmFoX2F0dHIs ICZyc3AtPmF0dHIuYWhfYXR0cik7CisJdnJkbWFfdG9fcmRtYV9haF9hdHRyKCZhdHRyLT5hbHRf YWhfYXR0ciwgJnJzcC0+YXR0ci5hbHRfYWhfYXR0cik7CisKKwkvKiBGaWxsIGluaXQgYXR0cmli dXRlcyAobW9zdGx5IHN0YXRpYykgKi8KKwlpbml0X2F0dHItPmV2ZW50X2hhbmRsZXIgPSB2cXAt PmlicXAuZXZlbnRfaGFuZGxlcjsKKwlpbml0X2F0dHItPnFwX2NvbnRleHQgPSB2cXAtPmlicXAu cXBfY29udGV4dDsKKwlpbml0X2F0dHItPnNlbmRfY3EgPSB2cXAtPmlicXAuc2VuZF9jcTsKKwlp bml0X2F0dHItPnJlY3ZfY3EgPSB2cXAtPmlicXAucmVjdl9jcTsKKwlpbml0X2F0dHItPnNycSA9 IHZxcC0+aWJxcC5zcnE7CisJaW5pdF9hdHRyLT54cmNkID0gTlVMTDsgLyogTm90IHN1cHBvcnRl ZCBpbiB2UkRNQSAqLworCWluaXRfYXR0ci0+Y2FwID0gYXR0ci0+Y2FwOworCWluaXRfYXR0ci0+ c3Ffc2lnX3R5cGUgPSBJQl9TSUdOQUxfUkVRX1dSOyAvKiBPciBkcml2ZXIgZGVmYXVsdCAqLwor CWluaXRfYXR0ci0+cXBfdHlwZSA9IHZxcC0+aWJxcC5xcF90eXBlOworCWluaXRfYXR0ci0+Y3Jl YXRlX2ZsYWdzID0gMDsKKwlpbml0X2F0dHItPnBvcnRfbnVtID0gdnFwLT5wb3J0OworCitvdXRf ZnJlZToKKwlrZnJlZShyc3ApOworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJjOworfQorCisvKioK KyAqIHZyZG1hX3JlZ191c2VyX21yIC0gUmVnaXN0ZXIgYSB1c2VyIG1lbW9yeSByZWdpb24KKyAq IEBwZDoJCVByb3RlY3Rpb24gZG9tYWluCisgKiBAc3RhcnQ6CVVzZXIgdmlydHVhbCBhZGRyZXNz IG9mIG1lbW9yeSB0byByZWdpc3RlcgorICogQGxlbmd0aDoJTGVuZ3RoIG9mIG1lbW9yeSByZWdp b24KKyAqIHZpcnRfYWRkcjoJT3B0aW9uYWwgdmlydHVhbCBhZGRyZXNzIGZvciBya2V5IGFjY2Vz cyAob2Z0ZW4gc2FtZSBhcyBzdGFydCkKKyAqIEBhY2Nlc3NfZmxhZ3M6IEFjY2VzcyBwZXJtaXNz aW9ucyAoSUJfQUNDRVNTX3h4eCkKKyAqIEB1ZGF0YToJVXNlciBkYXRhIChvcHRpb25hbCwgdW51 c2VkIGhlcmUpCisgKgorICogTG9ja3MgZG93biB1c2VyIHBhZ2VzLCBidWlsZHMgcGFnZSB0YWJs ZSwgYW5kIHJlZ2lzdGVycyBNUiB3aXRoIGJhY2tlbmQuCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8g aWJfbXIgb3IgRVJSX1BUUiBvbiBmYWlsdXJlLgorICoKKyAqIENvbnRleHQ6IFByb2Nlc3MgY29u dGV4dCAobWF5IHNsZWVwIGR1cmluZyBpYl91bWVtX2dldCkKKyAqIFJldHVybjoKKyAqICogUG9p bnRlciB0byAmbXItPmlibXIgb24gc3VjY2VzcworICogKiBFUlJfUFRSKC1lcnJubykgb24gZmFp bHVyZQorICovCitzdGF0aWMgc3RydWN0IGliX21yICp2cmRtYV9yZWdfdXNlcl9tcihzdHJ1Y3Qg aWJfcGQgKnBkLCB1NjQgc3RhcnQsCisJCQkJCSAgICAgdTY0IGxlbmd0aCwgdTY0IHZpcnRfYWRk ciwKKwkJCQkJICAgICBpbnQgYWNjZXNzX2ZsYWdzLAorCQkJCQkgICAgIHN0cnVjdCBpYl91ZGF0 YSAqdWRhdGEpCit7CisJc3RydWN0IHZyZG1hX2RldiAqZGV2ID0gdG9fdmRldihwZC0+ZGV2aWNl KTsKKwlzdHJ1Y3QgdnJkbWFfY21kX3JlZ191c2VyX21yICpjbWQ7CisJc3RydWN0IHZyZG1hX3Jz cF9yZWdfdXNlcl9tciAqcnNwOworCXN0cnVjdCB2cmRtYV9tciAqbXI7CisJc3RydWN0IGliX3Vt ZW0gKnVtZW07CisJc3RydWN0IHNnX2RtYV9wYWdlX2l0ZXIgc2dfaXRlcjsKKwlzdHJ1Y3Qgc2Nh dHRlcmxpc3QgaW4sIG91dDsKKwlpbnQgcmMgPSAwOworCXVuc2lnbmVkIG5wYWdlczsKKwlkbWFf YWRkcl90ICpwYWdlc19mbGF0ID0gTlVMTDsKKworCS8qIFN0ZXAgMTogUGluIHVzZXIgbWVtb3J5 IHBhZ2VzICovCisJdW1lbSA9IGliX3VtZW1fZ2V0KHBkLT5kZXZpY2UsIHN0YXJ0LCBsZW5ndGgs IGFjY2Vzc19mbGFncyk7CisJaWYgKElTX0VSUih1bWVtKSkgeworCQlkZXZfZXJyKCZkZXYtPnZk ZXYtPmRldiwgIkZhaWxlZCB0byBwaW4gdXNlciBtZW1vcnk6IHZhPTB4JWxseCBsZW49JWxsdVxu IiwKKwkJCXN0YXJ0LCBsZW5ndGgpOworCQlyZXR1cm4gRVJSX0NBU1QodW1lbSk7CisJfQorCisJ bnBhZ2VzID0gaWJfdW1lbV9udW1fcGFnZXModW1lbSk7CisJaWYgKG5wYWdlcyA9PSAwIHx8IG5w YWdlcyA+IFZSRE1BX01BWF9QQUdFUykgeyAvLyBlLmcuLCBWUkRNQV9NQVhfUEFHRVMgPSA1MTIq NTEyCisJCWRldl9lcnIoJmRldi0+dmRldi0+ZGV2LCAiSW52YWxpZCBudW1iZXIgb2YgcGFnZXM6 ICV1XG4iLCBucGFnZXMpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3VtZW07CisJfQor CisJLyogQWxsb2NhdGUgY29tbWFuZC9yZXNwb25zZSBzdHJ1Y3R1cmVzIChHRlBfS0VSTkVMIG9r IGluIHByb2Nlc3MgY29udGV4dCkgKi8KKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQ X0tFUk5FTCk7CisJcnNwID0ga3phbGxvYyhzaXplb2YoKnJzcCksIEdGUF9LRVJORUwpOworCW1y ID0ga3phbGxvYyhzaXplb2YoKm1yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQgfHwgIXJzcCB8 fCAhbXIpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hbGxvYzsKKwl9CisKKwkvKiBJ bml0aWFsaXplIE1SIHN0cnVjdHVyZSAqLworCW1yLT51bWVtID0gdW1lbTsKKwltci0+c2l6ZSA9 IGxlbmd0aDsKKwltci0+aW92YSA9IHZpcnRfYWRkcjsKKwltci0+bWF4X3BhZ2VzID0gbnBhZ2Vz OworCisJLyogQWxsb2NhdGUgY29udGlndW91cyBETUEtbWFwcGVkIGFycmF5IGZvciBwYWdlIGFk ZHJlc3NlcyAqLworCXBhZ2VzX2ZsYXQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldi0+dmRldi0+ ZGV2LAorCQkJCQlucGFnZXMgKiBzaXplb2YoZG1hX2FkZHJfdCksCisJCQkJCSZtci0+ZG1hX3Bh Z2VzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2VzX2ZsYXQpIHsKKwkJZGV2X2VycigmZGV2LT52 ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgRE1BIG1lbW9yeSBmb3IgcGFnZSB0YWJsZVxu Iik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2M7CisJfQorCW1yLT5wYWdlc19r ID0gJnBhZ2VzX2ZsYXQ7IC8qIFRyZWF0IGFzIDJEOiBbaS81MTJdW2klNTEyXSAqLworCisJLyog RmlsbCBwYWdlIHRhYmxlIGZyb20gaWJfdW1lbSBzY2F0dGVybGlzdCAqLworCW1yLT5ucGFnZXMg PSAwOworCWZvcl9lYWNoX3NnX2RtYV9wYWdlKHVtZW0tPnNndF9hcHBlbmQuc2d0LnNnbCwgJnNn X2l0ZXIsIHVtZW0tPnNndF9hcHBlbmQuc2d0Lm5lbnRzLCAwKSB7CisJCWRtYV9hZGRyX3QgYWRk ciA9IHNnX3BhZ2VfaXRlcl9kbWFfYWRkcmVzcygmc2dfaXRlcik7CisJCXBhZ2VzX2ZsYXRbbXIt Pm5wYWdlcysrXSA9IGFkZHI7CisJfQorCisJLyogU2FuaXR5IGNoZWNrOiBzaG91bGQgbWF0Y2gg aWJfdW1lbV9udW1fcGFnZXMoKSAqLworCVdBUk5fT04obXItPm5wYWdlcyAhPSBucGFnZXMpOwor CisJLyogUHJlcGFyZSBjb21tYW5kICovCisJY21kLT5wZG4gPSBjcHVfdG9fbGUzMih0b192cGQo cGQpLT5wZF9oYW5kbGUpOworCWNtZC0+c3RhcnQgPSBjcHVfdG9fbGU2NChzdGFydCk7CisJY21k LT5sZW5ndGggPSBjcHVfdG9fbGU2NChsZW5ndGgpOworCWNtZC0+dmlydF9hZGRyID0gY3B1X3Rv X2xlNjQodmlydF9hZGRyKTsKKwljbWQtPmFjY2Vzc19mbGFncyA9IGNwdV90b19sZTMyKGFjY2Vz c19mbGFncyk7CisJY21kLT5wYWdlcyA9IGNwdV90b19sZTY0KG1yLT5kbWFfcGFnZXMpOyAvKiBE TUEgYWRkcmVzcyBvZiBwYWdlIGFycmF5ICovCisJY21kLT5ucGFnZXMgPSBjcHVfdG9fbGUzMihu cGFnZXMpOworCisJc2dfaW5pdF9vbmUoJmluLCBjbWQsIHNpemVvZigqY21kKSk7CisJc2dfaW5p dF9vbmUoJm91dCwgcnNwLCBzaXplb2YoKnJzcCkpOworCisJLyogU2VuZCBjb21tYW5kIHRvIGJh Y2tlbmQgKi8KKwlyYyA9IHZyZG1hX2V4ZWNfdmVyYnNfY21kKGRldiwgVklSVElPX1JETUFfQ01E X1JFR19VU0VSX01SLCAmaW4sICZvdXQpOworCWlmIChyYykgeworCQlkZXZfZXJyKCZkZXYtPnZk ZXYtPmRldiwgIkJhY2tlbmQgZmFpbGVkIHRvIHJlZ2lzdGVyIE1SOiAlZFxuIiwgcmMpOworCQln b3RvIGVycl9jbWQ7CisJfQorCisJLyogQ29weSByZXN1bHRzIGZyb20gcmVzcG9uc2UgKi8KKwlt ci0+bXJfaGFuZGxlID0gbGUzMl90b19jcHUocnNwLT5tcm4pOworCW1yLT5pYm1yLmxrZXkgPSBs ZTMyX3RvX2NwdShyc3AtPmxrZXkpOworCW1yLT5pYm1yLnJrZXkgPSBsZTMyX3RvX2NwdShyc3At PnJrZXkpOworCisJLyogQ2xlYW51cCB0ZW1wb3JhcnkgYWxsb2NhdGlvbnMgKi8KKwlrZnJlZShj bWQpOworCWtmcmVlKHJzcCk7CisKKwkvKiBMaW5rIE1SIHRvIFBEIGlmIG5lZWRlZCwgaW5pdGlh bGl6ZSBvdGhlciBmaWVsZHMgKi8KKwltci0+aWJtci5wZCA9IHBkOworCW1yLT5pYm1yLmRldmlj ZSA9IHBkLT5kZXZpY2U7CisJbXItPmlibXIudHlwZSA9IElCX01SX1RZUEVfTUVNX1JFRzsKKwlt ci0+aWJtci5sZW5ndGggPSBsZW5ndGg7CisKKwlyZXR1cm4gJm1yLT5pYm1yOworCitlcnJfY21k OgorCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPnZkZXYtPmRldiwgbnBhZ2VzICogc2l6ZW9mKGRt YV9hZGRyX3QpLAorCQkJICBwYWdlc19mbGF0LCBtci0+ZG1hX3BhZ2VzKTsKK2Vycl9hbGxvYzoK KwlrZnJlZShtcik7CisJa2ZyZWUocnNwKTsKKwlrZnJlZShjbWQpOworZXJyX3VtZW06CisJaWJf dW1lbV9yZWxlYXNlKHVtZW0pOworCXJldHVybiBFUlJfUFRSKHJjKTsKK30KKwogc3RhdGljIGNv bnN0IHN0cnVjdCBpYl9kZXZpY2Vfb3BzIHZyZG1hX2Rldl9vcHMgPSB7CiAJLm93bmVyID0gVEhJ U19NT0RVTEUsCiAJLnV2ZXJic19hYmlfdmVyID0gVklSVElPX1JETUFfQUJJX1ZFUlNJT04sCkBA IC0yNTU0LDcgKzI4ODIsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2Vfb3BzIHZy ZG1hX2Rldl9vcHMgPSB7CiAJLm1vZGlmeV9xcCA9IHZyZG1hX21vZGlmeV9xcCwKIAkucG9sbF9j cSA9IHZyZG1hX3BvbGxfY3EsCiAJLnBvc3RfcmVjdiA9IHZyZG1hX3Bvc3RfcmVjdiwKLQkucG9z dF9zZW5kID0gdnJkbWFfcG9zdF9zZW5kLAkJCQorCS5wb3N0X3NlbmQgPSB2cmRtYV9wb3N0X3Nl bmQsCisJLnF1ZXJ5X3BrZXkgPSB2cmRtYV9xdWVyeV9wa2V5LAorCS5xdWVyeV9xcCA9IHZyZG1h X3F1ZXJ5X3FwLAorCS5yZWdfdXNlcl9tciA9IHZyZG1hX3JlZ191c2VyX21yLAkJCQogfTsKIAog LyoqCi0tIAoyLjQzLjAKCg==