From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: [PATCH RFC v5 02/13] vhost: use batched version by default Date: Sun, 7 Jun 2020 10:11:25 -0400 Message-ID: <20200607141057.704085-3-mst@redhat.com> References: <20200607141057.704085-1-mst@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20200607141057.704085-1-mst@redhat.com> Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" To: linux-kernel@vger.kernel.org Cc: netdev@vger.kernel.org, eperezma@redhat.com, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org List-Id: virtualization@lists.linuxfoundation.org QXMgdGVzdGluZyBzaG93cyBubyBwZXJmb3JtYW5jZSBjaGFuZ2UsIHN3aXRjaCB0byB0aGF0IG5v dy4KClNpZ25lZC1vZmYtYnk6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+ClNp Z25lZC1vZmYtYnk6IEV1Z2VuaW8gUMOpcmV6IDxlcGVyZXptYUByZWRoYXQuY29tPgpMaW5rOiBo dHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjAwNDAxMTgzMTE4LjgzMzQtMy1lcGVyZXptYUBy ZWRoYXQuY29tClNpZ25lZC1vZmYtYnk6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5j b20+Ci0tLQogZHJpdmVycy92aG9zdC92aG9zdC5jIHwgMjUxICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy92aG9zdC92aG9zdC5oIHwgICA0IC0KIDIg ZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyNTMgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCmluZGV4 IGU2ODJlZDU1MTU4Ny4uMzNhNzJlZGIzY2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zo b3N0LmMKKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCkBAIC0yMDc4LDI1MyArMjA3OCw2IEBA IHN0YXRpYyB1bnNpZ25lZCBuZXh0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0 cnVjdCB2cmluZ19kZXNjICpkZXNjKQogCXJldHVybiBuZXh0OwogfQogCi1zdGF0aWMgaW50IGdl dF9pbmRpcmVjdChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKLQkJCXN0cnVjdCBpb3ZlYyBp b3ZbXSwgdW5zaWduZWQgaW50IGlvdl9zaXplLAotCQkJdW5zaWduZWQgaW50ICpvdXRfbnVtLCB1 bnNpZ25lZCBpbnQgKmluX251bSwKLQkJCXN0cnVjdCB2aG9zdF9sb2cgKmxvZywgdW5zaWduZWQg aW50ICpsb2dfbnVtLAotCQkJc3RydWN0IHZyaW5nX2Rlc2MgKmluZGlyZWN0KQotewotCXN0cnVj dCB2cmluZ19kZXNjIGRlc2M7Ci0JdW5zaWduZWQgaW50IGkgPSAwLCBjb3VudCwgZm91bmQgPSAw OwotCXUzMiBsZW4gPSB2aG9zdDMyX3RvX2NwdSh2cSwgaW5kaXJlY3QtPmxlbik7Ci0Jc3RydWN0 IGlvdl9pdGVyIGZyb207Ci0JaW50IHJldCwgYWNjZXNzOwotCi0JLyogU2FuaXR5IGNoZWNrICov Ci0JaWYgKHVubGlrZWx5KGxlbiAlIHNpemVvZiBkZXNjKSkgewotCQl2cV9lcnIodnEsICJJbnZh bGlkIGxlbmd0aCBpbiBpbmRpcmVjdCBkZXNjcmlwdG9yOiAiCi0JCSAgICAgICAibGVuIDB4JWxs eCBub3QgbXVsdGlwbGUgb2YgMHglenhcbiIsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25n KWxlbiwKLQkJICAgICAgIHNpemVvZiBkZXNjKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J cmV0ID0gdHJhbnNsYXRlX2Rlc2ModnEsIHZob3N0NjRfdG9fY3B1KHZxLCBpbmRpcmVjdC0+YWRk ciksIGxlbiwgdnEtPmluZGlyZWN0LAotCQkJICAgICBVSU9fTUFYSU9WLCBWSE9TVF9BQ0NFU1Nf Uk8pOwotCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewotCQlpZiAocmV0ICE9IC1FQUdBSU4pCi0J CQl2cV9lcnIodnEsICJUcmFuc2xhdGlvbiBmYWlsdXJlICVkIGluIGluZGlyZWN0LlxuIiwgcmV0 KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JaW92X2l0ZXJfaW5pdCgmZnJvbSwgUkVBRCwgdnEtPmlu ZGlyZWN0LCByZXQsIGxlbik7Ci0KLQkvKiBXZSB3aWxsIHVzZSB0aGUgcmVzdWx0IGFzIGFuIGFk ZHJlc3MgdG8gcmVhZCBmcm9tLCBzbyBtb3N0Ci0JICogYXJjaGl0ZWN0dXJlcyBvbmx5IG5lZWQg YSBjb21waWxlciBiYXJyaWVyIGhlcmUuICovCi0JcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKLQot CWNvdW50ID0gbGVuIC8gc2l6ZW9mIGRlc2M7Ci0JLyogQnVmZmVycyBhcmUgY2hhaW5lZCB2aWEg YSAxNiBiaXQgbmV4dCBmaWVsZCwgc28KLQkgKiB3ZSBjYW4gaGF2ZSBhdCBtb3N0IDJeMTYgb2Yg dGhlc2UuICovCi0JaWYgKHVubGlrZWx5KGNvdW50ID4gVVNIUlRfTUFYICsgMSkpIHsKLQkJdnFf ZXJyKHZxLCAiSW5kaXJlY3QgYnVmZmVyIGxlbmd0aCB0b28gYmlnOiAlZFxuIiwKLQkJICAgICAg IGluZGlyZWN0LT5sZW4pOwotCQlyZXR1cm4gLUUyQklHOwotCX0KLQotCWRvIHsKLQkJdW5zaWdu ZWQgaW92X2NvdW50ID0gKmluX251bSArICpvdXRfbnVtOwotCQlpZiAodW5saWtlbHkoKytmb3Vu ZCA+IGNvdW50KSkgewotCQkJdnFfZXJyKHZxLCAiTG9vcCBkZXRlY3RlZDogbGFzdCBvbmUgYXQg JXUgIgotCQkJICAgICAgICJpbmRpcmVjdCBzaXplICV1XG4iLAotCQkJICAgICAgIGksIGNvdW50 KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmICh1bmxpa2VseSghY29weV9mcm9tX2l0 ZXJfZnVsbCgmZGVzYywgc2l6ZW9mKGRlc2MpLCAmZnJvbSkpKSB7Ci0JCQl2cV9lcnIodnEsICJG YWlsZWQgaW5kaXJlY3QgZGVzY3JpcHRvcjogaWR4ICVkLCAlenhcbiIsCi0JCQkgICAgICAgaSwg KHNpemVfdCl2aG9zdDY0X3RvX2NwdSh2cSwgaW5kaXJlY3QtPmFkZHIpICsgaSAqIHNpemVvZiBk ZXNjKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmICh1bmxpa2VseShkZXNjLmZsYWdz ICYgY3B1X3RvX3Zob3N0MTYodnEsIFZSSU5HX0RFU0NfRl9JTkRJUkVDVCkpKSB7Ci0JCQl2cV9l cnIodnEsICJOZXN0ZWQgaW5kaXJlY3QgZGVzY3JpcHRvcjogaWR4ICVkLCAlenhcbiIsCi0JCQkg ICAgICAgaSwgKHNpemVfdCl2aG9zdDY0X3RvX2NwdSh2cSwgaW5kaXJlY3QtPmFkZHIpICsgaSAq IHNpemVvZiBkZXNjKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGRlc2MuZmxh Z3MgJiBjcHVfdG9fdmhvc3QxNih2cSwgVlJJTkdfREVTQ19GX1dSSVRFKSkKLQkJCWFjY2VzcyA9 IFZIT1NUX0FDQ0VTU19XTzsKLQkJZWxzZQotCQkJYWNjZXNzID0gVkhPU1RfQUNDRVNTX1JPOwot Ci0JCXJldCA9IHRyYW5zbGF0ZV9kZXNjKHZxLCB2aG9zdDY0X3RvX2NwdSh2cSwgZGVzYy5hZGRy KSwKLQkJCQkgICAgIHZob3N0MzJfdG9fY3B1KHZxLCBkZXNjLmxlbiksIGlvdiArIGlvdl9jb3Vu dCwKLQkJCQkgICAgIGlvdl9zaXplIC0gaW92X2NvdW50LCBhY2Nlc3MpOwotCQlpZiAodW5saWtl bHkocmV0IDwgMCkpIHsKLQkJCWlmIChyZXQgIT0gLUVBR0FJTikKLQkJCQl2cV9lcnIodnEsICJU cmFuc2xhdGlvbiBmYWlsdXJlICVkIGluZGlyZWN0IGlkeCAlZFxuIiwKLQkJCQkJcmV0LCBpKTsK LQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJLyogSWYgdGhpcyBpcyBhbiBpbnB1dCBkZXNjcmlwdG9y LCBpbmNyZW1lbnQgdGhhdCBjb3VudC4gKi8KLQkJaWYgKGFjY2VzcyA9PSBWSE9TVF9BQ0NFU1Nf V08pIHsKLQkJCSppbl9udW0gKz0gcmV0OwotCQkJaWYgKHVubGlrZWx5KGxvZyAmJiByZXQpKSB7 Ci0JCQkJbG9nWypsb2dfbnVtXS5hZGRyID0gdmhvc3Q2NF90b19jcHUodnEsIGRlc2MuYWRkcik7 Ci0JCQkJbG9nWypsb2dfbnVtXS5sZW4gPSB2aG9zdDMyX3RvX2NwdSh2cSwgZGVzYy5sZW4pOwot CQkJCSsrKmxvZ19udW07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBJZiBpdCdzIGFuIG91dHB1 dCBkZXNjcmlwdG9yLCB0aGV5J3JlIGFsbCBzdXBwb3NlZAotCQkJICogdG8gY29tZSBiZWZvcmUg YW55IGlucHV0IGRlc2NyaXB0b3JzLiAqLwotCQkJaWYgKHVubGlrZWx5KCppbl9udW0pKSB7Ci0J CQkJdnFfZXJyKHZxLCAiSW5kaXJlY3QgZGVzY3JpcHRvciAiCi0JCQkJICAgICAgICJoYXMgb3V0 IGFmdGVyIGluOiBpZHggJWRcbiIsIGkpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJ Km91dF9udW0gKz0gcmV0OwotCQl9Ci0JfSB3aGlsZSAoKGkgPSBuZXh0X2Rlc2ModnEsICZkZXNj KSkgIT0gLTEpOwotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIGxvb2tzIGluIHRoZSB2aXJ0cXVl dWUgYW5kIGZvciB0aGUgZmlyc3QgYXZhaWxhYmxlIGJ1ZmZlciwgYW5kIGNvbnZlcnRzCi0gKiBp dCB0byBhbiBpb3ZlYyBmb3IgY29udmVuaWVudCBhY2Nlc3MuICBTaW5jZSBkZXNjcmlwdG9ycyBj b25zaXN0IG9mIHNvbWUKLSAqIG51bWJlciBvZiBvdXRwdXQgdGhlbiBzb21lIG51bWJlciBvZiBp bnB1dCBkZXNjcmlwdG9ycywgaXQncyBhY3R1YWxseSB0d28KLSAqIGlvdmVjcywgYnV0IHdlIHBh Y2sgdGhlbSBpbnRvIG9uZSBhbmQgbm90ZSBob3cgbWFueSBvZiBlYWNoIHRoZXJlIHdlcmUuCi0g KgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBkZXNjcmlwdG9yIG51bWJlciBmb3VuZCwg b3IgdnEtPm51bSAod2hpY2ggaXMKLSAqIG5ldmVyIGEgdmFsaWQgZGVzY3JpcHRvciBudW1iZXIp IGlmIG5vbmUgd2FzIGZvdW5kLiAgQSBuZWdhdGl2ZSBjb2RlIGlzCi0gKiByZXR1cm5lZCBvbiBl cnJvci4gKi8KLWludCB2aG9zdF9nZXRfdnFfZGVzYyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2 cSwKLQkJICAgICAgc3RydWN0IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBpbnQgaW92X3NpemUsCi0J CSAgICAgIHVuc2lnbmVkIGludCAqb3V0X251bSwgdW5zaWduZWQgaW50ICppbl9udW0sCi0JCSAg ICAgIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywgdW5zaWduZWQgaW50ICpsb2dfbnVtKQotewotCXN0 cnVjdCB2cmluZ19kZXNjIGRlc2M7Ci0JdW5zaWduZWQgaW50IGksIGhlYWQsIGZvdW5kID0gMDsK LQl1MTYgbGFzdF9hdmFpbF9pZHg7Ci0JX192aXJ0aW8xNiBhdmFpbF9pZHg7Ci0JX192aXJ0aW8x NiByaW5nX2hlYWQ7Ci0JaW50IHJldCwgYWNjZXNzOwotCi0JLyogQ2hlY2sgaXQgaXNuJ3QgZG9p bmcgdmVyeSBzdHJhbmdlIHRoaW5ncyB3aXRoIGRlc2NyaXB0b3IgbnVtYmVycy4gKi8KLQlsYXN0 X2F2YWlsX2lkeCA9IHZxLT5sYXN0X2F2YWlsX2lkeDsKLQotCWlmICh2cS0+YXZhaWxfaWR4ID09 IHZxLT5sYXN0X2F2YWlsX2lkeCkgewotCQlpZiAodW5saWtlbHkodmhvc3RfZ2V0X2F2YWlsX2lk eCh2cSwgJmF2YWlsX2lkeCkpKSB7Ci0JCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gYWNjZXNzIGF2 YWlsIGlkeCBhdCAlcFxuIiwKLQkJCQkmdnEtPmF2YWlsLT5pZHgpOwotCQkJcmV0dXJuIC1FRkFV TFQ7Ci0JCX0KLQkJdnEtPmF2YWlsX2lkeCA9IHZob3N0MTZfdG9fY3B1KHZxLCBhdmFpbF9pZHgp OwotCi0JCWlmICh1bmxpa2VseSgodTE2KSh2cS0+YXZhaWxfaWR4IC0gbGFzdF9hdmFpbF9pZHgp ID4gdnEtPm51bSkpIHsKLQkJCXZxX2Vycih2cSwgIkd1ZXN0IG1vdmVkIHVzZWQgaW5kZXggZnJv bSAldSB0byAldSIsCi0JCQkJbGFzdF9hdmFpbF9pZHgsIHZxLT5hdmFpbF9pZHgpOwotCQkJcmV0 dXJuIC1FRkFVTFQ7Ci0JCX0KLQotCQkvKiBJZiB0aGVyZSdzIG5vdGhpbmcgbmV3IHNpbmNlIGxh c3Qgd2UgbG9va2VkLCByZXR1cm4KLQkJICogaW52YWxpZC4KLQkJICovCi0JCWlmICh2cS0+YXZh aWxfaWR4ID09IGxhc3RfYXZhaWxfaWR4KQotCQkJcmV0dXJuIHZxLT5udW07Ci0KLQkJLyogT25s eSBnZXQgYXZhaWwgcmluZyBlbnRyaWVzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuCi0JCSAqIGV4cG9z ZWQgYnkgZ3Vlc3QuCi0JCSAqLwotCQlzbXBfcm1iKCk7Ci0JfQotCi0JLyogR3JhYiB0aGUgbmV4 dCBkZXNjcmlwdG9yIG51bWJlciB0aGV5J3JlIGFkdmVydGlzaW5nLCBhbmQgaW5jcmVtZW50Ci0J ICogdGhlIGluZGV4IHdlJ3ZlIHNlZW4uICovCi0JaWYgKHVubGlrZWx5KHZob3N0X2dldF9hdmFp bF9oZWFkKHZxLCAmcmluZ19oZWFkLCBsYXN0X2F2YWlsX2lkeCkpKSB7Ci0JCXZxX2Vycih2cSwg IkZhaWxlZCB0byByZWFkIGhlYWQ6IGlkeCAlZCBhZGRyZXNzICVwXG4iLAotCQkgICAgICAgbGFz dF9hdmFpbF9pZHgsCi0JCSAgICAgICAmdnEtPmF2YWlsLT5yaW5nW2xhc3RfYXZhaWxfaWR4ICUg dnEtPm51bV0pOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQloZWFkID0gdmhvc3QxNl90b19j cHUodnEsIHJpbmdfaGVhZCk7Ci0KLQkvKiBJZiB0aGVpciBudW1iZXIgaXMgc2lsbHksIHRoYXQn cyBhbiBlcnJvci4gKi8KLQlpZiAodW5saWtlbHkoaGVhZCA+PSB2cS0+bnVtKSkgewotCQl2cV9l cnIodnEsICJHdWVzdCBzYXlzIGluZGV4ICV1ID4gJXUgaXMgYXZhaWxhYmxlIiwKLQkJICAgICAg IGhlYWQsIHZxLT5udW0pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBXaGVuIHdlIHN0 YXJ0IHRoZXJlIGFyZSBub25lIG9mIGVpdGhlciBpbnB1dCBub3Igb3V0cHV0LiAqLwotCSpvdXRf bnVtID0gKmluX251bSA9IDA7Ci0JaWYgKHVubGlrZWx5KGxvZykpCi0JCSpsb2dfbnVtID0gMDsK LQotCWkgPSBoZWFkOwotCWRvIHsKLQkJdW5zaWduZWQgaW92X2NvdW50ID0gKmluX251bSArICpv dXRfbnVtOwotCQlpZiAodW5saWtlbHkoaSA+PSB2cS0+bnVtKSkgewotCQkJdnFfZXJyKHZxLCAi RGVzYyBpbmRleCBpcyAldSA+ICV1LCBoZWFkID0gJXUiLAotCQkJICAgICAgIGksIHZxLT5udW0s IGhlYWQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KCsrZm91bmQg PiB2cS0+bnVtKSkgewotCQkJdnFfZXJyKHZxLCAiTG9vcCBkZXRlY3RlZDogbGFzdCBvbmUgYXQg JXUgIgotCQkJICAgICAgICJ2cSBzaXplICV1IGhlYWQgJXVcbiIsCi0JCQkgICAgICAgaSwgdnEt Pm51bSwgaGVhZCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXQgPSB2aG9zdF9nZXRf ZGVzYyh2cSwgJmRlc2MsIGkpOwotCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJdnFfZXJyKHZx LCAiRmFpbGVkIHRvIGdldCBkZXNjcmlwdG9yOiBpZHggJWQgYWRkciAlcFxuIiwKLQkJCSAgICAg ICBpLCB2cS0+ZGVzYyArIGkpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQkJaWYgKGRlc2Mu ZmxhZ3MgJiBjcHVfdG9fdmhvc3QxNih2cSwgVlJJTkdfREVTQ19GX0lORElSRUNUKSkgewotCQkJ cmV0ID0gZ2V0X2luZGlyZWN0KHZxLCBpb3YsIGlvdl9zaXplLAotCQkJCQkgICBvdXRfbnVtLCBp bl9udW0sCi0JCQkJCSAgIGxvZywgbG9nX251bSwgJmRlc2MpOwotCQkJaWYgKHVubGlrZWx5KHJl dCA8IDApKSB7Ci0JCQkJaWYgKHJldCAhPSAtRUFHQUlOKQotCQkJCQl2cV9lcnIodnEsICJGYWls dXJlIGRldGVjdGVkICIKLQkJCQkJCSJpbiBpbmRpcmVjdCBkZXNjcmlwdG9yIGF0IGlkeCAlZFxu IiwgaSk7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYg KGRlc2MuZmxhZ3MgJiBjcHVfdG9fdmhvc3QxNih2cSwgVlJJTkdfREVTQ19GX1dSSVRFKSkKLQkJ CWFjY2VzcyA9IFZIT1NUX0FDQ0VTU19XTzsKLQkJZWxzZQotCQkJYWNjZXNzID0gVkhPU1RfQUND RVNTX1JPOwotCQlyZXQgPSB0cmFuc2xhdGVfZGVzYyh2cSwgdmhvc3Q2NF90b19jcHUodnEsIGRl c2MuYWRkciksCi0JCQkJICAgICB2aG9zdDMyX3RvX2NwdSh2cSwgZGVzYy5sZW4pLCBpb3YgKyBp b3ZfY291bnQsCi0JCQkJICAgICBpb3Zfc2l6ZSAtIGlvdl9jb3VudCwgYWNjZXNzKTsKLQkJaWYg KHVubGlrZWx5KHJldCA8IDApKSB7Ci0JCQlpZiAocmV0ICE9IC1FQUdBSU4pCi0JCQkJdnFfZXJy KHZxLCAiVHJhbnNsYXRpb24gZmFpbHVyZSAlZCBkZXNjcmlwdG9yIGlkeCAlZFxuIiwKLQkJCQkJ cmV0LCBpKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJaWYgKGFjY2VzcyA9PSBWSE9TVF9BQ0NF U1NfV08pIHsKLQkJCS8qIElmIHRoaXMgaXMgYW4gaW5wdXQgZGVzY3JpcHRvciwKLQkJCSAqIGlu Y3JlbWVudCB0aGF0IGNvdW50LiAqLwotCQkJKmluX251bSArPSByZXQ7Ci0JCQlpZiAodW5saWtl bHkobG9nICYmIHJldCkpIHsKLQkJCQlsb2dbKmxvZ19udW1dLmFkZHIgPSB2aG9zdDY0X3RvX2Nw dSh2cSwgZGVzYy5hZGRyKTsKLQkJCQlsb2dbKmxvZ19udW1dLmxlbiA9IHZob3N0MzJfdG9fY3B1 KHZxLCBkZXNjLmxlbik7Ci0JCQkJKysqbG9nX251bTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8q IElmIGl0J3MgYW4gb3V0cHV0IGRlc2NyaXB0b3IsIHRoZXkncmUgYWxsIHN1cHBvc2VkCi0JCQkg KiB0byBjb21lIGJlZm9yZSBhbnkgaW5wdXQgZGVzY3JpcHRvcnMuICovCi0JCQlpZiAodW5saWtl bHkoKmluX251bSkpIHsKLQkJCQl2cV9lcnIodnEsICJEZXNjcmlwdG9yIGhhcyBvdXQgYWZ0ZXIg aW46ICIKLQkJCQkgICAgICAgImlkeCAlZFxuIiwgaSk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0J CQl9Ci0JCQkqb3V0X251bSArPSByZXQ7Ci0JCX0KLQl9IHdoaWxlICgoaSA9IG5leHRfZGVzYyh2 cSwgJmRlc2MpKSAhPSAtMSk7Ci0KLQkvKiBPbiBzdWNjZXNzLCBpbmNyZW1lbnQgYXZhaWwgaW5k ZXguICovCi0JdnEtPmxhc3RfYXZhaWxfaWR4Kys7Ci0KLQkvKiBBc3N1bWUgbm90aWZpY2F0aW9u cyBmcm9tIGd1ZXN0IGFyZSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50LAotCSAqIGlmIHRoZXkgYXJl bid0IHdlIHdvdWxkIG5lZWQgdG8gdXBkYXRlIGF2YWlsX2V2ZW50IGluZGV4LiAqLwotCUJVR19P TighKHZxLT51c2VkX2ZsYWdzICYgVlJJTkdfVVNFRF9GX05PX05PVElGWSkpOwotCXJldHVybiBo ZWFkOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZ2V0X3ZxX2Rlc2MpOwotCiBzdGF0aWMg c3RydWN0IHZob3N0X2Rlc2MgKnBlZWtfc3BsaXRfZGVzYyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVl ICp2cSkKIHsKIAlCVUdfT04oIXZxLT5uZGVzY3MpOwpAQCAtMjUzOCw3ICsyMjkxLDcgQEAgc3Rh dGljIGludCBmZXRjaF9kZXNjcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKICAqIFRoaXMg ZnVuY3Rpb24gcmV0dXJucyB0aGUgZGVzY3JpcHRvciBudW1iZXIgZm91bmQsIG9yIHZxLT5udW0g KHdoaWNoIGlzCiAgKiBuZXZlciBhIHZhbGlkIGRlc2NyaXB0b3IgbnVtYmVyKSBpZiBub25lIHdh cyBmb3VuZC4gIEEgbmVnYXRpdmUgY29kZSBpcwogICogcmV0dXJuZWQgb24gZXJyb3IuICovCi1p bnQgdmhvc3RfZ2V0X3ZxX2Rlc2NfYmF0Y2goc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCitp bnQgdmhvc3RfZ2V0X3ZxX2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiAJCSAgICAg IHN0cnVjdCBpb3ZlYyBpb3ZbXSwgdW5zaWduZWQgaW50IGlvdl9zaXplLAogCQkgICAgICB1bnNp Z25lZCBpbnQgKm91dF9udW0sIHVuc2lnbmVkIGludCAqaW5fbnVtLAogCQkgICAgICBzdHJ1Y3Qg dmhvc3RfbG9nICpsb2csIHVuc2lnbmVkIGludCAqbG9nX251bSkKQEAgLTI2MTMsNyArMjM2Niw3 IEBAIGludCB2aG9zdF9nZXRfdnFfZGVzY19iYXRjaChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2 cSwKIAogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9nZXRfdnFfZGVz Y19iYXRjaCk7CitFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9nZXRfdnFfZGVzYyk7CiAKIC8qIFJl dmVyc2UgdGhlIGVmZmVjdCBvZiB2aG9zdF9nZXRfdnFfZGVzYy4gVXNlZnVsIGZvciBlcnJvciBo YW5kbGluZy4gKi8KIHZvaWQgdmhvc3RfZGlzY2FyZF92cV9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0 cXVldWUgKnZxLCBpbnQgbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2Ry aXZlcnMvdmhvc3Qvdmhvc3QuaAppbmRleCA4NzA4OWQ1MTQ5MGQuLjhhN2I0MTkxYmM0OCAxMDA2 NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3Qu aApAQCAtMTg5LDEwICsxODksNiBAQCBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9z dF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZwogYm9vbCB2aG9z dF92cV9hY2Nlc3Nfb2soc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpOwogYm9vbCB2aG9zdF9s b2dfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF9kZXYgKik7CiAKLWludCB2aG9zdF9nZXRfdnFfZGVz Y19iYXRjaChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosCi0JCSAgICAgIHN0cnVjdCBpb3ZlYyBp b3ZbXSwgdW5zaWduZWQgaW50IGlvdl9jb3VudCwKLQkJICAgICAgdW5zaWduZWQgaW50ICpvdXRf bnVtLCB1bnNpZ25lZCBpbnQgKmluX251bSwKLQkJICAgICAgc3RydWN0IHZob3N0X2xvZyAqbG9n LCB1bnNpZ25lZCBpbnQgKmxvZ19udW0pOwogaW50IHZob3N0X2dldF92cV9kZXNjKHN0cnVjdCB2 aG9zdF92aXJ0cXVldWUgKiwKIAkJICAgICAgc3RydWN0IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBp bnQgaW92X2NvdW50LAogCQkgICAgICB1bnNpZ25lZCBpbnQgKm91dF9udW0sIHVuc2lnbmVkIGlu dCAqaW5fbnVtLAotLSAKTVNUCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlz dHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3Jn L21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24=