From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: [PATCH RFC v6 02/11] vhost: use batched get_vq_desc version Date: Mon, 8 Jun 2020 08:52:56 -0400 Message-ID: <20200608125238.728563-3-mst@redhat.com> References: <20200608125238.728563-1-mst@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20200608125238.728563-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+Ci0tLQogZHJpdmVycy92aG9zdC90ZXN0LmMgIHwgICAyICstCiBkcml2ZXJzL3Zob3N0L3Zo b3N0LmMgfCAzMTggKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBk cml2ZXJzL3Zob3N0L3Zob3N0LmggfCAgIDcgKy0KIDMgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0 aW9ucygrKSwgMjYyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdGVz dC5jIGIvZHJpdmVycy92aG9zdC90ZXN0LmMKaW5kZXggMDQ2NjkyMWY0NzcyLi43ZDY5Nzc4YWFh MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvdGVzdC5jCisrKyBiL2RyaXZlcnMvdmhvc3Qv dGVzdC5jCkBAIC0xMTksNyArMTE5LDcgQEAgc3RhdGljIGludCB2aG9zdF90ZXN0X29wZW4oc3Ry dWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCiAJZGV2ID0gJm4tPmRldjsKIAl2cXNb VkhPU1RfVEVTVF9WUV0gPSAmbi0+dnFzW1ZIT1NUX1RFU1RfVlFdOwogCW4tPnZxc1tWSE9TVF9U RVNUX1ZRXS5oYW5kbGVfa2ljayA9IGhhbmRsZV92cV9raWNrOwotCXZob3N0X2Rldl9pbml0KGRl diwgdnFzLCBWSE9TVF9URVNUX1ZRX01BWCwgVUlPX01BWElPViwKKwl2aG9zdF9kZXZfaW5pdChk ZXYsIHZxcywgVkhPU1RfVEVTVF9WUV9NQVgsIFVJT19NQVhJT1YgKyA2NCwKIAkJICAgICAgIFZI T1NUX1RFU1RfUEtUX1dFSUdIVCwgVkhPU1RfVEVTVF9XRUlHSFQsIHRydWUsIE5VTEwpOwogCiAJ Zi0+cHJpdmF0ZV9kYXRhID0gbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBi L2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwppbmRleCAxODBiN2I1OGM3NmIuLjQxZDZiMTMyYzIzNCAx MDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhv c3QuYwpAQCAtMzA0LDYgKzMwNCw3IEBAIHN0YXRpYyB2b2lkIHZob3N0X3ZxX3Jlc2V0KHN0cnVj dCB2aG9zdF9kZXYgKmRldiwKIHsKIAl2cS0+bnVtID0gMTsKIAl2cS0+bmRlc2NzID0gMDsKKwl2 cS0+Zmlyc3RfZGVzYyA9IDA7CiAJdnEtPmRlc2MgPSBOVUxMOwogCXZxLT5hdmFpbCA9IE5VTEw7 CiAJdnEtPnVzZWQgPSBOVUxMOwpAQCAtMzcyLDYgKzM3MywxMSBAQCBzdGF0aWMgaW50IHZob3N0 X3dvcmtlcih2b2lkICpkYXRhKQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZob3N0X3Zx X251bV9iYXRjaF9kZXNjcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKKwlyZXR1cm4g dnEtPm1heF9kZXNjcyAtIFVJT19NQVhJT1Y7Cit9CisKIHN0YXRpYyB2b2lkIHZob3N0X3ZxX2Zy ZWVfaW92ZWNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQogewogCWtmcmVlKHZxLT5kZXNj cyk7CkBAIC0zOTQsNiArNDAwLDkgQEAgc3RhdGljIGxvbmcgdmhvc3RfZGV2X2FsbG9jX2lvdmVj cyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiAJZm9yIChpID0gMDsgaSA8IGRldi0+bnZxczsgKytp KSB7CiAJCXZxID0gZGV2LT52cXNbaV07CiAJCXZxLT5tYXhfZGVzY3MgPSBkZXYtPmlvdl9saW1p dDsKKwkJaWYgKHZob3N0X3ZxX251bV9iYXRjaF9kZXNjcyh2cSkgPCAwKSB7CisJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfQogCQl2cS0+ZGVzY3MgPSBrbWFsbG9jX2FycmF5KHZxLT5tYXhfZGVzY3Ms CiAJCQkJCSAgc2l6ZW9mKCp2cS0+ZGVzY3MpLAogCQkJCQkgIEdGUF9LRVJORUwpOwpAQCAtMTYx MCw2ICsxNjE5LDcgQEAgbG9uZyB2aG9zdF92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpk LCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmcKIAkJdnEtPmxhc3RfYXZhaWxf aWR4ID0gcy5udW07CiAJCS8qIEZvcmdldCB0aGUgY2FjaGVkIGluZGV4IHZhbHVlLiAqLwogCQl2 cS0+YXZhaWxfaWR4ID0gdnEtPmxhc3RfYXZhaWxfaWR4OworCQl2cS0+bmRlc2NzID0gdnEtPmZp cnN0X2Rlc2MgPSAwOwogCQlicmVhazsKIAljYXNlIFZIT1NUX0dFVF9WUklOR19CQVNFOgogCQlz LmluZGV4ID0gaWR4OwpAQCAtMjA3OCwyNTMgKzIwODgsNiBAQCBzdGF0aWMgdW5zaWduZWQgbmV4 dF9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgdnJpbmdfZGVzYyAqZGVz YykKIAlyZXR1cm4gbmV4dDsKIH0KIAotc3RhdGljIGludCBnZXRfaW5kaXJlY3Qoc3RydWN0IHZo b3N0X3ZpcnRxdWV1ZSAqdnEsCi0JCQlzdHJ1Y3QgaW92ZWMgaW92W10sIHVuc2lnbmVkIGludCBp b3Zfc2l6ZSwKLQkJCXVuc2lnbmVkIGludCAqb3V0X251bSwgdW5zaWduZWQgaW50ICppbl9udW0s Ci0JCQlzdHJ1Y3Qgdmhvc3RfbG9nICpsb2csIHVuc2lnbmVkIGludCAqbG9nX251bSwKLQkJCXN0 cnVjdCB2cmluZ19kZXNjICppbmRpcmVjdCkKLXsKLQlzdHJ1Y3QgdnJpbmdfZGVzYyBkZXNjOwot CXVuc2lnbmVkIGludCBpID0gMCwgY291bnQsIGZvdW5kID0gMDsKLQl1MzIgbGVuID0gdmhvc3Qz Ml90b19jcHUodnEsIGluZGlyZWN0LT5sZW4pOwotCXN0cnVjdCBpb3ZfaXRlciBmcm9tOwotCWlu dCByZXQsIGFjY2VzczsKLQotCS8qIFNhbml0eSBjaGVjayAqLwotCWlmICh1bmxpa2VseShsZW4g JSBzaXplb2YgZGVzYykpIHsKLQkJdnFfZXJyKHZxLCAiSW52YWxpZCBsZW5ndGggaW4gaW5kaXJl Y3QgZGVzY3JpcHRvcjogIgotCQkgICAgICAgImxlbiAweCVsbHggbm90IG11bHRpcGxlIG9mIDB4 JXp4XG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZW4sCi0JCSAgICAgICBzaXpl b2YgZGVzYyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldCA9IHRyYW5zbGF0ZV9kZXNj KHZxLCB2aG9zdDY0X3RvX2NwdSh2cSwgaW5kaXJlY3QtPmFkZHIpLCBsZW4sIHZxLT5pbmRpcmVj dCwKLQkJCSAgICAgVUlPX01BWElPViwgVkhPU1RfQUNDRVNTX1JPKTsKLQlpZiAodW5saWtlbHko cmV0IDwgMCkpIHsKLQkJaWYgKHJldCAhPSAtRUFHQUlOKQotCQkJdnFfZXJyKHZxLCAiVHJhbnNs YXRpb24gZmFpbHVyZSAlZCBpbiBpbmRpcmVjdC5cbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0J fQotCWlvdl9pdGVyX2luaXQoJmZyb20sIFJFQUQsIHZxLT5pbmRpcmVjdCwgcmV0LCBsZW4pOwot Ci0JLyogV2Ugd2lsbCB1c2UgdGhlIHJlc3VsdCBhcyBhbiBhZGRyZXNzIHRvIHJlYWQgZnJvbSwg c28gbW9zdAotCSAqIGFyY2hpdGVjdHVyZXMgb25seSBuZWVkIGEgY29tcGlsZXIgYmFycmllciBo ZXJlLiAqLwotCXJlYWRfYmFycmllcl9kZXBlbmRzKCk7Ci0KLQljb3VudCA9IGxlbiAvIHNpemVv ZiBkZXNjOwotCS8qIEJ1ZmZlcnMgYXJlIGNoYWluZWQgdmlhIGEgMTYgYml0IG5leHQgZmllbGQs IHNvCi0JICogd2UgY2FuIGhhdmUgYXQgbW9zdCAyXjE2IG9mIHRoZXNlLiAqLwotCWlmICh1bmxp a2VseShjb3VudCA+IFVTSFJUX01BWCArIDEpKSB7Ci0JCXZxX2Vycih2cSwgIkluZGlyZWN0IGJ1 ZmZlciBsZW5ndGggdG9vIGJpZzogJWRcbiIsCi0JCSAgICAgICBpbmRpcmVjdC0+bGVuKTsKLQkJ cmV0dXJuIC1FMkJJRzsKLQl9Ci0KLQlkbyB7Ci0JCXVuc2lnbmVkIGlvdl9jb3VudCA9ICppbl9u dW0gKyAqb3V0X251bTsKLQkJaWYgKHVubGlrZWx5KCsrZm91bmQgPiBjb3VudCkpIHsKLQkJCXZx X2Vycih2cSwgIkxvb3AgZGV0ZWN0ZWQ6IGxhc3Qgb25lIGF0ICV1ICIKLQkJCSAgICAgICAiaW5k aXJlY3Qgc2l6ZSAldVxuIiwKLQkJCSAgICAgICBpLCBjb3VudCk7Ci0JCQlyZXR1cm4gLUVJTlZB TDsKLQkJfQotCQlpZiAodW5saWtlbHkoIWNvcHlfZnJvbV9pdGVyX2Z1bGwoJmRlc2MsIHNpemVv ZihkZXNjKSwgJmZyb20pKSkgewotCQkJdnFfZXJyKHZxLCAiRmFpbGVkIGluZGlyZWN0IGRlc2Ny aXB0b3I6IGlkeCAlZCwgJXp4XG4iLAotCQkJICAgICAgIGksIChzaXplX3Qpdmhvc3Q2NF90b19j cHUodnEsIGluZGlyZWN0LT5hZGRyKSArIGkgKiBzaXplb2YgZGVzYyk7Ci0JCQlyZXR1cm4gLUVJ TlZBTDsKLQkJfQotCQlpZiAodW5saWtlbHkoZGVzYy5mbGFncyAmIGNwdV90b192aG9zdDE2KHZx LCBWUklOR19ERVNDX0ZfSU5ESVJFQ1QpKSkgewotCQkJdnFfZXJyKHZxLCAiTmVzdGVkIGluZGly ZWN0IGRlc2NyaXB0b3I6IGlkeCAlZCwgJXp4XG4iLAotCQkJICAgICAgIGksIChzaXplX3Qpdmhv c3Q2NF90b19jcHUodnEsIGluZGlyZWN0LT5hZGRyKSArIGkgKiBzaXplb2YgZGVzYyk7Ci0JCQly ZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChkZXNjLmZsYWdzICYgY3B1X3RvX3Zob3N0MTYo dnEsIFZSSU5HX0RFU0NfRl9XUklURSkpCi0JCQlhY2Nlc3MgPSBWSE9TVF9BQ0NFU1NfV087Ci0J CWVsc2UKLQkJCWFjY2VzcyA9IFZIT1NUX0FDQ0VTU19STzsKLQotCQlyZXQgPSB0cmFuc2xhdGVf ZGVzYyh2cSwgdmhvc3Q2NF90b19jcHUodnEsIGRlc2MuYWRkciksCi0JCQkJICAgICB2aG9zdDMy X3RvX2NwdSh2cSwgZGVzYy5sZW4pLCBpb3YgKyBpb3ZfY291bnQsCi0JCQkJICAgICBpb3Zfc2l6 ZSAtIGlvdl9jb3VudCwgYWNjZXNzKTsKLQkJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7Ci0JCQlp ZiAocmV0ICE9IC1FQUdBSU4pCi0JCQkJdnFfZXJyKHZxLCAiVHJhbnNsYXRpb24gZmFpbHVyZSAl ZCBpbmRpcmVjdCBpZHggJWRcbiIsCi0JCQkJCXJldCwgaSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9 Ci0JCS8qIElmIHRoaXMgaXMgYW4gaW5wdXQgZGVzY3JpcHRvciwgaW5jcmVtZW50IHRoYXQgY291 bnQuICovCi0JCWlmIChhY2Nlc3MgPT0gVkhPU1RfQUNDRVNTX1dPKSB7Ci0JCQkqaW5fbnVtICs9 IHJldDsKLQkJCWlmICh1bmxpa2VseShsb2cgJiYgcmV0KSkgewotCQkJCWxvZ1sqbG9nX251bV0u YWRkciA9IHZob3N0NjRfdG9fY3B1KHZxLCBkZXNjLmFkZHIpOwotCQkJCWxvZ1sqbG9nX251bV0u bGVuID0gdmhvc3QzMl90b19jcHUodnEsIGRlc2MubGVuKTsKLQkJCQkrKypsb2dfbnVtOwotCQkJ fQotCQl9IGVsc2UgewotCQkJLyogSWYgaXQncyBhbiBvdXRwdXQgZGVzY3JpcHRvciwgdGhleSdy ZSBhbGwgc3VwcG9zZWQKLQkJCSAqIHRvIGNvbWUgYmVmb3JlIGFueSBpbnB1dCBkZXNjcmlwdG9y cy4gKi8KLQkJCWlmICh1bmxpa2VseSgqaW5fbnVtKSkgewotCQkJCXZxX2Vycih2cSwgIkluZGly ZWN0IGRlc2NyaXB0b3IgIgotCQkJCSAgICAgICAiaGFzIG91dCBhZnRlciBpbjogaWR4ICVkXG4i LCBpKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCSpvdXRfbnVtICs9IHJldDsKLQkJ fQotCX0gd2hpbGUgKChpID0gbmV4dF9kZXNjKHZxLCAmZGVzYykpICE9IC0xKTsKLQlyZXR1cm4g MDsKLX0KLQotLyogVGhpcyBsb29rcyBpbiB0aGUgdmlydHF1ZXVlIGFuZCBmb3IgdGhlIGZpcnN0 IGF2YWlsYWJsZSBidWZmZXIsIGFuZCBjb252ZXJ0cwotICogaXQgdG8gYW4gaW92ZWMgZm9yIGNv bnZlbmllbnQgYWNjZXNzLiAgU2luY2UgZGVzY3JpcHRvcnMgY29uc2lzdCBvZiBzb21lCi0gKiBu dW1iZXIgb2Ygb3V0cHV0IHRoZW4gc29tZSBudW1iZXIgb2YgaW5wdXQgZGVzY3JpcHRvcnMsIGl0 J3MgYWN0dWFsbHkgdHdvCi0gKiBpb3ZlY3MsIGJ1dCB3ZSBwYWNrIHRoZW0gaW50byBvbmUgYW5k IG5vdGUgaG93IG1hbnkgb2YgZWFjaCB0aGVyZSB3ZXJlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24g cmV0dXJucyB0aGUgZGVzY3JpcHRvciBudW1iZXIgZm91bmQsIG9yIHZxLT5udW0gKHdoaWNoIGlz Ci0gKiBuZXZlciBhIHZhbGlkIGRlc2NyaXB0b3IgbnVtYmVyKSBpZiBub25lIHdhcyBmb3VuZC4g IEEgbmVnYXRpdmUgY29kZSBpcwotICogcmV0dXJuZWQgb24gZXJyb3IuICovCi1pbnQgdmhvc3Rf Z2V0X3ZxX2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCi0JCSAgICAgIHN0cnVjdCBp b3ZlYyBpb3ZbXSwgdW5zaWduZWQgaW50IGlvdl9zaXplLAotCQkgICAgICB1bnNpZ25lZCBpbnQg Km91dF9udW0sIHVuc2lnbmVkIGludCAqaW5fbnVtLAotCQkgICAgICBzdHJ1Y3Qgdmhvc3RfbG9n ICpsb2csIHVuc2lnbmVkIGludCAqbG9nX251bSkKLXsKLQlzdHJ1Y3QgdnJpbmdfZGVzYyBkZXNj OwotCXVuc2lnbmVkIGludCBpLCBoZWFkLCBmb3VuZCA9IDA7Ci0JdTE2IGxhc3RfYXZhaWxfaWR4 OwotCV9fdmlydGlvMTYgYXZhaWxfaWR4OwotCV9fdmlydGlvMTYgcmluZ19oZWFkOwotCWludCBy ZXQsIGFjY2VzczsKLQotCS8qIENoZWNrIGl0IGlzbid0IGRvaW5nIHZlcnkgc3RyYW5nZSB0aGlu Z3Mgd2l0aCBkZXNjcmlwdG9yIG51bWJlcnMuICovCi0JbGFzdF9hdmFpbF9pZHggPSB2cS0+bGFz dF9hdmFpbF9pZHg7Ci0KLQlpZiAodnEtPmF2YWlsX2lkeCA9PSB2cS0+bGFzdF9hdmFpbF9pZHgp IHsKLQkJaWYgKHVubGlrZWx5KHZob3N0X2dldF9hdmFpbF9pZHgodnEsICZhdmFpbF9pZHgpKSkg ewotCQkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGFjY2VzcyBhdmFpbCBpZHggYXQgJXBcbiIsCi0J CQkJJnZxLT5hdmFpbC0+aWR4KTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCXZxLT5hdmFp bF9pZHggPSB2aG9zdDE2X3RvX2NwdSh2cSwgYXZhaWxfaWR4KTsKLQotCQlpZiAodW5saWtlbHko KHUxNikodnEtPmF2YWlsX2lkeCAtIGxhc3RfYXZhaWxfaWR4KSA+IHZxLT5udW0pKSB7Ci0JCQl2 cV9lcnIodnEsICJHdWVzdCBtb3ZlZCB1c2VkIGluZGV4IGZyb20gJXUgdG8gJXUiLAotCQkJCWxh c3RfYXZhaWxfaWR4LCB2cS0+YXZhaWxfaWR4KTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0K LQkJLyogSWYgdGhlcmUncyBub3RoaW5nIG5ldyBzaW5jZSBsYXN0IHdlIGxvb2tlZCwgcmV0dXJu Ci0JCSAqIGludmFsaWQuCi0JCSAqLwotCQlpZiAodnEtPmF2YWlsX2lkeCA9PSBsYXN0X2F2YWls X2lkeCkKLQkJCXJldHVybiB2cS0+bnVtOwotCi0JCS8qIE9ubHkgZ2V0IGF2YWlsIHJpbmcgZW50 cmllcyBhZnRlciB0aGV5IGhhdmUgYmVlbgotCQkgKiBleHBvc2VkIGJ5IGd1ZXN0LgotCQkgKi8K LQkJc21wX3JtYigpOwotCX0KLQotCS8qIEdyYWIgdGhlIG5leHQgZGVzY3JpcHRvciBudW1iZXIg dGhleSdyZSBhZHZlcnRpc2luZywgYW5kIGluY3JlbWVudAotCSAqIHRoZSBpbmRleCB3ZSd2ZSBz ZWVuLiAqLwotCWlmICh1bmxpa2VseSh2aG9zdF9nZXRfYXZhaWxfaGVhZCh2cSwgJnJpbmdfaGVh ZCwgbGFzdF9hdmFpbF9pZHgpKSkgewotCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gcmVhZCBoZWFk OiBpZHggJWQgYWRkcmVzcyAlcFxuIiwKLQkJICAgICAgIGxhc3RfYXZhaWxfaWR4LAotCQkgICAg ICAgJnZxLT5hdmFpbC0+cmluZ1tsYXN0X2F2YWlsX2lkeCAlIHZxLT5udW1dKTsKLQkJcmV0dXJu IC1FRkFVTFQ7Ci0JfQotCi0JaGVhZCA9IHZob3N0MTZfdG9fY3B1KHZxLCByaW5nX2hlYWQpOwot Ci0JLyogSWYgdGhlaXIgbnVtYmVyIGlzIHNpbGx5LCB0aGF0J3MgYW4gZXJyb3IuICovCi0JaWYg KHVubGlrZWx5KGhlYWQgPj0gdnEtPm51bSkpIHsKLQkJdnFfZXJyKHZxLCAiR3Vlc3Qgc2F5cyBp bmRleCAldSA+ICV1IGlzIGF2YWlsYWJsZSIsCi0JCSAgICAgICBoZWFkLCB2cS0+bnVtKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogV2hlbiB3ZSBzdGFydCB0aGVyZSBhcmUgbm9uZSBv ZiBlaXRoZXIgaW5wdXQgbm9yIG91dHB1dC4gKi8KLQkqb3V0X251bSA9ICppbl9udW0gPSAwOwot CWlmICh1bmxpa2VseShsb2cpKQotCQkqbG9nX251bSA9IDA7Ci0KLQlpID0gaGVhZDsKLQlkbyB7 Ci0JCXVuc2lnbmVkIGlvdl9jb3VudCA9ICppbl9udW0gKyAqb3V0X251bTsKLQkJaWYgKHVubGlr ZWx5KGkgPj0gdnEtPm51bSkpIHsKLQkJCXZxX2Vycih2cSwgIkRlc2MgaW5kZXggaXMgJXUgPiAl dSwgaGVhZCA9ICV1IiwKLQkJCSAgICAgICBpLCB2cS0+bnVtLCBoZWFkKTsKLQkJCXJldHVybiAt RUlOVkFMOwotCQl9Ci0JCWlmICh1bmxpa2VseSgrK2ZvdW5kID4gdnEtPm51bSkpIHsKLQkJCXZx X2Vycih2cSwgIkxvb3AgZGV0ZWN0ZWQ6IGxhc3Qgb25lIGF0ICV1ICIKLQkJCSAgICAgICAidnEg c2l6ZSAldSBoZWFkICV1XG4iLAotCQkJICAgICAgIGksIHZxLT5udW0sIGhlYWQpOwotCQkJcmV0 dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcmV0ID0gdmhvc3RfZ2V0X2Rlc2ModnEsICZkZXNjLCBpKTsK LQkJaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJCXZxX2Vycih2cSwgIkZhaWxlZCB0byBnZXQgZGVz Y3JpcHRvcjogaWR4ICVkIGFkZHIgJXBcbiIsCi0JCQkgICAgICAgaSwgdnEtPmRlc2MgKyBpKTsK LQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCWlmIChkZXNjLmZsYWdzICYgY3B1X3RvX3Zob3N0 MTYodnEsIFZSSU5HX0RFU0NfRl9JTkRJUkVDVCkpIHsKLQkJCXJldCA9IGdldF9pbmRpcmVjdCh2 cSwgaW92LCBpb3Zfc2l6ZSwKLQkJCQkJICAgb3V0X251bSwgaW5fbnVtLAotCQkJCQkgICBsb2cs IGxvZ19udW0sICZkZXNjKTsKLQkJCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewotCQkJCWlmIChy ZXQgIT0gLUVBR0FJTikKLQkJCQkJdnFfZXJyKHZxLCAiRmFpbHVyZSBkZXRlY3RlZCAiCi0JCQkJ CQkiaW4gaW5kaXJlY3QgZGVzY3JpcHRvciBhdCBpZHggJWRcbiIsIGkpOwotCQkJCXJldHVybiBy ZXQ7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChkZXNjLmZsYWdzICYgY3B1X3Rv X3Zob3N0MTYodnEsIFZSSU5HX0RFU0NfRl9XUklURSkpCi0JCQlhY2Nlc3MgPSBWSE9TVF9BQ0NF U1NfV087Ci0JCWVsc2UKLQkJCWFjY2VzcyA9IFZIT1NUX0FDQ0VTU19STzsKLQkJcmV0ID0gdHJh bnNsYXRlX2Rlc2ModnEsIHZob3N0NjRfdG9fY3B1KHZxLCBkZXNjLmFkZHIpLAotCQkJCSAgICAg dmhvc3QzMl90b19jcHUodnEsIGRlc2MubGVuKSwgaW92ICsgaW92X2NvdW50LAotCQkJCSAgICAg aW92X3NpemUgLSBpb3ZfY291bnQsIGFjY2Vzcyk7Ci0JCWlmICh1bmxpa2VseShyZXQgPCAwKSkg ewotCQkJaWYgKHJldCAhPSAtRUFHQUlOKQotCQkJCXZxX2Vycih2cSwgIlRyYW5zbGF0aW9uIGZh aWx1cmUgJWQgZGVzY3JpcHRvciBpZHggJWRcbiIsCi0JCQkJCXJldCwgaSk7Ci0JCQlyZXR1cm4g cmV0OwotCQl9Ci0JCWlmIChhY2Nlc3MgPT0gVkhPU1RfQUNDRVNTX1dPKSB7Ci0JCQkvKiBJZiB0 aGlzIGlzIGFuIGlucHV0IGRlc2NyaXB0b3IsCi0JCQkgKiBpbmNyZW1lbnQgdGhhdCBjb3VudC4g Ki8KLQkJCSppbl9udW0gKz0gcmV0OwotCQkJaWYgKHVubGlrZWx5KGxvZyAmJiByZXQpKSB7Ci0J CQkJbG9nWypsb2dfbnVtXS5hZGRyID0gdmhvc3Q2NF90b19jcHUodnEsIGRlc2MuYWRkcik7Ci0J CQkJbG9nWypsb2dfbnVtXS5sZW4gPSB2aG9zdDMyX3RvX2NwdSh2cSwgZGVzYy5sZW4pOwotCQkJ CSsrKmxvZ19udW07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBJZiBpdCdzIGFuIG91dHB1dCBk ZXNjcmlwdG9yLCB0aGV5J3JlIGFsbCBzdXBwb3NlZAotCQkJICogdG8gY29tZSBiZWZvcmUgYW55 IGlucHV0IGRlc2NyaXB0b3JzLiAqLwotCQkJaWYgKHVubGlrZWx5KCppbl9udW0pKSB7Ci0JCQkJ dnFfZXJyKHZxLCAiRGVzY3JpcHRvciBoYXMgb3V0IGFmdGVyIGluOiAiCi0JCQkJICAgICAgICJp ZHggJWRcbiIsIGkpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJKm91dF9udW0gKz0g cmV0OwotCQl9Ci0JfSB3aGlsZSAoKGkgPSBuZXh0X2Rlc2ModnEsICZkZXNjKSkgIT0gLTEpOwot Ci0JLyogT24gc3VjY2VzcywgaW5jcmVtZW50IGF2YWlsIGluZGV4LiAqLwotCXZxLT5sYXN0X2F2 YWlsX2lkeCsrOwotCi0JLyogQXNzdW1lIG5vdGlmaWNhdGlvbnMgZnJvbSBndWVzdCBhcmUgZGlz YWJsZWQgYXQgdGhpcyBwb2ludCwKLQkgKiBpZiB0aGV5IGFyZW4ndCB3ZSB3b3VsZCBuZWVkIHRv IHVwZGF0ZSBhdmFpbF9ldmVudCBpbmRleC4gKi8KLQlCVUdfT04oISh2cS0+dXNlZF9mbGFncyAm IFZSSU5HX1VTRURfRl9OT19OT1RJRlkpKTsKLQlyZXR1cm4gaGVhZDsKLX0KLUVYUE9SVF9TWU1C T0xfR1BMKHZob3N0X2dldF92cV9kZXNjKTsKLQogc3RhdGljIHN0cnVjdCB2aG9zdF9kZXNjICpw ZWVrX3NwbGl0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCiB7CiAJQlVHX09OKCF2 cS0+bmRlc2NzKTsKQEAgLTI0MjgsNyArMjE5MSw3IEBAIHN0YXRpYyBpbnQgZmV0Y2hfaW5kaXJl Y3RfZGVzY3Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiAKIC8qIFRoaXMgZnVuY3Rpb24g cmV0dXJucyBhIHZhbHVlID4gMCBpZiBhIGRlc2NyaXB0b3Igd2FzIGZvdW5kLCBvciAwIGlmIG5v bmUgd2VyZSBmb3VuZC4KICAqIEEgbmVnYXRpdmUgY29kZSBpcyByZXR1cm5lZCBvbiBlcnJvci4g Ki8KLXN0YXRpYyBpbnQgZmV0Y2hfZGVzY3Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCitz dGF0aWMgaW50IGZldGNoX2J1ZihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKIHsKIAl1bnNp Z25lZCBpbnQgaSwgaGVhZCwgZm91bmQgPSAwOwogCXN0cnVjdCB2aG9zdF9kZXNjICpsYXN0OwpA QCAtMjQ0MSw3ICsyMjA0LDExIEBAIHN0YXRpYyBpbnQgZmV0Y2hfZGVzY3Moc3RydWN0IHZob3N0 X3ZpcnRxdWV1ZSAqdnEpCiAJLyogQ2hlY2sgaXQgaXNuJ3QgZG9pbmcgdmVyeSBzdHJhbmdlIHRo aW5ncyB3aXRoIGRlc2NyaXB0b3IgbnVtYmVycy4gKi8KIAlsYXN0X2F2YWlsX2lkeCA9IHZxLT5s YXN0X2F2YWlsX2lkeDsKIAotCWlmICh2cS0+YXZhaWxfaWR4ID09IHZxLT5sYXN0X2F2YWlsX2lk eCkgeworCWlmICh1bmxpa2VseSh2cS0+YXZhaWxfaWR4ID09IHZxLT5sYXN0X2F2YWlsX2lkeCkp IHsKKwkJLyogSWYgd2UgYWxyZWFkeSBoYXZlIHdvcmsgdG8gZG8sIGRvbid0IGJvdGhlciByZS1j aGVja2luZy4gKi8KKwkJaWYgKGxpa2VseSh2cS0+bmRlc2NzKSkKKwkJCXJldHVybiAxOworCiAJ CWlmICh1bmxpa2VseSh2aG9zdF9nZXRfYXZhaWxfaWR4KHZxLCAmYXZhaWxfaWR4KSkpIHsKIAkJ CXZxX2Vycih2cSwgIkZhaWxlZCB0byBhY2Nlc3MgYXZhaWwgaWR4IGF0ICVwXG4iLAogCQkJCSZ2 cS0+YXZhaWwtPmlkeCk7CkBAIC0yNTMyLDYgKzIyOTksNDEgQEAgc3RhdGljIGludCBmZXRjaF9k ZXNjcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKIAlyZXR1cm4gMTsKIH0KIAorLyogVGhp cyBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgPiAwIGlmIGEgZGVzY3JpcHRvciB3YXMgZm91bmQs IG9yIDAgaWYgbm9uZSB3ZXJlIGZvdW5kLgorICogQSBuZWdhdGl2ZSBjb2RlIGlzIHJldHVybmVk IG9uIGVycm9yLiAqLworc3RhdGljIGludCBmZXRjaF9kZXNjcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1 ZXVlICp2cSkKK3sKKwlpbnQgcmV0OworCisJaWYgKHVubGlrZWx5KHZxLT5maXJzdF9kZXNjID49 IHZxLT5uZGVzY3MpKSB7CisJCXZxLT5maXJzdF9kZXNjID0gMDsKKwkJdnEtPm5kZXNjcyA9IDA7 CisJfQorCisJaWYgKHZxLT5uZGVzY3MpCisJCXJldHVybiAxOworCisJZm9yIChyZXQgPSAxOwor CSAgICAgcmV0ID4gMCAmJiB2cS0+bmRlc2NzIDw9IHZob3N0X3ZxX251bV9iYXRjaF9kZXNjcyh2 cSk7CisJICAgICByZXQgPSBmZXRjaF9idWYodnEpKQorCQk7CisKKwkvKiBPbiBzdWNjZXNzIHdl IGV4cGVjdCBzb21lIGRlc2NzICovCisJQlVHX09OKHJldCA+IDAgJiYgIXZxLT5uZGVzY3MpOwor CXJldHVybiByZXQ7Cit9CisKKy8qIFJldmVyc2UgdGhlIGVmZmVjdHMgb2YgZmV0Y2hfZGVzY3Mg Ki8KK3N0YXRpYyB2b2lkIHVuZmV0Y2hfZGVzY3Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEp Cit7CisJaW50IGk7CisKKwlmb3IgKGkgPSB2cS0+Zmlyc3RfZGVzYzsgaSA8IHZxLT5uZGVzY3M7 ICsraSkKKwkJaWYgKCEodnEtPmRlc2NzW2ldLmZsYWdzICYgVlJJTkdfREVTQ19GX05FWFQpKQor CQkJdnEtPmxhc3RfYXZhaWxfaWR4IC09IDE7CisJdnEtPm5kZXNjcyA9IDA7Cit9CisKIC8qIFRo aXMgbG9va3MgaW4gdGhlIHZpcnRxdWV1ZSBhbmQgZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgYnVm ZmVyLCBhbmQgY29udmVydHMKICAqIGl0IHRvIGFuIGlvdmVjIGZvciBjb252ZW5pZW50IGFjY2Vz cy4gIFNpbmNlIGRlc2NyaXB0b3JzIGNvbnNpc3Qgb2Ygc29tZQogICogbnVtYmVyIG9mIG91dHB1 dCB0aGVuIHNvbWUgbnVtYmVyIG9mIGlucHV0IGRlc2NyaXB0b3JzLCBpdCdzIGFjdHVhbGx5IHR3 bwpAQCAtMjU0MCw3ICsyMzQyLDcgQEAgc3RhdGljIGludCBmZXRjaF9kZXNjcyhzdHJ1Y3Qgdmhv c3RfdmlydHF1ZXVlICp2cSkKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZGVzY3JpcHRv ciBudW1iZXIgZm91bmQsIG9yIHZxLT5udW0gKHdoaWNoIGlzCiAgKiBuZXZlciBhIHZhbGlkIGRl c2NyaXB0b3IgbnVtYmVyKSBpZiBub25lIHdhcyBmb3VuZC4gIEEgbmVnYXRpdmUgY29kZSBpcwog ICogcmV0dXJuZWQgb24gZXJyb3IuICovCi1pbnQgdmhvc3RfZ2V0X3ZxX2Rlc2NfYmF0Y2goc3Ry dWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCitpbnQgdmhvc3RfZ2V0X3ZxX2Rlc2Moc3RydWN0IHZo b3N0X3ZpcnRxdWV1ZSAqdnEsCiAJCSAgICAgIHN0cnVjdCBpb3ZlYyBpb3ZbXSwgdW5zaWduZWQg aW50IGlvdl9zaXplLAogCQkgICAgICB1bnNpZ25lZCBpbnQgKm91dF9udW0sIHVuc2lnbmVkIGlu dCAqaW5fbnVtLAogCQkgICAgICBzdHJ1Y3Qgdmhvc3RfbG9nICpsb2csIHVuc2lnbmVkIGludCAq bG9nX251bSkKQEAgLTI1NDksNyArMjM1MSw3IEBAIGludCB2aG9zdF9nZXRfdnFfZGVzY19iYXRj aChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKIAlpbnQgaTsKIAogCWlmIChyZXQgPD0gMCkK LQkJZ290byBlcnJfZmV0Y2g7CisJCWdvdG8gZXJyOwogCiAJLyogTm93IGNvbnZlcnQgdG8gSU9W ICovCiAJLyogV2hlbiB3ZSBzdGFydCB0aGVyZSBhcmUgbm9uZSBvZiBlaXRoZXIgaW5wdXQgbm9y IG91dHB1dC4gKi8KQEAgLTI1NTcsNyArMjM1OSw3IEBAIGludCB2aG9zdF9nZXRfdnFfZGVzY19i YXRjaChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKIAlpZiAodW5saWtlbHkobG9nKSkKIAkJ KmxvZ19udW0gPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IHZxLT5uZGVzY3M7ICsraSkgeworCWZv ciAoaSA9IHZxLT5maXJzdF9kZXNjOyBpIDwgdnEtPm5kZXNjczsgKytpKSB7CiAJCXVuc2lnbmVk IGlvdl9jb3VudCA9ICppbl9udW0gKyAqb3V0X251bTsKIAkJc3RydWN0IHZob3N0X2Rlc2MgKmRl c2MgPSAmdnEtPmRlc2NzW2ldOwogCQlpbnQgYWNjZXNzOwpAQCAtMjYwMywyNCArMjQwNSwyNiBA QCBpbnQgdmhvc3RfZ2V0X3ZxX2Rlc2NfYmF0Y2goc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEs CiAJCX0KIAogCQlyZXQgPSBkZXNjLT5pZDsKKworCQlpZiAoIShkZXNjLT5mbGFncyAmIFZSSU5H X0RFU0NfRl9ORVhUKSkKKwkJCWJyZWFrOwogCX0KIAotCXZxLT5uZGVzY3MgPSAwOworCXZxLT5m aXJzdF9kZXNjID0gaSArIDE7CiAKIAlyZXR1cm4gcmV0OwogCiBlcnI6Ci0Jdmhvc3RfZGlzY2Fy ZF92cV9kZXNjKHZxLCAxKTsKLWVycl9mZXRjaDoKLQl2cS0+bmRlc2NzID0gMDsKKwl1bmZldGNo X2Rlc2NzKHZxKTsKIAogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9n ZXRfdnFfZGVzY19iYXRjaCk7CitFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9nZXRfdnFfZGVzYyk7 CiAKIC8qIFJldmVyc2UgdGhlIGVmZmVjdCBvZiB2aG9zdF9nZXRfdnFfZGVzYy4gVXNlZnVsIGZv ciBlcnJvciBoYW5kbGluZy4gKi8KIHZvaWQgdmhvc3RfZGlzY2FyZF92cV9kZXNjKHN0cnVjdCB2 aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgbikKIHsKKwl1bmZldGNoX2Rlc2NzKHZxKTsKIAl2cS0+ bGFzdF9hdmFpbF9pZHggLT0gbjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rpc2NhcmRf dnFfZGVzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zo b3N0L3Zob3N0LmgKaW5kZXggODcwODlkNTE0OTBkLi5mZWQzNmFmNWM0NDQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAorKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKQEAgLTgx LDYgKzgxLDcgQEAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7CiAKIAlzdHJ1Y3Qgdmhvc3RfZGVz YyAqZGVzY3M7CiAJaW50IG5kZXNjczsKKwlpbnQgZmlyc3RfZGVzYzsKIAlpbnQgbWF4X2Rlc2Nz OwogCiAJc3RydWN0IGZpbGUgKmtpY2s7CkBAIC0xODksMTAgKzE5MCw2IEBAIGxvbmcgdmhvc3Rf dnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lk IF9fdXNlciAqYXJnCiBib29sIHZob3N0X3ZxX2FjY2Vzc19vayhzdHJ1Y3Qgdmhvc3RfdmlydHF1 ZXVlICp2cSk7CiBib29sIHZob3N0X2xvZ19hY2Nlc3Nfb2soc3RydWN0IHZob3N0X2RldiAqKTsK IAotaW50IHZob3N0X2dldF92cV9kZXNjX2JhdGNoKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwK LQkJICAgICAgc3RydWN0IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBpbnQgaW92X2NvdW50LAotCQkg ICAgICB1bnNpZ25lZCBpbnQgKm91dF9udW0sIHVuc2lnbmVkIGludCAqaW5fbnVtLAotCQkgICAg ICBzdHJ1Y3Qgdmhvc3RfbG9nICpsb2csIHVuc2lnbmVkIGludCAqbG9nX251bSk7CiBpbnQgdmhv c3RfZ2V0X3ZxX2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLAogCQkgICAgICBzdHJ1Y3Qg aW92ZWMgaW92W10sIHVuc2lnbmVkIGludCBpb3ZfY291bnQsCiAJCSAgICAgIHVuc2lnbmVkIGlu dCAqb3V0X251bSwgdW5zaWduZWQgaW50ICppbl9udW0sCkBAIC0yNjEsNiArMjU4LDggQEAgc3Rh dGljIGlubGluZSB2b2lkIHZob3N0X3ZxX3NldF9iYWNrZW5kKHN0cnVjdCB2aG9zdF92aXJ0cXVl dWUgKnZxLAogCQkJCQl2b2lkICpwcml2YXRlX2RhdGEpCiB7CiAJdnEtPnByaXZhdGVfZGF0YSA9 IHByaXZhdGVfZGF0YTsKKwl2cS0+bmRlc2NzID0gMDsKKwl2cS0+Zmlyc3RfZGVzYyA9IDA7CiB9 CiAKIC8qKgotLSAKTVNUCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMu bGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21h aWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24=