From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: [PATCH RFC v5 01/13] vhost: option to fetch descriptors through an independent struct Date: Sun, 7 Jun 2020 10:11:23 -0400 Message-ID: <20200607141057.704085-2-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 VGhlIGlkZWEgaXMgdG8gc3VwcG9ydCBtdWx0aXBsZSByaW5nIGZvcm1hdHMgYnkgY29udmVydGlu Zwp0byBhIGZvcm1hdC1pbmRlcGVuZGVudCBhcnJheSBvZiBkZXNjcmlwdG9ycy4KClRoaXMgY29z dHMgZXh0cmEgY3ljbGVzLCBidXQgd2UgZ2FpbiBpbiBhYmlsaXR5CnRvIGZldGNoIGEgYmF0Y2gg b2YgZGVzY3JpcHRvcnMgaW4gb25lIGdvLCB3aGljaAppcyBnb29kIGZvciBjb2RlIGNhY2hlIGxv Y2FsaXR5LgoKV2hlbiB1c2VkLCB0aGlzIGNhdXNlcyBhIG1pbm9yIHBlcmZvcm1hbmNlIGRlZ3Jh ZGF0aW9uLAppdCdzIGJlZW4ga2VwdCBhcyBzaW1wbGUgYXMgcG9zc2libGUgZm9yIGVhc2Ugb2Yg cmV2aWV3LgpBIGZvbGxvdy11cCBwYXRjaCBnZXRzIHVzIGJhY2sgdGhlIHBlcmZvcm1hbmNlIGJ5 IGFkZGluZyBiYXRjaGluZy4KClRvIHNpbXBsaWZ5IGJlbmNobWFya2luZywgSSBrZXB0IHRoZSBv bGQgY29kZSBhcm91bmQgc28gb25lIGNhbiBzd2l0Y2gKYmFjayBhbmQgZm9ydGggYmV0d2VlbiBv bGQgYW5kIG5ldyBjb2RlLiBUaGlzIHdpbGwgZ28gYXdheSBpbiB0aGUgZmluYWwKc3VibWlzc2lv bi4KClNpZ25lZC1vZmYtYnk6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+ClNp Z25lZC1vZmYtYnk6IEV1Z2VuaW8gUMOpcmV6IDxlcGVyZXptYUByZWRoYXQuY29tPgpMaW5rOiBo dHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjAwNDAxMTgzMTE4LjgzMzQtMi1lcGVyZXptYUBy ZWRoYXQuY29tClNpZ25lZC1vZmYtYnk6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5j b20+Ci0tLQogZHJpdmVycy92aG9zdC92aG9zdC5jIHwgMzAyICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLQogZHJpdmVycy92aG9zdC92aG9zdC5oIHwgIDE2ICsrKwog MiBmaWxlcyBjaGFuZ2VkLCAzMTcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwppbmRl eCAxNzJkYTA5MjEwN2UuLmU2ODJlZDU1MTU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92 aG9zdC5jCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtMzAzLDYgKzMwMyw3IEBAIHN0 YXRpYyB2b2lkIHZob3N0X3ZxX3Jlc2V0KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKIAkJCSAgIHN0 cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQogewogCXZxLT5udW0gPSAxOworCXZxLT5uZGVzY3Mg PSAwOwogCXZxLT5kZXNjID0gTlVMTDsKIAl2cS0+YXZhaWwgPSBOVUxMOwogCXZxLT51c2VkID0g TlVMTDsKQEAgLTM3Myw2ICszNzQsOSBAQCBzdGF0aWMgaW50IHZob3N0X3dvcmtlcih2b2lkICpk YXRhKQogCiBzdGF0aWMgdm9pZCB2aG9zdF92cV9mcmVlX2lvdmVjcyhzdHJ1Y3Qgdmhvc3Rfdmly dHF1ZXVlICp2cSkKIHsKKwlrZnJlZSh2cS0+ZGVzY3MpOworCXZxLT5kZXNjcyA9IE5VTEw7CisJ dnEtPm1heF9kZXNjcyA9IDA7CiAJa2ZyZWUodnEtPmluZGlyZWN0KTsKIAl2cS0+aW5kaXJlY3Qg PSBOVUxMOwogCWtmcmVlKHZxLT5sb2cpOwpAQCAtMzg5LDYgKzM5MywxMCBAQCBzdGF0aWMgbG9u ZyB2aG9zdF9kZXZfYWxsb2NfaW92ZWNzKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKIAogCWZvciAo aSA9IDA7IGkgPCBkZXYtPm52cXM7ICsraSkgewogCQl2cSA9IGRldi0+dnFzW2ldOworCQl2cS0+ bWF4X2Rlc2NzID0gZGV2LT5pb3ZfbGltaXQ7CisJCXZxLT5kZXNjcyA9IGttYWxsb2NfYXJyYXko dnEtPm1heF9kZXNjcywKKwkJCQkJICBzaXplb2YoKnZxLT5kZXNjcyksCisJCQkJCSAgR0ZQX0tF Uk5FTCk7CiAJCXZxLT5pbmRpcmVjdCA9IGttYWxsb2NfYXJyYXkoVUlPX01BWElPViwKIAkJCQkJ ICAgICBzaXplb2YoKnZxLT5pbmRpcmVjdCksCiAJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CkBAIC0z OTYsNyArNDA0LDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfZGV2X2FsbG9jX2lvdmVjcyhzdHJ1Y3Qg dmhvc3RfZGV2ICpkZXYpCiAJCQkJCUdGUF9LRVJORUwpOwogCQl2cS0+aGVhZHMgPSBrbWFsbG9j X2FycmF5KGRldi0+aW92X2xpbWl0LCBzaXplb2YoKnZxLT5oZWFkcyksCiAJCQkJCSAgR0ZQX0tF Uk5FTCk7Ci0JCWlmICghdnEtPmluZGlyZWN0IHx8ICF2cS0+bG9nIHx8ICF2cS0+aGVhZHMpCisJ CWlmICghdnEtPmluZGlyZWN0IHx8ICF2cS0+bG9nIHx8ICF2cS0+aGVhZHMgfHwgIXZxLT5kZXNj cykKIAkJCWdvdG8gZXJyX25vbWVtOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ4OCw2ICs0OTYsOCBA QCB2b2lkIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKIAogCWZvciAoaSA9 IDA7IGkgPCBkZXYtPm52cXM7ICsraSkgewogCQl2cSA9IGRldi0+dnFzW2ldOworCQl2cS0+ZGVz Y3MgPSBOVUxMOworCQl2cS0+bWF4X2Rlc2NzID0gMDsKIAkJdnEtPmxvZyA9IE5VTEw7CiAJCXZx LT5pbmRpcmVjdCA9IE5VTEw7CiAJCXZxLT5oZWFkcyA9IE5VTEw7CkBAIC0yMzE1LDYgKzIzMjUs Mjk2IEBAIGludCB2aG9zdF9nZXRfdnFfZGVzYyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwK IH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2dldF92cV9kZXNjKTsKIAorc3RhdGljIHN0cnVj dCB2aG9zdF9kZXNjICpwZWVrX3NwbGl0X2Rlc2Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEp Cit7CisJQlVHX09OKCF2cS0+bmRlc2NzKTsKKwlyZXR1cm4gJnZxLT5kZXNjc1t2cS0+bmRlc2Nz IC0gMV07Cit9CisKK3N0YXRpYyB2b2lkIHBvcF9zcGxpdF9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0 cXVldWUgKnZxKQoreworCUJVR19PTighdnEtPm5kZXNjcyk7CisJLS12cS0+bmRlc2NzOworfQor CisjZGVmaW5lIFZIT1NUX0RFU0NfRkxBR1MgKFZSSU5HX0RFU0NfRl9JTkRJUkVDVCB8IFZSSU5H X0RFU0NfRl9XUklURSB8IFwKKwkJCSAgVlJJTkdfREVTQ19GX05FWFQpCitzdGF0aWMgaW50IHB1 c2hfc3BsaXRfZGVzYyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZyaW5nX2Rl c2MgKmRlc2MsIHUxNiBpZCkKK3sKKwlzdHJ1Y3Qgdmhvc3RfZGVzYyAqaDsKKworCWlmICh1bmxp a2VseSh2cS0+bmRlc2NzID49IHZxLT5tYXhfZGVzY3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlo ID0gJnZxLT5kZXNjc1t2cS0+bmRlc2NzKytdOworCWgtPmFkZHIgPSB2aG9zdDY0X3RvX2NwdSh2 cSwgZGVzYy0+YWRkcik7CisJaC0+bGVuID0gdmhvc3QzMl90b19jcHUodnEsIGRlc2MtPmxlbik7 CisJaC0+ZmxhZ3MgPSB2aG9zdDE2X3RvX2NwdSh2cSwgZGVzYy0+ZmxhZ3MpICYgVkhPU1RfREVT Q19GTEFHUzsKKwloLT5pZCA9IGlkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmV0 Y2hfaW5kaXJlY3RfZGVzY3Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCisJCQkJc3RydWN0 IHZob3N0X2Rlc2MgKmluZGlyZWN0LAorCQkJCXUxNiBoZWFkKQoreworCXN0cnVjdCB2cmluZ19k ZXNjIGRlc2M7CisJdW5zaWduZWQgaW50IGkgPSAwLCBjb3VudCwgZm91bmQgPSAwOworCXUzMiBs ZW4gPSBpbmRpcmVjdC0+bGVuOworCXN0cnVjdCBpb3ZfaXRlciBmcm9tOworCWludCByZXQ7CisK KwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAodW5saWtlbHkobGVuICUgc2l6ZW9mIGRlc2MpKSB7 CisJCXZxX2Vycih2cSwgIkludmFsaWQgbGVuZ3RoIGluIGluZGlyZWN0IGRlc2NyaXB0b3I6ICIK KwkJICAgICAgICJsZW4gMHglbGx4IG5vdCBtdWx0aXBsZSBvZiAweCV6eFxuIiwKKwkJICAgICAg ICh1bnNpZ25lZCBsb25nIGxvbmcpbGVuLAorCQkgICAgICAgc2l6ZW9mIGRlc2MpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSB0cmFuc2xhdGVfZGVzYyh2cSwgaW5kaXJlY3QtPmFk ZHIsIGxlbiwgdnEtPmluZGlyZWN0LAorCQkJICAgICBVSU9fTUFYSU9WLCBWSE9TVF9BQ0NFU1Nf Uk8pOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQlpZiAocmV0ICE9IC1FQUdBSU4pCisJ CQl2cV9lcnIodnEsICJUcmFuc2xhdGlvbiBmYWlsdXJlICVkIGluIGluZGlyZWN0LlxuIiwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaW92X2l0ZXJfaW5pdCgmZnJvbSwgUkVBRCwgdnEtPmlu ZGlyZWN0LCByZXQsIGxlbik7CisKKwkvKiBXZSB3aWxsIHVzZSB0aGUgcmVzdWx0IGFzIGFuIGFk ZHJlc3MgdG8gcmVhZCBmcm9tLCBzbyBtb3N0CisJICogYXJjaGl0ZWN0dXJlcyBvbmx5IG5lZWQg YSBjb21waWxlciBiYXJyaWVyIGhlcmUuICovCisJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKKwor CWNvdW50ID0gbGVuIC8gc2l6ZW9mIGRlc2M7CisJLyogQnVmZmVycyBhcmUgY2hhaW5lZCB2aWEg YSAxNiBiaXQgbmV4dCBmaWVsZCwgc28KKwkgKiB3ZSBjYW4gaGF2ZSBhdCBtb3N0IDJeMTYgb2Yg dGhlc2UuICovCisJaWYgKHVubGlrZWx5KGNvdW50ID4gVVNIUlRfTUFYICsgMSkpIHsKKwkJdnFf ZXJyKHZxLCAiSW5kaXJlY3QgYnVmZmVyIGxlbmd0aCB0b28gYmlnOiAlZFxuIiwKKwkJICAgICAg IGluZGlyZWN0LT5sZW4pOworCQlyZXR1cm4gLUUyQklHOworCX0KKwlpZiAodW5saWtlbHkodnEt Pm5kZXNjcyArIGNvdW50ID4gdnEtPm1heF9kZXNjcykpIHsKKwkJdnFfZXJyKHZxLCAiVG9vIG1h bnkgaW5kaXJlY3QgKyBkaXJlY3QgZGVzY3M6ICVkICsgJWRcbiIsCisJCSAgICAgICB2cS0+bmRl c2NzLCBpbmRpcmVjdC0+bGVuKTsKKwkJcmV0dXJuIC1FMkJJRzsKKwl9CisKKwlkbyB7CisJCWlm ICh1bmxpa2VseSgrK2ZvdW5kID4gY291bnQpKSB7CisJCQl2cV9lcnIodnEsICJMb29wIGRldGVj dGVkOiBsYXN0IG9uZSBhdCAldSAiCisJCQkgICAgICAgImluZGlyZWN0IHNpemUgJXVcbiIsCisJ CQkgICAgICAgaSwgY291bnQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHVubGlr ZWx5KCFjb3B5X2Zyb21faXRlcl9mdWxsKCZkZXNjLCBzaXplb2YoZGVzYyksICZmcm9tKSkpIHsK KwkJCXZxX2Vycih2cSwgIkZhaWxlZCBpbmRpcmVjdCBkZXNjcmlwdG9yOiBpZHggJWQsICV6eFxu IiwKKwkJCSAgICAgICBpLCAoc2l6ZV90KWluZGlyZWN0LT5hZGRyICsgaSAqIHNpemVvZiBkZXNj KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICh1bmxpa2VseShkZXNjLmZsYWdzICYg Y3B1X3RvX3Zob3N0MTYodnEsIFZSSU5HX0RFU0NfRl9JTkRJUkVDVCkpKSB7CisJCQl2cV9lcnIo dnEsICJOZXN0ZWQgaW5kaXJlY3QgZGVzY3JpcHRvcjogaWR4ICVkLCAlenhcbiIsCisJCQkgICAg ICAgaSwgKHNpemVfdClpbmRpcmVjdC0+YWRkciArIGkgKiBzaXplb2YgZGVzYyk7CisJCQlyZXR1 cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIE5vdGU6IHB1c2hfc3BsaXRfZGVzYyBjYW4ndCBmYWls IGhlcmU6CisJCSAqIHdlIG5ldmVyIGZldGNoIHVubGVzcyB0aGVyZSdzIHNwYWNlLiAqLworCQly ZXQgPSBwdXNoX3NwbGl0X2Rlc2ModnEsICZkZXNjLCBoZWFkKTsKKwkJV0FSTl9PTihyZXQpOwor CX0gd2hpbGUgKChpID0gbmV4dF9kZXNjKHZxLCAmZGVzYykpICE9IC0xKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBmZXRjaF9kZXNjcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkK K3sKKwl1bnNpZ25lZCBpbnQgaSwgaGVhZCwgZm91bmQgPSAwOworCXN0cnVjdCB2aG9zdF9kZXNj ICpsYXN0OworCXN0cnVjdCB2cmluZ19kZXNjIGRlc2M7CisJX192aXJ0aW8xNiBhdmFpbF9pZHg7 CisJX192aXJ0aW8xNiByaW5nX2hlYWQ7CisJdTE2IGxhc3RfYXZhaWxfaWR4OworCWludCByZXQ7 CisKKwkvKiBDaGVjayBpdCBpc24ndCBkb2luZyB2ZXJ5IHN0cmFuZ2UgdGhpbmdzIHdpdGggZGVz Y3JpcHRvciBudW1iZXJzLiAqLworCWxhc3RfYXZhaWxfaWR4ID0gdnEtPmxhc3RfYXZhaWxfaWR4 OworCisJaWYgKHZxLT5hdmFpbF9pZHggPT0gdnEtPmxhc3RfYXZhaWxfaWR4KSB7CisJCWlmICh1 bmxpa2VseSh2aG9zdF9nZXRfYXZhaWxfaWR4KHZxLCAmYXZhaWxfaWR4KSkpIHsKKwkJCXZxX2Vy cih2cSwgIkZhaWxlZCB0byBhY2Nlc3MgYXZhaWwgaWR4IGF0ICVwXG4iLAorCQkJCSZ2cS0+YXZh aWwtPmlkeCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQl2cS0+YXZhaWxfaWR4ID0gdmhv c3QxNl90b19jcHUodnEsIGF2YWlsX2lkeCk7CisKKwkJaWYgKHVubGlrZWx5KCh1MTYpKHZxLT5h dmFpbF9pZHggLSBsYXN0X2F2YWlsX2lkeCkgPiB2cS0+bnVtKSkgeworCQkJdnFfZXJyKHZxLCAi R3Vlc3QgbW92ZWQgdXNlZCBpbmRleCBmcm9tICV1IHRvICV1IiwKKwkJCQlsYXN0X2F2YWlsX2lk eCwgdnEtPmF2YWlsX2lkeCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCS8qIElmIHRo ZXJlJ3Mgbm90aGluZyBuZXcgc2luY2UgbGFzdCB3ZSBsb29rZWQsIHJldHVybgorCQkgKiBpbnZh bGlkLgorCQkgKi8KKwkJaWYgKHZxLT5hdmFpbF9pZHggPT0gbGFzdF9hdmFpbF9pZHgpCisJCQly ZXR1cm4gdnEtPm51bTsKKworCQkvKiBPbmx5IGdldCBhdmFpbCByaW5nIGVudHJpZXMgYWZ0ZXIg dGhleSBoYXZlIGJlZW4KKwkJICogZXhwb3NlZCBieSBndWVzdC4KKwkJICovCisJCXNtcF9ybWIo KTsKKwl9CisKKwkvKiBHcmFiIHRoZSBuZXh0IGRlc2NyaXB0b3IgbnVtYmVyIHRoZXkncmUgYWR2 ZXJ0aXNpbmcgKi8KKwlpZiAodW5saWtlbHkodmhvc3RfZ2V0X2F2YWlsX2hlYWQodnEsICZyaW5n X2hlYWQsIGxhc3RfYXZhaWxfaWR4KSkpIHsKKwkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIHJlYWQg aGVhZDogaWR4ICVkIGFkZHJlc3MgJXBcbiIsCisJCSAgICAgICBsYXN0X2F2YWlsX2lkeCwKKwkJ ICAgICAgICZ2cS0+YXZhaWwtPnJpbmdbbGFzdF9hdmFpbF9pZHggJSB2cS0+bnVtXSk7CisJCXJl dHVybiAtRUZBVUxUOworCX0KKworCWhlYWQgPSB2aG9zdDE2X3RvX2NwdSh2cSwgcmluZ19oZWFk KTsKKworCS8qIElmIHRoZWlyIG51bWJlciBpcyBzaWxseSwgdGhhdCdzIGFuIGVycm9yLiAqLwor CWlmICh1bmxpa2VseShoZWFkID49IHZxLT5udW0pKSB7CisJCXZxX2Vycih2cSwgIkd1ZXN0IHNh eXMgaW5kZXggJXUgPiAldSBpcyBhdmFpbGFibGUiLAorCQkgICAgICAgaGVhZCwgdnEtPm51bSk7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWkgPSBoZWFkOworCWRvIHsKKwkJaWYgKHVubGlr ZWx5KGkgPj0gdnEtPm51bSkpIHsKKwkJCXZxX2Vycih2cSwgIkRlc2MgaW5kZXggaXMgJXUgPiAl dSwgaGVhZCA9ICV1IiwKKwkJCSAgICAgICBpLCB2cS0+bnVtLCBoZWFkKTsKKwkJCXJldHVybiAt RUlOVkFMOworCQl9CisJCWlmICh1bmxpa2VseSgrK2ZvdW5kID4gdnEtPm51bSkpIHsKKwkJCXZx X2Vycih2cSwgIkxvb3AgZGV0ZWN0ZWQ6IGxhc3Qgb25lIGF0ICV1ICIKKwkJCSAgICAgICAidnEg c2l6ZSAldSBoZWFkICV1XG4iLAorCQkJICAgICAgIGksIHZxLT5udW0sIGhlYWQpOworCQkJcmV0 dXJuIC1FSU5WQUw7CisJCX0KKwkJcmV0ID0gdmhvc3RfZ2V0X2Rlc2ModnEsICZkZXNjLCBpKTsK KwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCXZxX2Vycih2cSwgIkZhaWxlZCB0byBnZXQgZGVz Y3JpcHRvcjogaWR4ICVkIGFkZHIgJXBcbiIsCisJCQkgICAgICAgaSwgdnEtPmRlc2MgKyBpKTsK KwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCXJldCA9IHB1c2hfc3BsaXRfZGVzYyh2cSwgJmRl c2MsIGhlYWQpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJdnFfZXJyKHZxLCAiRmFpbGVk IHRvIHNhdmUgZGVzY3JpcHRvcjogaWR4ICVkXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisJfSB3aGlsZSAoKGkgPSBuZXh0X2Rlc2ModnEsICZkZXNjKSkgIT0gLTEpOworCisJbGFz dCA9IHBlZWtfc3BsaXRfZGVzYyh2cSk7CisJaWYgKHVubGlrZWx5KGxhc3QtPmZsYWdzICYgVlJJ TkdfREVTQ19GX0lORElSRUNUKSkgeworCQlwb3Bfc3BsaXRfZGVzYyh2cSk7CisJCXJldCA9IGZl dGNoX2luZGlyZWN0X2Rlc2NzKHZxLCBsYXN0LCBoZWFkKTsKKwkJaWYgKHVubGlrZWx5KHJldCA8 IDApKSB7CisJCQlpZiAocmV0ICE9IC1FQUdBSU4pCisJCQkJdnFfZXJyKHZxLCAiRmFpbHVyZSBk ZXRlY3RlZCAiCisJCQkJICAgICAgICJpbiBpbmRpcmVjdCBkZXNjcmlwdG9yIGF0IGlkeCAlZFxu IiwgaGVhZCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJLyogQXNzdW1lIG5vdGlmaWNh dGlvbnMgZnJvbSBndWVzdCBhcmUgZGlzYWJsZWQgYXQgdGhpcyBwb2ludCwKKwkgKiBpZiB0aGV5 IGFyZW4ndCB3ZSB3b3VsZCBuZWVkIHRvIHVwZGF0ZSBhdmFpbF9ldmVudCBpbmRleC4gKi8KKwlC VUdfT04oISh2cS0+dXNlZF9mbGFncyAmIFZSSU5HX1VTRURfRl9OT19OT1RJRlkpKTsKKworCS8q IE9uIHN1Y2Nlc3MsIGluY3JlbWVudCBhdmFpbCBpbmRleC4gKi8KKwl2cS0+bGFzdF9hdmFpbF9p ZHgrKzsKKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGxvb2tzIGluIHRoZSB2aXJ0cXVldWUg YW5kIGZvciB0aGUgZmlyc3QgYXZhaWxhYmxlIGJ1ZmZlciwgYW5kIGNvbnZlcnRzCisgKiBpdCB0 byBhbiBpb3ZlYyBmb3IgY29udmVuaWVudCBhY2Nlc3MuICBTaW5jZSBkZXNjcmlwdG9ycyBjb25z aXN0IG9mIHNvbWUKKyAqIG51bWJlciBvZiBvdXRwdXQgdGhlbiBzb21lIG51bWJlciBvZiBpbnB1 dCBkZXNjcmlwdG9ycywgaXQncyBhY3R1YWxseSB0d28KKyAqIGlvdmVjcywgYnV0IHdlIHBhY2sg dGhlbSBpbnRvIG9uZSBhbmQgbm90ZSBob3cgbWFueSBvZiBlYWNoIHRoZXJlIHdlcmUuCisgKgor ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBkZXNjcmlwdG9yIG51bWJlciBmb3VuZCwgb3Ig dnEtPm51bSAod2hpY2ggaXMKKyAqIG5ldmVyIGEgdmFsaWQgZGVzY3JpcHRvciBudW1iZXIpIGlm IG5vbmUgd2FzIGZvdW5kLiAgQSBuZWdhdGl2ZSBjb2RlIGlzCisgKiByZXR1cm5lZCBvbiBlcnJv ci4gKi8KK2ludCB2aG9zdF9nZXRfdnFfZGVzY19iYXRjaChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVl ICp2cSwKKwkJICAgICAgc3RydWN0IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBpbnQgaW92X3NpemUs CisJCSAgICAgIHVuc2lnbmVkIGludCAqb3V0X251bSwgdW5zaWduZWQgaW50ICppbl9udW0sCisJ CSAgICAgIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywgdW5zaWduZWQgaW50ICpsb2dfbnVtKQorewor CWludCByZXQgPSBmZXRjaF9kZXNjcyh2cSk7CisJaW50IGk7CisKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJLyogTm93IGNvbnZlcnQgdG8gSU9WICovCisJLyogV2hlbiB3ZSBzdGFydCB0 aGVyZSBhcmUgbm9uZSBvZiBlaXRoZXIgaW5wdXQgbm9yIG91dHB1dC4gKi8KKwkqb3V0X251bSA9 ICppbl9udW0gPSAwOworCWlmICh1bmxpa2VseShsb2cpKQorCQkqbG9nX251bSA9IDA7CisKKwlm b3IgKGkgPSAwOyBpIDwgdnEtPm5kZXNjczsgKytpKSB7CisJCXVuc2lnbmVkIGlvdl9jb3VudCA9 ICppbl9udW0gKyAqb3V0X251bTsKKwkJc3RydWN0IHZob3N0X2Rlc2MgKmRlc2MgPSAmdnEtPmRl c2NzW2ldOworCQlpbnQgYWNjZXNzOworCisJCWlmIChkZXNjLT5mbGFncyAmIH5WSE9TVF9ERVND X0ZMQUdTKSB7CisJCQl2cV9lcnIodnEsICJVbmV4cGVjdGVkIGZsYWdzOiAweCV4IGF0IGRlc2Ny aXB0b3IgaWQgMHgleFxuIiwKKwkJCSAgICAgICBkZXNjLT5mbGFncywgZGVzYy0+aWQpOworCQkJ cmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyOworCQl9CisJCWlmIChkZXNjLT5mbGFncyAmIFZS SU5HX0RFU0NfRl9XUklURSkKKwkJCWFjY2VzcyA9IFZIT1NUX0FDQ0VTU19XTzsKKwkJZWxzZQor CQkJYWNjZXNzID0gVkhPU1RfQUNDRVNTX1JPOworCQlyZXQgPSB0cmFuc2xhdGVfZGVzYyh2cSwg ZGVzYy0+YWRkciwKKwkJCQkgICAgIGRlc2MtPmxlbiwgaW92ICsgaW92X2NvdW50LAorCQkJCSAg ICAgaW92X3NpemUgLSBpb3ZfY291bnQsIGFjY2Vzcyk7CisJCWlmICh1bmxpa2VseShyZXQgPCAw KSkgeworCQkJaWYgKHJldCAhPSAtRUFHQUlOKQorCQkJCXZxX2Vycih2cSwgIlRyYW5zbGF0aW9u IGZhaWx1cmUgJWQgZGVzY3JpcHRvciBpZHggJWRcbiIsCisJCQkJCXJldCwgaSk7CisJCQlnb3Rv IGVycjsKKwkJfQorCQlpZiAoYWNjZXNzID09IFZIT1NUX0FDQ0VTU19XTykgeworCQkJLyogSWYg dGhpcyBpcyBhbiBpbnB1dCBkZXNjcmlwdG9yLAorCQkJICogaW5jcmVtZW50IHRoYXQgY291bnQu ICovCisJCQkqaW5fbnVtICs9IHJldDsKKwkJCWlmICh1bmxpa2VseShsb2cgJiYgcmV0KSkgewor CQkJCWxvZ1sqbG9nX251bV0uYWRkciA9IGRlc2MtPmFkZHI7CisJCQkJbG9nWypsb2dfbnVtXS5s ZW4gPSBkZXNjLT5sZW47CisJCQkJKysqbG9nX251bTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8q IElmIGl0J3MgYW4gb3V0cHV0IGRlc2NyaXB0b3IsIHRoZXkncmUgYWxsIHN1cHBvc2VkCisJCQkg KiB0byBjb21lIGJlZm9yZSBhbnkgaW5wdXQgZGVzY3JpcHRvcnMuICovCisJCQlpZiAodW5saWtl bHkoKmluX251bSkpIHsKKwkJCQl2cV9lcnIodnEsICJEZXNjcmlwdG9yIGhhcyBvdXQgYWZ0ZXIg aW46ICIKKwkJCQkgICAgICAgImlkeCAlZFxuIiwgaSk7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJ CQlnb3RvIGVycjsKKwkJCX0KKwkJCSpvdXRfbnVtICs9IHJldDsKKwkJfQorCisJCXJldCA9IGRl c2MtPmlkOworCX0KKworCXZxLT5uZGVzY3MgPSAwOworCisJcmV0dXJuIHJldDsKKworZXJyOgor CXZob3N0X2Rpc2NhcmRfdnFfZGVzYyh2cSwgMSk7CisJdnEtPm5kZXNjcyA9IDA7CisKKwlyZXR1 cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZ2V0X3ZxX2Rlc2NfYmF0Y2gpOwor CiAvKiBSZXZlcnNlIHRoZSBlZmZlY3Qgb2Ygdmhvc3RfZ2V0X3ZxX2Rlc2MuIFVzZWZ1bCBmb3Ig ZXJyb3IgaGFuZGxpbmcuICovCiB2b2lkIHZob3N0X2Rpc2NhcmRfdnFfZGVzYyhzdHJ1Y3Qgdmhv c3RfdmlydHF1ZXVlICp2cSwgaW50IG4pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zo b3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKaW5kZXggYzhlOTZhMDk1ZDNiLi44NzA4OWQ1 MTQ5MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAorKysgYi9kcml2ZXJzL3Zo b3N0L3Zob3N0LmgKQEAgLTYwLDYgKzYwLDEzIEBAIGVudW0gdmhvc3RfdWFkZHJfdHlwZSB7CiAJ VkhPU1RfTlVNX0FERFJTID0gMywKIH07CiAKK3N0cnVjdCB2aG9zdF9kZXNjIHsKKwl1NjQgYWRk cjsKKwl1MzIgbGVuOworCXUxNiBmbGFnczsgLyogVlJJTkdfREVTQ19GX1dSSVRFLCBWUklOR19E RVNDX0ZfTkVYVCAqLworCXUxNiBpZDsKK307CisKIC8qIFRoZSB2aXJ0cXVldWUgc3RydWN0dXJl IGRlc2NyaWJlcyBhIHF1ZXVlIGF0dGFjaGVkIHRvIGEgZGV2aWNlLiAqLwogc3RydWN0IHZob3N0 X3ZpcnRxdWV1ZSB7CiAJc3RydWN0IHZob3N0X2RldiAqZGV2OwpAQCAtNzEsNiArNzgsMTEgQEAg c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7CiAJdnJpbmdfYXZhaWxfdCBfX3VzZXIgKmF2YWlsOwog CXZyaW5nX3VzZWRfdCBfX3VzZXIgKnVzZWQ7CiAJY29uc3Qgc3RydWN0IHZob3N0X2lvdGxiX21h cCAqbWV0YV9pb3RsYltWSE9TVF9OVU1fQUREUlNdOworCisJc3RydWN0IHZob3N0X2Rlc2MgKmRl c2NzOworCWludCBuZGVzY3M7CisJaW50IG1heF9kZXNjczsKKwogCXN0cnVjdCBmaWxlICpraWNr OwogCXN0cnVjdCBldmVudGZkX2N0eCAqY2FsbF9jdHg7CiAJc3RydWN0IGV2ZW50ZmRfY3R4ICpl cnJvcl9jdHg7CkBAIC0xNzcsNiArMTg5LDEwIEBAIGxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3Ry dWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJnCiBi b29sIHZob3N0X3ZxX2FjY2Vzc19vayhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSk7CiBib29s IHZob3N0X2xvZ19hY2Nlc3Nfb2soc3RydWN0IHZob3N0X2RldiAqKTsKIAoraW50IHZob3N0X2dl dF92cV9kZXNjX2JhdGNoKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwKKwkJICAgICAgc3RydWN0 IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBpbnQgaW92X2NvdW50LAorCQkgICAgICB1bnNpZ25lZCBp bnQgKm91dF9udW0sIHVuc2lnbmVkIGludCAqaW5fbnVtLAorCQkgICAgICBzdHJ1Y3Qgdmhvc3Rf bG9nICpsb2csIHVuc2lnbmVkIGludCAqbG9nX251bSk7CiBpbnQgdmhvc3RfZ2V0X3ZxX2Rlc2Mo c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLAogCQkgICAgICBzdHJ1Y3QgaW92ZWMgaW92W10sIHVu c2lnbmVkIGludCBpb3ZfY291bnQsCiAJCSAgICAgIHVuc2lnbmVkIGludCAqb3V0X251bSwgdW5z aWduZWQgaW50ICppbl9udW0sCi0tIApNU1QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXph dGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRh dGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==