From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: kernel vhost demands an interrupt from guest when the ring is full in order to enable guest to submit new packets to the queue Date: Mon, 17 Dec 2018 19:15:55 -0500 Message-ID: <20181217191142-mutt-send-email-mst@kernel.org> References: <4F657BB0-DFB3-445D-872D-C54FA7252542@contoso.com> <20181217173642-mutt-send-email-mst@kernel.org> <4FE702F9-8680-461F-822B-03E81082F4F2@cisco.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <4FE702F9-8680-461F-822B-03E81082F4F2@cisco.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: "Steven Luong (sluong)" Cc: "Jerome Tollet (jtollet)" , "Damjan Marion (damarion)" , "virtualization@lists.linux-foundation.org" List-Id: virtualization@lists.linuxfoundation.org T24gTW9uLCBEZWMgMTcsIDIwMTggYXQgMTE6NTY6NTlQTSArMDAwMCwgU3RldmVuIEx1b25nIChz bHVvbmcpIHdyb3RlOgo+IAo+IAo+IO+7v09uIDEyLzE3LzE4LCAyOjU1IFBNLCAiTWljaGFlbCBT LiBUc2lya2luIiA8bXN0QHJlZGhhdC5jb20+IHdyb3RlOgo+IAo+ICAgICBPbiBUaHUsIERlYyAx MywgMjAxOCBhdCAxMToyNDoyOFBNICswMDAwLCBTdGV2ZW4gTHVvbmcgKHNsdW9uZykgdmlhIFZp cnR1YWxpemF0aW9uIHdyb3RlOgo+ICAgICA+IEZvbGtzLAo+ICAgICA+IAo+ICAgICA+ICAKPiAg ICAgPiAKPiAgICAgPiBXZSBjYW1lIGFjcm9zcyBhIG1lbW9yeSByYWNlIGNvbmRpdGlvbiBiZXR3 ZWVuIFZQUCB2aG9zdCBkcml2ZXIgYW5kIHRoZSBrZXJuZWwKPiAgICAgPiB2aG9zdC4gVlBQIGlz IHJ1bm5pbmcgYSB0YXAgaW50ZXJmYWNlIG92ZXIgdmhvc3QgYmFja2VuZC4gSW4gdGhpcyBjYXNl LCBWUFAgaXMKPiAgICAgPiBhY3RpbmcgYXMgdGhlIHZob3N0IGRyaXZlciBtb2RlIGFuZCB0aGUg a2VybmVsIHZob3N0IGlzIGFjdGluZyBhcyB0aGUgdmhvc3QKPiAgICAgPiBkZXZpY2UgbW9kZS4K PiAgICAgPiAKPiAgICAgPiAgCj4gICAgID4gCj4gICAgID4gSW4gdGhlIGtlcm5lbCB2aG9zdOKA mXMgVFggdHJhZmZpYyBkaXJlY3Rpb24gd2hpY2ggaXMgVlBQ4oCZcyBSWCB0cmFmZmljIGRpcmVj dGlvbiwKPiAgICAgPiBrZXJuZWwgdmhvc3QgaXMgdGhlIHByb2R1Y2VyIGFuZCBWUFAgaXMgdGhl IGNvbnN1bWVyLgo+ICAgICAKPiAgICAgTG9va2luZyBhdCB2aG9zdCBuZXQga2VybmVsIGNvZGUs IGl0IHNlZW1zIHRvIHVzZSB0aGUKPiAgICAgc2FtZSB0ZXJtaW5vbG9neSBhcyB2aXJ0aW8gbmV0 Lgo+ICAgICBDYW4geW91IHBscyBjbGFyaWZ5IHdoaWNoIHJpbmcgbnVtYmVyIGRvIHlvdSB1c2Ug MCBvciAxPwo+IAo+IDxTVkw+IDAuIDwvU1ZMPgo+ICAgICAKPiAgICAgSSB3aWxsIGFzc3VtZSBy aW5nIDAgYmVsb3cuCj4gICAgIAo+ICAgICAKPiAgICAgCj4gICAgID4gS2VybmVsIHZob3N0IHBs YWNlcwo+ICAgICA+IHRyYWZmaWMgaW4ga2VybmVsIHZob3N04oCZcyBUWCB2cmluZy4gVlBQIHJl bW92ZXMgdHJhZmZpYyBpbiBWUFDigJlzIFJYIHZyaW5nLgo+ICAgICAKPiAgICAgCj4gICAgIFNv IFZQUCBtYWtlcyBidWZmZXJzIGF2YWlsYWJsZSBhbmQgdmhvc3Qga2VybmVsIHVzZXMgdGhlbT8K PiAgICAgCj4gPFNWTD4gQ29ycmVjdC4gPC9TVkw+Cj4gICAgIAo+ICAgICA+IEl0Cj4gICAgID4g aXMgaW5ldml0YWJsZSB0aGF0IHRoZSB2cmluZyBtYXkgYmVjb21lIGZ1bGwgdW5kZXIgaGVhdnkg dHJhZmZpYyBhbmQgdGhlIGtlcm5lbAo+ICAgICA+IHZob3N0IG1heSBoYXZlIHRvIHN0b3AgYW5k IHdhaXQgZm9yIHRoZSBndWVzdCAoVlBQKSB0byBlbXB0eSB0aGUgdnJpbmcgYW5kIHRvCj4gICAg ID4gcmVmaWxsIHRoZSB2cmluZyB3aXRoIGRlc2NyaXB0b3JzLiBXaGVuIHRoYXQgY2FzZSBoYXBw ZW5zLCBrZXJuZWwgdmhvc3QgY2xlYXJzCj4gICAgID4gdGhlIGJpdCBpbiB0aGUgdnJpbmfigJlz IHVzZWQgZmxhZyB0byByZXF1ZXN0IGFuIGludGVycnVwdC9ub3RpZmljYXRpb24uIER1ZSB0bwo+ ICAgICA+IHNoYXJlZCBtZW1vcnkgcmFjZSBjb25kaXRpb24sIFZQUCBtYXkgbWlzcyB0aGUgY2xl YXJpbmcgb2YgdGhlIHZyaW5n4oCZcyB1c2VkCj4gICAgID4gZmxhZyBmcm9tIGtlcm5lbCB2aG9z dCBhbmQgZGlkbuKAmXQgc2VuZCBrZXJuZWwgdmhvc3QgYW4gaW50ZXJydXB0IGFmdGVyIFZQUAo+ ICAgICA+IGVtcHRpZXMgYW5kIHJlZmlsbHMgdGhlIHZyaW5nIHdpdGggbmV3IGRlc2NyaXB0b3Jz Lgo+ICAgICAKPiAgICAgU28ga2VybmVsIHZob3N0J3Mgd2FrZXVwcyBhcmUgc2lnbmFsbGVkIHRo cm91Z2ggZXZlbnRmZCAtIEkgYXNzdW1lCj4gICAgIHRoaXMgaXMgd2hhdCB5b3UgbWVhbiBieSBh biBpbnRlcnJ1cHQ/Cj4gICAgIAo+ICAgICAKPiAgICAgVG8gcHJldmVudCB0aGUgcmFjZSB0aGF0 IHlvdSBkZXNjcmliZSwgdmhvc3QgaGFzIHRoaXMgY29kZToKPiAgICAgCj4gICAgICAgICAgICAg ICAgICAgICAvKiBPSywgbm93IHdlIG5lZWQgdG8ga25vdyBhYm91dCBhZGRlZCBkZXNjcmlwdG9y cy4gKi8KPiAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhZGNvdW50KSB7Cj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShidXN5bG9vcF9pbnRyKSkgewo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZob3N0X3BvbGxfcXVldWUoJnZxLT5wb2xs KTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1bmxpa2VseSh2aG9z dF9lbmFibGVfbm90aWZ5KCZuZXQtPmRldiwgdnEpKSkgewo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRoZXkgaGF2ZSBzbGlwcGVkIG9uZSBpbiBhcyB3ZSB3ZXJlCj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZG9pbmcgdGhhdDogY2hlY2sg YWdhaW4uICovCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmhvc3RfZGlz YWJsZV9ub3RpZnkoJm5ldC0+ZGV2LCB2cSk7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90aGluZyBuZXc/ICBXYWl0IGZvciBldmVudGZk IHRvIHRlbGwgdXMKPiAgICAgCj4gICAgIFNvIHJpbmcgc2hvdWxkIGJlIHJlLWNoZWNrZWQgYWZ0 ZXIgbm90aWZpY2F0aW9ucyBhcmUgZW5hYmxlZC4KPiAgICAgSWYgcmluZyBpcyBubyBsb25nZXIg ZW1wdHksIHZob3N0IHdpbGwgcHJvY2VlZCB0byBoYW5kbGUgdGhlIHJpbmcuICAKPiAgICAgVGhp cyBjb2RlIGhhcyBiZWVuIGFyb3VuZCBmb3IgbWFueSB5ZWFycy4KPiAgICAgCj4gICAgIFRodXMg aWYgVlBQIGRvZXNuJ3Qgd29yayB3aXRoIGl0IHRoZW4gSSBzdXNwZWN0IGl0IGRvZXMgc29tZXRo aW5nCj4gICAgIGRpZmZlcmVudGx5LCBlLmcuIGlzIGl0IHBvc3NpYmxlIHRoYXQgaXQgaXMgbWlz c2luZyBhIG1lbW9yeQo+ICAgICBiYXJyaWVyIGFmdGVyIHdyaXRpbmcgb3V0IHRoZSBhdmFpbGFi bGUgYnVmZmVycyBhbmQgYmVmb3JlCj4gICAgIGNoZWNraW5nIHRoZSBmbGFncz8KPiAgICAgCj4g ICAgIDxTVkw+IENhbiB0aGUgcmFjZSBjb25kaXRpb24gYmUgYXZvaWRlZCB0b3RhbGx5PyBIZXJl IGlzIHRoZSBzY2VuYXJpby4KPiAKPiB0MDogVlBQIHJlZmlsbHMgdGhlIHZyaW5nIHdpdGggbmV3 IGRlc2NyaXB0b3JzLCBub3QgeWV0IHNldHMgYXZhaWwtPmlkeCB0byBtYWtlIGl0IGF2YWlsYWJs ZSB0byBrZXJuZWwgdmhvc3QuIAo+IHQxOiBrZXJuZWwgdmhvc3QgY2hlY2tzIHRoZSB2cmluZywg c3RpbGwgc2VlcyBubyBzcGFjZSBhdmFpbGFibGUsIGJ1dCBkb2VzIG5vdCB5ZXQgZXhlY3V0ZSB0 aGUgbGluZSBvZiBjb2RlIHRvIGNsZWFyIHRoZSB1c2VkLT5mbGFncwo+IHQyOiB2cHAgZXhlY3V0 ZXMgc2ZlbmNlLCBhbmQgc2V0cyBhdmFpbC0+aWR4IHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIGtl cm5lbCB2aG9zdAoKQXQgdGhpcyBwb2ludCB5b3UgbmVlZCBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIu IEUuZy4gbWZlbmNlLCBvciB4b3IuCk90aGVyd2lzZSB0aGUgcmVhZCBjYW4gZ2V0IHJlLW9yZGVy ZWQgYmVmb3JlIHRoZSB3cml0ZS4KCj4gdDM6IHZwcCBjaGVja3MgdXNlZC0+ZmxhZ3MsIGl0IGlz IHN0aWxsIDEsIHZwcCBza2lwcyBzZW5kaW5nIHRoZSBpbnRlcnJ1cHQKPiB0NDoga2VybmVsIHZo b3N0IGNsZWFycyB1c2VkLT5mbGFncyB0byBpbmRpY2F0ZSBpbnRlcnJ1cHQgaXMgcmVxdWlyZWQu IEJ1dCBWUFAganVzdCBtaXNzZWQgaXQuCgpmaW5lIGJ1dCBhdCB0aGlzIHBvaW50IGtlcm5lbCB2 aG9zdCB3aWxsIHJlY2hlY2sgdXNpbmcgdmhvc3RfZ2V0X2F2YWlsCmFuZCBwcm9jZXNzIHRoZSBi dWZmZXJzLiBTbyB0aGUgbGFjayBvZiBub3RpZmljYXRpb24gaXNuJ3QgYSBwcm9ibGVtOgoKYm9v bCB2aG9zdF9lbmFibGVfbm90aWZ5KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0 X3ZpcnRxdWV1ZSAqdnEpCnsKICAgICAgICBfX3ZpcnRpbzE2IGF2YWlsX2lkeDsKICAgICAgICBp bnQgcjsKCiAgICAgICAgaWYgKCEodnEtPnVzZWRfZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9U SUZZKSkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB2cS0+dXNlZF9mbGFn cyAmPSB+VlJJTkdfVVNFRF9GX05PX05PVElGWTsKICAgICAgICBpZiAoIXZob3N0X2hhc19mZWF0 dXJlKHZxLCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCkpIHsKICAgICAgICAgICAgICAgIHIgPSB2 aG9zdF91cGRhdGVfdXNlZF9mbGFncyh2cSk7CiAgICAgICAgICAgICAgICBpZiAocikgewogICAg ICAgICAgICAgICAgICAgICAgICB2cV9lcnIodnEsICJGYWlsZWQgdG8gZW5hYmxlIG5vdGlmaWNh dGlvbiBhdCAlcDogJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnEtPnVz ZWQtPmZsYWdzLCByKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg ICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByID0gdmhvc3Rf dXBkYXRlX2F2YWlsX2V2ZW50KHZxLCB2cS0+YXZhaWxfaWR4KTsKICAgICAgICAgICAgICAgIGlm IChyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZxX2Vycih2cSwgIkZhaWxlZCB0byB1cGRh dGUgYXZhaWwgZXZlbnQgaW5kZXggYXQgJXA6ICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmhvc3RfYXZhaWxfZXZlbnQodnEpLCByKTsKICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKiBU aGV5IGNvdWxkIGhhdmUgc2xpcHBlZCBvbmUgaW4gYXMgd2Ugd2VyZSBkb2luZyB0aGF0OiBtYWtl CiAgICAgICAgICogc3VyZSBpdCdzIHdyaXR0ZW4sIHRoZW4gY2hlY2sgYWdhaW4uICovCiAgICAg ICAgc21wX21iKCk7CiAgICAgICAgciA9IHZob3N0X2dldF9hdmFpbCh2cSwgYXZhaWxfaWR4LCAm dnEtPmF2YWlsLT5pZHgpOwogICAgICAgIGlmIChyKSB7CiAgICAgICAgICAgICAgICB2cV9lcnIo dnEsICJGYWlsZWQgdG8gY2hlY2sgYXZhaWwgaWR4IGF0ICVwOiAlZFxuIiwKICAgICAgICAgICAg ICAgICAgICAgICAmdnEtPmF2YWlsLT5pZHgsIHIpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHZob3N0MTZfdG9fY3B1KHZxLCBhdmFpbF9p ZHgpICE9IHZxLT5hdmFpbF9pZHg7Cn0KCj5UaGUgcmVzdWx0IGlzIGtlcm5lbCB2aG9zdCBnb3Qg c3R1Y2sgZXZlbiB0aG91Z2ggdGhlIHZyaW5nIGlzIGZpbGxlZCB3aXRoIG5ldyBkZXNjcmlwdG9y cy4KClNob3VsZG4ndCBiZS4gTWF5YmUgeW91IGFyZSBtaXNzaW5nIGEgZmVuY2UgYmVmb3JlIHJl YWRpbmcgdXNlZC0+ZmxhZ3M/CgoKPiBTdGV2ZW4KPiAKPiA8L1NWTD4KPiAgICAgCj4gICAgIAo+ ICAgICA+IFVuZm9ydHVuYXRlbHksIHRoaXMgbWlzc2VkCj4gICAgID4gbm90aWZpY2F0aW9uIGNh dXNlcyB0aGUga2VybmVsIHZob3N0IHRvIGJlIHN0dWNrIGJlY2F1c2Ugb25jZSB0aGUga2VybmVs IHZob3N0Cj4gICAgID4gaXMgd2FpdGluZyBmb3IgYW4gaW50ZXJydXB0L25vdGlmaWNhdGlvbiBm cm9tIHRoZSBndWVzdCwgb25seSBhbiBpbnRlcnJ1cHQvCj4gICAgID4gbm90aWZpY2F0aW9uIGZy b20gdGhlIGd1ZXN0IGNhbiByZXN1bWUvcmUtZW5hYmxlIHRoZSBndWVzdCBmcm9tIHN1Ym1pdHRp bmcgbmV3Cj4gICAgID4gcGFja2V0cyB0byB0aGUgdnJpbmcuIFRoaXMgZGVzaWduIHNlZW1zIHZ1 bG5lcmFibGUuCj4gICAgIAo+ICAgICBUaGUgcHJvdG9jb2wgcmlnaHQgbm93IHJlbGllcyBvbiBu b3RpZmljYXRpb25zIG5ldmVyIGJlaW5nIGxvc3QuCj4gICAgIAo+ICAgICBJIGNhbiBpbWFnaW5l IGFuIGFsdGVybmF0aXZlIHdoZXJlIGRldmljZSBhbHNvIHJlLWNoZWNrcwo+ICAgICB0aGUgcmlu Z3MgcGVyaW9kaWNhbGx5LCBidXQgdGhhdCB3b3VsZCBpbnZvbHZlIHJ1bm5pbmcKPiAgICAgdGlt ZXJzIGhvc3Qgc2lkZSB3aGljaCBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZXJlJ3MgYQo+ICAgICBm cmVlIHByb2Nlc3NvciB0aGF0IGNhbiBoYW5kbGUgdGhlbS4gRnVydGhlciwKPiAgICAgaXQgd2ls bCBzdGlsbCBsZWFkIHRvIHN0YWxscyBhbmQgcGFja2V0IGRyb3BzLCB3aGljaCB3aWxsCj4gICAg IGJlIGhhcmRlciB0byBkZWJ1Zy4KPiAgICAgCj4gICAgIFRoYXQncyBqdXN0IG15ICQuMDIsIHBs cyBmZWVsIGZyZWUgdG8gdGFrZSBpdCB3aXRoIHRoZSB2aXJ0aW8gdGMKPiAgICAgbWF5YmUgb3Ro ZXJzIHdpbGwgZmVlbCBkaWZmZXJlbnRseS4KPiAgICAgCj4gICAgID4gU2hvdWxkIHRoZSBrZXJu ZWwgdmhvc3QKPiAgICAgPiB0b3RhbGx5IGRlcGVuZCBvbiB0aGUgbm90aWZpY2F0aW9uIGZyb20g dGhlIGd1ZXN0PyBRdW90aW5nIHRoZSB0ZXh0IGZyb20KPiAgICAgPiAKPiAgICAgPiAgCj4gICAg ID4gCj4gICAgID4gaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvdmlydGlvL3ZpcnRpby92MS4w L3ZpcnRpby12MS4wLmh0bWwKPiAgICAgPiAKPiAgICAgPiAgCj4gICAgID4gCj4gICAgID4gLyog VGhlIGRldmljZSB1c2VzIHRoaXMgaW4gdXNlZC0+ZmxhZ3MgdG8gYWR2aXNlIHRoZSBkcml2ZXI6 IGRvbuKAmXQga2ljayBtZSAKPiAgICAgPiAgKiB3aGVuIHlvdSBhZGQgYSBidWZmZXIuICBJdOKA mXMgdW5yZWxpYWJsZSwgc28gaXTigJlzIHNpbXBseSBhbiAKPiAgICAgPiAgKiBvcHRpbWl6YXRp b24uICovIAo+ICAgICA+ICNkZWZpbmUgVklSVFFfVVNFRF9GX05PX05PVElGWSAgMSAKPiAgICAg PiAKPiAgICAgPiAgCj4gICAgID4gCj4gICAgID4gSSBpbnRlcnByZXQgdGhhdCB0aGUgbm90aWZp Y2F0aW9uIGlzIHNpbXBseSBhbiBvcHRpbWl6YXRpb24sIG5vdCBhIHJlbGlhYmxlCj4gICAgID4g bm90aWZpY2F0aW9uIG1lY2hhbmlzbS4gCj4gICAgIAo+ICAgICBXaGF0IHdhcyBtZWFudCBJIHRo aW5rIGlzIHRoYXQgc3VwcHJlc3Npb24gaXMgdW5yZWxpYWJsZS4KPiAgICAgCj4gICAgID5TbyB0 aGUga2VybmVsIHZob3N0IHNob3VsZCBub3QgYmV0IHRoZSBmYXJtIG9uIGl0Lgo+ICAgICA+IAo+ ICAgICA+ICAKPiAgICAgPiAKPiAgICAgPiBXZSBlbmNvdW50ZXIgdGhlIHNhbWUgcmFjZSBjb25k aXRpb24gaW4ga2VybmVsIHZob3N04oCZcyBSWCB0cmFmZmljIGRpcmVjdGlvbgo+ICAgICA+IHdo aWNoIGNhdXNlcyB0aGUga2VybmVsIHZob3N0IHRvIGJlIHN0dWNrIGR1ZSB0byBtaXNzZWQgaW50 ZXJydXB0L25vdGlmaWNhdGlvbgo+ICAgICA+IGFsdGhvdWdoIGl0IGlzIGxlc3MgZnJlcXVlbnQu Cj4gICAgIAo+ICAgICAKPiAgICAgRm9yIHRoZSByZXZlcnNlIGRpcmVjdGlvbiB0aGUgc3BlYyBh Y3R1YWxseSBoYXMgc29tZSBwc2V1ZG8tY29kZSBhbmQgYSBzdWdnZXN0aW9uCj4gICAgIGFib3V0 IGhhbmRsaW5nIHRoYXQgcmFjZToKPiAgICAgCj4gICAgIAlGb3Igb3B0aW1hbCBwZXJmb3JtYW5j ZSwgYSBkcml2ZXIgTUFZIGRpc2FibGUgdXNlZCBidWZmZXIgbm90aWZpY2F0aW9ucyB3aGlsZSBw cm9jZXNzaW5nIHRoZSB1c2VkCj4gICAgIAlyaW5nLCBidXQgYmV3YXJlIHRoZSBwcm9ibGVtIG9m IG1pc3Npbmcgbm90aWZpY2F0aW9ucyBiZXR3ZWVuIGVtcHR5aW5nIHRoZSByaW5nIGFuZCByZWVu YWJsaW5nIG5vLQo+ICAgICAJdGlmaWNhdGlvbnMuIFRoaXMgaXMgdXN1YWxseSBoYW5kbGVkIGJ5 IHJlLWNoZWNraW5nIGZvciBtb3JlIHVzZWQgYnVmZmVycyBhZnRlciBub3RpZmljYXRpb25zIGFy ZSByZS0KPiAgICAgCWVuYWJsZWQ6Cj4gICAgIAo+ICAgICAJCXZpcnRxX2Rpc2FibGVfdXNlZF9i dWZmZXJfbm90aWZpY2F0aW9ucyh2cSk7Cj4gICAgIAkJZm9yICg7Oykgewo+ICAgICAJCQlpZiAo dnEtPmxhc3Rfc2Vlbl91c2VkICE9IGxlMTZfdG9fY3B1KHZpcnRxLT51c2VkLmlkeCkpIHsKPiAg ICAgCQkJdmlydHFfZW5hYmxlX3VzZWRfYnVmZmVyX25vdGlmaWNhdGlvbnModnEpOwo+ICAgICAJ CQltYigpOwo+ICAgICAJCQlpZiAodnEtPmxhc3Rfc2Vlbl91c2VkICE9IGxlMTZfdG9fY3B1KHZp cnRxLT51c2VkLmlkeCkpCj4gICAgIAkJCQlicmVhazsKPiAgICAgCQkJdmlydHFfZGlzYWJsZV91 c2VkX2J1ZmZlcl9ub3RpZmljYXRpb25zKHZxKTsKPiAgICAgCQl9Cj4gICAgIAkJc3RydWN0IHZp cnRxX3VzZWRfZWxlbSAqZSA9IHZpcnRxLnVzZWQtPnJpbmdbdnEtPmxhc3Rfc2Vlbl91c2VkJXZz el07Cj4gICAgIAkJcHJvY2Vzc19idWZmZXIoZSk7Cj4gICAgIAkJdnEtPmxhc3Rfc2Vlbl91c2Vk Kys7Cj4gICAgIAo+ICAgICAKPiAgICAgCj4gICAgID4gIAo+ICAgICA+IAo+ICAgICA+IFN0ZXZl bgo+ICAgICA+IAo+ICAgICAKPiAgICAgPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+ICAgICA+IFZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdAo+ICAg ICA+IFZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCj4gICAgID4gaHR0 cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6 YXRpb24KPiAgICAgCj4gICAgIAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25A bGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24u b3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24=