From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out30-43.freemail.mail.aliyun.com ([115.124.30.43]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nfBcc-00868d-Ha for linux-um@lists.infradead.org; Fri, 15 Apr 2022 02:23:45 +0000 Message-ID: <1649989126.5433838-1-xuanzhuo@linux.alibaba.com> Subject: Re: [PATCH v9 31/32] virtio_net: support rx/tx queue resize Date: Fri, 15 Apr 2022 10:18:46 +0800 From: Xuan Zhuo References: <20220406034346.74409-1-xuanzhuo@linux.alibaba.com> <20220406034346.74409-32-xuanzhuo@linux.alibaba.com> <122008a6-1e79-14d3-1478-59f96464afc9@redhat.com> <1649838917.6726515-10-xuanzhuo@linux.alibaba.com> In-Reply-To: List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-um" Errors-To: linux-um-bounces+geert=linux-m68k.org@lists.infradead.org To: Jason Wang Cc: Jeff Dike , Richard Weinberger , Anton Ivanov , "Michael S. Tsirkin" , "David S. Miller" , Jakub Kicinski , Hans de Goede , Mark Gross , Vadim Pasternak , Bjorn Andersson , Mathieu Poirier , Cornelia Huck , Halil Pasic , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Alexander Gordeev , Sven Schnelle , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Johannes Berg , Vincent Whitchurch , linux-um@lists.infradead.org, netdev , platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, kvm , "open list:XDP (eXpress Data Path)" , virtualization T24gVGh1LCAxNCBBcHIgMjAyMiAxNzozMDowMiArMDgwMCwgSmFzb24gV2FuZyA8amFzb3dhbmdA cmVkaGF0LmNvbT4gd3JvdGU6Cj4gT24gV2VkLCBBcHIgMTMsIDIwMjIgYXQgNDo0NyBQTSBYdWFu IFpodW8gPHh1YW56aHVvQGxpbnV4LmFsaWJhYmEuY29tPiB3cm90ZToKPiA+Cj4gPiBPbiBXZWQs IDEzIEFwciAyMDIyIDE2OjAwOjE4ICswODAwLCBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQu Y29tPiB3cm90ZToKPiA+ID4KPiA+ID4g5ZyoIDIwMjIvNC82IOS4iuWNiDExOjQzLCBYdWFuIFpo dW8g5YaZ6YGTOgo+ID4gPiA+IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgcmVzaXplIGZ1bmN0 aW9uIG9mIHRoZSByeCwgdHggcXVldWVzLgo+ID4gPiA+IEJhc2VkIG9uIHRoaXMgZnVuY3Rpb24s IGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgcmluZyBudW0gb2YgdGhlCj4gPiA+ID4gcXVl dWUuCj4gPiA+ID4KPiA+ID4gPiBUaGVyZSBtYXkgYmUgYW4gZXhjZXB0aW9uIGR1cmluZyB0aGUg cmVzaXplIHByb2Nlc3MsIHRoZSByZXNpemUgbWF5Cj4gPiA+ID4gZmFpbCwgb3IgdGhlIHZxIGNh biBubyBsb25nZXIgYmUgdXNlZC4gRWl0aGVyIHdheSwgd2UgbXVzdCBleGVjdXRlCj4gPiA+ID4g bmFwaV9lbmFibGUoKS4gQmVjYXVzZSBuYXBpX2Rpc2FibGUgaXMgc2ltaWxhciB0byBhIGxvY2ss IG5hcGlfZW5hYmxlCj4gPiA+ID4gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY2FsbGluZyBuYXBpX2Rp c2FibGUuCj4gPiA+ID4KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBYdWFuIFpodW8gPHh1YW56aHVv QGxpbnV4LmFsaWJhYmEuY29tPgo+ID4gPiA+IC0tLQo+ID4gPiA+ICAgZHJpdmVycy9uZXQvdmly dGlvX25ldC5jIHwgODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ID4gPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDgxIGluc2VydGlvbnMoKykKPiA+ID4gPgo+ID4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0 aW9fbmV0LmMKPiA+ID4gPiBpbmRleCBiOGJmMDA1MjUxNzcuLmJhNjg1OWYzMDVmNyAxMDA2NDQK PiA+ID4gPiAtLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKPiA+ID4gPiArKysgYi9kcml2 ZXJzL25ldC92aXJ0aW9fbmV0LmMKPiA+ID4gPiBAQCAtMjUxLDYgKzI1MSw5IEBAIHN0cnVjdCBw YWRkZWRfdm5ldF9oZHIgewo+ID4gPiA+ICAgICBjaGFyIHBhZGRpbmdbNF07Cj4gPiA+ID4gICB9 Owo+ID4gPiA+Cj4gPiA+ID4gK3N0YXRpYyB2b2lkIHZpcnRuZXRfc3FfZnJlZV91bnVzZWRfYnVm KHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB2b2lkICpidWYpOwo+ID4gPiA+ICtzdGF0aWMgdm9pZCB2 aXJ0bmV0X3JxX2ZyZWVfdW51c2VkX2J1ZihzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgdm9pZCAqYnVm KTsKPiA+ID4gPiArCj4gPiA+ID4gICBzdGF0aWMgYm9vbCBpc194ZHBfZnJhbWUodm9pZCAqcHRy KQo+ID4gPiA+ICAgewo+ID4gPiA+ICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpcHRyICYgVklS VElPX1hEUF9GTEFHOwo+ID4gPiA+IEBAIC0xMzY5LDYgKzEzNzIsMTUgQEAgc3RhdGljIHZvaWQg dmlydG5ldF9uYXBpX2VuYWJsZShzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgc3RydWN0IG5hcGlfc3Ry dWN0ICpuYXBpKQo+ID4gPiA+ICAgewo+ID4gPiA+ICAgICBuYXBpX2VuYWJsZShuYXBpKTsKPiA+ ID4gPgo+ID4gPiA+ICsgICAvKiBDaGVjayBpZiB2cSBpcyBpbiByZXNldCBzdGF0ZS4gVGhlIG5v cm1hbCByZXNldC9yZXNpemUgcHJvY2VzcyB3aWxsCj4gPiA+ID4gKyAgICAqIGJlIHByb3RlY3Rl ZCBieSBuYXBpLiBIb3dldmVyLCB0aGUgcHJvdGVjdGlvbiBvZiBuYXBpIGlzIG9ubHkgZW5hYmxl ZAo+ID4gPiA+ICsgICAgKiBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgYW5kIHRoZSBwcm90ZWN0aW9u IG9mIG5hcGkgd2lsbCBlbmQgYWZ0ZXIgdGhlCj4gPiA+ID4gKyAgICAqIG9wZXJhdGlvbiBpcyBj b21wbGV0ZWQuIElmIHJlLWVuYWJsZSBmYWlscyBkdXJpbmcgdGhlIHByb2Nlc3MsIHZxCj4gPiA+ ID4gKyAgICAqIHdpbGwgcmVtYWluIHVuYXZhaWxhYmxlIHdpdGggcmVzZXQgc3RhdGUuCj4gPiA+ ID4gKyAgICAqLwo+ID4gPiA+ICsgICBpZiAodnEtPnJlc2V0KQo+ID4gPiA+ICsgICAgICAgICAg IHJldHVybjsKPiA+ID4KPiA+ID4KPiA+ID4gSSBkb24ndCBnZXQgd2hlbiBjb3VsZCB3ZSBoaXQg dGhpcyBjb25kaXRpb24uCj4gPgo+ID4KPiA+IEluIHBhdGNoIDIzLCB0aGUgY29kZSB0byBpbXBs ZW1lbnQgcmUtZW5hYmxlIHZxIGlzIGFzIGZvbGxvd3M6Cj4gPgo+ID4gK3N0YXRpYyBpbnQgdnBf bW9kZXJuX2VuYWJsZV9yZXNldF92cShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKPiA+ICt7Cj4gPiAr ICAgICAgIHN0cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZx LT52ZGV2KTsKPiA+ICsgICAgICAgc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRl diA9ICZ2cF9kZXYtPm1kZXY7Cj4gPiArICAgICAgIHN0cnVjdCB2aXJ0aW9fcGNpX3ZxX2luZm8g KmluZm87Cj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGluZGV4Owo+ID4gKyAgICAg ICBpbnQgZXJyOwo+ID4gKwo+ID4gKyAgICAgICBpZiAoIXZxLT5yZXNldCkKPiA+ICsgICAgICAg ICAgICAgICByZXR1cm4gLUVCVVNZOwo+ID4gKwo+ID4gKyAgICAgICBpbmRleCA9IHZxLT5pbmRl eDsKPiA+ICsgICAgICAgaW5mbyA9IHZwX2Rldi0+dnFzW2luZGV4XTsKPiA+ICsKPiA+ICsgICAg ICAgLyogY2hlY2sgcXVldWUgcmVzZXQgc3RhdHVzICovCj4gPiArICAgICAgIGlmICh2cF9tb2Rl cm5fZ2V0X3F1ZXVlX3Jlc2V0KG1kZXYsIGluZGV4KSAhPSAxKQo+ID4gKyAgICAgICAgICAgICAg IHJldHVybiAtRUJVU1k7Cj4gPiArCj4gPiArICAgICAgIGVyciA9IHZwX2FjdGl2ZV92cSh2cSwg aW5mby0+bXNpeF92ZWN0b3IpOwo+ID4gKyAgICAgICBpZiAoZXJyKQo+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiBlcnI7Cj4gPiArCj4gPiArICAgICAgIGlmICh2cS0+Y2FsbGJhY2spIHsKPiA+ ICsgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmdnBfZGV2LT5sb2NrLCBmbGFncyk7 Cj4gPiArICAgICAgICAgICAgICAgbGlzdF9hZGQoJmluZm8tPm5vZGUsICZ2cF9kZXYtPnZpcnRx dWV1ZXMpOwo+ID4gKyAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwX2Rl di0+bG9jaywgZmxhZ3MpOwo+ID4gKyAgICAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgICAgICAg IElOSVRfTElTVF9IRUFEKCZpbmZvLT5ub2RlKTsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAg ICAgICB2cF9tb2Rlcm5fc2V0X3F1ZXVlX2VuYWJsZSgmdnBfZGV2LT5tZGV2LCBpbmRleCwgdHJ1 ZSk7Cj4gPiArCj4gPiArICAgICAgIGlmICh2cF9kZXYtPnBlcl92cV92ZWN0b3JzICYmIGluZm8t Pm1zaXhfdmVjdG9yICE9IFZJUlRJT19NU0lfTk9fVkVDVE9SKQo+ID4gKyAgICAgICAgICAgICAg IGVuYWJsZV9pcnEocGNpX2lycV92ZWN0b3IodnBfZGV2LT5wY2lfZGV2LCBpbmZvLT5tc2l4X3Zl Y3RvcikpOwo+ID4gKwo+ID4gKyAgICAgICB2cS0+cmVzZXQgPSBmYWxzZTsKPiA+ICsKPiA+ICsg ICAgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4KPiA+Cj4gPiBUaGVyZSBhcmUgdGhyZWUgc2l0dWF0 aW9ucyB3aGVyZSBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLiBUaGVzZSBhcmUgdGhlCj4gPiBz aXR1YXRpb25zIEkgd2FudCB0byBoYW5kbGUuCj4KPiBSaWdodCwgYnV0IGl0IGxvb2tzIGhhcm1s ZXNzIGlmIHdlIGp1c3Qgc2NoZWR1bGUgdGhlIE5BUEkgd2l0aG91dCB0aGUgY2hlY2suCgpZZXMu Cgo+ID4KPiA+IEJ1dCBJJ20gcmV0aGlua2luZyB0aGUgcXVlc3Rpb24sIGFuZCBJIGZlZWwgbGlr ZSB5b3UncmUgcmlnaHQsIGFsdGhvdWdoIHRoZQo+ID4gaGFyZHdhcmUgc2V0dXAgbWF5IGZhaWwu IFdlIGNhbiBubyBsb25nZXIgc3luYyB3aXRoIHRoZSBoYXJkd2FyZS4gQnV0IHVzaW5nIGl0Cj4g PiBhcyBhIG5vcm1hbCB2cSBkb2Vzbid0IGhhdmUgYW55IHByb2JsZW1zLgo+Cj4gTm90ZSB0aGF0 IHdlIHNob3VsZCBtYWtlIHN1cmUgdGhlIGJ1Z2d5KG1hbGljb3VzKSBkZXZpY2Ugd29uJ3QgY3Jh c2gKPiB0aGUgY29kZXMgYnkgY2hhbmdpbmcgdGhlIHF1ZXVlX3Jlc2V0IHZhbHVlIGF0IGl0cyB3 aWxsLgoKSSB3aWxsIGtlZXAgYW4gZXllIG9uIHRoaXMgc2l0dWF0aW9uLgoKPgo+ID4KPiA+ID4K PiA+ID4KPiA+ID4gPiArCj4gPiA+ID4gICAgIC8qIElmIGFsbCBidWZmZXJzIHdlcmUgZmlsbGVk IGJ5IG90aGVyIHNpZGUgYmVmb3JlIHdlIG5hcGlfZW5hYmxlZCwgd2UKPiA+ID4gPiAgICAgICog d29uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0LCBzbyBwcm9jZXNzIGFueSBvdXRzdGFuZGluZyBw YWNrZXRzIG5vdy4KPiA+ID4gPiAgICAgICogQ2FsbCBsb2NhbF9iaF9lbmFibGUgYWZ0ZXIgdG8g dHJpZ2dlciBzb2Z0SVJRIHByb2Nlc3NpbmcuCj4gPiA+ID4gQEAgLTE0MTMsNiArMTQyNSwxNSBA QCBzdGF0aWMgdm9pZCByZWZpbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gPiA+ ID4gICAgICAgICAgICAgc3RydWN0IHJlY2VpdmVfcXVldWUgKnJxID0gJnZpLT5ycVtpXTsKPiA+ ID4gPgo+ID4gPiA+ICAgICAgICAgICAgIG5hcGlfZGlzYWJsZSgmcnEtPm5hcGkpOwo+ID4gPiA+ ICsKPiA+ID4gPiArICAgICAgICAgICAvKiBDaGVjayBpZiB2cSBpcyBpbiByZXNldCBzdGF0ZS4g U2VlIG1vcmUgaW4KPiA+ID4gPiArICAgICAgICAgICAgKiB2aXJ0bmV0X25hcGlfZW5hYmxlKCkK PiA+ID4gPiArICAgICAgICAgICAgKi8KPiA+ID4gPiArICAgICAgICAgICBpZiAocnEtPnZxLT5y ZXNldCkgewo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgdmlydG5ldF9uYXBpX2VuYWJsZShy cS0+dnEsICZycS0+bmFwaSk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK PiA+ID4gPiArICAgICAgICAgICB9Cj4gPiA+Cj4gPiA+Cj4gPiA+IENhbiB3ZSBkbyBzb21ldGhp bmcgc2ltaWxhciBpbiB2aXJ0bmV0X2Nsb3NlKCkgYnkgY2FuY2VsaW5nIHRoZSB3b3JrPwo+ID4K PiA+IEkgdGhpbmsgdGhlcmUgaXMgbm8gbmVlZCB0byBjYW5jZWwgdGhlIHdvcmsgaGVyZSwgYmVj YXVzZSBuYXBpX2Rpc2FibGUgd2lsbCB3YWl0Cj4gPiBmb3IgdGhlIG5hcGlfZW5hYmxlIG9mIHRo ZSByZXNpemUuIFNvIGlmIHRoZSByZS1lbmFibGUgZmFpbGVkIHZxIGlzIHVzZWQgYXMgYSBub3Jt YWwKPiA+IHZxLCB0aGlzIGxvZ2ljIGNhbiBiZSByZW1vdmVkLgo+Cj4gQWN0dWFsbHkgSSBtZWFu dCB0aGUgcGFydCBvZiB2aXJ0bmV0X3J4X3Jlc2l6ZSgpLgo+Cj4gSWYgd2UgZG9uJ3Qgc3luY2hy b25pemUgd2l0aCB0aGUgcmVmaWxsIHdvcmssIGl0IG1pZ2h0IGVuYWJsZSBOQVBJIHVuZXhwZWN0 ZWRseT8KCkkgZG9uJ3QgdGhpbmsgdGhpcyBzaXR1YXRpb24gd2lsbCBiZSBlbmNvdW50ZXJlZCwg YmVjYXVzZSBuYXBpX2Rpc2FibGUgaXMKbXV0dWFsbHkgZXhjbHVzaXZlLCBzbyB0aGVyZSB3aWxs IGJlIG5vIHVuZXhwZWN0ZWQgbmFwaSBlbmFibGUuCgpJcyB0aGVyZSBzb21ldGhpbmcgSSBtaXN1 bmRlcnN0b29kPwoKVGhhbmtzLgoKPgo+IFRoYW5rcwo+Cj4gPgo+ID4KPiA+ID4KPiA+ID4KPiA+ ID4gPiArCj4gPiA+ID4gICAgICAgICAgICAgc3RpbGxfZW1wdHkgPSAhdHJ5X2ZpbGxfcmVjdih2 aSwgcnEsIEdGUF9LRVJORUwpOwo+ID4gPiA+ICAgICAgICAgICAgIHZpcnRuZXRfbmFwaV9lbmFi bGUocnEtPnZxLCAmcnEtPm5hcGkpOwo+ID4gPiA+Cj4gPiA+ID4gQEAgLTE1MjMsNiArMTU0NCwx MCBAQCBzdGF0aWMgdm9pZCB2aXJ0bmV0X3BvbGxfY2xlYW50eChzdHJ1Y3QgcmVjZWl2ZV9xdWV1 ZSAqcnEpCj4gPiA+ID4gICAgIGlmICghc3EtPm5hcGkud2VpZ2h0IHx8IGlzX3hkcF9yYXdfYnVm ZmVyX3F1ZXVlKHZpLCBpbmRleCkpCj4gPiA+ID4gICAgICAgICAgICAgcmV0dXJuOwo+ID4gPiA+ Cj4gPiA+ID4gKyAgIC8qIENoZWNrIGlmIHZxIGlzIGluIHJlc2V0IHN0YXRlLiBTZWUgbW9yZSBp biB2aXJ0bmV0X25hcGlfZW5hYmxlKCkgKi8KPiA+ID4gPiArICAgaWYgKHNxLT52cS0+cmVzZXQp Cj4gPiA+ID4gKyAgICAgICAgICAgcmV0dXJuOwo+ID4gPgo+ID4gPgo+ID4gPiBXZSd2ZSBkaXNh YmxlZCBUWCBuYXBpLCBhbnkgY2hhbmNlIHdlIGNhbiBzdGlsbCBoaXQgdGhpcz8KPiA+Cj4gPiBT YW1lIGFzIGFib3ZlLgo+ID4KPiA+ID4KPiA+ID4KPiA+ID4gPiArCj4gPiA+ID4gICAgIGlmIChf X25ldGlmX3R4X3RyeWxvY2sodHhxKSkgewo+ID4gPiA+ICAgICAgICAgICAgIGRvIHsKPiA+ID4g PiAgICAgICAgICAgICAgICAgICAgIHZpcnRxdWV1ZV9kaXNhYmxlX2NiKHNxLT52cSk7Cj4gPiA+ ID4gQEAgLTE3NjksNiArMTc5NCw2MiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfeG1pdChz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQo+ID4gPiA+ICAgICBy ZXR1cm4gTkVUREVWX1RYX09LOwo+ID4gPiA+ICAgfQo+ID4gPiA+Cj4gPiA+ID4gK3N0YXRpYyBp bnQgdmlydG5ldF9yeF9yZXNpemUoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmksCj4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSwgdTMyIHJpbmdf bnVtKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgIGludCBlcnI7Cj4gPiA+ID4gKwo+ID4gPiA+ICsg ICBuYXBpX2Rpc2FibGUoJnJxLT5uYXBpKTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgIGVyciA9IHZp cnRxdWV1ZV9yZXNpemUocnEtPnZxLCByaW5nX251bSwgdmlydG5ldF9ycV9mcmVlX3VudXNlZF9i dWYpOwo+ID4gPiA+ICsgICBpZiAoZXJyKQo+ID4gPiA+ICsgICAgICAgICAgIGdvdG8gZXJyOwo+ ID4gPiA+ICsKPiA+ID4gPiArICAgaWYgKCF0cnlfZmlsbF9yZWN2KHZpLCBycSwgR0ZQX0tFUk5F TCkpCj4gPiA+ID4gKyAgICAgICAgICAgc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ2aS0+cmVmaWxs LCAwKTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgIHZpcnRuZXRfbmFwaV9lbmFibGUocnEtPnZxLCAm cnEtPm5hcGkpOwo+ID4gPiA+ICsgICByZXR1cm4gMDsKPiA+ID4gPiArCj4gPiA+ID4gK2VycjoK PiA+ID4gPiArICAgbmV0ZGV2X2Vycih2aS0+ZGV2LAo+ID4gPiA+ICsgICAgICAgICAgICAgICJy ZXNldCByeCByZXNldCB2cSBmYWlsOiByeCBxdWV1ZSBpbmRleDogJXRkIGVycjogJWRcbiIsCj4g PiA+ID4gKyAgICAgICAgICAgICAgcnEgLSB2aS0+cnEsIGVycik7Cj4gPiA+ID4gKyAgIHZpcnRu ZXRfbmFwaV9lbmFibGUocnEtPnZxLCAmcnEtPm5hcGkpOwo+ID4gPiA+ICsgICByZXR1cm4gZXJy Owo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50IHZpcnRuZXRfdHhfcmVz aXplKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc2VuZF9xdWV1ZSAqc3EsIHUzMiByaW5nX251bSkKPiA+ID4gPiArewo+ID4g PiA+ICsgICBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7Cj4gPiA+ID4gKyAgIGludCBlcnIsIHFp bmRleDsKPiA+ID4gPiArCj4gPiA+ID4gKyAgIHFpbmRleCA9IHNxIC0gdmktPnNxOwo+ID4gPiA+ ICsKPiA+ID4gPiArICAgdmlydG5ldF9uYXBpX3R4X2Rpc2FibGUoJnNxLT5uYXBpKTsKPiA+ID4g PiArCj4gPiA+ID4gKyAgIHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUodmktPmRldiwgcWluZGV4 KTsKPiA+ID4gPiArICAgX19uZXRpZl90eF9sb2NrX2JoKHR4cSk7Cj4gPiA+ID4gKyAgIG5ldGlm X3N0b3Bfc3VicXVldWUodmktPmRldiwgcWluZGV4KTsKPiA+ID4gPiArICAgX19uZXRpZl90eF91 bmxvY2tfYmgodHhxKTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgIGVyciA9IHZpcnRxdWV1ZV9yZXNp emUoc3EtPnZxLCByaW5nX251bSwgdmlydG5ldF9zcV9mcmVlX3VudXNlZF9idWYpOwo+ID4gPiA+ ICsgICBpZiAoZXJyKQo+ID4gPiA+ICsgICAgICAgICAgIGdvdG8gZXJyOwo+ID4gPiA+ICsKPiA+ ID4gPiArICAgbmV0aWZfc3RhcnRfc3VicXVldWUodmktPmRldiwgcWluZGV4KTsKPiA+ID4gPiAr ICAgdmlydG5ldF9uYXBpX3R4X2VuYWJsZSh2aSwgc3EtPnZxLCAmc3EtPm5hcGkpOwo+ID4gPiA+ ICsgICByZXR1cm4gMDsKPiA+ID4gPiArCj4gPiA+ID4gK2VycjoKPiA+ID4KPiA+ID4KPiA+ID4g SSBndWVzcyB3ZSBjYW4gc3RpbGwgc3RhcnQgdGhlIHF1ZXVlIGluIHRoaXMgY2FzZT8gKFNpbmNl IHdlIGRvbid0Cj4gPiA+IGNoYW5nZSB0aGUgcXVldWUgaWYgcmVzaXplIGZhaWxzKS4KPiA+Cj4g PiBZZXMsIHlvdSBhcmUgcmlnaHQuCj4gPgo+ID4gVGhhbmtzLgo+ID4KPiA+ID4KPiA+ID4KPiA+ ID4gPiArICAgbmV0ZGV2X2Vycih2aS0+ZGV2LAo+ID4gPiA+ICsgICAgICAgICAgICAgICJyZXNl dCB0eCByZXNldCB2cSBmYWlsOiB0eCBxdWV1ZSBpbmRleDogJXRkIGVycjogJWRcbiIsCj4gPiA+ ID4gKyAgICAgICAgICAgICAgc3EgLSB2aS0+c3EsIGVycik7Cj4gPiA+ID4gKyAgIHZpcnRuZXRf bmFwaV90eF9lbmFibGUodmksIHNxLT52cSwgJnNxLT5uYXBpKTsKPiA+ID4gPiArICAgcmV0dXJu IGVycjsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiAgIC8qCj4gPiA+ID4gICAgKiBTZW5k IGNvbW1hbmQgdmlhIHRoZSBjb250cm9sIHZpcnRxdWV1ZSBhbmQgY2hlY2sgc3RhdHVzLiAgQ29t bWFuZHMKPiA+ID4gPiAgICAqIHN1cHBvcnRlZCBieSB0aGUgaHlwZXJ2aXNvciwgYXMgaW5kaWNh dGVkIGJ5IGZlYXR1cmUgYml0cywgc2hvdWxkCj4gPiA+Cj4gPgo+CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC11bSBtYWlsaW5nIGxpc3QKbGlu dXgtdW1AbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LXVtCg==