From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [PATCH net-next 11/11] vhost_net: batch submitting XDP buffers to underlayer sockets Date: Fri, 7 Sep 2018 15:41:52 +0800 Message-ID: References: <20180906040526.22518-1-jasowang@redhat.com> <20180906040526.22518-12-jasowang@redhat.com> <20180906122857-mutt-send-email-mst@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org To: "Michael S. Tsirkin" Return-path: In-Reply-To: <20180906122857-mutt-send-email-mst@kernel.org> Content-Language: en-US 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 List-Id: netdev.vger.kernel.org CgpPbiAyMDE45bm0MDnmnIgwN+aXpSAwMDo0NiwgTWljaGFlbCBTLiBUc2lya2luIHdyb3RlOgo+ IE9uIFRodSwgU2VwIDA2LCAyMDE4IGF0IDEyOjA1OjI2UE0gKzA4MDAsIEphc29uIFdhbmcgd3Jv dGU6Cj4+IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBYRFAgYmF0Y2hpbmcgZm9yIHZob3N0X25ldC4g VGhlIGlkZWEgaXMgZmlyc3QgdG8KPj4gdHJ5IHRvIGRvIHVzZXJzcGFjZSBjb3B5IGFuZCBidWls ZCBYRFAgYnVmZiBkaXJlY3RseSBpbiB2aG9zdC4gSW5zdGVhZAo+PiBvZiBzdWJtaXR0aW5nIHRo ZSBwYWNrZXQgaW1tZWRpYXRlbHksIHZob3N0X25ldCB3aWxsIGJhdGNoIHRoZW0gaW4gYW4KPj4g YXJyYXkgYW5kIHN1Ym1pdCBldmVyeSA2NCAoVkhPU1RfTkVUX0JBVENIKSBwYWNrZXRzIHRvIHRo ZSB1bmRlciBsYXllcgo+PiBzb2NrZXRzIHRocm91Z2ggbXNnX2NvbnRyb2wgb2Ygc2VuZG1zZygp Lgo+Pgo+PiBXaGVuIFhEUCBpcyBlbmFibGVkIG9uIHRoZSBUVU4vVEFQLCBUVU4vVEFQIGNhbiBw cm9jZXNzIFhEUCBpbnNpZGUgYQo+PiBsb29wIHdpdGhvdXQgY2FyaW5nIEdVUCB0aHVzIGl0IGNh biBkbyBiYXRjaCBtYXAgZmx1c2hpbmcuIFdoZW4gWERQIGlzCj4+IG5vdCBlbmFibGVkIG9yIG5v dCBzdXBwb3J0ZWQsIHRoZSB1bmRlcmxheWVyIHNvY2tldCBuZWVkIHRvIGJ1aWxkIHNrYgo+PiBh bmQgcGFzcyBpdCB0byBuZXR3b3JrIGNvcmUuIFRoZSBiYXRjaGVkIHBhY2tldCBzdWJtaXNzaW9u IGFsbG93cyB1cwo+PiB0byBkbyBiYXRjaGluZyBsaWtlIG5ldGlmX3JlY2VpdmVfc2tiX2xpc3Qo KSBpbiB0aGUgZnV0dXJlLgo+Pgo+PiBUaGlzIHNhdmVzIGxvdHMgb2YgaW5kaXJlY3QgY2FsbHMg Zm9yIGJldHRlciBjYWNoZSB1dGlsaXphdGlvbi4gRm9yCj4+IHRoZSBjYXNlIHRoYXQgd2UgY2Fu J3Qgc28gYmF0Y2hpbmcgZS5nIHdoZW4gc25kYnVmIGlzIGxpbWl0ZWQgb3IKPj4gcGFja2V0IHNp emUgaXMgdG9vIGxhcmdlLCB3ZSB3aWxsIGdvIGZvciB1c3VhbCBvbmUgcGFja2V0IHBlcgo+PiBz ZW5kbXNnKCkgd2F5Lgo+Pgo+PiBEb2luZyB0ZXN0cG1kIG9uIHZhcmlvdXMgc2V0dXBzIGdpdmVz IHVzOgo+Pgo+PiBUZXN0ICAgICAgICAgICAgICAgIC8rcHBzJQo+PiBYRFBfRFJPUCBvbiBUQVAg ICAgIC8rNDQuOCUKPj4gWERQX1JFRElSRUNUIG9uIFRBUCAvKzI5JQo+PiBtYWN2dGFwIChza2Ip ICAgICAgIC8rMjYlCj4+Cj4+IE5ldHBlcmYgdGVzdHMgc2hvd3Mgb2J2aW91cyBpbXByb3ZlbWVu dHMgZm9yIHNtYWxsIHBhY2tldCB0cmFuc21pc3Npb246Cj4+Cj4+IHNpemUvc2Vzc2lvbi8rdGh1 JS8rbm9ybWFsaXplJQo+PiAgICAgNjQvICAgICAxLyAgICsyJS8gICAgMCUKPj4gICAgIDY0LyAg ICAgMi8gICArMyUvICAgKzElCj4+ICAgICA2NC8gICAgIDQvICAgKzclLyAgICs1JQo+PiAgICAg NjQvICAgICA4LyAgICs4JS8gICArNiUKPj4gICAgMjU2LyAgICAgMS8gICArMyUvICAgIDAlCj4+ ICAgIDI1Ni8gICAgIDIvICArMTAlLyAgICs3JQo+PiAgICAyNTYvICAgICA0LyAgKzI2JS8gICsy MiUKPj4gICAgMjU2LyAgICAgOC8gICsyNyUvICArMjMlCj4+ICAgIDUxMi8gICAgIDEvICAgKzMl LyAgICsyJQo+PiAgICA1MTIvICAgICAyLyAgKzE5JS8gICsxNCUKPj4gICAgNTEyLyAgICAgNC8g ICs0MyUvICArNDAlCj4+ICAgIDUxMi8gICAgIDgvICArNDUlLyAgKzQxJQo+PiAgIDEwMjQvICAg ICAxLyAgICs0JS8gICAgMCUKPj4gICAxMDI0LyAgICAgMi8gICsyNyUvICArMjElCj4+ICAgMTAy NC8gICAgIDQvICArMzglLyAgKzczJQo+PiAgIDEwMjQvICAgICA4LyAgKzE1JS8gICsyNCUKPj4g ICAyMDQ4LyAgICAgMS8gICsxMCUvICAgKzclCj4+ICAgMjA0OC8gICAgIDIvICArMTYlLyAgKzEy JQo+PiAgIDIwNDgvICAgICA0LyAgICAwJS8gICArMiUKPj4gICAyMDQ4LyAgICAgOC8gICAgMCUv ICAgKzIlCj4+ICAgNDA5Ni8gICAgIDEvICArMzYlLyAgKzYwJQo+PiAgIDQwOTYvICAgICAyLyAg LTExJS8gIC0yNiUKPj4gICA0MDk2LyAgICAgNC8gICAgMCUvICArMTQlCj4+ICAgNDA5Ni8gICAg IDgvICAgIDAlLyAgICs0JQo+PiAxNjM4NC8gICAgIDEvICAgLTElLyAgICs1JQo+PiAxNjM4NC8g ICAgIDIvICAgIDAlLyAgICsyJQo+PiAxNjM4NC8gICAgIDQvICAgIDAlLyAgIC0zJQo+PiAxNjM4 NC8gICAgIDgvICAgIDAlLyAgICs0JQo+PiA2NTUzNS8gICAgIDEvICAgIDAlLyAgKzEwJQo+PiA2 NTUzNS8gICAgIDIvICAgIDAlLyAgICs4JQo+PiA2NTUzNS8gICAgIDQvICAgIDAlLyAgICsxJQo+ PiA2NTUzNS8gICAgIDgvICAgIDAlLyAgICszJQo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBKYXNvbiBX YW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgo+PiAtLS0KPj4gICBkcml2ZXJzL3Zob3N0L25ldC5j IHwgMTY0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCj4+ICAg MSBmaWxlIGNoYW5nZWQsIDE1MSBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKPj4KPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jCj4+ IGluZGV4IGZiMDFjZTZkOTgxYy4uMWRkNDIzOWNiZmY4IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJz L3Zob3N0L25ldC5jCj4+ICsrKyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKPj4gQEAgLTExNiw2ICsx MTYsNyBAQCBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSB7Cj4+ICAgCSAqIEZvciBSWCwgbnVt YmVyIG9mIGJhdGNoZWQgaGVhZHMKPj4gICAJICovCj4+ICAgCWludCBkb25lX2lkeDsKPj4gKwlp bnQgYmF0Y2hlZF94ZHA7Cj4gUGxzIGFkZCBhIGNvbW1lbnQgZG9jdW1lbnRpbmcgd2hhdCBkb2Vz IHRoaXMgbmV3IGZpZWxkIGRvLgoKT2suCgo+Cj4+ICAgCS8qIGFuIGFycmF5IG9mIHVzZXJzcGFj ZSBidWZmZXJzIGluZm8gKi8KPj4gICAJc3RydWN0IHVidWZfaW5mbyAqdWJ1Zl9pbmZvOwo+PiAg IAkvKiBSZWZlcmVuY2UgY291bnRpbmcgZm9yIG91dHN0YW5kaW5nIHVidWZzLgo+PiBAQCAtMTIz LDYgKzEyNCw3IEBAIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlIHsKPj4gICAJc3RydWN0IHZo b3N0X25ldF91YnVmX3JlZiAqdWJ1ZnM7Cj4+ICAgCXN0cnVjdCBwdHJfcmluZyAqcnhfcmluZzsK Pj4gICAJc3RydWN0IHZob3N0X25ldF9idWYgcnhxOwo+PiArCXN0cnVjdCB4ZHBfYnVmZiB4ZHBb VkhPU1RfTkVUX0JBVENIXTsKPiBUaGlzIGlzIGEgYml0IHRvbyBtdWNoIHRvIGhhdmUgaW5saW5l LiA2NCBlbnRyaWVzIDQ4IGJ5dGVzIGVhY2gsIGFuZCB3ZQo+IGhhdmUgMiBvZiB0aGVzZSBzdHJ1 Y3R1cmVzLCB0aGF0J3MgYWxyZWFkeSA+NEsuCgpMZXQgbWUgYWxsb2NhdGUgaXQgZWxzZXdoZXJl LgoKPgo+PiAgIH07Cj4+ICAgCj4+ICAgc3RydWN0IHZob3N0X25ldCB7Cj4+IEBAIC0zMzgsNiAr MzQwLDExIEBAIHN0YXRpYyBib29sIHZob3N0X3NvY2tfemNvcHkoc3RydWN0IHNvY2tldCAqc29j aykKPj4gICAJCXNvY2tfZmxhZyhzb2NrLT5zaywgU09DS19aRVJPQ09QWSk7Cj4+ICAgfQo+PiAg IAo+PiArc3RhdGljIGJvb2wgdmhvc3Rfc29ja194ZHAoc3RydWN0IHNvY2tldCAqc29jaykKPj4g K3sKPj4gKwlyZXR1cm4gc29ja19mbGFnKHNvY2stPnNrLCBTT0NLX1hEUCk7Cj4gd2hhdCBpZiBh biB4ZHAgcHJvZ3JhbSBpcyBhdHRhY2hlZCB3aGlsZSB0aGlzIHByb2Nlc3NpbmcKPiBpcyBnb2lu ZyBvbj8gRmxhZyB2YWx1ZSB3aWxsIGJlIHdyb25nIC0gaXMgdGhpcyBzYWZlCj4gYW5kIHdoeT8g UGxzIGFkZCBhIGNvbW1lbnQuCgpPaywgbGV0IG1lIGFkZCBjb21tZW50IHRvIGV4cGxhaW4uIEl0 J3Mgc2FmZSBhbmQgbWF5IGp1c3QgbGVhZCBmZXcgCnBhY2tldHMgdG8gYmUgZHJvcHBlZCBpZiBY RFAgcHJvZ3JhbSB3YW50IHRvIGV4dGVuZCBwYWNrZXQncyBoZWFkZXIuCgo+Cj4+ICt9Cj4+ICsK Pj4gICAvKiBJbiBjYXNlIG9mIERNQSBkb25lIG5vdCBpbiBvcmRlciBpbiBsb3dlciBkZXZpY2Ug ZHJpdmVyIGZvciBzb21lIHJlYXNvbi4KPj4gICAgKiB1cGVuZF9pZHggaXMgdXNlZCB0byB0cmFj ayBlbmQgb2YgdXNlZCBpZHgsIGRvbmVfaWR4IGlzIHVzZWQgdG8gdHJhY2sgaGVhZAo+PiAgICAq IG9mIHVzZWQgaWR4LiBPbmNlIGxvd2VyIGRldmljZSBETUEgZG9uZSBjb250aWd1b3VzbHksIHdl IHdpbGwgc2lnbmFsIEtWTQo+PiBAQCAtNDQ0LDEwICs0NTEsMzYgQEAgc3RhdGljIHZvaWQgdmhv c3RfbmV0X3NpZ25hbF91c2VkKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCj4+ICAg CW52cS0+ZG9uZV9pZHggPSAwOwo+PiAgIH0KPj4gICAKPj4gK3N0YXRpYyB2b2lkIHZob3N0X3R4 X2JhdGNoKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwKPj4gKwkJCSAgIHN0cnVjdCB2aG9zdF9uZXRf dmlydHF1ZXVlICpudnEsCj4+ICsJCQkgICBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAo+PiArCQkJICAg c3RydWN0IG1zZ2hkciAqbXNnaGRyKQo+PiArewo+PiArCXN0cnVjdCB0dW5fbXNnX2N0bCBjdGwg PSB7Cj4+ICsJCS50eXBlID0gbnZxLT5iYXRjaGVkX3hkcCA8PCAxNiB8IFRVTl9NU0dfUFRSLAo+ PiArCQkucHRyID0gbnZxLT54ZHAsCj4+ICsJfTsKPj4gKwlpbnQgZXJyOwo+PiArCj4+ICsJaWYg KG52cS0+YmF0Y2hlZF94ZHAgPT0gMCkKPj4gKwkJZ290byBzaWduYWxfdXNlZDsKPj4gKwo+PiAr CW1zZ2hkci0+bXNnX2NvbnRyb2wgPSAmY3RsOwo+PiArCWVyciA9IHNvY2stPm9wcy0+c2VuZG1z Zyhzb2NrLCBtc2doZHIsIDApOwo+PiArCWlmICh1bmxpa2VseShlcnIgPCAwKSkgewo+PiArCQl2 cV9lcnIoJm52cS0+dnEsICJGYWlsIHRvIGJhdGNoIHNlbmRpbmcgcGFja2V0c1xuIik7Cj4+ICsJ CXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gK3NpZ25hbF91c2VkOgo+PiArCXZob3N0X25ldF9zaWdu YWxfdXNlZChudnEpOwo+PiArCW52cS0+YmF0Y2hlZF94ZHAgPSAwOwo+PiArfQo+PiArCj4+ICAg c3RhdGljIGludCB2aG9zdF9uZXRfdHhfZ2V0X3ZxX2Rlc2Moc3RydWN0IHZob3N0X25ldCAqbmV0 LAo+PiAgIAkJCQkgICAgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSwKPj4gICAJCQkJ ICAgIHVuc2lnbmVkIGludCAqb3V0X251bSwgdW5zaWduZWQgaW50ICppbl9udW0sCj4+IC0JCQkJ ICAgIGJvb2wgKmJ1c3lsb29wX2ludHIpCj4+ICsJCQkJICAgIHN0cnVjdCBtc2doZHIgKm1zZ2hk ciwgYm9vbCAqYnVzeWxvb3BfaW50cikKPj4gICB7Cj4+ICAgCXN0cnVjdCB2aG9zdF92aXJ0cXVl dWUgKnZxID0gJm52cS0+dnE7Cj4+ICAgCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIo ZW5kdGltZSk7Cj4+IEBAIC00NTUsOCArNDg4LDkgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfdHhf Z2V0X3ZxX2Rlc2Moc3RydWN0IHZob3N0X25ldCAqbmV0LAo+PiAgIAkJCQkgIG91dF9udW0sIGlu X251bSwgTlVMTCwgTlVMTCk7Cj4+ICAgCj4+ICAgCWlmIChyID09IHZxLT5udW0gJiYgdnEtPmJ1 c3lsb29wX3RpbWVvdXQpIHsKPj4gKwkJLyogRmx1c2ggYmF0Y2hlZCBwYWNrZXRzIGZpcnN0ICov Cj4+ICAgCQlpZiAoIXZob3N0X3NvY2tfemNvcHkodnEtPnByaXZhdGVfZGF0YSkpCj4+IC0JCQl2 aG9zdF9uZXRfc2lnbmFsX3VzZWQobnZxKTsKPj4gKwkJCXZob3N0X3R4X2JhdGNoKG5ldCwgbnZx LCB2cS0+cHJpdmF0ZV9kYXRhLCBtc2doZHIpOwo+PiAgIAkJcHJlZW1wdF9kaXNhYmxlKCk7Cj4+ ICAgCQllbmR0aW1lID0gYnVzeV9jbG9jaygpICsgdnEtPmJ1c3lsb29wX3RpbWVvdXQ7Cj4+ICAg CQl3aGlsZSAodmhvc3RfY2FuX2J1c3lfcG9sbChlbmR0aW1lKSkgewo+PiBAQCAtNTEyLDcgKzU0 Niw3IEBAIHN0YXRpYyBpbnQgZ2V0X3R4X2J1ZnMoc3RydWN0IHZob3N0X25ldCAqbmV0LAo+PiAg IAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZudnEtPnZxOwo+PiAgIAlpbnQgcmV0Owo+ PiAgIAo+PiAtCXJldCA9IHZob3N0X25ldF90eF9nZXRfdnFfZGVzYyhuZXQsIG52cSwgb3V0LCBp biwgYnVzeWxvb3BfaW50cik7Cj4+ICsJcmV0ID0gdmhvc3RfbmV0X3R4X2dldF92cV9kZXNjKG5l dCwgbnZxLCBvdXQsIGluLCBtc2csIGJ1c3lsb29wX2ludHIpOwo+PiAgIAo+PiAgIAlpZiAocmV0 IDwgMCB8fCByZXQgPT0gdnEtPm51bSkKPj4gICAJCXJldHVybiByZXQ7Cj4+IEBAIC01NDAsNiAr NTc0LDgzIEBAIHN0YXRpYyBib29sIHR4X2Nhbl9iYXRjaChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVl ICp2cSwgc2l6ZV90IHRvdGFsX2xlbikKPj4gICAJICAgICAgICF2aG9zdF92cV9hdmFpbF9lbXB0 eSh2cS0+ZGV2LCB2cSk7Cj4+ICAgfQo+PiAgIAo+PiArI2RlZmluZSBWSE9TVF9ORVRfUlhfUEFE IChORVRfSVBfQUxJR04gKyBORVRfU0tCX1BBRCkKPiBJIHdvbmRlciB3aGV0aGVyIE5FVF9JUF9B TElHTiBtYWtlIHNlbnNlIGZvciBYRFAuCgpYRFAgaXMgbm90IHRoZSBvbmx5IGNvbnN1bWVyLCBz b2NrZXQgbWF5IGJ1aWxkIHNrYiBiYXNlZCBvbiB0aGlzLgoKPgo+PiArCj4+ICtzdGF0aWMgaW50 IHZob3N0X25ldF9idWlsZF94ZHAoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSwKPj4g KwkJCSAgICAgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCj4+ICt7Cj4+ICsJc3RydWN0IHZob3N0 X3ZpcnRxdWV1ZSAqdnEgPSAmbnZxLT52cTsKPj4gKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdnEt PnByaXZhdGVfZGF0YTsKPj4gKwlzdHJ1Y3QgcGFnZV9mcmFnICphbGxvY19mcmFnID0gJmN1cnJl bnQtPnRhc2tfZnJhZzsKPj4gKwlzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKmdzbzsKPj4gKwlzdHJ1 Y3QgeGRwX2J1ZmYgKnhkcCA9ICZudnEtPnhkcFtudnEtPmJhdGNoZWRfeGRwXTsKPj4gKwlzaXpl X3QgbGVuID0gaW92X2l0ZXJfY291bnQoZnJvbSk7Cj4+ICsJaW50IGhlYWRyb29tID0gdmhvc3Rf c29ja194ZHAoc29jaykgPyBYRFBfUEFDS0VUX0hFQURST09NIDogMDsKPj4gKwlpbnQgYnVmbGVu ID0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTsKPj4gKwlp bnQgcGFkID0gU0tCX0RBVEFfQUxJR04oVkhPU1RfTkVUX1JYX1BBRCArIGhlYWRyb29tICsgbnZx LT5zb2NrX2hsZW4pOwo+PiArCWludCBzb2NrX2hsZW4gPSBudnEtPnNvY2tfaGxlbjsKPj4gKwl2 b2lkICpidWY7Cj4+ICsJaW50IGNvcGllZDsKPj4gKwo+PiArCWlmICh1bmxpa2VseShsZW4gPCBu dnEtPnNvY2tfaGxlbikpCj4+ICsJCXJldHVybiAtRUZBVUxUOwo+PiArCj4+ICsJaWYgKFNLQl9E QVRBX0FMSUdOKGxlbiArIHBhZCkgKwo+PiArCSAgICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3Ry dWN0IHNrYl9zaGFyZWRfaW5mbykpID4gUEFHRV9TSVpFKQo+PiArCQlyZXR1cm4gLUVOT1NQQzsK Pj4gKwo+PiArCWJ1ZmxlbiArPSBTS0JfREFUQV9BTElHTihsZW4gKyBwYWQpOwo+PiArCWFsbG9j X2ZyYWctPm9mZnNldCA9IEFMSUdOKCh1NjQpYWxsb2NfZnJhZy0+b2Zmc2V0LCBTTVBfQ0FDSEVf QllURVMpOwo+PiArCWlmICh1bmxpa2VseSghc2tiX3BhZ2VfZnJhZ19yZWZpbGwoYnVmbGVuLCBh bGxvY19mcmFnLCBHRlBfS0VSTkVMKSkpCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJ YnVmID0gKGNoYXIgKilwYWdlX2FkZHJlc3MoYWxsb2NfZnJhZy0+cGFnZSkgKyBhbGxvY19mcmFn LT5vZmZzZXQ7Cj4+ICsKPj4gKwkvKiBXZSBzdG9yZSB0d28ga2luZHMgb2YgbWV0YWRhdGEgaW4g dGhlIGhlYWRlciB3aGljaCB3aWxsIGJlCj4+ICsJICogdXNlZCBmb3IgWERQX1BBU1MgdG8gZG8g YnVpbGRfc2tiKCk6Cj4+ICsJICogb2Zmc2V0IDA6IGJ1Zmxlbgo+PiArCSAqIG9mZnNldCBzaXpl b2YoaW50KTogdm5ldCBoZWFkZXIKPiBEZWZpbmUgYSBzdHJ1Y3QgZm9yIHRoZSBtZXRhZGF0YSB0 aGVuPwoKT2suCgo+Cj4KPj4gKwkgKi8KPj4gKwljb3BpZWQgPSBjb3B5X3BhZ2VfZnJvbV9pdGVy KGFsbG9jX2ZyYWctPnBhZ2UsCj4+ICsJCQkJICAgICBhbGxvY19mcmFnLT5vZmZzZXQgKyBzaXpl b2YoaW50KSwKPj4gKwkJCQkgICAgIHNvY2tfaGxlbiwgZnJvbSk7Cj4+ICsJaWYgKGNvcGllZCAh PSBzb2NrX2hsZW4pCj4+ICsJCXJldHVybiAtRUZBVUxUOwo+PiArCj4+ICsJZ3NvID0gKHN0cnVj dCB2aXJ0aW9fbmV0X2hkciAqKShidWYgKyBzaXplb2YoaW50KSk7Cj4+ICsKPj4gKwlpZiAoKGdz by0+ZmxhZ3MgJiBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU0pICYmCj4+ICsJICAgIHZob3N0 MTZfdG9fY3B1KHZxLCBnc28tPmNzdW1fc3RhcnQpICsKPj4gKwkgICAgdmhvc3QxNl90b19jcHUo dnEsIGdzby0+Y3N1bV9vZmZzZXQpICsgMiA+Cj4+ICsJICAgIHZob3N0MTZfdG9fY3B1KHZxLCBn c28tPmhkcl9sZW4pKSB7Cj4+ICsJCWdzby0+aGRyX2xlbiA9IGNwdV90b192aG9zdDE2KHZxLAo+ PiArCQkJICAgICAgIHZob3N0MTZfdG9fY3B1KHZxLCBnc28tPmNzdW1fc3RhcnQpICsKPj4gKwkJ CSAgICAgICB2aG9zdDE2X3RvX2NwdSh2cSwgZ3NvLT5jc3VtX29mZnNldCkgKyAyKTsKPj4gKwo+ PiArCQlpZiAodmhvc3QxNl90b19jcHUodnEsIGdzby0+aGRyX2xlbikgPiBsZW4pCj4+ICsJCQly ZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlsZW4gLT0gc29ja19obGVuOwo+PiArCWNv cGllZCA9IGNvcHlfcGFnZV9mcm9tX2l0ZXIoYWxsb2NfZnJhZy0+cGFnZSwKPj4gKwkJCQkgICAg IGFsbG9jX2ZyYWctPm9mZnNldCArIHBhZCwKPj4gKwkJCQkgICAgIGxlbiwgZnJvbSk7Cj4+ICsJ aWYgKGNvcGllZCAhPSBsZW4pCj4+ICsJCXJldHVybiAtRUZBVUxUOwo+PiArCj4+ICsJeGRwLT5k YXRhX2hhcmRfc3RhcnQgPSBidWY7Cj4+ICsJeGRwLT5kYXRhID0gYnVmICsgcGFkOwo+PiArCXhk cC0+ZGF0YV9lbmQgPSB4ZHAtPmRhdGEgKyBsZW47Cj4+ICsJKihpbnQgKikoeGRwLT5kYXRhX2hh cmRfc3RhcnQpID0gYnVmbGVuOwo+PiArCj4+ICsJZ2V0X3BhZ2UoYWxsb2NfZnJhZy0+cGFnZSk7 Cj4+ICsJYWxsb2NfZnJhZy0+b2Zmc2V0ICs9IGJ1ZmxlbjsKPj4gKwo+PiArCSsrbnZxLT5iYXRj aGVkX3hkcDsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICAgc3RhdGljIHZvaWQg aGFuZGxlX3R4X2NvcHkoc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2Nr KQo+PiAgIHsKPj4gICAJc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSA9ICZuZXQtPnZx c1tWSE9TVF9ORVRfVlFfVFhdOwo+PiBAQCAtNTU2LDEwICs2NjcsMTQgQEAgc3RhdGljIHZvaWQg aGFuZGxlX3R4X2NvcHkoc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2Nr KQo+PiAgIAlzaXplX3QgbGVuLCB0b3RhbF9sZW4gPSAwOwo+PiAgIAlpbnQgZXJyOwo+PiAgIAlp bnQgc2VudF9wa3RzID0gMDsKPj4gKwlib29sIGJ1bGtpbmcgPSAoc29jay0+c2stPnNrX3NuZGJ1 ZiA9PSBJTlRfTUFYKTsKPiBXaGF0IGRvZXMgYnVsa2luZyBtZWFuPwoKVGhlIG5hbWUgaXMgbWlz bGVhZGluZywgaXQgbWVhbnMgd2hldGhlciB3ZSBjYW4gZG8gYmF0Y2hpbmcuIEZvciAKc2ltcGxp Y2l0eSwgSSBkaXNhYmxlIGJhdGNoaW5nIGlzIHNuZGJ1ZiBpcyBub3QgSU5UX01BWC4KCj4+ICAg Cj4+ICAgCWZvciAoOzspIHsKPj4gICAJCWJvb2wgYnVzeWxvb3BfaW50ciA9IGZhbHNlOwo+PiAg IAo+PiArCQlpZiAobnZxLT5kb25lX2lkeCA9PSBWSE9TVF9ORVRfQkFUQ0gpCj4+ICsJCQl2aG9z dF90eF9iYXRjaChuZXQsIG52cSwgc29jaywgJm1zZyk7Cj4+ICsKPj4gICAJCWhlYWQgPSBnZXRf dHhfYnVmcyhuZXQsIG52cSwgJm1zZywgJm91dCwgJmluLCAmbGVuLAo+PiAgIAkJCQkgICAmYnVz eWxvb3BfaW50cik7Cj4+ICAgCQkvKiBPbiBlcnJvciwgc3RvcCBoYW5kbGluZyB1bnRpbCB0aGUg bmV4dCBraWNrLiAqLwo+PiBAQCAtNTc3LDE0ICs2OTIsMzQgQEAgc3RhdGljIHZvaWQgaGFuZGxl X3R4X2NvcHkoc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKQo+PiAg IAkJCWJyZWFrOwo+PiAgIAkJfQo+PiAgIAo+PiAtCQl2cS0+aGVhZHNbbnZxLT5kb25lX2lkeF0u aWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7Cj4+IC0JCXZxLT5oZWFkc1tudnEtPmRvbmVf aWR4XS5sZW4gPSAwOwo+PiAtCj4+ICAgCQl0b3RhbF9sZW4gKz0gbGVuOwo+PiAtCQlpZiAodHhf Y2FuX2JhdGNoKHZxLCB0b3RhbF9sZW4pKQo+PiAtCQkJbXNnLm1zZ19mbGFncyB8PSBNU0dfTU9S RTsKPj4gLQkJZWxzZQo+PiAtCQkJbXNnLm1zZ19mbGFncyAmPSB+TVNHX01PUkU7Cj4+ICsKPj4g KwkJLyogRm9yIHNpbXBsaWNpdHksIFRYIGJhdGNoaW5nIGlzIG9ubHkgZW5hYmxlZCBpZgo+PiAr CQkgKiBzbmRidWYgaXMgdW5saW1pdGVkLgo+IFdoYXQgaWYgc25kYnVmIGNoYW5nZXMgd2hpbGUg dGhpcyBwcm9jZXNzaW5nIGlzIGdvaW5nIG9uPwoKV2Ugd2lsbCBnZXQgdGhlIGNvcnJlY3Qgc25k YnVmIGluIHRoZSBuZXh0IHJ1biBvZiBoYW5kbGVfdHgoKS4gSSB0aGluayAKdGhpcyBpcyBzYWZl LgoKVGhhbmtzCgo+Cj4+ICsJCSAqLwo+PiArCQlpZiAoYnVsa2luZykgewo+PiArCQkJZXJyID0g dmhvc3RfbmV0X2J1aWxkX3hkcChudnEsICZtc2cubXNnX2l0ZXIpOwo+PiArCQkJaWYgKCFlcnIp IHsKPj4gKwkJCQlnb3RvIGRvbmU7Cj4+ICsJCQl9IGVsc2UgaWYgKHVubGlrZWx5KGVyciAhPSAt RU5PU1BDKSkgewo+PiArCQkJCXZob3N0X3R4X2JhdGNoKG5ldCwgbnZxLCBzb2NrLCAmbXNnKTsK Pj4gKwkJCQl2aG9zdF9kaXNjYXJkX3ZxX2Rlc2ModnEsIDEpOwo+PiArCQkJCXZob3N0X25ldF9l bmFibGVfdnEobmV0LCB2cSk7Cj4+ICsJCQkJYnJlYWs7Cj4+ICsJCQl9Cj4+ICsKPj4gKwkJCS8q IFdlIGNhbid0IGJ1aWxkIFhEUCBidWZmLCBnbyBmb3Igc2luZ2xlCj4+ICsJCQkgKiBwYWNrZXQg cGF0aCBidXQgbGV0J3MgZmx1c2ggYmF0Y2hlZAo+PiArCQkJICogcGFja2V0cy4KPj4gKwkJCSAq Lwo+PiArCQkJdmhvc3RfdHhfYmF0Y2gobmV0LCBudnEsIHNvY2ssICZtc2cpOwo+PiArCQkJbXNn Lm1zZ19jb250cm9sID0gTlVMTDsKPj4gKwkJfSBlbHNlIHsKPj4gKwkJCWlmICh0eF9jYW5fYmF0 Y2godnEsIHRvdGFsX2xlbikpCj4+ICsJCQkJbXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTsKPj4g KwkJCWVsc2UKPj4gKwkJCQltc2cubXNnX2ZsYWdzICY9IH5NU0dfTU9SRTsKPj4gKwkJfQo+PiAg IAo+PiAgIAkJLyogVE9ETzogQ2hlY2sgc3BlY2lmaWMgZXJyb3IgYW5kIGJvbWIgb3V0IHVubGVz cyBFTk9CVUZTPyAqLwo+PiAgIAkJZXJyID0gc29jay0+b3BzLT5zZW5kbXNnKHNvY2ssICZtc2cs IGxlbik7Cj4+IEBAIC01OTYsMTUgKzczMSwxNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfdHhfY29w eShzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2spCj4+ICAgCQlpZiAo ZXJyICE9IGxlbikKPj4gICAJCQlwcl9kZWJ1ZygiVHJ1bmNhdGVkIFRYIHBhY2tldDogbGVuICVk ICE9ICV6ZFxuIiwKPj4gICAJCQkJIGVyciwgbGVuKTsKPj4gLQkJaWYgKCsrbnZxLT5kb25lX2lk eCA+PSBWSE9TVF9ORVRfQkFUQ0gpCj4+IC0JCQl2aG9zdF9uZXRfc2lnbmFsX3VzZWQobnZxKTsK Pj4gK2RvbmU6Cj4+ICsJCXZxLT5oZWFkc1tudnEtPmRvbmVfaWR4XS5pZCA9IGNwdV90b192aG9z dDMyKHZxLCBoZWFkKTsKPj4gKwkJdnEtPmhlYWRzW252cS0+ZG9uZV9pZHhdLmxlbiA9IDA7Cj4+ ICsJCSsrbnZxLT5kb25lX2lkeDsKPj4gICAJCWlmICh2aG9zdF9leGNlZWRzX3dlaWdodCgrK3Nl bnRfcGt0cywgdG90YWxfbGVuKSkgewo+PiAgIAkJCXZob3N0X3BvbGxfcXVldWUoJnZxLT5wb2xs KTsKPj4gICAJCQlicmVhazsKPj4gICAJCX0KPj4gICAJfQo+PiAgIAo+PiAtCXZob3N0X25ldF9z aWduYWxfdXNlZChudnEpOwo+PiArCXZob3N0X3R4X2JhdGNoKG5ldCwgbnZxLCBzb2NrLCAmbXNn KTsKPj4gICB9Cj4+ICAgCj4+ICAgc3RhdGljIHZvaWQgaGFuZGxlX3R4X3plcm9jb3B5KHN0cnVj dCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaykKPj4gQEAgLTExMTEsNiArMTI0 OCw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmYpCj4+ICAgCQluLT52cXNbaV0udWJ1Zl9pbmZvID0gTlVMTDsKPj4gICAJCW4t PnZxc1tpXS51cGVuZF9pZHggPSAwOwo+PiAgIAkJbi0+dnFzW2ldLmRvbmVfaWR4ID0gMDsKPj4g KwkJbi0+dnFzW2ldLmJhdGNoZWRfeGRwID0gMDsKPj4gICAJCW4tPnZxc1tpXS52aG9zdF9obGVu ID0gMDsKPj4gICAJCW4tPnZxc1tpXS5zb2NrX2hsZW4gPSAwOwo+PiAgIAkJbi0+dnFzW2ldLnJ4 X3JpbmcgPSBOVUxMOwo+PiAtLSAKPj4gMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVh bGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZv dW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24=