From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Glisse Subject: Re: [PATCH 2/9] mm: Add an apply_to_pfn_range interface Date: Fri, 12 Apr 2019 17:07:43 -0400 Message-ID: <20190412210743.GA19252@redhat.com> References: <20190412160338.64994-1-thellstrom@vmware.com> <20190412160338.64994-3-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id CB77689A20 for ; Fri, 12 Apr 2019 21:07:49 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190412160338.64994-3-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thomas Hellstrom Cc: Michal Hocko , Rik van Riel , Peter Zijlstra , Will Deacon , "linux-kernel@vger.kernel.org" , Matthew Wilcox , "linux-mm@kvack.org" , Minchan Kim , Linux-graphics-maintainer , "dri-devel@lists.freedesktop.org" , Huang Ying , Andrew Morton , Souptick Joarder List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBBcHIgMTIsIDIwMTkgYXQgMDQ6MDQ6MThQTSArMDAwMCwgVGhvbWFzIEhlbGxzdHJv bSB3cm90ZToKPiBUaGlzIGlzIGJhc2ljYWxseSBhcHBseV90b19wYWdlX3JhbmdlIHdpdGggYWRk ZWQgZnVuY3Rpb25hbGl0eToKPiBBbGxvY2F0aW5nIG1pc3NpbmcgcGFydHMgb2YgdGhlIHBhZ2Ug dGFibGUgYmVjb21lcyBvcHRpb25hbCwgd2hpY2gKPiBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBj YW4gYmUgZ3VhcmFudGVlZCBub3QgdG8gZXJyb3IgaWYgYWxsb2NhdGlvbgo+IGlzIGRpc2FibGVk LiBBbHNvIHBhc3Npbmcgb2YgdGhlIGNsb3N1cmUgc3RydWN0IGFuZCBjYWxsYmFjayBmdW5jdGlv bgo+IGJlY29tZXMgZGlmZmVyZW50IGFuZCBtb3JlIGluIGxpbmUgd2l0aCBob3cgdGhpbmdzIGFy ZSBkb25lIGVsc2V3aGVyZS4KPiAKPiBGaW5hbGx5IHdlIGtlZXAgYXBwbHlfdG9fcGFnZV9yYW5n ZSBhcyBhIHdyYXBwZXIgYXJvdW5kIGFwcGx5X3RvX3Bmbl9yYW5nZQo+IAo+IFRoZSByZWFzb24g Zm9yIG5vdCB1c2luZyB0aGUgcGFnZS13YWxrIGNvZGUgaXMgdGhhdCB3ZSB3YW50IHRvIHBlcmZv cm0KPiB0aGUgcGFnZS13YWxrIG9uIHZtYXMgcG9pbnRpbmcgdG8gYW4gYWRkcmVzcyBzcGFjZSB3 aXRob3V0IHJlcXVpcmluZyB0aGUKPiBtbWFwX3NlbSB0byBiZSBoZWxkIHJhdGhlciB0aGFuZCBv biB2bWFzIGJlbG9uZ2luZyB0byBhIHByb2Nlc3Mgd2l0aCB0aGUKPiBtbWFwX3NlbSBoZWxkLgo+ IAo+IE5vdGFibGUgY2hhbmdlcyBzaW5jZSBSRkM6Cj4gRG9uJ3QgZXhwb3J0IGFwcGx5X3RvX3Bm biByYW5nZS4KPiAKPiBDYzogQW5kcmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9y Zz4KPiBDYzogTWF0dGhldyBXaWxjb3ggPHdpbGx5QGluZnJhZGVhZC5vcmc+Cj4gQ2M6IFdpbGwg RGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgo+IENjOiBQZXRlciBaaWpsc3RyYSA8cGV0ZXJ6 QGluZnJhZGVhZC5vcmc+Cj4gQ2M6IFJpayB2YW4gUmllbCA8cmllbEBzdXJyaWVsLmNvbT4KPiBD YzogTWluY2hhbiBLaW0gPG1pbmNoYW5Aa2VybmVsLm9yZz4KPiBDYzogTWljaGFsIEhvY2tvIDxt aG9ja29Ac3VzZS5jb20+Cj4gQ2M6IEh1YW5nIFlpbmcgPHlpbmcuaHVhbmdAaW50ZWwuY29tPgo+ IENjOiBTb3VwdGljayBKb2FyZGVyIDxqcmRyLmxpbnV4QGdtYWlsLmNvbT4KPiBDYzogIkrDqXLD tG1lIEdsaXNzZSIgPGpnbGlzc2VAcmVkaGF0LmNvbT4KPiBDYzogbGludXgtbW1Aa3ZhY2sub3Jn Cj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKPiBTaWduZWQtb2ZmLWJ5OiBUaG9t YXMgSGVsbHN0cm9tIDx0aGVsbHN0cm9tQHZtd2FyZS5jb20+Cj4gLS0tCj4gIGluY2x1ZGUvbGlu dXgvbW0uaCB8ICAxMCArKysrCj4gIG1tL21lbW9yeS5jICAgICAgICB8IDEzMCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KPiAgMiBmaWxlcyBjaGFuZ2VkLCAx MDggaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2luY2x1 ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAo+IGluZGV4IDgwYmI2NDA4ZmU3My4u YjdkZDRkZGQ2ZWZiIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAo+ICsrKyBiL2lu Y2x1ZGUvbGludXgvbW0uaAo+IEBAIC0yNjMyLDYgKzI2MzIsMTYgQEAgdHlwZWRlZiBpbnQgKCpw dGVfZm5fdCkocHRlX3QgKnB0ZSwgcGd0YWJsZV90IHRva2VuLCB1bnNpZ25lZCBsb25nIGFkZHIs Cj4gIGV4dGVybiBpbnQgYXBwbHlfdG9fcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwg dW5zaWduZWQgbG9uZyBhZGRyZXNzLAo+ICAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBw dGVfZm5fdCBmbiwgdm9pZCAqZGF0YSk7Cj4gIAo+ICtzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5Owo+ ICt0eXBlZGVmIGludCAoKnB0ZXJfZm5fdCkocHRlX3QgKnB0ZSwgcGd0YWJsZV90IHRva2VuLCB1 bnNpZ25lZCBsb25nIGFkZHIsCj4gKwkJCSBzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5ICpjbG9zdXJl KTsKPiArc3RydWN0IHBmbl9yYW5nZV9hcHBseSB7Cj4gKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsK PiArCXB0ZXJfZm5fdCBwdGVmbjsKPiArCXVuc2lnbmVkIGludCBhbGxvYzsKPiArfTsKPiArZXh0 ZXJuIGludCBhcHBseV90b19wZm5fcmFuZ2Uoc3RydWN0IHBmbl9yYW5nZV9hcHBseSAqY2xvc3Vy ZSwKPiArCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUp Owo+ICAKPiAgI2lmZGVmIENPTkZJR19QQUdFX1BPSVNPTklORwo+ICBleHRlcm4gYm9vbCBwYWdl X3BvaXNvbmluZ19lbmFibGVkKHZvaWQpOwo+IGRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21t L21lbW9yeS5jCj4gaW5kZXggYTk1YjRhM2IxYWUyLi42MGQ2NzE1ODk2NGYgMTAwNjQ0Cj4gLS0t IGEvbW0vbWVtb3J5LmMKPiArKysgYi9tbS9tZW1vcnkuYwo+IEBAIC0xOTM4LDE4ICsxOTM4LDE3 IEBAIGludCB2bV9pb21hcF9tZW1vcnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBoeXNf YWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nCj4gIH0KPiAgRVhQT1JUX1NZTUJPTCh2bV9pb21h cF9tZW1vcnkpOwo+ICAKPiAtc3RhdGljIGludCBhcHBseV90b19wdGVfcmFuZ2Uoc3RydWN0IG1t X3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCj4gLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwg dW5zaWduZWQgbG9uZyBlbmQsCj4gLQkJCQkgICAgIHB0ZV9mbl90IGZuLCB2b2lkICpkYXRhKQo+ ICtzdGF0aWMgaW50IGFwcGx5X3RvX3B0ZV9yYW5nZShzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5ICpj bG9zdXJlLCBwbWRfdCAqcG1kLAo+ICsJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2ln bmVkIGxvbmcgZW5kKQo+ICB7Cj4gIAlwdGVfdCAqcHRlOwo+ICAJaW50IGVycjsKPiAgCXBndGFi bGVfdCB0b2tlbjsKPiAgCXNwaW5sb2NrX3QgKnVuaW5pdGlhbGl6ZWRfdmFyKHB0bCk7Cj4gIAo+ IC0JcHRlID0gKG1tID09ICZpbml0X21tKSA/Cj4gKwlwdGUgPSAoY2xvc3VyZS0+bW0gPT0gJmlu aXRfbW0pID8KPiAgCQlwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcikgOgo+IC0JCXB0ZV9hbGxv Y19tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCAmcHRsKTsKPiArCQlwdGVfYWxsb2NfbWFwX2xvY2so Y2xvc3VyZS0+bW0sIHBtZCwgYWRkciwgJnB0bCk7Cj4gIAlpZiAoIXB0ZSkKPiAgCQlyZXR1cm4g LUVOT01FTTsKPiAgCj4gQEAgLTE5NjAsODYgKzE5NTksMTA3IEBAIHN0YXRpYyBpbnQgYXBwbHlf dG9fcHRlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAo+ICAJdG9rZW4g PSBwbWRfcGd0YWJsZSgqcG1kKTsKPiAgCj4gIAlkbyB7Cj4gLQkJZXJyID0gZm4ocHRlKyssIHRv a2VuLCBhZGRyLCBkYXRhKTsKPiArCQllcnIgPSBjbG9zdXJlLT5wdGVmbihwdGUrKywgdG9rZW4s IGFkZHIsIGNsb3N1cmUpOwo+ICAJCWlmIChlcnIpCj4gIAkJCWJyZWFrOwo+ICAJfSB3aGlsZSAo YWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKPiAgCj4gIAlhcmNoX2xlYXZlX2xhenlf bW11X21vZGUoKTsKPiAgCj4gLQlpZiAobW0gIT0gJmluaXRfbW0pCj4gKwlpZiAoY2xvc3VyZS0+ bW0gIT0gJmluaXRfbW0pCj4gIAkJcHRlX3VubWFwX3VubG9jayhwdGUtMSwgcHRsKTsKPiAgCXJl dHVybiBlcnI7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgYXBwbHlfdG9fcG1kX3JhbmdlKHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLAo+IC0JCQkJICAgICB1bnNpZ25lZCBsb25nIGFk ZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo+IC0JCQkJICAgICBwdGVfZm5fdCBmbiwgdm9pZCAqZGF0 YSkKPiArc3RhdGljIGludCBhcHBseV90b19wbWRfcmFuZ2Uoc3RydWN0IHBmbl9yYW5nZV9hcHBs eSAqY2xvc3VyZSwgcHVkX3QgKnB1ZCwKPiArCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1 bnNpZ25lZCBsb25nIGVuZCkKPiAgewo+ICAJcG1kX3QgKnBtZDsKPiAgCXVuc2lnbmVkIGxvbmcg bmV4dDsKPiAtCWludCBlcnI7Cj4gKwlpbnQgZXJyID0gMDsKPiAgCj4gIAlCVUdfT04ocHVkX2h1 Z2UoKnB1ZCkpOwo+ICAKPiAtCXBtZCA9IHBtZF9hbGxvYyhtbSwgcHVkLCBhZGRyKTsKPiArCXBt ZCA9IHBtZF9hbGxvYyhjbG9zdXJlLT5tbSwgcHVkLCBhZGRyKTsKPiAgCWlmICghcG1kKQo+ICAJ CXJldHVybiAtRU5PTUVNOwo+ICsKPiAgCWRvIHsKPiAgCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFk ZHIsIGVuZCk7Cj4gLQkJZXJyID0gYXBwbHlfdG9fcHRlX3JhbmdlKG1tLCBwbWQsIGFkZHIsIG5l eHQsIGZuLCBkYXRhKTsKPiArCQlpZiAoIWNsb3N1cmUtPmFsbG9jICYmIHBtZF9ub25lX29yX2Ns ZWFyX2JhZChwbWQpKQo+ICsJCQljb250aW51ZTsKPiArCQllcnIgPSBhcHBseV90b19wdGVfcmFu Z2UoY2xvc3VyZSwgcG1kLCBhZGRyLCBuZXh0KTsKPiAgCQlpZiAoZXJyKQo+ICAJCQlicmVhazsK PiAgCX0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwo+ICAJcmV0dXJu IGVycjsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBhcHBseV90b19wdWRfcmFuZ2Uoc3RydWN0IG1t X3N0cnVjdCAqbW0sIHA0ZF90ICpwNGQsCj4gLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwg dW5zaWduZWQgbG9uZyBlbmQsCj4gLQkJCQkgICAgIHB0ZV9mbl90IGZuLCB2b2lkICpkYXRhKQo+ ICtzdGF0aWMgaW50IGFwcGx5X3RvX3B1ZF9yYW5nZShzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5ICpj bG9zdXJlLCBwNGRfdCAqcDRkLAo+ICsJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2ln bmVkIGxvbmcgZW5kKQo+ICB7Cj4gIAlwdWRfdCAqcHVkOwo+ICAJdW5zaWduZWQgbG9uZyBuZXh0 Owo+IC0JaW50IGVycjsKPiArCWludCBlcnIgPSAwOwo+ICAKPiAtCXB1ZCA9IHB1ZF9hbGxvYyht bSwgcDRkLCBhZGRyKTsKPiArCXB1ZCA9IHB1ZF9hbGxvYyhjbG9zdXJlLT5tbSwgcDRkLCBhZGRy KTsKPiAgCWlmICghcHVkKQo+ICAJCXJldHVybiAtRU5PTUVNOwo+ICsKPiAgCWRvIHsKPiAgCQlu ZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Cj4gLQkJZXJyID0gYXBwbHlfdG9fcG1kX3Jh bmdlKG1tLCBwdWQsIGFkZHIsIG5leHQsIGZuLCBkYXRhKTsKPiArCQlpZiAoIWNsb3N1cmUtPmFs bG9jICYmIHB1ZF9ub25lX29yX2NsZWFyX2JhZChwdWQpKQo+ICsJCQljb250aW51ZTsKPiArCQll cnIgPSBhcHBseV90b19wbWRfcmFuZ2UoY2xvc3VyZSwgcHVkLCBhZGRyLCBuZXh0KTsKPiAgCQlp ZiAoZXJyKQo+ICAJCQlicmVhazsKPiAgCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRk ciAhPSBlbmQpOwo+ICAJcmV0dXJuIGVycjsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBhcHBseV90 b19wNGRfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsCj4gLQkJCQkgICAg IHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCj4gLQkJCQkgICAgIHB0ZV9m bl90IGZuLCB2b2lkICpkYXRhKQo+ICtzdGF0aWMgaW50IGFwcGx5X3RvX3A0ZF9yYW5nZShzdHJ1 Y3QgcGZuX3JhbmdlX2FwcGx5ICpjbG9zdXJlLCBwZ2RfdCAqcGdkLAo+ICsJCQkgICAgICB1bnNp Z25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQo+ICB7Cj4gIAlwNGRfdCAqcDRkOwo+ ICAJdW5zaWduZWQgbG9uZyBuZXh0Owo+IC0JaW50IGVycjsKPiArCWludCBlcnIgPSAwOwo+ICAK PiAtCXA0ZCA9IHA0ZF9hbGxvYyhtbSwgcGdkLCBhZGRyKTsKPiArCXA0ZCA9IHA0ZF9hbGxvYyhj bG9zdXJlLT5tbSwgcGdkLCBhZGRyKTsKPiAgCWlmICghcDRkKQo+ICAJCXJldHVybiAtRU5PTUVN Owo+ICsKPiAgCWRvIHsKPiAgCQluZXh0ID0gcDRkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Cj4gLQkJ ZXJyID0gYXBwbHlfdG9fcHVkX3JhbmdlKG1tLCBwNGQsIGFkZHIsIG5leHQsIGZuLCBkYXRhKTsK PiArCQlpZiAoIWNsb3N1cmUtPmFsbG9jICYmIHA0ZF9ub25lX29yX2NsZWFyX2JhZChwNGQpKQo+ ICsJCQljb250aW51ZTsKPiArCQllcnIgPSBhcHBseV90b19wdWRfcmFuZ2UoY2xvc3VyZSwgcDRk LCBhZGRyLCBuZXh0KTsKPiAgCQlpZiAoZXJyKQo+ICAJCQlicmVhazsKPiAgCX0gd2hpbGUgKHA0 ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwo+ICAJcmV0dXJuIGVycjsKPiAgfQo+ICAK PiAtLyoKPiAtICogU2NhbiBhIHJlZ2lvbiBvZiB2aXJ0dWFsIG1lbW9yeSwgZmlsbGluZyBpbiBw YWdlIHRhYmxlcyBhcyBuZWNlc3NhcnkKPiAtICogYW5kIGNhbGxpbmcgYSBwcm92aWRlZCBmdW5j dGlvbiBvbiBlYWNoIGxlYWYgcGFnZSB0YWJsZS4KPiArLyoqCj4gKyAqIGFwcGx5X3RvX3Bmbl9y YW5nZSAtIFNjYW4gYSByZWdpb24gb2YgdmlydHVhbCBtZW1vcnksIGNhbGxpbmcgYSBwcm92aWRl ZAo+ICsgKiBmdW5jdGlvbiBvbiBlYWNoIGxlYWYgcGFnZSB0YWJsZSBlbnRyeQo+ICsgKiBAY2xv c3VyZTogRGV0YWlscyBhYm91dCBob3cgdG8gc2NhbiBhbmQgd2hhdCBmdW5jdGlvbiB0byBhcHBs eQo+ICsgKiBAYWRkcjogU3RhcnQgdmlydHVhbCBhZGRyZXNzCj4gKyAqIEBzaXplOiBTaXplIG9m IHRoZSByZWdpb24KPiArICoKPiArICogSWYgQGNsb3N1cmUtPmFsbG9jIGlzIHNldCB0byAxLCB0 aGUgZnVuY3Rpb24gd2lsbCBmaWxsIGluIHRoZSBwYWdlIHRhYmxlCj4gKyAqIGFzIG5lY2Vzc2Fy eS4gT3RoZXJ3aXNlIGl0IHdpbGwgc2tpcCBub24tcHJlc2VudCBwYXJ0cy4KPiArICogTm90ZTog VGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSByYW5nZSBkb2VzIG5vdCBjb250YWluIGh1 Z2UgcGFnZXMuCj4gKyAqIFRoZSBjYWxsZXIgbXVzdCBhbHNvIGFzc3VyZSB0aGF0IHRoZSBwcm9w ZXIgbW11X25vdGlmaWVyIGZ1bmN0aW9ucyBhcmUKPiArICogY2FsbGVkLiBFaXRoZXIgaW4gdGhl IHB0ZSBsZWFmIGZ1bmN0aW9uIG9yIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNhbGwgdG8KPiArICog YXBwbHlfdG9fcGZuX3JhbmdlLgoKVGhpcyBpcyB3cm9uZyB0aGVyZSBzaG91bGQgYmUgYSBiaWcg RkFUIHdhcm5pbmcgdGhhdCB0aGlzIGNhbiBvbmx5IGJlIHVzZQphZ2FpbnN0IG1tYXAgb2YgZGV2 aWNlIGZpbGUuIFRoZSBwYWdlIHRhYmxlIHdhbGtpbmcgYWJvdmUgaXMgYnJva2VuIGZvcgp2YXJp b3VzIHRoaW5nIHlvdSBtaWdodCBmaW5kIGluIGFueSBvdGhlciB2bWEgbGlrZSBUSFAsIGRldmlj ZSBwdGUsIGh1Z2V0bGJmcywKLi4uCgpBbHNvIHRoZSBtbXUgbm90aWZpZXIgY2FuIG5vdCBiZSBj YWxsIGZyb20gdGhlIHBmbiBjYWxsYmFjayBhcyB0aGF0IGNhbGxiYWNrCmhhcHBlbnMgdW5kZXIg cGFnZSB0YWJsZSBsb2NrICh0aGUgY2hhbmdlX3B0ZSBub3RpZmllciBjYWxsYmFjayBpcyB1c2Vs ZXNzCmFuZCBub3QgZW5vdWdoKS4gU28gaXQgX211c3RfIGhhcHBlbiBhcm91bmQgdGhlIGNhbGwg dG8gYXBwbHlfdG9fcGZuX3JhbmdlCgphcHBseV90b19wYWdlX3JhbmdlIHdhcyByZWFsbHkgbm90 IG1lYW50IHRvIGJlIHVzZSBpbiB0aGF0IHdheSAuLi4gaXQgd2FzIG5vdApmb3IgcmVndWxhciB2 bWEuCgpVc2luZyB0aGlzIGZ1bmN0aW9uIGZvciBhbnl0aGluZyBlbHNlIGlzIGRhbmdlcm91cyBh bmQgaGF2aW5nIGl0cyB1c2VzIHNwcmVhZAptb3JlIGluY3JlYXNlIHRoYXQgcmlzay4gU28gdGhl cmUgbXVzdCBiZSBhIGJpZyBGQVQgd2FybmluZyBzYXlpbmcgdGhhdCB5b3UKc2hvdWxkIG5vdCB1 c2UgdGhpcyBsaWdodGx5IGFuZCB0aGF0IGl0IHNob3VsZCBvbmx5IGJlIG9ubHkgb24gbW1hcCBv ZiBkZXZpY2UKZmlsZS4KCgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MuIElm IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLXplcm8gc3RhdHVzLAo+ICsgKiB0 aGUgcGFnZSB0YWJsZSB3YWxrIHdpbGwgdGVybWluYXRlIGFuZCB0aGF0IHN0YXR1cyB3aWxsIGJl IHJldHVybmVkLgo+ICsgKiBJZiBAY2xvc3VyZS0+YWxsb2MgaXMgc2V0IHRvIDEsIHRoZW4gdGhp cyBmdW5jdGlvbiBtYXkgYWxzbyByZXR1cm4gbWVtb3J5Cj4gKyAqIGFsbG9jYXRpb24gZXJyb3Jz IGFyaXNpbmcgZnJvbSBhbGxvY2F0aW5nIHBhZ2UgdGFibGUgbWVtb3J5Lgo+ICAgKi8KPiAtaW50 IGFwcGx5X3RvX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcg YWRkciwKPiAtCQkJdW5zaWduZWQgbG9uZyBzaXplLCBwdGVfZm5fdCBmbiwgdm9pZCAqZGF0YSkK PiAraW50IGFwcGx5X3RvX3Bmbl9yYW5nZShzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5ICpjbG9zdXJl LAo+ICsJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKPiAg ewo+ICAJcGdkX3QgKnBnZDsKPiAgCXVuc2lnbmVkIGxvbmcgbmV4dDsKPiBAQCAtMjA0OSwxNiAr MjA2OSw2MiBAQCBpbnQgYXBwbHlfdG9fcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwg dW5zaWduZWQgbG9uZyBhZGRyLAo+ICAJaWYgKFdBUk5fT04oYWRkciA+PSBlbmQpKQo+ICAJCXJl dHVybiAtRUlOVkFMOwo+ICAKPiAtCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOwo+ICsJcGdk ID0gcGdkX29mZnNldChjbG9zdXJlLT5tbSwgYWRkcik7Cj4gIAlkbyB7Cj4gIAkJbmV4dCA9IHBn ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwo+IC0JCWVyciA9IGFwcGx5X3RvX3A0ZF9yYW5nZShtbSwg cGdkLCBhZGRyLCBuZXh0LCBmbiwgZGF0YSk7Cj4gKwkJaWYgKCFjbG9zdXJlLT5hbGxvYyAmJiBw Z2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkKSkKPiArCQkJY29udGludWU7Cj4gKwkJZXJyID0gYXBw bHlfdG9fcDRkX3JhbmdlKGNsb3N1cmUsIHBnZCwgYWRkciwgbmV4dCk7Cj4gIAkJaWYgKGVycikK PiAgCQkJYnJlYWs7Cj4gIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5k KTsKPiAgCj4gIAlyZXR1cm4gZXJyOwo+ICB9Cj4gKwo+ICsvKioKPiArICogc3RydWN0IHBhZ2Vf cmFuZ2VfYXBwbHkgLSBDbG9zdXJlIHN0cnVjdHVyZSBmb3IgYXBwbHlfdG9fcGFnZV9yYW5nZSgp Cj4gKyAqIEBwdGVyOiBUaGUgYmFzZSBjbG9zdXJlIHN0cnVjdHVyZSB3ZSBkZXJpdmUgZnJvbQo+ ICsgKiBAZm46IFRoZSBsZWFmIHB0ZSBmdW5jdGlvbiB0byBjYWxsCj4gKyAqIEBkYXRhOiBUaGUg bGVhZiBwdGUgZnVuY3Rpb24gY2xvc3VyZQo+ICsgKi8KPiArc3RydWN0IHBhZ2VfcmFuZ2VfYXBw bHkgewo+ICsJc3RydWN0IHBmbl9yYW5nZV9hcHBseSBwdGVyOwo+ICsJcHRlX2ZuX3QgZm47Cj4g Kwl2b2lkICpkYXRhOwo+ICt9Owo+ICsKPiArLyoKPiArICogQ2FsbGJhY2sgd3JhcHBlciB0byBl bmFibGUgdXNlIG9mIGFwcGx5X3RvX3Bmbl9yYW5nZSBmb3IKPiArICogdGhlIGFwcGx5X3RvX3Bh Z2VfcmFuZ2UgaW50ZXJmYWNlCj4gKyAqLwo+ICtzdGF0aWMgaW50IGFwcGx5X3RvX3BhZ2VfcmFu Z2Vfd3JhcHBlcihwdGVfdCAqcHRlLCBwZ3RhYmxlX3QgdG9rZW4sCj4gKwkJCQkgICAgICAgdW5z aWduZWQgbG9uZyBhZGRyLAo+ICsJCQkJICAgICAgIHN0cnVjdCBwZm5fcmFuZ2VfYXBwbHkgKnB0 ZXIpCj4gK3sKPiArCXN0cnVjdCBwYWdlX3JhbmdlX2FwcGx5ICpwcmEgPQo+ICsJCWNvbnRhaW5l cl9vZihwdGVyLCB0eXBlb2YoKnByYSksIHB0ZXIpOwo+ICsKPiArCXJldHVybiBwcmEtPmZuKHB0 ZSwgdG9rZW4sIGFkZHIsIHByYS0+ZGF0YSk7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFNjYW4gYSBy ZWdpb24gb2YgdmlydHVhbCBtZW1vcnksIGZpbGxpbmcgaW4gcGFnZSB0YWJsZXMgYXMgbmVjZXNz YXJ5Cj4gKyAqIGFuZCBjYWxsaW5nIGEgcHJvdmlkZWQgZnVuY3Rpb24gb24gZWFjaCBsZWFmIHBh Z2UgdGFibGUuCj4gKyAqLwoKSXQgd291bGQgYmUgZ29vZCB0byBpbXByb3ZlIHRoYXQgY29tbWVu dCB0b28gYW5kIG1ha2UgaXQgYSB3YXJuaW5nIG9mCkRPIE5PVCBVU0UgISBUSElTIElTIE5PVCBT QUZFIE9OIFJFR1VMQVIgVk1BICEKCj4gK2ludCBhcHBseV90b19wYWdlX3JhbmdlKHN0cnVjdCBt bV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCj4gKwkJCXVuc2lnbmVkIGxvbmcgc2l6 ZSwgcHRlX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBwYWdlX3JhbmdlX2Fw cGx5IHByYSA9IHsKPiArCQkucHRlciA9IHsubW0gPSBtbSwKPiArCQkJIC5hbGxvYyA9IDEsCj4g KwkJCSAucHRlZm4gPSBhcHBseV90b19wYWdlX3JhbmdlX3dyYXBwZXIgfSwKPiArCQkuZm4gPSBm biwKPiArCQkuZGF0YSA9IGRhdGEKPiArCX07Cj4gKwo+ICsJcmV0dXJuIGFwcGx5X3RvX3Bmbl9y YW5nZSgmcHJhLnB0ZXIsIGFkZHIsIHNpemUpOwo+ICt9Cj4gIEVYUE9SVF9TWU1CT0xfR1BMKGFw cGx5X3RvX3BhZ2VfcmFuZ2UpOwo+ICAKPiAgLyoKPiAtLSAKPiAyLjIwLjEKPiAKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs