From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Glisse Subject: Re: [RFC PATCH RESEND 3/3] mm: Add write-protect and clean utilities for address space ranges Date: Thu, 21 Mar 2019 17:07:48 -0400 Message-ID: <20190321210747.GC15074@redhat.com> References: <20190321132140.114878-1-thellstrom@vmware.com> <20190321132140.114878-4-thellstrom@vmware.com> <20190321141239.GD2904@redhat.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 3B63F89F19 for ; Thu, 21 Mar 2019 21:07:52 +0000 (UTC) Content-Disposition: inline In-Reply-To: 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: "mhocko@suse.com" , "minchan@kernel.org" , "peterz@infradead.org" , "dri-devel@lists.freedesktop.org" , "riel@surriel.com" , "will.deacon@arm.com" , "linux-kernel@vger.kernel.org" , "willy@infradead.org" , "linux-mm@kvack.org" , Linux-graphics-maintainer , "jrdr.linux@gmail.com" , "ying.huang@intel.com" , "akpm@linux-foundation.org" List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBNYXIgMjEsIDIwMTkgYXQgMDg6Mjk6MzFQTSArMDAwMCwgVGhvbWFzIEhlbGxzdHJv bSB3cm90ZToKPiBPbiBUaHUsIDIwMTktMDMtMjEgYXQgMTA6MTIgLTA0MDAsIEplcm9tZSBHbGlz c2Ugd3JvdGU6Cj4gPiBPbiBUaHUsIE1hciAyMSwgMjAxOSBhdCAwMToyMjo0MVBNICswMDAwLCBU aG9tYXMgSGVsbHN0cm9tIHdyb3RlOgo+ID4gPiBBZGQgdHdvIHV0aWxpdGllcyB0byBhKSB3cml0 ZS1wcm90ZWN0IGFuZCBiKSBjbGVhbiBhbGwgcHRlcwo+ID4gPiBwb2ludGluZyBpbnRvCj4gPiA+ IGEgcmFuZ2Ugb2YgYW4gYWRkcmVzcyBzcGFjZQo+ID4gPiBUaGUgdXRpbGl0aWVzIGFyZSBpbnRl bmRlZCB0byBhaWQgaW4gdHJhY2tpbmcgZGlydHkgcGFnZXMgKGVpdGhlcgo+ID4gPiBkcml2ZXIt YWxsb2NhdGVkIHN5c3RlbSBtZW1vcnkgb3IgcGNpIGRldmljZSBtZW1vcnkpLgo+ID4gPiBUaGUg d3JpdGUtcHJvdGVjdCB1dGlsaXR5IHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgK PiA+ID4gcGFnZV9ta3dyaXRlKCkgYW5kIHBmbl9ta3dyaXRlKCkgdG8gdHJpZ2dlciB3cml0ZSBw YWdlLWZhdWx0cyBvbgo+ID4gPiBwYWdlCj4gPiA+IGFjY2Vzc2VzLiBUeXBpY2FsbHkgb25lIHdv dWxkIHdhbnQgdG8gdXNlIHRoaXMgb24gc3BhcnNlIGFjY2Vzc2VzCj4gPiA+IGludG8KPiA+ID4g bGFyZ2UgbWVtb3J5IHJlZ2lvbnMuIFRoZSBjbGVhbiB1dGlsaXR5IHNob3VsZCBiZSB1c2VkIHRv IHV0aWxpemUKPiA+ID4gaGFyZHdhcmUgZGlydHlpbmcgZnVuY3Rpb25hbGl0eSBhbmQgYXZvaWQg dGhlIG92ZXJoZWFkIG9mIHBhZ2UtCj4gPiA+IGZhdWx0cywKPiA+ID4gdHlwaWNhbGx5IG9uIGxh cmdlIGFjY2Vzc2VzIGludG8gc21hbGwgbWVtb3J5IHJlZ2lvbnMuCj4gPiAKPiA+IEFnYWluIHRo aXMgZG9lcyBub3QgdXNlIG1tdSBub3RpZmllciBhbmQgdGhlcmUgaXMgbm8gc2NhcnkgY29tbWVu dCB0bwo+ID4gZXhwbGFpbiB0aGUgdmVyeSBsaW1pdGVkIHVzZSBjYXNlIGl0IHNob3VsZCBiZSB1 c2UgZm9yIGllIG1tYXAgb2YgYQo+ID4gZGV2aWNlIGZpbGUgYW5kIG9ubHkgYnkgdGhlIGRldmlj ZSBkcml2ZXIuCj4gCj4gU2NhcnkgY29tbWVudCBhbmQgYXNzZXJ0cyB3aWxsIGJlIGFkZGVkLgo+ IAo+ID4gCj4gPiBVc2luZyBpdCBvdXNpZGUgb2YgdGhpcyB3b3VsZCBicmVhayBzb2Z0ZGlydHkg b3IgdHJpZ2dlciBmYWxzZSBDT1cgb3IKPiA+IG90aGVyIHNjYXJ5IHRoaW5nLgo+IAo+IFRoaXMg aXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGNsZWFybHkgYmUgYXZvaWRlZCBpZiBhdCBhbGwgcG9z c2libGUuCj4gRmFsc2UgQ09XcyBjb3VsZCBiZSBhdm9pZGVkIGJ5IGFzc2VydGluZyB0aGF0IFZN QXMgYXJlIHNoYXJlZC4gSSBuZWVkCj4gdG8gbG9vayBkZWFwZXIgaW50byBzb2Z0ZGlydHksIGJ1 dCBub3RlIHRoYXQgdGhlIF9fbWt3cml0ZSAvIGRpcnR5IC8KPiBjbGVhbiBwYXR0ZXJuIGlzIGFs cmVhZHkgdXNlZCBpbiBhIHZlcnkgc2ltaWxhciB3YXkgaW4KPiBkcml2ZXJzL3ZpZGVvL2ZiX2Rl ZmlvLmMgYWx0aG91Z2ggaXQgb3BlcmF0ZXMgb25seSBvbiByZWFsIHBhZ2VzIG9uZSBhdAo+IGEg dGltZS4KCkl0IHNob3VsZCBqdXN0IGJlIGFsbG93IG9ubHkgZm9yIG1hcHBpbmcgb2YgZGV2aWNl IGZpbGUgZm9yIHdoaWNoIG5vbmUKb2YgdGhlIGFib3ZlIGFwcGx5IChzb2Z0ZGlydHksIENPVywg Li4uKS4KCj4gCj4gPiAKPiA+ID4gQ2M6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgtZm91bmRh dGlvbi5vcmc+Cj4gPiA+IENjOiBNYXR0aGV3IFdpbGNveCA8d2lsbHlAaW5mcmFkZWFkLm9yZz4K PiA+ID4gQ2M6IFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgo+ID4gPiBDYzogUGV0 ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3JnPgo+ID4gPiBDYzogUmlrIHZhbiBSaWVs IDxyaWVsQHN1cnJpZWwuY29tPgo+ID4gPiBDYzogTWluY2hhbiBLaW0gPG1pbmNoYW5Aa2VybmVs Lm9yZz4KPiA+ID4gQ2M6IE1pY2hhbCBIb2NrbyA8bWhvY2tvQHN1c2UuY29tPgo+ID4gPiBDYzog SHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+Cj4gPiA+IENjOiBTb3VwdGljayBKb2Fy ZGVyIDxqcmRyLmxpbnV4QGdtYWlsLmNvbT4KPiA+ID4gQ2M6ICJKw6lyw7RtZSBHbGlzc2UiIDxq Z2xpc3NlQHJlZGhhdC5jb20+Cj4gPiA+IENjOiBsaW51eC1tbUBrdmFjay5vcmcKPiA+ID4gQ2M6 IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKPiA+ID4gU2lnbmVkLW9mZi1ieTogVGhvbWFz IEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgo+ID4gPiAtLS0KPiA+ID4gIGluY2x1 ZGUvbGludXgvbW0uaCAgfCAgIDkgKy0KPiA+ID4gIG1tL01ha2VmaWxlICAgICAgICAgfCAgIDIg Ky0KPiA+ID4gIG1tL2FwcGx5X2FzX3JhbmdlLmMgfCAyNTcKPiA+ID4gKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMjY2 IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQg bW0vYXBwbHlfYXNfcmFuZ2UuYwo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu dXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAo+ID4gPiBpbmRleCBiN2RkNGRkZDZlZmIuLjYy ZjI0ZGQwYmZhMCAxMDA2NDQKPiA+ID4gLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCj4gPiA+ICsr KyBiL2luY2x1ZGUvbGludXgvbW0uaAo+ID4gPiBAQCAtMjY0Miw3ICsyNjQyLDE0IEBAIHN0cnVj dCBwZm5fcmFuZ2VfYXBwbHkgewo+ID4gPiAgfTsKPiA+ID4gIGV4dGVybiBpbnQgYXBwbHlfdG9f cGZuX3JhbmdlKHN0cnVjdCBwZm5fcmFuZ2VfYXBwbHkgKmNsb3N1cmUsCj4gPiA+ICAJCQkgICAg ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcKPiA+ID4gc2l6ZSk7Cj4gPiA+ IC0KPiA+ID4gK3Vuc2lnbmVkIGxvbmcgYXBwbHlfYXNfd3Jwcm90ZWN0KHN0cnVjdCBhZGRyZXNz X3NwYWNlICptYXBwaW5nLAo+ID4gPiArCQkJCSBwZ29mZl90IGZpcnN0X2luZGV4LCBwZ29mZl90 IG5yKTsKPiA+ID4gK3Vuc2lnbmVkIGxvbmcgYXBwbHlfYXNfY2xlYW4oc3RydWN0IGFkZHJlc3Nf c3BhY2UgKm1hcHBpbmcsCj4gPiA+ICsJCQkgICAgIHBnb2ZmX3QgZmlyc3RfaW5kZXgsIHBnb2Zm X3QgbnIsCj4gPiA+ICsJCQkgICAgIHBnb2ZmX3QgYml0bWFwX3Bnb2ZmLAo+ID4gPiArCQkJICAg ICB1bnNpZ25lZCBsb25nICpiaXRtYXAsCj4gPiA+ICsJCQkgICAgIHBnb2ZmX3QgKnN0YXJ0LAo+ ID4gPiArCQkJICAgICBwZ29mZl90ICplbmQpOwo+ID4gPiAgI2lmZGVmIENPTkZJR19QQUdFX1BP SVNPTklORwo+ID4gPiAgZXh0ZXJuIGJvb2wgcGFnZV9wb2lzb25pbmdfZW5hYmxlZCh2b2lkKTsK PiA+ID4gIGV4dGVybiB2b2lkIGtlcm5lbF9wb2lzb25fcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2Us IGludCBudW1wYWdlcywKPiA+ID4gaW50IGVuYWJsZSk7Cj4gPiA+IGRpZmYgLS1naXQgYS9tbS9N YWtlZmlsZSBiL21tL01ha2VmaWxlCj4gPiA+IGluZGV4IGQyMTBjYzlkNmY4MC4uYTk0Yjc4ZjEy NjkyIDEwMDY0NAo+ID4gPiAtLS0gYS9tbS9NYWtlZmlsZQo+ID4gPiArKysgYi9tbS9NYWtlZmls ZQo+ID4gPiBAQCAtMzksNyArMzksNyBAQCBvYmoteQkJCTo9IGZpbGVtYXAubyBtZW1wb29sLm8K PiA+ID4gb29tX2tpbGwubyBmYWR2aXNlLm8gXAo+ID4gPiAgCQkJICAgbW1faW5pdC5vIG1tdV9j b250ZXh0Lm8gcGVyY3B1Lm8KPiA+ID4gc2xhYl9jb21tb24ubyBcCj4gPiA+ICAJCQkgICBjb21w YWN0aW9uLm8gdm1hY2FjaGUubyBcCj4gPiA+ICAJCQkgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9s cnUubyB3b3JraW5nc2V0Lm8gXAo+ID4gPiAtCQkJICAgZGVidWcubyAkKG1tdS15KQo+ID4gPiAr CQkJICAgZGVidWcubyBhcHBseV9hc19yYW5nZS5vICQobW11LXkpCj4gPiA+ICAKPiA+ID4gIG9i ai15ICs9IGluaXQtbW0ubwo+ID4gPiAgb2JqLXkgKz0gbWVtYmxvY2subwo+ID4gPiBkaWZmIC0t Z2l0IGEvbW0vYXBwbHlfYXNfcmFuZ2UuYyBiL21tL2FwcGx5X2FzX3JhbmdlLmMKPiA+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi45ZjAzZTI3MmViZDAK PiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9tbS9hcHBseV9hc19yYW5nZS5jCj4gPiA+ IEBAIC0wLDAgKzEsMjU3IEBACj4gPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21tLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgv bW1fdHlwZXMuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+Cj4gPiA+ICsjaW5j bHVkZSA8bGludXgvYml0b3BzLmg+Cj4gPiA+ICsjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4K PiA+ID4gKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ ICsgKiBzdHJ1Y3QgYXBwbHlfYXMgLSBDbG9zdXJlIHN0cnVjdHVyZSBmb3IgYXBwbHlfYXNfcmFu Z2UKPiA+ID4gKyAqIEBiYXNlOiBzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5IHdlIGRlcml2ZSBmcm9t Cj4gPiA+ICsgKiBAc3RhcnQ6IEFkZHJlc3Mgb2YgZmlyc3QgbW9kaWZpZWQgcHRlCj4gPiA+ICsg KiBAZW5kOiBBZGRyZXNzIG9mIGxhc3QgbW9kaWZpZWQgcHRlICsgMQo+ID4gPiArICogQHRvdGFs OiBUb3RhbCBudW1iZXIgb2YgbW9kaWZpZWQgcHRlcwo+ID4gPiArICogQHZtYTogUG9pbnRlciB0 byB0aGUgc3RydWN0IHZtX2FyZWFfc3RydWN0IHdlJ3JlIGN1cnJlbnRseQo+ID4gPiBvcGVyYXRp bmcgb24KPiA+ID4gKyAqIEBmbHVzaF9jYWNoZTogV2hldGhlciB0byBjYWxsIGEgY2FjaGUgZmx1 c2ggYmVmb3JlIG1vZGlmeWluZyBhCj4gPiA+IHB0ZQo+ID4gPiArICogQGZsdXNoX3RsYjogV2hl dGhlciB0byBmbHVzaCB0aGUgdGxiIGFmdGVyIG1vZGlmeWluZyBhIHB0ZQo+ID4gPiArICovCj4g PiA+ICtzdHJ1Y3QgYXBwbHlfYXMgewo+ID4gPiArCXN0cnVjdCBwZm5fcmFuZ2VfYXBwbHkgYmFz ZTsKPiA+ID4gKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7Cj4gPiA+ICsJdW5zaWduZWQgbG9u ZyB0b3RhbDsKPiA+ID4gKwljb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKPiA+ID4g Kwl1MzIgZmx1c2hfY2FjaGUgOiAxOwo+ID4gPiArCXUzMiBmbHVzaF90bGIgOiAxOwo+ID4gPiAr fTsKPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBhcHBseV9wdF93cnByb3RlY3QgLSBMZWFm IHB0ZSBjYWxsYmFjayB0byB3cml0ZS1wcm90ZWN0IGEgcHRlCj4gPiA+ICsgKiBAcHRlOiBQb2lu dGVyIHRvIHRoZSBwdGUKPiA+ID4gKyAqIEB0b2tlbjogUGFnZSB0YWJsZSB0b2tlbiwgc2VlIGFw cGx5X3RvX3Bmbl9yYW5nZSgpCj4gPiA+ICsgKiBAYWRkcjogVGhlIHZpcnR1YWwgcGFnZSBhZGRy ZXNzCj4gPiA+ICsgKiBAY2xvc3VyZTogUG9pbnRlciB0byBhIHN0cnVjdCBwZm5fcmFuZ2VfYXBw bHkgZW1iZWRkZWQgaW4gYQo+ID4gPiArICogc3RydWN0IGFwcGx5X2FzCj4gPiA+ICsgKgo+ID4g PiArICogVGhlIGZ1bmN0aW9uIHdyaXRlLXByb3RlY3RzIGEgcHRlIGFuZCByZWNvcmRzIHRoZSBy YW5nZSBpbgo+ID4gPiArICogdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHRvdWNoZWQgcHRlcyBm b3IgZWZmaWNpZW50IFRMQgo+ID4gPiBmbHVzaGVzLgo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVy bjogQWx3YXlzIHplcm8uCj4gPiA+ICsgKi8KPiA+ID4gK3N0YXRpYyBpbnQgYXBwbHlfcHRfd3Jw cm90ZWN0KHB0ZV90ICpwdGUsIHBndGFibGVfdCB0b2tlbiwKPiA+ID4gKwkJCSAgICAgIHVuc2ln bmVkIGxvbmcgYWRkciwKPiA+ID4gKwkJCSAgICAgIHN0cnVjdCBwZm5fcmFuZ2VfYXBwbHkgKmNs b3N1cmUpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGFwcGx5X2FzICphYXMgPSBjb250YWluZXJf b2YoY2xvc3VyZSwgdHlwZW9mKCphYXMpLAo+ID4gPiBiYXNlKTsKPiA+ID4gKwo+ID4gPiArCWlm IChwdGVfd3JpdGUoKnB0ZSkpIHsKPiA+ID4gKwkJc2V0X3B0ZV9hdChjbG9zdXJlLT5tbSwgYWRk ciwgcHRlLAo+ID4gPiBwdGVfd3Jwcm90ZWN0KCpwdGUpKTsKPiA+IAo+ID4gU28gdGhlcmUgaXMg bm8gZmx1c2hpbmcgaGVyZSwgZXZlbiBmb3IgeDk2IHRoaXMgaXMgd3JvbmcuIEl0Cj4gPiBzaG91 bGQgYmUgc29tZXRoaW5nIGxpa2U6Cj4gPiAgICAgcHRlcF9jbGVhcl9mbHVzaCgpCj4gPiAgICAg Zmx1c2hfY2FjaGVfcGFnZSgpIC8vIGlmIHB0ZSBpcyBwb2ludGluZyB0byBhIHJlZ3VsYXIgcGFn ZQo+ID4gICAgIHNldF9wdGVfYXQoKQo+ID4gICAgIHVwZGF0ZV9tbXVfY2FjaGUoKQo+ID4gCj4g Cj4gSGVyZSBjYWNoZSBmbHVzaGluZyBpcyBkb25lIGJlZm9yZSBhbnkgbGVhZiBmdW5jdGlvbiBp cyBjYWxsZWQuCj4gQWNjb3JkaW5nIHRvIDEpIHRoYXQgc2hvdWxkIGJlIGVxdWl2YWxlbnQsIGFs dGhvdWdoIGZsdXNoaW5nIGNhY2hlIGluCj4gdGhlIGxlYWYgZnVuY3Rpb24gaXMgcHJvYmFibHkg bW9yZSBlZmZpY2llbnQgZm9yIG1vc3QgdXNlIGNhc2VzLiBCb3RoCj4gdGhlc2UgZnVuY3Rpb25z IGFyZSBuby1vcHMgZm9yIGJvdGggeDg2IGFuZCBBUk02NCB3aGVyZSB0aGV5IG1vc3QKPiBsaWtl bHkgd2lsbCBiZSB1c2VkLi4uCj4gCj4gRm9yIHB0ZXBfY2xlYXJfZmx1c2goKSB0aGUgVExCIGZs dXNoaW5nIGlzIGhlcmUgaW5zdGVhZCBkZWZlcnJlZCB0bwo+IGFmdGVyIGFsbCBsZWFmIGZ1bmN0 aW9ucyBoYXZlIGJlZW4gY2FsbGVkLiBJdCBsb29rcyBsaWtlIGlmIHRoZSBQVEUgaXMKPiBkaXJ0 eSwgdGhlIFRMQiBoYXMgbm8gYnVzaW5lc3MgdG91Y2hpbmcgaXQgdW50aWwgdGhlbiBhbnl3YXks IGl0IHNob3VsZAo+IGJlIGhhcHB5IHdpdGggaXRzIGNhY2hlZCB2YWx1ZS4KPiAKPiBTaW5jZSBm bHVzaGluZyBhIHNpbmdsZSB0bGIgcGFnZSBpbnZvbHZlcyBhIGJyb2FkY2FzdCBhY3Jvc3MgYWxs IGNvcmVzLAo+IEkgYmVsaWV2ZSBmbHVzaGluZyBhIHJhbmdlIGlzIGEgcHJldHR5IGltcG9ydGFu dCBvcHRpbWl6YXRpb24uCgpSZWFkaW5nIHRoZSBjb2RlIGkgbWlzc2VkIHRoZSByYW5nZSBmbHVz aCBiZWxvdywgaXQgc2hvdWxkIGJlIG9rIGJ1dAp5b3Ugc2hvdWxkIGJlIHVzaW5nIHB0ZXBfbW9k aWZ5X3Byb3Rfc3RhcnQoKS9wdGVwX21vZGlmeV9wcm90X2NvbW1pdCgpCnBhdHRlcm4uIEkgdGhp bmsgc29tZSBhcmNoIGxpa2UgdG8gYmUgaW52b2x2ZSBpbiBwdGUgY2hhbmdlcyBhbmQgdGhlCjIg cGF0dGVybnMgc28gZmFyIGluIHRoZSBrZXJuZWwgKEFGQUlLKSBpcyBwdGVwX2NsZWFyX2ZsdXNo KCkgb3IgdGhlCnB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQvL3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0 IHNvIGkgYmVsaWV2ZSBpdCBpcwpiZXR0ZXIgdG8gc3RpY2sgdG8gb25lIG9mIHRob3NlIGluc3Rl YWQgb2YgaW50cm9kdWNpbmcgYSB0aGlyZCBvbmUuCgo+IAo+IEFsc28gZm9yIHVwZGF0ZV9tbXVf Y2FjaGUoKSB0aGUgaW1wcmVzc2lvbiBJIGdvdCBmcm9tIGl0cyBkb2NzIGlzIHRoYXQKPiBpdCBz aG91bGQgb25seSBiZSB1c2VkIHdoZW4gaW5jcmVhc2luZyBwdGUgcGVybWlzc2lvbnMsIGxpa2Ug aW4gZmF1bHQKPiBoYW5kbGVycywgbm90IHRoZSBvcHBvc2l0ZT8KCkkgdGhpbmsgc29tZSBhcmNo IHJlbHkgb24gaXQgZm9yIHNvbWV0aGluZyBlbHNlIGJ1dCBpZiB5b3UgdXNlIHRoZQpyYW5nZSBm bHVzaGluZyBwcm9wZXJseSB5b3Ugc2hvdWxkIG5vdCBuZWVkIGl0LgoKPiA+IAo+ID4gPiArCQlh YXMtPnRvdGFsKys7Cj4gPiA+ICsJCWlmIChhZGRyIDwgYWFzLT5zdGFydCkKPiA+ID4gKwkJCWFh cy0+c3RhcnQgPSBhZGRyOwo+ID4gPiArCQlpZiAoYWRkciArIFBBR0VfU0laRSA+IGFhcy0+ZW5k KQo+ID4gPiArCQkJYWFzLT5lbmQgPSBhZGRyICsgUEFHRV9TSVpFOwo+ID4gPiArCX0KPiA+ID4g Kwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAq IHN0cnVjdCBhcHBseV9hc19jbGVhbiAtIENsb3N1cmUgc3RydWN0dXJlIGZvciBhcHBseV9hc19j bGVhbgo+ID4gPiArICogQGJhc2U6IHN0cnVjdCBhcHBseV9hcyB3ZSBkZXJpdmUgZnJvbQo+ID4g PiArICogQGJpdG1hcF9wZ29mZjogQWRkcmVzc19zcGFjZSBQYWdlIG9mZnNldCBvZiB0aGUgZmly c3QgYml0IGluCj4gPiA+IEBiaXRtYXAKPiA+ID4gKyAqIEBiaXRtYXA6IEJpdG1hcCB3aXRoIG9u ZSBiaXQgZm9yIGVhY2ggcGFnZSBvZmZzZXQgaW4gdGhlCj4gPiA+IGFkZHJlc3Nfc3BhY2UgcmFu Z2UKPiA+ID4gKyAqIGNvdmVyZWQuCj4gPiA+ICsgKiBAc3RhcnQ6IEFkZHJlc3Nfc3BhY2UgcGFn ZSBvZmZzZXQgb2YgZmlyc3QgbW9kaWZpZWQgcHRlCj4gPiA+ICsgKiBAZW5kOiBBZGRyZXNzX3Nw YWNlIHBhZ2Ugb2Zmc2V0IG9mIGxhc3QgbW9kaWZpZWQgcHRlCj4gPiA+ICsgKi8KPiA+ID4gK3N0 cnVjdCBhcHBseV9hc19jbGVhbiB7Cj4gPiA+ICsJc3RydWN0IGFwcGx5X2FzIGJhc2U7Cj4gPiA+ ICsJcGdvZmZfdCBiaXRtYXBfcGdvZmY7Cj4gPiA+ICsJdW5zaWduZWQgbG9uZyAqYml0bWFwOwo+ ID4gPiArCXBnb2ZmX3Qgc3RhcnQsIGVuZDsKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ ID4gPiArICogYXBwbHlfcHRfY2xlYW4gLSBMZWFmIHB0ZSBjYWxsYmFjayB0byBjbGVhbiBhIHB0 ZQo+ID4gPiArICogQHB0ZTogUG9pbnRlciB0byB0aGUgcHRlCj4gPiA+ICsgKiBAdG9rZW46IFBh Z2UgdGFibGUgdG9rZW4sIHNlZSBhcHBseV90b19wZm5fcmFuZ2UoKQo+ID4gPiArICogQGFkZHI6 IFRoZSB2aXJ0dWFsIHBhZ2UgYWRkcmVzcwo+ID4gPiArICogQGNsb3N1cmU6IFBvaW50ZXIgdG8g YSBzdHJ1Y3QgcGZuX3JhbmdlX2FwcGx5IGVtYmVkZGVkIGluIGEKPiA+ID4gKyAqIHN0cnVjdCBh cHBseV9hc19jbGVhbgo+ID4gPiArICoKPiA+ID4gKyAqIFRoZSBmdW5jdGlvbiBjbGVhbnMgYSBw dGUgYW5kIHJlY29yZHMgdGhlIHJhbmdlIGluCj4gPiA+ICsgKiB2aXJ0dWFsIGFkZHJlc3Mgc3Bh Y2Ugb2YgdG91Y2hlZCBwdGVzIGZvciBlZmZpY2llbnQgVExCCj4gPiA+IGZsdXNoZXMuCj4gPiA+ ICsgKiBJdCBhbHNvIHJlY29yZHMgZGlydHkgcHRlcyBpbiBhIGJpdG1hcCByZXByZXNlbnRpbmcg cGFnZQo+ID4gPiBvZmZzZXRzCj4gPiA+ICsgKiBpbiB0aGUgYWRkcmVzc19zcGFjZSwgYXMgd2Vs bCBhcyB0aGUgZmlyc3QgYW5kIGxhc3Qgb2YgdGhlIGJpdHMKPiA+ID4gKyAqIHRvdWNoZWQuCj4g PiA+ICsgKgo+ID4gPiArICogUmV0dXJuOiBBbHdheXMgemVyby4KPiA+ID4gKyAqLwo+ID4gPiAr c3RhdGljIGludCBhcHBseV9wdF9jbGVhbihwdGVfdCAqcHRlLCBwZ3RhYmxlX3QgdG9rZW4sCj4g PiA+ICsJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKPiA+ID4gKwkJCSAgc3RydWN0IHBmbl9yYW5n ZV9hcHBseSAqY2xvc3VyZSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgYXBwbHlfYXMgKmFhcyA9 IGNvbnRhaW5lcl9vZihjbG9zdXJlLCB0eXBlb2YoKmFhcyksCj4gPiA+IGJhc2UpOwo+ID4gPiAr CXN0cnVjdCBhcHBseV9hc19jbGVhbiAqY2xlYW4gPSBjb250YWluZXJfb2YoYWFzLAo+ID4gPiB0 eXBlb2YoKmNsZWFuKSwgYmFzZSk7Cj4gPiA+ICsKPiA+ID4gKwlpZiAocHRlX2RpcnR5KCpwdGUp KSB7Cj4gPiA+ICsJCXBnb2ZmX3QgcGdvZmYgPSAoKGFkZHIgLSBhYXMtPnZtYS0+dm1fc3RhcnQp ID4+Cj4gPiA+IFBBR0VfU0hJRlQpICsKPiA+ID4gKwkJCWFhcy0+dm1hLT52bV9wZ29mZiAtIGNs ZWFuLT5iaXRtYXBfcGdvZmY7Cj4gPiA+ICsKPiA+ID4gKwkJc2V0X3B0ZV9hdChjbG9zdXJlLT5t bSwgYWRkciwgcHRlLCBwdGVfbWtjbGVhbigqcHRlKSk7Cj4gPiAKPiA+IENsZWFyaW5nIHRoZSBk aXJ0eSBiaXQgaXMgcmFjeSwgaXQgc2hvdWxkIGJlIGRvbmUgd2l0aCB3cml0ZSBwcm90ZWN0Cj4g PiBpbnN0ZWFkIGFzIHRoZSBkaXJ0eSBiaXQgY2FuIGJlIHNldCBhZ2FpbiBqdXN0IGFmdGVyIHlv dSBjbGVhciBpdC4KPiA+IFNvIGkgYW0gbm90IHN1cmUgd2hhdCBpcyB0aGUgdXNhZ2UgcGF0dGVy biB3aGVyZSB5b3Ugd2FudCB0byBjbGVhcgo+ID4gdGhhdCBiaXQgd2l0aG91dCB3cml0ZSBwcm90 ZWN0Lgo+IAo+IElmIGl0J3Mgc2V0IGFnYWluLCB0aGVuIGl0IHdpbGwgYmUgcGlja2VkIHVwIGF0 IHRoZSBuZXh0IEdQVSBjb21tYW5kCj4gc3VibWlzc2lvbiByZWZlcmVuY2luZyB0aGlzIHBhZ2Ug aS4gZS4gdGhlIG5leHQgcnVuIG9mIHRoaXMgZnVuY3Rpb24uCj4gV2hhdCB3ZSdyZSBhZnRlciBo ZXJlIGlzIHRvIGdldCB0byBhbGwgcGFnZXMgdGhhdCB3ZXJlIGRpcnRpZWQgKmJlZm9yZSoKPiB0 aGlzIGNhbGwuIFRoZSByYWNpbmVzcyBhbmQgcmVtZWR5IChpZiBkZXNpcmVkKSBpcyBtZW50aW9u ZWQgaW4gdGhlCj4gY29tbWVudHMgdG8gdGhlIGV4cG9ydGVkIGZ1bmN0aW9uIGJlbG93LiBUeXBp Y2FsbHkgdXNlcnMgd3JpdGUtcHJvdGVjdAo+IGJlZm9yZSBzY2FubmluZyBkaXJ0eSBiaXRzIG9u bHkgaWYgdHJhbnNpdGlvbmluZyB0byBta3dyaXRlLWRpcnR5aW5nLgo+IFRoZSBpbXBvcnRhbnQg dGhpbmcgaXMgdGhhdCB3ZSBkb24ndCBhY2NpZGVudGx5IGNsZWFyIGRpcnR5IGJpdHMKPiB3aXRo b3V0IHBpY2tpbmcgdGhlbSB1cC4KCkZhaXIgZW5vdWdoLgoKPiA+IAo+ID4gWW91IGFsc28gbmVl ZCBwcm9wZXIgcGFnZSBmbHVzaGluZyB3aXRoIGZsdXNoX2NhY2hlX3BhZ2UoKQo+ID4gCj4gPiA+ ICsJCWFhcy0+dG90YWwrKzsKPiA+ID4gKwkJaWYgKGFkZHIgPCBhYXMtPnN0YXJ0KQo+ID4gPiAr CQkJYWFzLT5zdGFydCA9IGFkZHI7Cj4gPiA+ICsJCWlmIChhZGRyICsgUEFHRV9TSVpFID4gYWFz LT5lbmQpCj4gPiA+ICsJCQlhYXMtPmVuZCA9IGFkZHIgKyBQQUdFX1NJWkU7Cj4gPiA+ICsKPiA+ ID4gKwkJX19zZXRfYml0KHBnb2ZmLCBjbGVhbi0+Yml0bWFwKTsKPiA+ID4gKwkJY2xlYW4tPnN0 YXJ0ID0gbWluKGNsZWFuLT5zdGFydCwgcGdvZmYpOwo+ID4gPiArCQljbGVhbi0+ZW5kID0gbWF4 KGNsZWFuLT5lbmQsIHBnb2ZmICsgMSk7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJcmV0dXJu IDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogYXBwbHlfYXNfcmFuZ2Ug LSBBcHBseSBhIHB0ZSBjYWxsYmFjayB0byBhbGwgUFRFcyBwb2ludGluZyBpbnRvCj4gPiA+IGEg cmFuZ2UKPiA+ID4gKyAqIG9mIGFuIGFkZHJlc3Nfc3BhY2UuCj4gPiA+ICsgKiBAbWFwcGluZzog UG9pbnRlciB0byB0aGUgc3RydWN0IGFkZHJlc3Nfc3BhY2UKPiA+ID4gKyAqIEBhYXM6IENsb3N1 cmUgc3RydWN0dXJlCj4gPiA+ICsgKiBAZmlyc3RfaW5kZXg6IEZpcnN0IHBhZ2Ugb2Zmc2V0IGlu IHRoZSBhZGRyZXNzX3NwYWNlCj4gPiA+ICsgKiBAbnI6IE51bWJlciBvZiBpbmNyZW1lbnRhbCBw YWdlIG9mZnNldHMgdG8gY292ZXIKPiA+ID4gKyAqCj4gPiA+ICsgKiBSZXR1cm46IE51bWJlciBv ZiBwdGVzIHRvdWNoZWQuIE5vdGUgdGhhdCB0aGlzIG51bWJlciBtaWdodCBiZQo+ID4gPiBsYXJn ZXIKPiA+ID4gKyAqIHRoYW4gQG5yIGlmIHRoZXJlIGFyZSBvdmVybGFwcGluZyB2bWFzCj4gPiA+ ICsgKi8KPiA+IAo+ID4gVGhpcyBjb21tZW50IG5lZWQgdG8gYmUgX3NjYXJ5XyBpdCBzaG91bGQg b25seSBiZSB1c2UgZm9yIGRldmljZQo+ID4gZHJpdmVyCj4gPiB2bWEgaWUgZGV2aWNlIGRyaXZl ciBtYXBwaW5nLgo+ID4gCj4gPiA+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBhcHBseV9hc19yYW5n ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKPiA+ID4gKwkJCQkgICAgc3RydWN0IGFw cGx5X2FzICphYXMsCj4gPiA+ICsJCQkJICAgIHBnb2ZmX3QgZmlyc3RfaW5kZXgsIHBnb2ZmX3Qg bnIpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Cj4gPiA+ICsJ cGdvZmZfdCB2YmEsIHZlYSwgY2JhLCBjZWE7Cj4gPiA+ICsJdW5zaWduZWQgbG9uZyBzdGFydF9h ZGRyLCBlbmRfYWRkcjsKPiA+ID4gKwo+ID4gPiArCS8qIEZJWE1FOiBJcyBhIHJlYWQgbG9jayBz dWZmaWNpZW50IGhlcmU/ICovCj4gPiA+ICsJZG93bl93cml0ZSgmbWFwcGluZy0+aV9tbWFwX3J3 c2VtKTsKPiA+IAo+ID4gcmVhZCB3b3VsZCBiZSBzdWZmaWNpZW50IGFuZCB5b3Ugc2hvdWxkIHVz ZSBpX21tYXBfbG9ja19yZWFkKCkgbm90Cj4gPiB0aGUgZG93bl93cml0ZS9yZWFkIEFQSS4KPiA+ IAo+ID4gPiArCXZtYV9pbnRlcnZhbF90cmVlX2ZvcmVhY2godm1hLCAmbWFwcGluZy0+aV9tbWFw LCBmaXJzdF9pbmRleCwKPiA+ID4gKwkJZmlyc3RfaW5kZXggKyBuciAtIDEpIHsKPiA+ID4gKwkJ YWFzLT5iYXNlLm1tID0gdm1hLT52bV9tbTsKPiA+ID4gKwo+ID4gPiArCQkvKiBDbGlwIHRvIHRo ZSB2bWEgKi8KPiA+ID4gKwkJdmJhID0gdm1hLT52bV9wZ29mZjsKPiA+ID4gKwkJdmVhID0gdmJh ICsgdm1hX3BhZ2VzKHZtYSk7Cj4gPiA+ICsJCWNiYSA9IGZpcnN0X2luZGV4Owo+ID4gPiArCQlj YmEgPSBtYXgoY2JhLCB2YmEpOwo+ID4gPiArCQljZWEgPSBmaXJzdF9pbmRleCArIG5yOwo+ID4g PiArCQljZWEgPSBtaW4oY2VhLCB2ZWEpOwo+ID4gPiArCj4gPiA+ICsJCS8qIFRyYW5zbGF0ZSB0 byB2aXJ0dWFsIGFkZHJlc3MgKi8KPiA+ID4gKwkJc3RhcnRfYWRkciA9ICgoY2JhIC0gdmJhKSA8 PCBQQUdFX1NISUZUKSArIHZtYS0KPiA+ID4gPnZtX3N0YXJ0Owo+ID4gPiArCQllbmRfYWRkciA9 ICgoY2VhIC0gdmJhKSA8PCBQQUdFX1NISUZUKSArIHZtYS0+dm1fc3RhcnQ7Cj4gPiA+ICsKPiA+ ID4gKwkJLyoKPiA+ID4gKwkJICogVE9ETzogU2hvdWxkIGNhY2hlcyBiZSBmbHVzaGVkIGluZGl2 aWR1YWxseSBvbgo+ID4gPiBkZW1hbmQKPiA+ID4gKwkJICogaW4gdGhlIGxlYWYtcHRlIGNhbGxi YWNrcyBpbnN0ZWFkPyBUaGF0IGlzLCBob3cKPiA+ID4gKwkJICogY29zdGx5IGFyZSBpbnRlci1j b3JlIGludGVycnVwdHMgaW4gYW4gU01QIHN5c3RlbT8KPiA+ID4gKwkJICovCj4gPiA+ICsJCWlm IChhYXMtPmZsdXNoX2NhY2hlKQo+ID4gPiArCQkJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFy dF9hZGRyLCBlbmRfYWRkcik7Cj4gPiAKPiA+IGZsdXNoX2NhY2hlX3JhbmdlKCkgaXMgYSBub29w IG9uIG1vc3QgYXJjaGl0ZWN0dXJlIHdoYXQgeW91IHJlYWxseQo+ID4gbmVlZAo+ID4gaXMgcHJv cGVyIHBlciBwYWdlIGZsdXNoaW5nIHNlZSBhYm92ZS4KPiAKPiBGcm9tIHRoZSBkb2NzIDEpIHRo ZXkgYXJlIGludGVyY2hhbmdlYWJsZS4gQnV0IEkgd2lsbCBjaGFuZ2UgdG8gCj4gcGVyLXBhZ2Ug Y2FjaGUgZmx1c2hpbmcgYW55d2F5LgoKWWVhaCB5b3UgY2FuIGRvIGZsdXNoX2NhY2hlX3Jhbmdl KCkgaXQgaXMgZmluZS4KCkNoZWVycywKSsOpcsO0bWUKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vZHJpLWRldmVs