From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.5]) (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 0209030FC2E; Thu, 18 Dec 2025 09:11:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.5 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766049107; cv=none; b=GyJ1nODrWdfSlQGGL8us9pHfSXTzkhu6u/n8HUT/85+NWUQO3O5pV0F43CNMCtki5RIAcJmXuQIeRZCM5xb86TukP1RZpxxTSGIBAFu2doGhsGIjFbr60A4fIuYu44Avge+ErSoRQ8E/piAzF561lH5/dD+ekcj67Ui4Ql3Rk3o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766049107; c=relaxed/simple; bh=KmnvQHTzrWdNXGd0tdo6oxLRnd+CP+RCyK3kzpn0x9s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A7LVnow22UwA4vZOcjOemelJ7dA5ila26jg4MA1cLG/RJex6JwjdryYmn5MJOOknwF27z02AJ0LcaJBZi2t19xyLK/uxS2HGStibLA4fsHKfA84IB17CG2ISxc+cZT5G2AES8w8w5Fys9Dq9jkT4btyMf6w6D5zVZ3QMH2GLwaU= 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=iiGVW15I; arc=none smtp.client-ip=220.197.31.5 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="iiGVW15I" 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=Km nvQHTzrWdNXGd0tdo6oxLRnd+CP+RCyK3kzpn0x9s=; b=iiGVW15IJQTZ99Cu9J Z6wx9890V9osTFN+YdnJ3VpRj6Iu74aXDgwCIRhvQuLp8evT34ZFI+vxY5gVQ6Jd kwAs95Gb8lEqOj6J1uB2bAkSwNcS4TyuTHZJ057c7mVGLxbMjAJ4etsSq2cOo7gN SIRCapse41PE3/T4GuCVCgiEk= Received: from xwm-TianYi510Pro-14IMB.. (unknown []) by gzga-smtp-mtada-g0-4 (Coremail) with SMTP id _____wC3U84cxUNpI7dcBA--.210S7; Thu, 18 Dec 2025 17:10:58 +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 05/10] drivers/infiniband/hw/virtio: Implement memory mapping and MR scatter-gather support Date: Thu, 18 Dec 2025 17:09:45 +0800 Message-ID: <20251218091050.55047-6-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--.210S7 X-Coremail-Antispam: 1Uf129KBjvJXoW3Zr13AFWDtr48Xw15uw15urg_yoWDCrW5pa 4Sq34Yk3ykta43Gw1kW3WkuFya9wsay3yUGry5u3sxCFnxJrWavF4DAFyUXFyUAr97Cr4f XFWjyF4ruay5XrJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jcqXdUUUUU= X-CM-SenderInfo: jprvmjixqsilmxzbiqqrwthudrp/xtbC8wKkLWlDxSKyOQAA3+ RnJvbTogeGlvbmd3ZWltaW4gPHhpb25nd2VpbWluQGt5bGlub3MuY24+CgpUaGlzIGNvbXByZWhl bnNpdmUgY29tbWl0IGFkZHMgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVz IHRvIHRoZSB2aXJ0aW8gUkRNQSBkcml2ZXI6CgoxLiBQb3J0IGxpbmsgbGF5ZXIgaWRlbnRpZmlj YXRpb24KICAgLSBSZXBvcnRzIEV0aGVybmV0IGFzIHRoZSBsaW5rIGxheWVyICh2cmRtYV9wb3J0 X2xpbmtfbGF5ZXIpCgoyLiBNZW1vcnkgUmVnaW9uIHNjYXR0ZXItZ2F0aGVyIG1hcHBpbmcKICAg LSBJbXBsZW1lbnRzIHR3by1sZXZlbCBwYWdlIHRhYmxlIGZvciBlZmZpY2llbnQgbGFyZ2UgTVIg aGFuZGxpbmcgKHZyZG1hX3NldF9wYWdlKQogICAtIEFkZHMgU0cgbGlzdCB0byBNUiBtYXBwaW5n IHdpdGggZGV2aWNlIG5vdGlmaWNhdGlvbiAodnJkbWFfbWFwX21yX3NnKQoKMy4gVXNlci1zcGFj ZSBtZW1vcnkgbWFwcGluZwogICAtIFN1cHBvcnRzIG1tYXAoKSBmb3IgQ1EvUVAgcmVzb3VyY2Vz ICh2cmRtYV9tbWFwKQogICAtIEhhbmRsZXMgdnJpbmcgZGVzY3JpcHRvcnMsIHVzZXIgYnVmZmVy cywgYW5kIGZhc3QgZG9vcmJlbGxzCiAgIC0gSW1wbGVtZW50cyBtbWFwIGVudHJ5IGNsZWFudXAg KHZyZG1hX21tYXBfZnJlZSkKCktleSBmZWF0dXJlczoKLSBFZmZpY2llbnQgMi1sZXZlbCBwYWdl IHRhYmxlIGZvciBNUnMgKDUxMiBlbnRyaWVzIHBlciBsZXZlbCkKLSBWaXJ0aW8gY29tbWFuZCBm b3IgYmFja2VuZCBNUiBtYXBwaW5nIG5vdGlmaWNhdGlvbgotIFVuaWZpZWQgbW1hcCBoYW5kbGlu ZyBmb3IgQ1EvUVAgd2l0aCBzaXplIHZhbGlkYXRpb24KLSBTdXBwb3J0IGZvciBmYXN0IGRvb3Ji ZWxsIG1hcHBpbmcgb3B0aW1pemF0aW9uCi0gQ29tcHJlaGVuc2l2ZSBlcnJvciBoYW5kbGluZyBp biBhbGwgY29kZSBwYXRocwoKU2lnbmVkLW9mZi1ieTogWGlvbmcgV2VpbWluIDx4aW9uZ3dlaW1p bkBreWxpbm9zLmNuPgotLS0KIC4uLi9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9kZXZfYXBp LmggICAgICB8ICAxMyArCiAuLi4vZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9p Yi5jICAgfCAyNTAgKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDI2MyBpbnNl cnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9o dy92aXJ0aW8vdnJkbWFfZGV2X2FwaS5oIGIvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFu ZC9ody92aXJ0aW8vdnJkbWFfZGV2X2FwaS5oCmluZGV4IGRhOTlmMWYzMi4uODRkYzA1YTk2IDEw MDY0NAotLS0gYS9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92cmRt YV9kZXZfYXBpLmgKKysrIGIvbGludXgtNi4xNi44L2RyaXZlcnMvaW5maW5pYmFuZC9ody92aXJ0 aW8vdnJkbWFfZGV2X2FwaS5oCkBAIC0yMDAsNiArMjAwLDE5IEBAIHN0cnVjdCB2cmRtYV9jbWRf ZGVsX2dpZCB7CiAJX191MzIgcG9ydF9udW07CiB9OwogCitzdHJ1Y3QgdnJkbWFfY21kX21hcF9t cl9zZyB7CisJX191MzIgbXJuOworCV9fdTMyIG5wYWdlczsKKwlfX3U2NCBzdGFydDsKKwlfX3U2 NCBsZW5ndGg7CisKKwlfX3U2NCBwYWdlczsKK307CisKK3N0cnVjdCB2cmRtYV9yc3BfbWFwX21y X3NnIHsKKwlfX3UzMiBucGFnZXM7Cit9OworCiAjZGVmaW5lIFZSRE1BX0NUUkxfT0sJMAogI2Rl ZmluZSBWUkRNQV9DVFJMX0VSUgkxCiAKZGlmZiAtLWdpdCBhL2xpbnV4LTYuMTYuOC9kcml2ZXJz L2luZmluaWJhbmQvaHcvdmlydGlvL3ZyZG1hX2liLmMgYi9saW51eC02LjE2LjgvZHJpdmVycy9p bmZpbmliYW5kL2h3L3ZpcnRpby92cmRtYV9pYi5jCmluZGV4IGI0YzE2ZGRiYi4uNzM4OTM1ZTNk IDEwMDY0NAotLS0gYS9saW51eC02LjE2LjgvZHJpdmVycy9pbmZpbmliYW5kL2h3L3ZpcnRpby92 cmRtYV9pYi5jCisrKyBiL2xpbnV4LTYuMTYuOC9kcml2ZXJzL2luZmluaWJhbmQvaHcvdmlydGlv L3ZyZG1hX2liLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxyZG1hL2liX3VtZW0uaD4K ICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9hZGRyLmg+Cisj aW5jbHVkZSA8bGludXgvbW1fdHlwZXMuaD4KIAogI2luY2x1ZGUgInZyZG1hLmgiCiAjaW5jbHVk ZSAidnJkbWFfZGV2LmgiCkBAIC0yMSw2ICsyMiw4IEBACiAjaW5jbHVkZSAidnJkbWFfbW1hcC5o IgogI2luY2x1ZGUgInZyZG1hX3F1ZXVlLmgiCiAKKyNkZWZpbmUgVlJUSU9fUkRNQV9QQUdFX1BF Ul9UQkwgNTEyCisKIC8qKgogICogY21kX3N0ciAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB2 aXJ0aW8gUkRNQSBjb250cm9sIGNvbW1hbmRzCiAgKgpAQCAtMTY3Nyw2ICsxNjgwLDI0OCBAQCBz dGF0aWMgaW50IHZyZG1hX2Rlc3Ryb3lfYWgoc3RydWN0IGliX2FoICppYmFoLCB1MzIgZmxhZ3Mp CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHZyZG1hX2dldF9md192ZXJfc3RyKHN0cnVj dCBpYl9kZXZpY2UgKmRldmljZSwgY2hhciAqc3RyKQoreworCXNucHJpbnRmKHN0ciwgSUJfRldf VkVSU0lPTl9OQU1FX01BWCwgIiVkLiVkLiVkXG4iLCAxLCAwLCAwKTsKK30KKworc3RhdGljIGVu dW0gcmRtYV9saW5rX2xheWVyIHZyZG1hX3BvcnRfbGlua19sYXllcihzdHJ1Y3QgaWJfZGV2aWNl ICppYmRldiwKKwkJCQkJCSB1MzIgcG9ydCkKK3sKKwlyZXR1cm4gSUJfTElOS19MQVlFUl9FVEhF Uk5FVDsKK30KKworLyoqCisgKiB2cmRtYV9zZXRfcGFnZSAtIENhbGxiYWNrIHRvIGNvbGxlY3Qg cGh5c2ljYWwgcGFnZXMgZnJvbSBzY2F0dGVybGlzdAorICogQGlibXI6CU1lbW9yeSByZWdpb24g YmVpbmcgbWFwcGVkCisgKiBAYWRkcjoJUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBw YWdlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaWJfc2dfdG9fcGFnZXMoKSBm b3IgZWFjaCBwYWdlIGluIHRoZSBTRyBsaXN0LgorICogSXQgc3RvcmVzIHRoZSBwaHlzaWNhbCBh ZGRyZXNzIGludG8gYSB0d28tbGV2ZWwgcGFnZSB0YWJsZToKKyAqICAgLSBMZXZlbCAxOiBBcnJh eSBvZiBwb2ludGVycyB0byBMMiB0YWJsZXMgKDUxMiBlbnRyaWVzIGVhY2gpCisgKiAgIC0gTGV2 ZWwgMjogRWFjaCBob2xkcyB1cCB0byA1MTIgcGFnZSBhZGRyZXNzZXMKKyAqCisgKiBUaGUgbGF5 b3V0IGFsbG93cyBlZmZpY2llbnQgRE1BIG1hcHBpbmcgb2YgbGFyZ2UgTVJzIHdpdGhvdXQgYWxs b2NhdGluZyBvbmUgaHVnZSBhcnJheS4KKyAqCisgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBpYl9z Z190b19wYWdlcygpOyBtYXkgc2xlZXAgaWYgR0ZQX0tFUk5FTCB1c2VkIGludGVybmFsbHkuCisg KiBSZXR1cm46CisgKiAqIDAgb24gc3VjY2VzcworICogKiAtRU5PTUVNIGlmIG51bWJlciBvZiBw YWdlcyBleGNlZWRzIHByZS1hbGxvY2F0ZWQgbGltaXQKKyAqLworc3RhdGljIGludCB2cmRtYV9z ZXRfcGFnZShzdHJ1Y3QgaWJfbXIgKmlibXIsIHU2NCBhZGRyKQoreworCXN0cnVjdCB2cmRtYV9t ciAqbXIgPSB0b192bXIoaWJtcik7CisKKwlpZiAobXItPm5wYWdlcyA+PSBtci0+bWF4X3BhZ2Vz KSB7CisJCXByX2RlYnVnKCJ2UkRNQTogdG9vIG1hbnkgcGFnZXMgZm9yIE1SIChtYXg9JXUpXG4i LCBtci0+bWF4X3BhZ2VzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogVHdvLWxldmVs IGluZGV4aW5nOiBbTDEgaW5kZXhdW0wyIG9mZnNldF0gKi8KKwltci0+cGFnZXNfa1ttci0+bnBh Z2VzIC8gVlJUSU9fUkRNQV9QQUdFX1BFUl9UQkxdW21yLT5ucGFnZXMgJSBWUlRJT19SRE1BX1BB R0VfUEVSX1RCTF0gPSBhZGRyOworCW1yLT5ucGFnZXMrKzsKKwlyZXR1cm4gMDsKK30KKworLyoq CisgKiB2cmRtYV9tYXBfbXJfc2cgLSBNYXAgc2NhdHRlci1nYXRoZXIgbGlzdCBpbnRvIE1SJ3Mg cGFnZSB0YWJsZSBhbmQgbm90aWZ5IGRldmljZQorICogQGlibXI6CVRoZSBtZW1vcnkgcmVnaW9u IHRvIG1hcAorICogQHNnOgkJU2NhdHRlcmxpc3QgZGVzY3JpYmluZyB1c2VyL2tlcm5lbCBtZW1v cnkgY2h1bmtzCisgKiBAc2dfbmVudHM6CU51bWJlciBvZiBlbnRyaWVzIGluIHNnCisgKiBAc2df b2Zmc2V0OglPcHRpb25hbCBvZmZzZXQgd2l0aGluIGZpcnN0IHNnIGVsZW1lbnQgKGlnbm9yZWQg aGVyZSkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uOgorICogICAxLiBXYWxrcyB0aGUgU0cgbGlzdCB2 aWEgaWJfc2dfdG9fcGFnZXMoKQorICogICAyLiBQb3B1bGF0ZXMgc29mdHdhcmUgcGFnZSB0YWJs ZSB1c2luZyB2cmRtYV9zZXRfcGFnZSgpCisgKiAgIDMuIFNlbmRzIFZJUlRJT19SRE1BX0NNRF9N QVBfTVJfU0cgdG8gaW5mb3JtIGJhY2tlbmQgYWJvdXQgSU9WQSByYW5nZSBhbmQgcGFnZSBsaXN0 CisgKgorICogTm90ZTogVGhlIGFjdHVhbCBETUEgbWFwcGluZyB3YXMgYWxyZWFkeSBkb25lIGR1 cmluZyBpYl91bWVtX2dldCgpIG9yIGdldF9kbWFfbXIoKS4KKyAqICAgICAgIFRoaXMgb25seSBz ZXRzIHVwIGhhcmR3YXJlLXZpc2libGUgbWV0YWRhdGEuCisgKgorICogQ29udGV4dDogQ2FuIHNs ZWVwIChjYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0KS4KKyAqIFJldHVybjoKKyAqICogTnVtYmVy IG9mIHN1Y2Nlc3NmdWxseSBtYXBwZWQgc2cgZW50cmllcyAoPjApCisgKiAqIE5lZ2F0aXZlIGVy cm5vIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCB2cmRtYV9tYXBfbXJfc2coc3RydWN0IGli X21yICppYm1yLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkgICAgaW50IHNnX25lbnRzLCB1 bnNpZ25lZCBpbnQgKnNnX29mZnNldCkKK3sKKwlzdHJ1Y3QgdnJkbWFfZGV2ICp2ZGV2ID0gdG9f dmRldihpYm1yLT5kZXZpY2UpOworCXN0cnVjdCB2cmRtYV9tciAqbXIgPSB0b192bXIoaWJtcik7 CisJc3RydWN0IHZyZG1hX2NtZF9tYXBfbXJfc2cgKmNtZDsKKwlzdHJ1Y3QgdnJkbWFfcnNwX21h cF9tcl9zZyAqcnNwOworCXN0cnVjdCBzY2F0dGVybGlzdCBpbiwgb3V0OworCWludCBtYXBwZWQ7 CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQp CisJCXJldHVybiAtRU5PTUVNOworCisJcnNwID0ga3phbGxvYyhzaXplb2YoKnJzcCksIEdGUF9L RVJORUwpOworCWlmICghcnNwKSB7CisJCWtmcmVlKGNtZCk7CisJCXJldHVybiAtRU5PTUVNOwor CX0KKworCS8qIFJlc2V0IHBhZ2UgY291bnRlciBiZWZvcmUgdHJhdmVyc2FsICovCisJbXItPm5w YWdlcyA9IDA7CisKKwkvKiBVc2UgUkRNQSBjb3JlIGhlbHBlciB0byB3YWxrIFNHIGFuZCBjYWxs IHZyZG1hX3NldF9wYWdlKCkgcGVyIHBhZ2UgKi8KKwltYXBwZWQgPSBpYl9zZ190b19wYWdlcyhp Ym1yLCBzZywgc2dfbmVudHMsIHNnX29mZnNldCwgdnJkbWFfc2V0X3BhZ2UpOworCWlmIChtYXBw ZWQgPCAwKSB7CisJCWRldl9lcnIoJnZkZXYtPnZkZXYtPmRldiwgIkZhaWxlZCB0byBtYXAgU0cg dG8gcGFnZXM6ICVkXG4iLCBtYXBwZWQpOworCQlrZnJlZShyc3ApOworCQlrZnJlZShjbWQpOwor CQlyZXR1cm4gbWFwcGVkOworCX0KKworCS8qIFByZXBhcmUgY29tbWFuZCBmb3IgZGV2aWNlIG5v dGlmaWNhdGlvbiAqLworCWNtZC0+bXJuID0gbXItPm1yX2hhbmRsZTsKKwljbWQtPnN0YXJ0ID0g aWJtci0+aW92YTsKKwljbWQtPmxlbmd0aCA9IGlibXItPmxlbmd0aDsKKwljbWQtPm5wYWdlcyA9 IG1yLT5ucGFnZXM7CisJY21kLT5wYWdlcyA9IG1yLT5kbWFfcGFnZXM7IC8qIFByZS1ETUEtbWFw cGVkIGFycmF5IG9mIHBhZ2UgYWRkcnMgKi8KKworCXNnX2luaXRfb25lKCZpbiwgY21kLCBzaXpl b2YoKmNtZCkpOworCXNnX2luaXRfb25lKCZvdXQsIHJzcCwgc2l6ZW9mKCpyc3ApKTsKKworCS8q IE5vdGlmeSBiYWNrZW5kIGFib3V0IG5ldyBtYXBwaW5nIChvcHRpb25hbCBvcHRpbWl6YXRpb24p ICovCisJaW50IHJjID0gdnJkbWFfZXhlY192ZXJic19jbWQodmRldiwgVklSVElPX1JETUFfQ01E X01BUF9NUl9TRywgJmluLCAmb3V0KTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycigmdmRldi0+dmRl di0+ZGV2LAorCQkJIlZJUlRJT19SRE1BX0NNRF9NQVBfTVJfU0cgZmFpbGVkIGZvciBtcm49MHgl eCwgZXJyPSVkXG4iLAorCQkJbXItPm1yX2hhbmRsZSwgcmMpOworCQlyYyA9IC1FSU87CisJCWdv dG8gb3V0X2ZyZWU7CisJfQorCisJLyogU3VjY2VzczogcmV0dXJuIG51bWJlciBvZiBwcm9jZXNz ZWQgc2cgZW50cmllcyAqLworCWtmcmVlKHJzcCk7CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gbWFw cGVkOworCitvdXRfZnJlZToKKwlrZnJlZShyc3ApOworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJj OworfQorCisvKioKKyAqIHZyZG1hX21tYXAgLSBNYXAgZGV2aWNlIG1lbW9yeSAodnJpbmcsIHVi dWYsIGRvb3JiZWxsKSBpbnRvIHVzZXIgc3BhY2UKKyAqIEBjdHg6CVVzZXIncyBSRE1BIGNvbnRl eHQKKyAqIEB2bWE6CVZNQSBkZXNjcmliaW5nIHRoZSBtYXBwaW5nIHJlcXVlc3QKKyAqCisgKiBN YXBzIG1lbW9yeSByZWdpb25zIGFzc29jaWF0ZWQgd2l0aCBRUC9DUSB2aXJ0cXVldWVzIGludG8g dXNlciBzcGFjZS4KKyAqIFN1cHBvcnRzIHRocmVlIGNvbXBvbmVudHM6CisgKiAgIC0gdnJpbmcg ZGVzY3JpcHRvcnMgKHNoYXJlZCByaW5nIGJ1ZmZlcikKKyAqICAgLSB1c2VyIGJ1ZmZlciAob3B0 aW9uYWwgZGF0YSBleGNoYW5nZSBhcmVhKQorICogICAtIGZhc3QgZG9vcmJlbGwgcGFnZSAoaWYg ZW5hYmxlZCkKKyAqCisgKiBVc2VzIFBGTi1iYXNlZCByZW1hcHBpbmcgZm9yIG5vcm1hbCBtZW1v cnkgYW5kIEkvTyByZW1hcHBpbmcgZm9yIGRvb3JiZWxscy4KKyAqCisgKiBDb250ZXh0OiBDYWxs ZWQgZHVyaW5nIG1tYXAoKSBpbiBwcm9jZXNzIGNvbnRleHQuCisgKiBSZXR1cm46CisgKiAqIDAg b24gc3VjY2VzcworICogKiAtRUlOVkFMIGZvciBpbnZhbGlkIHBhcmFtZXRlcnMgb3IgbGF5b3V0 IG1pc21hdGNoCisgKiAqIC1FQUdBSU4vLUVGQVVMVCBpZiByZW1hcCBmYWlscworICovCitpbnQg dnJkbWFfbW1hcChzdHJ1Y3QgaWJfdWNvbnRleHQgKmN0eCwgc3RydWN0IHZtX2FyZWFfc3RydWN0 ICp2bWEpCit7CisJc3RydWN0IHZyZG1hX3Vjb250ZXh0ICp1Y3R4ID0gdG9fdnVjb250ZXh0KGN0 eCk7CisJc2l6ZV90IHJlcXVlc3RlZF9zaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0 OworCXN0cnVjdCByZG1hX3VzZXJfbW1hcF9lbnRyeSAqcmRtYV9lbnRyeTsKKwlzdHJ1Y3QgdnJk bWFfdXNlcl9tbWFwX2VudHJ5ICplbnRyeTsKKwlpbnQgcmM7CisKKwkvKiBNdXN0IGJlIHBhZ2Ut YWxpZ25lZCAqLworCWlmICh2bWEtPnZtX3N0YXJ0ICYgKFBBR0VfU0laRSAtIDEpKSB7CisJCXBy X3dhcm4oInZSRE1BOiBtbWFwIHN0YXJ0IG5vdCBwYWdlIGFsaWduZWQ6ICUjbHhcbiIsIHZtYS0+ dm1fc3RhcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBMb29rIHVwIHRoZSByZWdp c3RlcmVkIG1tYXAgZW50cnkgKi8KKwlyZG1hX2VudHJ5ID0gcmRtYV91c2VyX21tYXBfZW50cnlf Z2V0KCZ1Y3R4LT5pYnVjb250ZXh0LCB2bWEpOworCWlmICghcmRtYV9lbnRyeSkgeworCQlwcl9l cnIoInZSRE1BOiBtbWFwIGxvb2t1cCBmYWlsZWQ6IHBnb2ZmPSVsdSBzaXplPSV6dVxuIiwKKwkJ ICAgICAgIHZtYS0+dm1fcGdvZmYsIHJlcXVlc3RlZF9zaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCWVudHJ5ID0gdG9fdmVudHJ5KHJkbWFfZW50cnkpOworCisJc3dpdGNoIChlbnRyeS0+ bW1hcF90eXBlKSB7CisJY2FzZSBWUkRNQV9NTUFQX0NROgorCWNhc2UgVlJETUFfTU1BUF9RUDoK Kwl7CisJCXVuc2lnbmVkIGxvbmcgdnFfc2l6ZSA9IFBBR0VfQUxJR04odnJpbmdfc2l6ZSh2aXJ0 cXVldWVfZ2V0X3ZyaW5nX3NpemUoZW50cnktPnZxKSwKKwkJCQkJCQkgICAgICBTTVBfQ0FDSEVf QllURVMpKTsKKwkJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplID0gdnFfc2l6ZSArIGVudHJ5LT51 YnVmX3NpemU7CisKKwkJaWYgKHVjdHgtPmRldi0+ZmFzdF9kb29yYmVsbCAmJiBlbnRyeS0+bW1h cF90eXBlID09IFZSRE1BX01NQVBfUVApCisJCQl0b3RhbF9zaXplICs9IFBBR0VfU0laRTsKKwor CQlpZiAocmVxdWVzdGVkX3NpemUgIT0gdG90YWxfc2l6ZSkgeworCQkJV0FSTigxLCAibW1hcCBz aXplIG1pc21hdGNoOiBnb3Q9JXp1LCBleHBlY3RlZD0lbHVcbiIsCisJCQkgICAgIHJlcXVlc3Rl ZF9zaXplLCB0b3RhbF9zaXplKTsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X3B1dDsK KwkJfQorCisJCS8qIE1hcCB2cmluZyBkZXNjcmlwdG9yIHRhYmxlICovCisJCXJjID0gcmVtYXBf cGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKKwkJCQkgICAgIHBhZ2VfdG9fcGZuKHZpcnRf dG9fcGFnZSh2aXJ0cXVldWVfZ2V0X3ZyaW5nKGVudHJ5LT52cSktPmRlc2MpKSwKKwkJCQkgICAg IHZxX3NpemUsIHZtYS0+dm1fcGFnZV9wcm90KTsKKwkJaWYgKHJjKSB7CisJCQlwcl93YXJuKCJ2 UkRNQTogcmVtYXAgdnJpbmcgZmFpbGVkOiAlZFxuIiwgcmMpOworCQkJZ290byBvdXRfcHV0Owor CQl9CisKKwkJLyogTWFwIHVzZXIgYnVmZmVyIChzaGFyZWQgZGF0YSByZWdpb24pICovCisJCXJj ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCArIHZxX3NpemUsCisJCQkJICAg ICBwYWdlX3RvX3Bmbih2aXJ0X3RvX3BhZ2UoZW50cnktPnVzZXJfYnVmKSksCisJCQkJICAgICBl bnRyeS0+dWJ1Zl9zaXplLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CisJCWlmIChyYykgeworCQkJcHJf d2FybigidlJETUE6IHJlbWFwIHVidWYgZmFpbGVkOiAlZFxuIiwgcmMpOworCQkJZ290byBvdXRf cHV0OworCQl9CisKKwkJLyogT3B0aW9uYWxseSBtYXAgZmFzdCBkb29yYmVsbCByZWdpc3RlciAo UVAgb25seSkgKi8KKwkJaWYgKHVjdHgtPmRldi0+ZmFzdF9kb29yYmVsbCAmJiBlbnRyeS0+bW1h cF90eXBlID09IFZSRE1BX01NQVBfUVApIHsKKwkJCXVuc2lnbmVkIGxvbmcgZGJfYWRkciA9IHZt YS0+dm1fc3RhcnQgKyB2cV9zaXplICsgZW50cnktPnVidWZfc2l6ZTsKKwkJCXN0cnVjdCB2aXJ0 cXVldWUgKnZxID0gZW50cnktPnZxOworCisJCQlyYyA9IGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEs IGRiX2FkZHIsCisJCQkJCQl2bWFsbG9jX3RvX3Bmbih2cS0+cHJpdiksCisJCQkJCQlQQUdFX1NJ WkUsIHZtYS0+dm1fcGFnZV9wcm90KTsKKwkJCWlmIChyYykgeworCQkJCXByX3dhcm4oInZSRE1B OiByZW1hcCBkb29yYmVsbCBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCQkJZ290byBvdXRfcHV0Owor CQkJfQorCQl9CisKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXByX2VycigidlJETUE6IGlu dmFsaWQgbW1hcCB0eXBlICVkXG4iLCBlbnRyeS0+bW1hcF90eXBlKTsKKwkJcmMgPSAtRUlOVkFM OworCQlnb3RvIG91dF9wdXQ7CisJfQorCisJLyogU3VjY2VzcyAqLworCXJkbWFfdXNlcl9tbWFw X2VudHJ5X3B1dChyZG1hX2VudHJ5KTsKKwlyZXR1cm4gMDsKKworb3V0X3B1dDoKKwlyZG1hX3Vz ZXJfbW1hcF9lbnRyeV9wdXQocmRtYV9lbnRyeSk7CisJcmV0dXJuIHJjOworfQorCit2b2lkIHZy ZG1hX21tYXBfZnJlZShzdHJ1Y3QgcmRtYV91c2VyX21tYXBfZW50cnkgKnJkbWFfZW50cnkpCit7 CisJc3RydWN0IHZyZG1hX3VzZXJfbW1hcF9lbnRyeSAqZW50cnkgPSB0b192ZW50cnkocmRtYV9l bnRyeSk7CisKKwlrZnJlZShlbnRyeSk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2 aWNlX29wcyB2cmRtYV9kZXZfb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS51dmVy YnNfYWJpX3ZlciA9IFZJUlRJT19SRE1BX0FCSV9WRVJTSU9OLApAQCAtMTcwMSw2ICsxOTQ2LDEx IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyB2cmRtYV9kZXZfb3BzID0gewog CS5kZWFsbG9jX3Vjb250ZXh0ID0gdnJkbWFfZGVhbGxvY191Y29udGV4dCwKIAkuY3JlYXRlX2Fo ID0gdnJkbWFfY3JlYXRlX2FoLAogCS5kZXN0cm95X2FoID0gdnJkbWFfZGVzdHJveV9haCwKKwku Z2V0X2Rldl9md19zdHIgPSB2cmRtYV9nZXRfZndfdmVyX3N0ciwKKwkuZ2V0X2xpbmtfbGF5ZXIg PSB2cmRtYV9wb3J0X2xpbmtfbGF5ZXIsCisJLm1hcF9tcl9zZyA9IHZyZG1hX21hcF9tcl9zZywK KwkubW1hcCA9IHZyZG1hX21tYXAsCisJLm1tYXBfZnJlZSA9IHZyZG1hX21tYXBfZnJlZSwJCQog fTsKIAogLyoqCi0tIAoyLjQzLjAKCg==